View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0001631 | Far Manager | Plugins API | public | 2010-12-20 15:35 | 2011-01-14 15:15 |
Reporter | samlyukov | Assigned To | vskirdin | ||
Priority | normal | Severity | minor | Reproducibility | have not tried |
Status | closed | Resolution | fixed | ||
Fixed in Version | 2.0 | ||||
Summary | 0001631: добавка в PluginsControl() - PCTL_FORCEDLOADPLUGIN | ||||
Description | добавка в PluginsControl() - команда PCTL_FORCEDLOADPLUGIN позволяет сразу грузить плагин в память | ||||
Tags | No tags attached. | ||||
Build | 1789 | ||||
|
!work.diff (4,184 bytes)
Index: plugins.cpp =================================================================== --- plugins.cpp (revision 5375) +++ plugins.cpp (working copy) @@ -348,7 +348,8 @@ bool PluginManager::LoadPlugin( const wchar_t *lpwszModuleName, - const FAR_FIND_DATA_EX &FindData + const FAR_FIND_DATA_EX &FindData, + bool LoadToMem ) { Plugin *pPlugin = nullptr; @@ -369,8 +370,11 @@ return false; } - bool bResult = pPlugin->LoadFromCache(FindData); + bool bResult=false; + if (!LoadToMem) + bResult=pPlugin->LoadFromCache(FindData); + if (!bResult && !Opt.LoadPlug.PluginsCacheOnly) { bResult = pPlugin->Load(); @@ -382,25 +386,30 @@ return bResult; } -bool PluginManager::LoadPluginExternal(const wchar_t *lpwszModuleName) +bool PluginManager::LoadPluginExternal(const wchar_t *lpwszModuleName, bool LoadToMem) { Plugin *pPlugin = GetPlugin(lpwszModuleName); if (pPlugin) - return true; - - FAR_FIND_DATA_EX FindData; - - if (apiGetFindDataEx(lpwszModuleName, FindData)) { - if (LoadPlugin(lpwszModuleName, FindData)) + if (LoadToMem && !pPlugin->Load()) { + RemovePlugin(pPlugin); + return false; + } + } + else + { + FAR_FIND_DATA_EX FindData; + + if (apiGetFindDataEx(lpwszModuleName, FindData)) + { + if (!LoadPlugin(lpwszModuleName, FindData, LoadToMem)) + return false; far_qsort(PluginsData, PluginsCount, sizeof(*PluginsData), PluginsSort); - return true; } } - - return false; + return true; } int PluginManager::UnloadPlugin(Plugin *pPlugin, DWORD dwException, bool bRemove) @@ -552,7 +561,7 @@ { if (CmpName(L"*.dll",FindData.strFileName,false) && !(FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { - LoadPlugin(strFullName, FindData); + LoadPlugin(strFullName, FindData, false); } } // end while } @@ -581,7 +590,7 @@ FAR_FIND_DATA_EX FindData; if (apiGetFindDataEx(strModuleName, FindData)) - LoadPlugin(strModuleName, FindData); + LoadPlugin(strModuleName, FindData, false); } } Index: plugapi.cpp =================================================================== --- plugapi.cpp (revision 5375) +++ plugapi.cpp (working copy) @@ -2350,6 +2350,7 @@ switch (Command) { case PCTL_LOADPLUGIN: + case PCTL_FORCEDLOADPLUGIN: case PCTL_UNLOADPLUGIN: { if (Param1 == PLT_PATH) @@ -2360,7 +2361,9 @@ ConvertNameToFull((const wchar_t *)Param2, strPath); if (Command == PCTL_LOADPLUGIN) - return CtrlObject->Plugins.LoadPluginExternal(strPath); + return CtrlObject->Plugins.LoadPluginExternal(strPath, false); + else if (Command == PCTL_FORCEDLOADPLUGIN) + return CtrlObject->Plugins.LoadPluginExternal(strPath, true); else return CtrlObject->Plugins.UnloadPluginExternal(strPath); } Index: plugins.hpp =================================================================== --- plugins.hpp (revision 5375) +++ plugins.hpp (working copy) @@ -174,7 +174,7 @@ bool TestPluginInfo(Plugin *Item,PluginInfo *Info); bool TestOpenPluginInfo(Plugin *Item,OpenPluginInfo *Info); - bool LoadPlugin(const wchar_t *lpwszModuleName, const FAR_FIND_DATA_EX &FindData); + bool LoadPlugin(const wchar_t *lpwszModuleName, const FAR_FIND_DATA_EX &FindData, bool LoadToMem); bool AddPlugin(Plugin *pPlugin); bool RemovePlugin(Plugin *pPlugin); @@ -191,7 +191,7 @@ public: - bool LoadPluginExternal(const wchar_t *lpwszModuleName); + bool LoadPluginExternal(const wchar_t *lpwszModuleName, bool LoadToMem); int UnloadPlugin(Plugin *pPlugin, DWORD dwException, bool bRemove = false); int UnloadPluginExternal(const wchar_t *lpwszModuleName); Index: plugin.hpp =================================================================== --- plugin.hpp (revision 5375) +++ plugin.hpp (working copy) @@ -2205,8 +2205,9 @@ enum FAR_PLUGINS_CONTROL_COMMANDS { - PCTL_LOADPLUGIN = 0, - PCTL_UNLOADPLUGIN, + PCTL_LOADPLUGIN = 0, + PCTL_FORCEDLOADPLUGIN = 1, + PCTL_UNLOADPLUGIN = 2, }; enum FAR_PLUGIN_LOAD_TYPE |
|
build 1789 Алекс, с тебя корректировка Писания! |
Date Modified | Username | Field | Change |
---|---|---|---|
2010-12-20 15:35 | samlyukov | New Issue | |
2010-12-20 15:35 | samlyukov | File Added: !work.diff | |
2011-01-14 14:39 | vskirdin | Assigned To | => vskirdin |
2011-01-14 14:39 | vskirdin | Status | new => assigned |
2011-01-14 15:03 | vskirdin | Note Added: 0006113 | |
2011-01-14 15:03 | vskirdin | Status | assigned => feedback |
2011-01-14 15:15 | vskirdin | Build | => 1789 |
2011-01-14 15:15 | vskirdin | Status | feedback => closed |
2011-01-14 15:15 | vskirdin | Resolution | open => fixed |
2011-01-14 15:15 | vskirdin | Fixed in Version | => 2.0 |