OSDN Git Service

Plugins: Fix a crash on Window XP
[winmerge-jp/winmerge-jp.git] / Src / PluginManager.cpp
1 /**
2  *  @file PluginManager.cpp
3  *
4  *  @brief Implementation of PluginManager class
5  */ 
6 //////////////////////////////////////////////////////////////////////
7
8 #include "pch.h"
9 #include "PluginManager.h"
10 #include <Poco/ScopedLock.h>
11
12 using Poco::FastMutex;
13
14 PluginManager::~PluginManager()
15 {
16 }
17
18 /**
19  * @brief retrieve relevant plugin settings for specified comparison
20  */
21 void PluginManager::FetchPluginInfos(const String& filteredFilenames, 
22                                      PackingInfo ** infoUnpacker, 
23                                      PrediffingInfo ** infoPrediffer)
24 {
25         FastMutex::ScopedLock lock(m_mutex);
26         PluginFileInfoPtr fi;
27         PluginFileInfoMap::iterator it = m_pluginSettings.find(filteredFilenames);
28         if (it == m_pluginSettings.end())
29         {
30                 // This might be a good place to set any user-specified default values
31                 fi.reset(new PluginFileInfo);
32                 m_pluginSettings[filteredFilenames] = fi;
33         }
34         else
35         {
36                 fi = it->second;
37         }
38         *infoUnpacker = &fi->m_infoUnpacker;
39         *infoPrediffer = &fi->m_infoPrediffer;
40 }
41
42 void PluginManager::SetUnpackerSettingAll(bool automatic)
43 {
44         FastMutex::ScopedLock lock(m_mutex);
45         for (PluginFileInfoMap::iterator it = m_pluginSettings.begin(); it != m_pluginSettings.end(); ++it)
46                 it->second->m_infoUnpacker.Initialize(automatic);
47 }
48
49 void PluginManager::SetPrediffSettingAll(bool automatic)
50 {
51         FastMutex::ScopedLock lock(m_mutex);
52         for (PluginFileInfoMap::iterator it = m_pluginSettings.begin(); it != m_pluginSettings.end(); ++it)
53                 it->second->m_infoPrediffer.Initialize(automatic);
54 }
55
56 void PluginManager::SetPrediffer(const String& filteredFilenames, const String& predifferPipeline)
57 {
58         PackingInfo * infoUnpacker = nullptr;
59         PrediffingInfo * infoPrediffer = nullptr;
60         FetchPluginInfos(filteredFilenames, &infoUnpacker, &infoPrediffer);
61         infoPrediffer->SetPluginPipeline(predifferPipeline);
62 }