xref: /aosp_15_r20/external/lzma/CPP/7zip/UI/FileManager/FilePlugins.cpp (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // FilePlugins.cpp
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #include "StdAfx.h"
4*f6dc9357SAndroid Build Coastguard Worker 
5*f6dc9357SAndroid Build Coastguard Worker #include "../Agent/Agent.h"
6*f6dc9357SAndroid Build Coastguard Worker 
7*f6dc9357SAndroid Build Coastguard Worker #include "FilePlugins.h"
8*f6dc9357SAndroid Build Coastguard Worker #include "PluginLoader.h"
9*f6dc9357SAndroid Build Coastguard Worker #include "StringUtils.h"
10*f6dc9357SAndroid Build Coastguard Worker 
FindExt(const UString & ext) const11*f6dc9357SAndroid Build Coastguard Worker int CExtDatabase::FindExt(const UString &ext) const
12*f6dc9357SAndroid Build Coastguard Worker {
13*f6dc9357SAndroid Build Coastguard Worker   FOR_VECTOR (i, Exts)
14*f6dc9357SAndroid Build Coastguard Worker     if (Exts[i].Ext.IsEqualTo_NoCase(ext))
15*f6dc9357SAndroid Build Coastguard Worker       return (int)i;
16*f6dc9357SAndroid Build Coastguard Worker   return -1;
17*f6dc9357SAndroid Build Coastguard Worker }
18*f6dc9357SAndroid Build Coastguard Worker 
Read()19*f6dc9357SAndroid Build Coastguard Worker void CExtDatabase::Read()
20*f6dc9357SAndroid Build Coastguard Worker {
21*f6dc9357SAndroid Build Coastguard Worker   /*
22*f6dc9357SAndroid Build Coastguard Worker   ReadFileFolderPluginInfoList(Plugins);
23*f6dc9357SAndroid Build Coastguard Worker   FOR_VECTOR (pluginIndex, Plugins)
24*f6dc9357SAndroid Build Coastguard Worker   */
25*f6dc9357SAndroid Build Coastguard Worker   {
26*f6dc9357SAndroid Build Coastguard Worker     // const CPluginInfo &plugin = Plugins[pluginIndex];
27*f6dc9357SAndroid Build Coastguard Worker 
28*f6dc9357SAndroid Build Coastguard Worker     CPluginLibrary pluginLib;
29*f6dc9357SAndroid Build Coastguard Worker     CMyComPtr<IFolderManager> folderManager;
30*f6dc9357SAndroid Build Coastguard Worker 
31*f6dc9357SAndroid Build Coastguard Worker     // if (plugin.FilePath.IsEmpty())
32*f6dc9357SAndroid Build Coastguard Worker       folderManager = new CArchiveFolderManager;
33*f6dc9357SAndroid Build Coastguard Worker     /*
34*f6dc9357SAndroid Build Coastguard Worker     else
35*f6dc9357SAndroid Build Coastguard Worker     {
36*f6dc9357SAndroid Build Coastguard Worker       if (!plugin.ClassID_Defined)
37*f6dc9357SAndroid Build Coastguard Worker         continue;
38*f6dc9357SAndroid Build Coastguard Worker       if (pluginLib.LoadAndCreateManager(plugin.FilePath, plugin.ClassID, &folderManager) != S_OK)
39*f6dc9357SAndroid Build Coastguard Worker         continue;
40*f6dc9357SAndroid Build Coastguard Worker     }
41*f6dc9357SAndroid Build Coastguard Worker     */
42*f6dc9357SAndroid Build Coastguard Worker     CMyComBSTR extBSTR;
43*f6dc9357SAndroid Build Coastguard Worker     if (folderManager->GetExtensions(&extBSTR) != S_OK)
44*f6dc9357SAndroid Build Coastguard Worker       return;
45*f6dc9357SAndroid Build Coastguard Worker     UStringVector exts;
46*f6dc9357SAndroid Build Coastguard Worker     SplitString((const wchar_t *)extBSTR, exts);
47*f6dc9357SAndroid Build Coastguard Worker     FOR_VECTOR (i, exts)
48*f6dc9357SAndroid Build Coastguard Worker     {
49*f6dc9357SAndroid Build Coastguard Worker       const UString &ext = exts[i];
50*f6dc9357SAndroid Build Coastguard Worker       #ifdef UNDER_CE
51*f6dc9357SAndroid Build Coastguard Worker       if (ext == L"cab")
52*f6dc9357SAndroid Build Coastguard Worker         continue;
53*f6dc9357SAndroid Build Coastguard Worker       #endif
54*f6dc9357SAndroid Build Coastguard Worker 
55*f6dc9357SAndroid Build Coastguard Worker       Int32 iconIndex;
56*f6dc9357SAndroid Build Coastguard Worker       CMyComBSTR iconPath;
57*f6dc9357SAndroid Build Coastguard Worker       CPluginToIcon plugPair;
58*f6dc9357SAndroid Build Coastguard Worker       // plugPair.PluginIndex = pluginIndex;
59*f6dc9357SAndroid Build Coastguard Worker       if (folderManager->GetIconPath(ext, &iconPath, &iconIndex) == S_OK)
60*f6dc9357SAndroid Build Coastguard Worker         if (iconPath)
61*f6dc9357SAndroid Build Coastguard Worker         {
62*f6dc9357SAndroid Build Coastguard Worker           plugPair.IconPath = (const wchar_t *)iconPath;
63*f6dc9357SAndroid Build Coastguard Worker           plugPair.IconIndex = iconIndex;
64*f6dc9357SAndroid Build Coastguard Worker         }
65*f6dc9357SAndroid Build Coastguard Worker 
66*f6dc9357SAndroid Build Coastguard Worker       const int index = FindExt(ext);
67*f6dc9357SAndroid Build Coastguard Worker       if (index >= 0)
68*f6dc9357SAndroid Build Coastguard Worker         Exts[index].Plugins.Add(plugPair);
69*f6dc9357SAndroid Build Coastguard Worker       else
70*f6dc9357SAndroid Build Coastguard Worker       {
71*f6dc9357SAndroid Build Coastguard Worker         CExtPlugins extInfo;
72*f6dc9357SAndroid Build Coastguard Worker         extInfo.Plugins.Add(plugPair);
73*f6dc9357SAndroid Build Coastguard Worker         extInfo.Ext = ext;
74*f6dc9357SAndroid Build Coastguard Worker         Exts.Add(extInfo);
75*f6dc9357SAndroid Build Coastguard Worker       }
76*f6dc9357SAndroid Build Coastguard Worker     }
77*f6dc9357SAndroid Build Coastguard Worker   }
78*f6dc9357SAndroid Build Coastguard Worker }
79