]> cloud.milkyroute.net Git - dolphin.git/blob - src/views/versioncontrol/updateitemstatesthread.cpp
Add Comment to .desktop file
[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
30 QMutexLocker pluginLocker(m_globalPluginMutex);
31 QMap<QString, QVector<VersionControlObserver::ItemState>>::iterator it = m_itemStates.begin();
32 for (; it != m_itemStates.end() && !isInterruptionRequested(); ++it) {
33 if (m_plugin->beginRetrieval(it.key())) {
34 QVector<VersionControlObserver::ItemState> &items = it.value();
35 const int count = items.count();
36 for (int i = 0; i < count && !isInterruptionRequested(); ++i) {
37 const KFileItem &item = items.at(i).first;
38 const KVersionControlPlugin::ItemVersion version = m_plugin->itemVersion(item);
39 items[i].second = version;
40 }
41 }
42
43 m_plugin->endRetrieval();
44 }
45 }
46
47 QMap<QString, QVector<VersionControlObserver::ItemState>> UpdateItemStatesThread::itemStates() const
48 {
49 return m_itemStates;
50 }
51
52 #include "moc_updateitemstatesthread.cpp"