diff options
Diffstat (limited to 'CPP/7zip/UI/FileManager/FilePlugins.cpp')
-rwxr-xr-x | CPP/7zip/UI/FileManager/FilePlugins.cpp | 104 |
1 files changed, 27 insertions, 77 deletions
diff --git a/CPP/7zip/UI/FileManager/FilePlugins.cpp b/CPP/7zip/UI/FileManager/FilePlugins.cpp index 22993383..b81850fd 100755 --- a/CPP/7zip/UI/FileManager/FilePlugins.cpp +++ b/CPP/7zip/UI/FileManager/FilePlugins.cpp @@ -2,73 +2,39 @@ #include "StdAfx.h" -#include "Common/MyCom.h" - #include "../Agent/Agent.h" #include "FilePlugins.h" #include "PluginLoader.h" #include "StringUtils.h" -using namespace NRegistryAssociations; - -int CExtDatabase::FindExtInfoBig(const UString &ext) -{ - for (int i = 0; i < ExtBigItems.Size(); i++) - if (ExtBigItems[i].Ext.CompareNoCase(ext) == 0) - return i; - return -1; -} - -int CExtDatabase::FindPlugin(const UString &plugin) +int CExtDatabase::FindExt(const UString &ext) { - for (int i = 0; i < Plugins.Size(); i++) - if (Plugins[i].Name.CompareNoCase(plugin) == 0) + for (int i = 0; i < Exts.Size(); i++) + if (Exts[i].Ext.CompareNoCase(ext) == 0) return i; return -1; } 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]; + const CPluginInfo &plugin = Plugins[pluginIndex]; - CPluginLibrary pluginLibrary; + CPluginLibrary pluginLib; CMyComPtr<IFolderManager> folderManager; - if (pluginInfo.FilePath.IsEmpty()) + if (plugin.FilePath.IsEmpty()) folderManager = new CArchiveFolderManager; - else if (pluginLibrary.LoadAndCreateManager(pluginInfo.FilePath, - pluginInfo.ClassID, &folderManager) != S_OK) + else if (pluginLib.LoadAndCreateManager(plugin.FilePath, plugin.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); + SplitString((const wchar_t *)extBSTR, exts); for (int i = 0; i < exts.Size(); i++) { const UString &ext = exts[i]; @@ -76,44 +42,28 @@ void CExtDatabase::Read() if (ext == L"cab") continue; #endif - int index = FindExtInfoBig(ext); - if (index < 0) - { - CExtInfoBig extInfo; - extInfo.PluginsPairs.Add(CPluginEnabledPair(pluginIndex, false)); - extInfo.Associated = false; - extInfo.Ext = ext; - ExtBigItems.Add(extInfo); - } + + Int32 iconIndex; + CMyComBSTR iconPath; + CPluginToIcon plugPair; + plugPair.PluginIndex = pluginIndex; + if (folderManager->GetIconPath(ext, &iconPath, &iconIndex) == S_OK) + if (iconPath != 0) + { + plugPair.IconPath = (const wchar_t *)iconPath; + plugPair.IconIndex = iconIndex; + } + + int index = FindExt(ext); + if (index >= 0) + Exts[index].Plugins.Add(plugPair); else { - CExtInfoBig &extInfo = ExtBigItems[index]; - int pluginIndexIndex = extInfo.FindPlugin(pluginIndex); - if (pluginIndexIndex < 0) - extInfo.PluginsPairs.Add(CPluginEnabledPair(pluginIndex, false)); + CExtPlugins extInfo; + extInfo.Plugins.Add(plugPair); + extInfo.Ext = ext; + Exts.Add(extInfo); } } } } - -void CExtDatabase::Save() -{ - /* - CObjectVector<CExtInfo> extItems; - for (int i = 0; i < ExtBigItems.Size(); i++) - { - const CExtInfoBig &extInfoBig = ExtBigItems[i]; - CExtInfo extInfo; - // extInfo.Enabled = extInfoBig.Associated; - extInfo.Ext = extInfoBig.Ext; - for (int p = 0; p < extInfoBig.PluginsPairs.Size(); p++) - { - CPluginEnabledPair pluginPair = extInfoBig.PluginsPairs[p]; - if (pluginPair.Enabled) - extInfo.Plugins.Add(Plugins[pluginPair.Index].Name); - } - extItems.Add(extInfo); - } - WriteInternalAssociations(extItems); - */ -} |