static UString GetIconPath(const UString &filePath, const CLSID &clsID, const UString &extension, Int32 &iconIndex) { CPluginLibrary library; CMyComPtr<IFolderManager> folderManager; CMyComPtr<IFolderFolder> folder; if (filePath.IsEmpty()) folderManager = new CArchiveFolderManager; else if (library.LoadAndCreateManager(filePath, clsID, &folderManager) != S_OK) return UString(); CMyComBSTR extBSTR; if (folderManager->GetExtensions(&extBSTR) != S_OK) return UString(); const UString ext2 = (const wchar_t *)extBSTR; UStringVector exts; SplitString(ext2, exts); for (int i = 0; i < exts.Size(); i++) { const UString &plugExt = exts[i]; if (extension.CompareNoCase((const wchar_t *)plugExt) == 0) { CMyComBSTR iconPathTemp; if (folderManager->GetIconPath(plugExt, &iconPathTemp, &iconIndex) != S_OK) break; if (iconPathTemp != 0) return (const wchar_t *)iconPathTemp; } } return UString(); }
void CExtDatabase::Read() { CObjectVector<CExtInfo> extItems; ReadInternalAssociations(extItems); ReadFileFolderPluginInfoList(Plugins); for (int i = 0; i < extItems.Size(); i++) { const CExtInfo &extInfo = extItems[i]; CExtInfoBig extInfoBig; extInfoBig.Ext = extInfo.Ext; extInfoBig.Associated = false; for (int p = 0; p < extInfo.Plugins.Size(); p++) { int pluginIndex = FindPlugin(extInfo.Plugins[p]); if (pluginIndex >= 0) extInfoBig.PluginsPairs.Add(CPluginEnabledPair(pluginIndex, true)); } ExtBigItems.Add(extInfoBig); } for (int pluginIndex = 0; pluginIndex < Plugins.Size(); pluginIndex++) { const CPluginInfo &pluginInfo = Plugins[pluginIndex]; CPluginLibrary pluginLibrary; CMyComPtr<IFolderManager> folderManager; if (pluginInfo.FilePath.IsEmpty()) folderManager = new CArchiveFolderManager; else if (pluginLibrary.LoadAndCreateManager(pluginInfo.FilePath, pluginInfo.ClassID, &folderManager) != S_OK) continue; CMyComBSTR extBSTR; if (folderManager->GetExtensions(&extBSTR) != S_OK) return; const UString ext2 = (const wchar_t *)extBSTR; UStringVector exts; SplitString(ext2, exts); for (int i = 0; i < exts.Size(); i++) { const UString &ext = exts[i]; int index = FindExtInfoBig(ext); if (index < 0) { CExtInfoBig extInfo; extInfo.PluginsPairs.Add(CPluginEnabledPair(pluginIndex, false)); extInfo.Associated = false; extInfo.Ext = ext; ExtBigItems.Add(extInfo); } else { CExtInfoBig &extInfo = ExtBigItems[index]; int pluginIndexIndex = extInfo.FindPlugin(pluginIndex); if (pluginIndexIndex < 0) extInfo.PluginsPairs.Add(CPluginEnabledPair(pluginIndex, false)); } } } }