Handle status updates in KIO plugin

This commit is contained in:
Martchus 2017-03-13 00:40:48 +01:00
parent 2635cde225
commit fd2429b477
4 changed files with 242 additions and 159 deletions

View File

@ -88,6 +88,66 @@ void SyncthingMenuAction::updateStatus(SyncthingStatus status)
}
}
SyncthingDirActions::SyncthingDirActions(const SyncthingDir &dir, QObject *parent) :
QObject(parent),
m_dirId(dir.id)
{
m_infoAction.setSeparator(true);
updateStatus(dir);
}
void SyncthingDirActions::updateStatus(const std::vector<SyncthingDir> &dirs)
{
for(const SyncthingDir &dir : dirs) {
if(updateStatus(dir)) {
return;
}
}
m_statusAction.setText(tr("Status: not available anymore"));
m_statusAction.setIcon(statusIcons().disconnected);
}
bool SyncthingDirActions::updateStatus(const SyncthingDir &dir)
{
if(dir.id != m_dirId) {
return false;
}
m_infoAction.setText(tr("Directory info for %1").arg(dir.displayName()));
m_infoAction.setIcon(QIcon::fromTheme(QStringLiteral("dialog-information")));
m_statusAction.setText(tr("Status: ") + dir.statusString());
if(dir.paused && dir.status != SyncthingDirStatus::OutOfSync) {
m_statusAction.setIcon(statusIcons().pause);
} else {
switch(dir.status) {
case SyncthingDirStatus::Unknown:
case SyncthingDirStatus::Unshared:
m_statusAction.setIcon(statusIcons().disconnected);
break;
case SyncthingDirStatus::Idle:
m_statusAction.setIcon(statusIcons().idling);
break;
case SyncthingDirStatus::Scanning:
m_statusAction.setIcon(statusIcons().scanninig);
break;
case SyncthingDirStatus::Synchronizing:
m_statusAction.setIcon(statusIcons().sync);
break;
case SyncthingDirStatus::OutOfSync:
m_statusAction.setIcon(statusIcons().error);
break;
}
}
m_lastScanAction.setText(tr("Last scan time: ") + agoString(dir.lastScanTime));
m_lastScanAction.setIcon(QIcon::fromTheme(QStringLiteral("accept_time_event")));
m_rescanIntervalAction.setText(tr("Rescan interval: %1 seconds").arg(dir.rescanInterval));
return true;
}
QList<QAction *> &operator <<(QList<QAction *> &actions, SyncthingDirActions &dirActions)
{
return actions << &dirActions.m_infoAction << &dirActions.m_statusAction << &dirActions.m_lastScanAction << &dirActions.m_rescanIntervalAction;
}
SyncthingConnection SyncthingFileItemAction::s_connection;
SyncthingFileItemAction::SyncthingFileItemAction(QObject *parent, const QVariantList &) :
@ -357,39 +417,12 @@ QList<QAction *> SyncthingFileItemAction::createActions(const KFileItemListPrope
return actions;
}
// add action to show further information about directory if the selection is only about
// one particular Syncthing dir
// add actions to show further information about directory if the selection is only about one particular Syncthing dir
if(detectedDirs.size() + containingDirs.size() == 1) {
QAction *infoAction = new QAction(QIcon::fromTheme(QStringLiteral("dialog-information")), tr("Directory info"), parentWidget);
infoAction->setSeparator(true);
QAction *statusAction = new QAction(tr("Status: ") + lastDir->statusString());
if(lastDir->paused && lastDir->status != SyncthingDirStatus::OutOfSync) {
statusAction->setIcon(statusIcons().pause);
} else {
switch(lastDir->status) {
case SyncthingDirStatus::Unknown:
case SyncthingDirStatus::Unshared:
statusAction->setIcon(statusIcons().disconnected);
break;
case SyncthingDirStatus::Idle:
statusAction->setIcon(statusIcons().idling);
break;
case SyncthingDirStatus::Scanning:
statusAction->setIcon(statusIcons().scanninig);
break;
case SyncthingDirStatus::Synchronizing:
statusAction->setIcon(statusIcons().sync);
break;
case SyncthingDirStatus::OutOfSync:
statusAction->setIcon(statusIcons().error);
break;
}
}
actions << infoAction << statusAction;
actions << new QAction(QIcon::fromTheme(QStringLiteral("accept_time_event")),
tr("Last scan time: ") + agoString(lastDir->lastScanTime), parentWidget);
actions << new QAction(tr("Rescan interval: %1 seconds").arg(lastDir->rescanInterval), parentWidget);
auto *statusActions = new SyncthingDirActions(*lastDir, parentWidget);
connect(&s_connection, &SyncthingConnection::newDirs, statusActions, static_cast<void(SyncthingDirActions::*)(const vector<SyncthingDir> &)>(&SyncthingDirActions::updateStatus));
connect(&s_connection, &SyncthingConnection::dirStatusChanged, statusActions, static_cast<bool(SyncthingDirActions::*)(const SyncthingDir &)>(&SyncthingDirActions::updateStatus));
actions << *statusActions;
}
// about about action

View File

@ -26,6 +26,28 @@ private:
KFileItemListProperties m_properties;
};
class SyncthingDirActions : public QObject
{
Q_OBJECT
friend QList<QAction *> &operator <<(QList<QAction *> &, SyncthingDirActions &);
public:
SyncthingDirActions(const Data::SyncthingDir &dir, QObject *parent = nullptr);
public Q_SLOTS:
void updateStatus(const std::vector<Data::SyncthingDir> &dirs);
bool updateStatus(const Data::SyncthingDir &dir);
private:
QString m_dirId;
QAction m_infoAction;
QAction m_statusAction;
QAction m_lastScanAction;
QAction m_rescanIntervalAction;
};
QList<QAction *> &operator <<(QList<QAction *> &actions, SyncthingDirActions &dirActions);
class SyncthingFileItemAction : public KAbstractFileItemActionPlugin
{
Q_OBJECT

View File

@ -2,88 +2,108 @@
<!DOCTYPE TS>
<TS version="2.1" language="de_DE">
<context>
<name>SyncthingFileItemAction</name>
<name>SyncthingDirActions</name>
<message>
<location filename="../syncthingfileitemaction.cpp" line="242"/>
<source>Rescan %1 (in %2)</source>
<translation>&quot;%1&quot; neu scannen (in &quot;%2&quot;)</translation>
<location filename="../syncthingfileitemaction.cpp" line="106"/>
<source>not available anymore</source>
<translation>nicht mehr verfügbar</translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="243"/>
<source>Rescan selected items</source>
<translation>Auswahl neu scannen</translation>
<location filename="../syncthingfileitemaction.cpp" line="115"/>
<source>Directory info for %1</source>
<translation>Verzeichnisinfo für %1</translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="261"/>
<source>Rescan selected directories</source>
<translation>Ausgewählte Verzeichnisse neu scannen</translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="288"/>
<source>Resume selected directories</source>
<translation>Ausgewählte verzeichnisse fortsetzen</translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="260"/>
<location filename="../syncthingfileitemaction.cpp" line="311"/>
<source>Rescan %1</source>
<translation>&quot;%1&quot; neu scannen</translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="287"/>
<location filename="../syncthingfileitemaction.cpp" line="337"/>
<source>Resume %1</source>
<translation>&quot;%1&quot; fortsetzen</translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="294"/>
<location filename="../syncthingfileitemaction.cpp" line="344"/>
<source>Pause %1</source>
<translation>&quot;%1&quot; pausieren</translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="295"/>
<source>Pause selected directories</source>
<translation>Ausgewählte Verzeichnisse pausieren</translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="312"/>
<source>Rescan containing directories</source>
<translation>Beinhaltendes Verzeichnis neu scannen</translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="338"/>
<source>Resume containing directories</source>
<translation>Beinhaltendes Verzeichnis fortsetzen</translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="345"/>
<source>Pause containing directories</source>
<translation>Beinhaltendes Verzeichnis pausieren</translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="363"/>
<source>Directory info</source>
<translation>Verzeichnisinfo</translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="365"/>
<location filename="../syncthingfileitemaction.cpp" line="117"/>
<source>Status: </source>
<translation></translation>
<translation>Status: </translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="391"/>
<location filename="../syncthingfileitemaction.cpp" line="140"/>
<source>Last scan time: </source>
<translation>Letzter Scan: </translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="392"/>
<location filename="../syncthingfileitemaction.cpp" line="142"/>
<source>Rescan interval: %1 seconds</source>
<translation>Scanintervall: %1 Sekunden</translation>
</message>
</context>
<context>
<name>SyncthingFileItemAction</name>
<message>
<location filename="../syncthingfileitemaction.cpp" line="302"/>
<source>Rescan %1 (in %2)</source>
<translation>&quot;%1&quot; neu scannen (in &quot;%2&quot;)</translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="303"/>
<source>Rescan selected items</source>
<translation>Auswahl neu scannen</translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="321"/>
<source>Rescan selected directories</source>
<translation>Ausgewählte Verzeichnisse neu scannen</translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="348"/>
<source>Resume selected directories</source>
<translation>Ausgewählte verzeichnisse fortsetzen</translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="320"/>
<location filename="../syncthingfileitemaction.cpp" line="371"/>
<source>Rescan %1</source>
<translation>&quot;%1&quot; neu scannen</translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="347"/>
<location filename="../syncthingfileitemaction.cpp" line="397"/>
<source>Resume %1</source>
<translation>&quot;%1&quot; fortsetzen</translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="354"/>
<location filename="../syncthingfileitemaction.cpp" line="404"/>
<source>Pause %1</source>
<translation>&quot;%1&quot; pausieren</translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="355"/>
<source>Pause selected directories</source>
<translation>Ausgewählte Verzeichnisse pausieren</translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="372"/>
<source>Rescan containing directories</source>
<translation>Beinhaltendes Verzeichnis neu scannen</translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="180"/>
<location filename="../syncthingfileitemaction.cpp" line="398"/>
<source>Resume containing directories</source>
<translation>Beinhaltendes Verzeichnis fortsetzen</translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="405"/>
<source>Pause containing directories</source>
<translation>Beinhaltendes Verzeichnis pausieren</translation>
</message>
<message>
<source>Directory info</source>
<translation type="vanished">Verzeichnisinfo</translation>
</message>
<message>
<source>Last scan time: </source>
<translation type="vanished">Letzter Scan: </translation>
</message>
<message>
<source>Rescan interval: %1 seconds</source>
<translation type="vanished">Scanintervall: %1 Sekunden</translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="240"/>
<location filename="../syncthingfileitemaction.cpp" line="431"/>
<source>About</source>
<translation>Über</translation>
</message>

View File

@ -2,88 +2,96 @@
<!DOCTYPE TS>
<TS version="2.1" language="en_US">
<context>
<name>SyncthingFileItemAction</name>
<name>SyncthingDirActions</name>
<message>
<location filename="../syncthingfileitemaction.cpp" line="242"/>
<source>Rescan %1 (in %2)</source>
<location filename="../syncthingfileitemaction.cpp" line="106"/>
<source>Status: not available anymore</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="243"/>
<source>Rescan selected items</source>
<location filename="../syncthingfileitemaction.cpp" line="115"/>
<source>Directory info for %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="261"/>
<source>Rescan selected directories</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="288"/>
<source>Resume selected directories</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="260"/>
<location filename="../syncthingfileitemaction.cpp" line="311"/>
<source>Rescan %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="287"/>
<location filename="../syncthingfileitemaction.cpp" line="337"/>
<source>Resume %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="294"/>
<location filename="../syncthingfileitemaction.cpp" line="344"/>
<source>Pause %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="295"/>
<source>Pause selected directories</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="312"/>
<source>Rescan containing directories</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="338"/>
<source>Resume containing directories</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="345"/>
<source>Pause containing directories</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="363"/>
<source>Directory info</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="365"/>
<location filename="../syncthingfileitemaction.cpp" line="117"/>
<source>Status: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="391"/>
<location filename="../syncthingfileitemaction.cpp" line="140"/>
<source>Last scan time: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="392"/>
<location filename="../syncthingfileitemaction.cpp" line="142"/>
<source>Rescan interval: %1 seconds</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SyncthingFileItemAction</name>
<message>
<location filename="../syncthingfileitemaction.cpp" line="302"/>
<source>Rescan %1 (in %2)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="303"/>
<source>Rescan selected items</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="321"/>
<source>Rescan selected directories</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="348"/>
<source>Resume selected directories</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="320"/>
<location filename="../syncthingfileitemaction.cpp" line="371"/>
<source>Rescan %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="347"/>
<location filename="../syncthingfileitemaction.cpp" line="397"/>
<source>Resume %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="354"/>
<location filename="../syncthingfileitemaction.cpp" line="404"/>
<source>Pause %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="355"/>
<source>Pause selected directories</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="372"/>
<source>Rescan containing directories</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="180"/>
<location filename="../syncthingfileitemaction.cpp" line="398"/>
<source>Resume containing directories</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="405"/>
<source>Pause containing directories</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfileitemaction.cpp" line="240"/>
<location filename="../syncthingfileitemaction.cpp" line="431"/>
<source>About</source>
<translation type="unfinished"></translation>
</message>