]> cloud.milkyroute.net Git - dolphin.git/blob - src/views/versioncontrol/updateitemstatesthread.cpp
Merge branch 'master' into kf6
[dolphin.git] / src / views / versioncontrol / updateitemstatesthread.cpp
1 /*
2 * SPDX-FileCopyrightText: 2009 Peter Penz <peter.penz19@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7 #include "updateitemstatesthread.h"
8
9 UpdateItemStatesThread::UpdateItemStatesThread(KVersionControlPlugin *plugin, const QMap<QString, QVector<VersionControlObserver::ItemState>> &itemStates)
10 : QThread()
11 , m_globalPluginMutex(nullptr)
12 , m_plugin(plugin)
13 , m_itemStates(itemStates)
14 {
15 // Several threads may share one instance of a plugin. A global
16 // mutex is required to serialize the retrieval of version control
17 // states inside run().
18 static QMutex globalMutex;
19 m_globalPluginMutex = &globalMutex;
20 }
21
22 UpdateItemStatesThread::~UpdateItemStatesThread()
23 {
24 }
25
26 void UpdateItemStatesThread::run()
27 {
28 Q_ASSERT(!m_itemStates.isEmpty());
29 Q_ASSERT(m_plugin);
30
31 QMutexLocker pluginLocker(m_globalPluginMutex);
32 QMap<QString, QVector<VersionControlObserver::ItemState>>::iterator it = m_itemStates.begin();
33 for (; it != m_itemStates.end(); ++it) {
34 if (m_plugin->beginRetrieval(it.key())) {
35 QVector<VersionControlObserver::ItemState> &items = it.value();
36 const int count = items.count();
37 for (int i = 0; i < count; ++i) {
38 const KFileItem &item = items.at(i).first;
39 const KVersionControlPlugin::ItemVersion version = m_plugin->itemVersion(item);
40 items[i].second = version;
41 }
42 }
43
44 m_plugin->endRetrieval();
45 }
46 }
47
48 QMap<QString, QVector<VersionControlObserver::ItemState>> UpdateItemStatesThread::itemStates() const
49 {
50 return m_itemStates;
51 }
52
53 #include "moc_updateitemstatesthread.cpp"