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"