The normal QPalette can be used to determine the icon color so it is unnecessary to use the flag for custom bright colors here (which is only intended for colors which are not on the standard QPalette).
91 lines
3.4 KiB
C++
91 lines
3.4 KiB
C++
#include "./syncthingdiractions.h"
|
|
#include "./syncthingfileitemactionstaticdata.h"
|
|
|
|
#include <syncthingmodel/syncthingicons.h>
|
|
|
|
#include <syncthingconnector/syncthingdir.h>
|
|
#include <syncthingconnector/utils.h>
|
|
|
|
using namespace Data;
|
|
|
|
SyncthingDirActions::SyncthingDirActions(const SyncthingDir &dir, const SyncthingFileItemActionStaticData *data, QObject *parent)
|
|
: QObject(parent)
|
|
, m_dirId(dir.id)
|
|
{
|
|
Q_UNUSED(data)
|
|
const auto &icons = commonForkAwesomeIcons();
|
|
m_infoAction.setSeparator(true);
|
|
m_infoAction.setIcon(icons.folder);
|
|
m_globalStatusAction.setIcon(icons.globe);
|
|
m_localStatusAction.setIcon(icons.home);
|
|
m_lastScanAction.setIcon(icons.clock);
|
|
m_rescanIntervalAction.setIcon(icons.refresh);
|
|
m_errorsAction.setIcon(icons.exclamationTriangle);
|
|
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_statusAction.setText(tr("Status: ") + dir.statusString());
|
|
if (dir.paused && dir.status != SyncthingDirStatus::OutOfSync) {
|
|
m_statusAction.setIcon(statusIcons().pause);
|
|
} else if (dir.isUnshared()) {
|
|
m_statusAction.setIcon(statusIcons().disconnected);
|
|
} else {
|
|
switch (dir.status) {
|
|
case SyncthingDirStatus::Unknown:
|
|
m_statusAction.setIcon(statusIcons().disconnected);
|
|
break;
|
|
case SyncthingDirStatus::Idle:
|
|
case SyncthingDirStatus::WaitingToClean:
|
|
case SyncthingDirStatus::Cleaning:
|
|
m_statusAction.setIcon(statusIcons().idling);
|
|
break;
|
|
case SyncthingDirStatus::WaitingToScan:
|
|
case SyncthingDirStatus::Scanning:
|
|
m_statusAction.setIcon(statusIcons().scanninig);
|
|
break;
|
|
case SyncthingDirStatus::WaitingToSync:
|
|
case SyncthingDirStatus::PreparingToSync:
|
|
case SyncthingDirStatus::Synchronizing:
|
|
m_statusAction.setIcon(statusIcons().sync);
|
|
break;
|
|
case SyncthingDirStatus::OutOfSync:
|
|
m_statusAction.setIcon(statusIcons().error);
|
|
break;
|
|
}
|
|
}
|
|
m_globalStatusAction.setText(tr("Global: ") + directoryStatusString(dir.globalStats));
|
|
m_localStatusAction.setText(tr("Local: ") + directoryStatusString(dir.localStats));
|
|
m_lastScanAction.setText(tr("Last scan time: ") + agoString(dir.lastScanTime));
|
|
m_rescanIntervalAction.setText(tr("Rescan interval: %1 seconds").arg(dir.rescanInterval));
|
|
if (!dir.pullErrorCount) {
|
|
m_errorsAction.setVisible(false);
|
|
} else {
|
|
m_errorsAction.setVisible(true);
|
|
m_errorsAction.setText(tr("%1 item(s) out-of-sync", nullptr, trQuandity(dir.pullErrorCount)).arg(dir.pullErrorCount));
|
|
}
|
|
return true;
|
|
}
|
|
|
|
QList<QAction *> &operator<<(QList<QAction *> &actions, SyncthingDirActions &dirActions)
|
|
{
|
|
return actions << &dirActions.m_infoAction << &dirActions.m_statusAction << &dirActions.m_globalStatusAction << &dirActions.m_localStatusAction
|
|
<< &dirActions.m_lastScanAction << &dirActions.m_rescanIntervalAction << &dirActions.m_errorsAction;
|
|
}
|