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 Aug 29, 2024
1 parent 99aa255 commit ce63577
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 41 deletions.
33 changes: 29 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,
const ProgressInfo **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, const ProgressInfo &progress)
{
QString folderMessage;
switch (syncStatus) {
Expand All @@ -1725,6 +1728,28 @@ QString FolderMan::trayTooltipStatusString(
folderMessage = tr("Preparing for sync.");
break;
case SyncResult::SyncRunning:
if (progress.status() == ProgressInfo::Propagation) {
if (progress.totalSize() == 0) {
qint64 currentFile = progress.currentFile();
qint64 totalFileCount = qMax(progress.totalFiles(), currentFile);
if (progress.trustEta()) {
folderMessage = tr("Syncing %1 of %2 (%3 left)")
.arg(currentFile)
.arg(totalFileCount)
.arg(Utility::durationToDescriptiveString2(progress.totalProgress().estimatedEta));
} else {
folderMessage = tr("Syncing %1 of %2").arg(currentFile).arg(totalFileCount);
}
} else {
QString totalSizeStr = Utility::octetsToString(progress.totalSize());
if (progress.trustEta()) {
folderMessage = tr("Syncing %1 (%2 left)").arg(totalSizeStr, Utility::durationToDescriptiveString2(progress.totalProgress().estimatedEta));
} else {
folderMessage = tr("Syncing %1").arg(totalSizeStr);
}
}
break;
}
folderMessage = tr("Sync is running.");
break;
case SyncResult::Success:
Expand Down
6 changes: 3 additions & 3 deletions src/gui/folderman.h
Original file line number Diff line number Diff line change
Expand Up @@ -137,11 +137,11 @@ 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, const 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, const ProgressInfo **overallProgressInfo);

// Escaping of the alias which is used in QSettings AND the file
// system, thus need to be escaped.
Expand Down
43 changes: 9 additions & 34 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);
const ProgressInfo *overallProgressInfo;
FolderMan::trayOverallStatus(map.values(), &overallStatus, &hasUnresolvedConflicts, &overallProgressInfo);

#ifdef BUILD_FILE_PROVIDER_MODULE
if (!problemFileProviderAccounts.isEmpty()) {
Expand Down Expand Up @@ -420,15 +422,15 @@ 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());
QString folderMessage = FolderMan::trayTooltipStatusString(folder->syncResult().status(),
folder->syncResult().hasUnresolvedConflicts(),
folder->syncPaused(),
folder->syncEngine().progressInfo());
allStatusStrings += tr("Folder %1: %2").arg(folder->shortGuiLocalPath(), folderMessage);
}
#ifdef BUILD_FILE_PROVIDER_MODULE
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]] const ProgressInfo &progressInfo() const
{
return *_progressInfo;
}

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

Expand Down

0 comments on commit ce63577

Please sign in to comment.