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 Workerint 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 Workervoid 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