File indexing completed on 2024-05-12 05:47:52
0001 /* 0002 * SPDX-FileCopyrightText: 2009 Peter Penz <peter.penz19@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "updateitemstatesthread.h" 0008 0009 UpdateItemStatesThread::UpdateItemStatesThread(KVersionControlPlugin *plugin, const QMap<QString, QVector<VersionControlObserver::ItemState>> &itemStates) 0010 : QThread() 0011 , m_globalPluginMutex(nullptr) 0012 , m_plugin(plugin) 0013 , m_itemStates(itemStates) 0014 { 0015 // Several threads may share one instance of a plugin. A global 0016 // mutex is required to serialize the retrieval of version control 0017 // states inside run(). 0018 static QMutex globalMutex; 0019 m_globalPluginMutex = &globalMutex; 0020 } 0021 0022 UpdateItemStatesThread::~UpdateItemStatesThread() 0023 { 0024 } 0025 0026 void UpdateItemStatesThread::run() 0027 { 0028 Q_ASSERT(!m_itemStates.isEmpty()); 0029 Q_ASSERT(m_plugin); 0030 0031 QMutexLocker pluginLocker(m_globalPluginMutex); 0032 QMap<QString, QVector<VersionControlObserver::ItemState>>::iterator it = m_itemStates.begin(); 0033 for (; it != m_itemStates.end(); ++it) { 0034 if (m_plugin->beginRetrieval(it.key())) { 0035 QVector<VersionControlObserver::ItemState> &items = it.value(); 0036 const int count = items.count(); 0037 for (int i = 0; i < count; ++i) { 0038 const KFileItem &item = items.at(i).first; 0039 const KVersionControlPlugin::ItemVersion version = m_plugin->itemVersion(item); 0040 items[i].second = version; 0041 } 0042 } 0043 0044 m_plugin->endRetrieval(); 0045 } 0046 } 0047 0048 QMap<QString, QVector<VersionControlObserver::ItemState>> UpdateItemStatesThread::itemStates() const 0049 { 0050 return m_itemStates; 0051 } 0052 0053 #include "moc_updateitemstatesthread.cpp"