Skip to content

Commit

Permalink
gui: add some extra syncing details to the tray tooltips
Browse files Browse the repository at this point in the history
There was some unused code that updated some status bar text -- this is
now part of the tooltip during syncing.

Signed-off-by: Jyrki Gadinger <[email protected]>
  • Loading branch information
nilsding committed Sep 4, 2024
1 parent 8aa15e2 commit d131880
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 42 deletions.
40 changes: 36 additions & 4 deletions src/gui/folderman.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1610,18 +1610,21 @@ void FolderMan::slotLeaveShare(const QString &localFile, const QByteArray &folde
}

void FolderMan::trayOverallStatus(const QList<Folder *> &folders,
SyncResult::Status *status, bool *unresolvedConflicts)
SyncResult::Status *status,
bool *unresolvedConflicts,
ProgressInfo **const overallProgressInfo)
{
*status = SyncResult::Undefined;
*unresolvedConflicts = false;

const auto cnt = folders.count();

// if one folder: show the state of the one folder.
// if one folder: show the state of the one folder along with the sync status.
// if more folders:
// if one of them has an error -> show error
// if one is paused, but others ok, show ok
// do not show "problem" in the tray
// and do not show sync status
//
if (cnt == 1) {
const auto folder = folders.at(0);
Expand All @@ -1644,6 +1647,7 @@ void FolderMan::trayOverallStatus(const QList<Folder *> &folders,
}
}
*unresolvedConflicts = syncResult.hasUnresolvedConflicts();
*overallProgressInfo = folder->syncEngine().progressInfo();
}
} else {
auto errorsSeen = false;
Expand Down Expand Up @@ -1710,8 +1714,7 @@ void FolderMan::trayOverallStatus(const QList<Folder *> &folders,
}
}

QString FolderMan::trayTooltipStatusString(
SyncResult::Status syncStatus, bool hasUnresolvedConflicts, bool paused)
QString FolderMan::trayTooltipStatusString(SyncResult::Status syncStatus, bool hasUnresolvedConflicts, bool paused, ProgressInfo *const progress)
{
QString folderMessage;
switch (syncStatus) {
Expand All @@ -1725,6 +1728,35 @@ QString FolderMan::trayTooltipStatusString(
folderMessage = tr("Preparing for sync.");
break;
case SyncResult::SyncRunning:
if (progress && progress->status() == ProgressInfo::Propagation) {
const auto estimatedEta = progress->totalProgress().estimatedEta;
if (progress->totalSize() == 0) {
qint64 currentFile = progress->currentFile();
qint64 totalFileCount = qMax(progress->totalFiles(), currentFile);
if (progress->trustEta()) {
if (estimatedEta == 0) {
folderMessage = tr("Syncing %1 of %2 (A few seconds left)").arg(currentFile).arg(totalFileCount);
} else {
folderMessage =
tr("Syncing %1 of %2 (%3 left)").arg(currentFile).arg(totalFileCount).arg(Utility::durationToDescriptiveString1(estimatedEta));
}
} else {
folderMessage = tr("Syncing %1 of %2").arg(currentFile).arg(totalFileCount);
}
} else {
QString totalSizeStr = Utility::octetsToString(progress->totalSize());
if (progress->trustEta()) {
if (estimatedEta == 0) {
folderMessage = tr("Syncing %1 (A few seconds left)").arg(totalSizeStr, Utility::durationToDescriptiveString1(estimatedEta));
} else {
folderMessage = tr("Syncing %1 (%2 left)").arg(totalSizeStr, Utility::durationToDescriptiveString1(estimatedEta));
}
} else {
folderMessage = tr("Syncing %1").arg(totalSizeStr);
}
}
break;
}
folderMessage = tr("Sync is running.");
break;
case SyncResult::Success:
Expand Down
5 changes: 2 additions & 3 deletions src/gui/folderman.h
Original file line number Diff line number Diff line change
Expand Up @@ -137,11 +137,10 @@ class FolderMan : public QObject
bool startFromScratch(const QString &);

/// Produce text for use in the tray tooltip
static QString trayTooltipStatusString(SyncResult::Status syncStatus, bool hasUnresolvedConflicts, bool paused);
static QString trayTooltipStatusString(SyncResult::Status syncStatus, bool hasUnresolvedConflicts, bool paused, ProgressInfo *progress);

/// Compute status summarizing multiple folders
static void trayOverallStatus(const QList<Folder *> &folders,
SyncResult::Status *status, bool *unresolvedConflicts);
static void trayOverallStatus(const QList<Folder *> &folders, SyncResult::Status *status, bool *unresolvedConflicts, ProgressInfo **overallProgressInfo);

// Escaping of the alias which is used in QSettings AND the file
// system, thus need to be escaped.
Expand Down
45 changes: 10 additions & 35 deletions src/gui/owncloudgui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
#include "theme.h"
#include "wheelhandler.h"
#include "syncconflictsmodel.h"
#include "syncengine.h"
#include "filedetails/datefieldbackend.h"
#include "filedetails/filedetails.h"
#include "filedetails/shareemodel.h"
Expand Down Expand Up @@ -383,7 +384,8 @@ void ownCloudGui::slotComputeOverallSyncStatus()

SyncResult::Status overallStatus = SyncResult::Undefined;
bool hasUnresolvedConflicts = false;
FolderMan::trayOverallStatus(map.values(), &overallStatus, &hasUnresolvedConflicts);
ProgressInfo *overallProgressInfo = nullptr;
FolderMan::trayOverallStatus(map.values(), &overallStatus, &hasUnresolvedConflicts, &overallProgressInfo);

#ifdef BUILD_FILE_PROVIDER_MODULE
if (!problemFileProviderAccounts.isEmpty()) {
Expand Down Expand Up @@ -420,16 +422,16 @@ void ownCloudGui::slotComputeOverallSyncStatus()
#endif
#ifdef Q_OS_WIN
// Windows has a 128-char tray tooltip length limit.
trayMessage = folderMan->trayTooltipStatusString(overallStatus, hasUnresolvedConflicts, false);
trayMessage = folderMan->trayTooltipStatusString(overallStatus, hasUnresolvedConflicts, false, overallProgressInfo);
#else
QStringList allStatusStrings;
const auto folders = map.values();
for (const auto folder : folders) {
QString folderMessage = FolderMan::trayTooltipStatusString(
folder->syncResult().status(),
folder->syncResult().hasUnresolvedConflicts(),
folder->syncPaused());
allStatusStrings += tr("Folder %1: %2").arg(folder->shortGuiLocalPath(), folderMessage);
QString folderMessage = FolderMan::trayTooltipStatusString(folder->syncResult().status(),
folder->syncResult().hasUnresolvedConflicts(),
folder->syncPaused(),
folder->syncEngine().progressInfo());
allStatusStrings += tr("%1: %2").arg(folder->shortGuiLocalPath(), folderMessage);
}
#ifdef BUILD_FILE_PROVIDER_MODULE
for (const auto &accountId : syncingFileProviderAccounts) {
Expand Down Expand Up @@ -502,7 +504,6 @@ void ownCloudGui::slotUpdateProgress(const QString &folder, const ProgressInfo &
{
Q_UNUSED(folder);

// FIXME: Lots of messages computed for nothing in this method, needs revisiting
if (progress.status() == ProgressInfo::Discovery) {
#if 0
if (!progress._currentDiscoveredRemoteFolder.isEmpty()) {
Expand All @@ -520,33 +521,7 @@ void ownCloudGui::slotUpdateProgress(const QString &folder, const ProgressInfo &
return;
}

if (progress.totalSize() == 0) {
qint64 currentFile = progress.currentFile();
qint64 totalFileCount = qMax(progress.totalFiles(), currentFile);
QString msg;
if (progress.trustEta()) {
msg = tr("Syncing %1 of %2 (%3 left)")
.arg(currentFile)
.arg(totalFileCount)
.arg(Utility::durationToDescriptiveString2(progress.totalProgress().estimatedEta));
} else {
msg = tr("Syncing %1 of %2")
.arg(currentFile)
.arg(totalFileCount);
}
//_actionStatus->setText(msg);
} else {
QString totalSizeStr = Utility::octetsToString(progress.totalSize());
QString msg;
if (progress.trustEta()) {
msg = tr("Syncing %1 (%2 left)")
.arg(totalSizeStr, Utility::durationToDescriptiveString2(progress.totalProgress().estimatedEta));
} else {
msg = tr("Syncing %1")
.arg(totalSizeStr);
}
//_actionStatus->setText(msg);
}
slotComputeOverallSyncStatus();

if (!progress._lastCompletedItem.isEmpty()) {

Expand Down
5 changes: 5 additions & 0 deletions src/libsync/syncengine.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,11 @@ class OWNCLOUDSYNC_EXPORT SyncEngine : public QObject
[[nodiscard]] SyncOptions syncOptions() const { return _syncOptions; }
[[nodiscard]] bool ignoreHiddenFiles() const { return _ignore_hidden_files; }

[[nodiscard]] ProgressInfo *progressInfo() const
{
return _progressInfo.get();
}

[[nodiscard]] ExcludedFiles &excludedFiles() const { return *_excludedFiles; }
[[nodiscard]] SyncFileStatusTracker &syncFileStatusTracker() const { return *_syncFileStatusTracker; }

Expand Down

0 comments on commit d131880

Please sign in to comment.