Show out of sync directory state

This commit is contained in:
Martchus 2016-10-04 23:42:17 +02:00
parent 2b3a1137bc
commit 9fa2a028e8
10 changed files with 425 additions and 330 deletions

View File

@ -321,6 +321,13 @@ void Application::printStatus(const ArgumentOccurrence &)
printProperty("Auto-normalize", dir->autoNormalize);
printProperty("Rescan interval", TimeSpan::fromSeconds(dir->rescanInterval));
printProperty("Min. free disk percentage", dir->minDiskFreePercentage);
if(!dir->errors.empty()) {
cout << " Errors\n";
for(const DirError &error : dir->errors) {
printProperty(" - Message", error.message);
printProperty(" File", error.path);
}
}
cout << '\n';
}
}

View File

@ -48,7 +48,7 @@ bool SyncthingDir::assignStatus(const QString &statusStr, ChronoUtilities::DateT
DirStatus newStatus;
if(statusStr == QLatin1String("idle")) {
progressPercentage = 0;
newStatus = DirStatus::Idle;
newStatus = errors.empty() ? DirStatus::Idle : DirStatus::OutOfSync;
} else if(statusStr == QLatin1String("scanning")) {
newStatus = DirStatus::Scanning;
} else if(statusStr == QLatin1String("syncing")) {
@ -61,7 +61,7 @@ bool SyncthingDir::assignStatus(const QString &statusStr, ChronoUtilities::DateT
progressPercentage = 0;
newStatus = DirStatus::OutOfSync;
} else {
newStatus = DirStatus::Unknown;
newStatus = errors.empty() ? DirStatus::Idle : DirStatus::OutOfSync;
}
if(newStatus != status) {
switch(status) {
@ -84,6 +84,16 @@ bool SyncthingDir::assignStatus(DirStatus newStatus, DateTime time)
} else {
lastStatusUpdate = time;
}
switch(newStatus) {
case DirStatus::Idle:
case DirStatus::Unknown:
if(!errors.empty()) {
newStatus = DirStatus::OutOfSync;
}
break;
default:
;
}
if(newStatus != status) {
switch(status) {
case DirStatus::Scanning:
@ -174,8 +184,6 @@ QString SyncthingConnection::statusText() const
return tr("reconnecting");
case SyncthingStatus::Idle:
return tr("connected");
case SyncthingStatus::NotificationsAvailable:
return tr("connected, notifications available");
case SyncthingStatus::Paused:
return tr("connected, paused");
case SyncthingStatus::Synchronizing:
@ -185,6 +193,19 @@ QString SyncthingConnection::statusText() const
}
}
/*!
* \brief Returns whether there is at least one directory out-of-sync.
*/
bool SyncthingConnection::hasOutOfSyncDirs() const
{
for(const SyncthingDir &dir : m_dirs) {
if(dir.status == DirStatus::OutOfSync) {
return true;
}
}
return false;
}
/*!
* \brief Connects asynchronously to Syncthing. Does nothing if already connected.
*/
@ -1222,9 +1243,13 @@ void SyncthingConnection::readDirEvent(DateTime eventTime, const QString &eventT
for(const QJsonValue &errorVal : errors) {
const QJsonObject error(errorVal.toObject());
if(!error.isEmpty()) {
dirInfo->errors.emplace_back(error.value(QStringLiteral("error")).toString(), error.value(QStringLiteral("path")).toString());
dirInfo->assignStatus(DirStatus::OutOfSync, eventTime);
emitNotification(eventTime, dirInfo->errors.back().message);
auto &errors = dirInfo->errors;
DirError dirError(error.value(QStringLiteral("error")).toString(), error.value(QStringLiteral("path")).toString());
if(find(errors.cbegin(), errors.cend(), dirError) == errors.cend()) {
errors.emplace_back(move(dirError));
dirInfo->assignStatus(DirStatus::OutOfSync, eventTime);
emitNotification(eventTime, dirInfo->errors.back().message);
}
}
}
emit dirStatusChanged(*dirInfo, index);
@ -1349,6 +1374,8 @@ void SyncthingConnection::readItemFinished(DateTime eventTime, const QJsonObject
} else if(dirInfo->status == DirStatus::OutOfSync) {
// FIXME: find better way to check whether the event is still relevant
dirInfo->errors.emplace_back(error, item);
dirInfo->status = DirStatus::OutOfSync;
emit dirStatusChanged(*dirInfo, index);
emitNotification(eventTime, error);
}
}
@ -1438,38 +1465,34 @@ void SyncthingConnection::setStatus(SyncthingStatus status)
case SyncthingStatus::Reconnecting:
break;
default:
if(m_unreadNotifications) {
status = SyncthingStatus::NotificationsAvailable;
// check whether at least one directory is scanning or synchronizing
bool scanning = false;
bool synchronizing = false;
for(const SyncthingDir &dir : m_dirs) {
if(dir.status == DirStatus::Synchronizing) {
synchronizing = true;
break;
} else if(dir.status == DirStatus::Scanning) {
scanning = true;
}
}
if(synchronizing) {
status = SyncthingStatus::Synchronizing;
} else if(scanning) {
status = SyncthingStatus::Scanning;
} else {
// check whether at least one directory is scanning or synchronizing
bool scanning = false;
bool synchronizing = false;
for(const SyncthingDir &dir : m_dirs) {
if(dir.status == DirStatus::Synchronizing) {
synchronizing = true;
// check whether at least one device is paused
bool paused = false;
for(const SyncthingDev &dev : m_devs) {
if(dev.paused) {
paused = true;
break;
} else if(dir.status == DirStatus::Scanning) {
scanning = true;
}
}
if(synchronizing) {
status = SyncthingStatus::Synchronizing;
} else if(scanning) {
status = SyncthingStatus::Scanning;
if(paused) {
status = SyncthingStatus::Paused;
} else {
// check whether at least one device is paused
bool paused = false;
for(const SyncthingDev &dev : m_devs) {
if(dev.paused) {
paused = true;
break;
}
}
if(paused) {
status = SyncthingStatus::Paused;
} else {
status = SyncthingStatus::Idle;
}
status = SyncthingStatus::Idle;
}
}
}

View File

@ -32,9 +32,9 @@ enum class SyncthingStatus
Reconnecting,
Idle,
Scanning,
NotificationsAvailable,
Paused,
Synchronizing,
OutOfSync,
BeingDestroyed
};
@ -48,12 +48,18 @@ enum class DirStatus
OutOfSync
};
struct LIB_SYNCTHING_CONNECTOR_EXPORT DirErrors
struct LIB_SYNCTHING_CONNECTOR_EXPORT DirError
{
DirErrors(const QString &message, const QString &path) :
DirError(const QString &message, const QString &path) :
message(message),
path(path)
{}
bool operator ==(const DirError &other) const
{
return message == other.message && path == other.path;
}
QString message;
QString path;
};
@ -92,7 +98,7 @@ struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingDir
ChronoUtilities::DateTime lastStatusUpdate;
int progressPercentage = 0;
int progressRate = 0;
std::vector<DirErrors> errors;
std::vector<DirError> errors;
int globalBytes = 0, globalDeleted = 0, globalFiles = 0;
int localBytes = 0, localDeleted = 0, localFiles = 0;
int neededByted = 0, neededFiles = 0;
@ -157,6 +163,8 @@ class LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingConnection : public QObject
Q_PROPERTY(QString syncthingUrl READ syncthingUrl WRITE setSyncthingUrl)
Q_PROPERTY(QByteArray apiKey READ apiKey WRITE setApiKey)
Q_PROPERTY(SyncthingStatus status READ status NOTIFY statusChanged)
Q_PROPERTY(bool hasUnreadNotifications READ hasUnreadNotifications)
Q_PROPERTY(bool hasOutOfSyncDirs READ hasOutOfSyncDirs)
Q_PROPERTY(int trafficPollInterval READ trafficPollInterval WRITE setTrafficPollInterval)
Q_PROPERTY(int devStatsPollInterval READ devStatsPollInterval WRITE setDevStatsPollInterval)
Q_PROPERTY(QString configDir READ configDir NOTIFY configDirChanged)
@ -180,6 +188,8 @@ public:
SyncthingStatus status() const;
QString statusText() const;
bool isConnected() const;
bool hasUnreadNotifications() const;
bool hasOutOfSyncDirs() const;
int trafficPollInterval() const;
void setTrafficPollInterval(int trafficPollInterval);
int devStatsPollInterval() const;
@ -383,6 +393,15 @@ inline bool SyncthingConnection::isConnected() const
return m_status != SyncthingStatus::Disconnected && m_status != SyncthingStatus::Reconnecting;
}
/*!
* \brief Returns whether there are unread notifications available.
* \remarks This flag is set to true when new notifications become available. It can be unset again by calling considerAllNotificationsRead().
*/
inline bool SyncthingConnection::hasUnreadNotifications() const
{
return m_unreadNotifications;
}
/*!
* \brief Returns the interval for polling traffic status (which currently can not be received via event API) in milliseconds.
* \remarks Default value is 2000 milliseconds.

View File

@ -92,6 +92,7 @@ QVariant SyncthingDirectoryModel::data(const QModelIndex &index, int role) const
case 4: return tr("Rescan interval");
case 5: return tr("Last scan");
case 6: return tr("Last file");
case 7: return tr("Errors");
}
break;
case 1: // attribute values
@ -104,6 +105,7 @@ QVariant SyncthingDirectoryModel::data(const QModelIndex &index, int role) const
case 4: return QString::fromLatin1(TimeSpan::fromSeconds(dir.rescanInterval).toString(TimeSpanOutputFormat::WithMeasures, true).data());
case 5: return dir.lastScanTime.isNull() ? tr("unknown") : QString::fromLatin1(dir.lastScanTime.toString(DateTimeOutputFormat::DateAndTime, true).data());
case 6: return dir.lastFileName.isEmpty() ? tr("unknown") : dir.lastFileName;
case 7: return dir.errors.empty() ? tr("none") : tr("%1 item(s) out of sync", nullptr, static_cast<int>(dir.errors.size())).arg(dir.errors.size());
}
break;
}
@ -227,7 +229,7 @@ int SyncthingDirectoryModel::rowCount(const QModelIndex &parent) const
if(!parent.isValid()) {
return static_cast<int>(m_dirs.size());
} else if(!parent.parent().isValid()) {
return 7;
return parent.parent().row() >= 0 && static_cast<size_t>(parent.parent().row()) < m_dirs.size() && m_dirs[static_cast<size_t>(parent.parent().row())].errors.empty() ? 6 : 7;
} else {
return 0;
}

View File

@ -1,7 +1,9 @@
#include "./dirview.h"
#include "./dirbuttonsitemdelegate.h"
#include "./textviewdialog.h"
#include "../../model/syncthingdirectorymodel.h"
#include "../../connector/syncthingconnection.h"
#include <QHeaderView>
#include <QMouseEvent>
@ -9,6 +11,8 @@
#include <QCursor>
#include <QGuiApplication>
#include <QClipboard>
#include <QTextBrowser>
#include <QStringBuilder>
using namespace Data;
@ -30,15 +34,26 @@ void DirView::mouseReleaseEvent(QMouseEvent *event)
if(const SyncthingDirectoryModel *dirModel = qobject_cast<SyncthingDirectoryModel *>(model())) {
const QPoint pos(event->pos());
const QModelIndex clickedIndex(indexAt(event->pos()));
if(clickedIndex.isValid() && clickedIndex.column() == 1 && !clickedIndex.parent().isValid()) {
if(clickedIndex.isValid() && clickedIndex.column() == 1) {
if(const SyncthingDir *dir = dirModel->dirInfo(clickedIndex)) {
const QRect itemRect(visualRect(clickedIndex));
if(pos.x() > itemRect.right() - 34) {
if(pos.x() > itemRect.right() - 17) {
emit openDir(*dir);
} else {
emit scanDir(*dir);
if(!clickedIndex.parent().isValid()) {
// open/scan dir buttons
const QRect itemRect(visualRect(clickedIndex));
if(pos.x() > itemRect.right() - 34) {
if(pos.x() > itemRect.right() - 17) {
emit openDir(*dir);
} else {
emit scanDir(*dir);
}
}
} else if(clickedIndex.row() == 7) {
// show errors
auto *textViewDlg = new TextViewDialog(tr("Errors of %1").arg(dir->label.isEmpty() ? dir->id : dir->label));
auto *browser = textViewDlg->browser();
for(const DirError &error : dir->errors) {
browser->append(error.path % QChar(':') % QChar(' ') % QChar('\n') % error.message % QChar('\n'));
}
textViewDlg->show();
}
}
}

View File

@ -29,6 +29,7 @@ TrayIcon::TrayIcon(QObject *parent) :
m_statusIconNotify(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-notify.svg")))),
m_statusIconPause(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-pause.svg")))),
m_statusIconSync(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-sync.svg")))),
m_statusIconOutOfSync(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-error.svg")))),
m_trayMenu(this),
m_status(SyncthingStatus::Disconnected)
{
@ -97,6 +98,7 @@ void TrayIcon::showSyncthingNotification(ChronoUtilities::DateTime when, const Q
void TrayIcon::updateStatusIconAndText(SyncthingStatus status)
{
const SyncthingConnection &connection = trayMenu().widget()->connection();
switch(status) {
case SyncthingStatus::Disconnected:
setIcon(m_statusIconDisconnected);
@ -109,26 +111,35 @@ void TrayIcon::updateStatusIconAndText(SyncthingStatus status)
setIcon(m_statusIconDisconnected);
setToolTip(tr("Reconnecting ..."));
break;
case SyncthingStatus::Idle:
setIcon(m_statusIconIdling);
setToolTip(tr("Syncthing is idling"));
break;
case SyncthingStatus::Scanning:
setIcon(m_statusIconScanning);
setToolTip(tr("Syncthing is scanning"));
break;
case SyncthingStatus::NotificationsAvailable:
setIcon(m_statusIconNotify);
setToolTip(tr("Notifications available"));
break;
case SyncthingStatus::Paused:
setIcon(m_statusIconPause);
setToolTip(tr("At least one device is paused"));
break;
case SyncthingStatus::Synchronizing:
setIcon(m_statusIconSync);
setToolTip(tr("Synchronization is ongoing"));
break;
default:
if(connection.hasOutOfSyncDirs()) {
setIcon(m_statusIconOutOfSync);
setToolTip(tr("At least one directory is out of sync"));
} else if(connection.hasUnreadNotifications()) {
setIcon(m_statusIconNotify);
setToolTip(tr("Notifications available"));
} else {
switch(status) {
case SyncthingStatus::Idle:
setIcon(m_statusIconIdling);
setToolTip(tr("Syncthing is idling"));
break;
case SyncthingStatus::Scanning:
setIcon(m_statusIconScanning);
setToolTip(tr("Syncthing is scanning"));
break;
case SyncthingStatus::Paused:
setIcon(m_statusIconPause);
setToolTip(tr("At least one device is paused"));
break;
case SyncthingStatus::Synchronizing:
setIcon(m_statusIconSync);
setToolTip(tr("Synchronization is ongoing"));
break;
default:
;
}
}
}
switch(status) {
case SyncthingStatus::Disconnected:
@ -140,7 +151,6 @@ void TrayIcon::updateStatusIconAndText(SyncthingStatus status)
showMessage(QCoreApplication::applicationName(), tr("Synchronization complete"), QSystemTrayIcon::Information);
}
}
m_status = status;
}

View File

@ -41,6 +41,7 @@ private:
const QIcon m_statusIconNotify;
const QIcon m_statusIconPause;
const QIcon m_statusIconSync;
const QIcon m_statusIconOutOfSync;
TrayMenu m_trayMenu;
QMenu m_contextMenu;
Data::SyncthingStatus m_status;

View File

@ -275,7 +275,6 @@ void TrayWidget::handleStatusChanged(SyncthingStatus status)
break;
case SyncthingStatus::Idle:
case SyncthingStatus::Scanning:
case SyncthingStatus::NotificationsAvailable:
case SyncthingStatus::Synchronizing:
m_ui->statusPushButton->setText(tr("Pause"));
m_ui->statusPushButton->setToolTip(tr("Syncthing is running, click to pause all devices"));
@ -319,8 +318,8 @@ void TrayWidget::applySettings()
if(!instance->m_selectedConnection) {
instance->m_selectedConnection = &Settings::primaryConnectionSettings();
instance->m_connectionsMenu->actions().at(0)->setChecked(true);
instance->m_ui->connectionsPushButton->setText(instance->m_selectedConnection->label);
}
instance->m_ui->connectionsPushButton->setText(instance->m_selectedConnection->label);
instance->m_connection.reconnect(*instance->m_selectedConnection);
@ -392,7 +391,6 @@ void TrayWidget::changeStatus()
break;
case SyncthingStatus::Idle:
case SyncthingStatus::Scanning:
case SyncthingStatus::NotificationsAvailable:
case SyncthingStatus::Synchronizing:
m_connection.pauseAllDevs();
break;

View File

@ -159,6 +159,11 @@
<source>Remove currently selected secondary instance</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="118"/>
<source>It is possible to save multiple configurations. This allows switching quickly between multiple Syncthing instances using the connection button in the right corner of the tray menu. The config label is an arbitrary name to identify a configuration and does not have to match the name of the corresponding Syncthing device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="141"/>
<source>Syncthing URL</source>
@ -174,67 +179,62 @@
<source>User</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="181"/>
<source>Password</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="198"/>
<source>API key</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="208"/>
<source>HTTPS certificate</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="228"/>
<source>Insert values from local Syncthing configuration</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="252"/>
<source>Status</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="259"/>
<source>disconnected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="266"/>
<source>Apply connection settings and try to reconnect with the currently selected config</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="277"/>
<source>Poll interval</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="292"/>
<source>Traffic</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="299"/>
<location filename="../gui/connectionoptionpage.ui" line="326"/>
<source> ms</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="266"/>
<source>Apply connection settings and try to reconnect with the currently selected config</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="292"/>
<source>Traffic</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="319"/>
<source>Device statistics</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="118"/>
<source>It is possible to save multiple configurations. This allows switching quickly between multiple Syncthing instances using the connection button in the right corner of the tray menu. The config label is an arbitrary name to identify a configuration and does not have to match the name of the corresponding Syncthing device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="208"/>
<source>HTTPS certificate</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="252"/>
<source>Status</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="198"/>
<source>API key</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="228"/>
<source>Insert values from local Syncthing configuration</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="181"/>
<source>Password</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="56"/>
<source>Auto-detected for local instance</source>
@ -282,17 +282,22 @@
<context>
<name>QtGui::DirView</name>
<message>
<location filename="../gui/dirview.cpp" line="53"/>
<location filename="../gui/dirview.cpp" line="51"/>
<source>Errors of %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/dirview.cpp" line="67"/>
<source>Copy value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/dirview.cpp" line="55"/>
<location filename="../gui/dirview.cpp" line="69"/>
<source>Copy label/ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/dirview.cpp" line="56"/>
<location filename="../gui/dirview.cpp" line="70"/>
<source>Copy path</source>
<translation type="unfinished"></translation>
</message>
@ -410,6 +415,11 @@
<source>Tray</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="585"/>
<source>Web view</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="591"/>
<source>Startup</source>
@ -420,108 +430,129 @@
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="585"/>
<source>Web view</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QtGui::TrayIcon</name>
<message>
<location filename="../gui/trayicon.cpp" line="36"/>
<location filename="../gui/trayicon.cpp" line="37"/>
<source>Web UI</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="37"/>
<location filename="../gui/trayicon.cpp" line="38"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="38"/>
<location filename="../gui/trayicon.cpp" line="39"/>
<source>Rescan all</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="40"/>
<location filename="../gui/trayicon.cpp" line="41"/>
<source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="42"/>
<location filename="../gui/trayicon.cpp" line="43"/>
<source>Close</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="87"/>
<location filename="../gui/trayicon.cpp" line="88"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="94"/>
<location filename="../gui/trayicon.cpp" line="95"/>
<source>Syncthing notification - click to dismiss</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="103"/>
<location filename="../gui/trayicon.cpp" line="105"/>
<source>Not connected to Syncthing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="105"/>
<location filename="../gui/trayicon.cpp" line="107"/>
<source>Disconnected from Syncthing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="110"/>
<location filename="../gui/trayicon.cpp" line="112"/>
<source>Reconnecting ...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="114"/>
<location filename="../gui/trayicon.cpp" line="117"/>
<source>At least one directory is out of sync</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="125"/>
<source>Syncthing is idling</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="118"/>
<location filename="../gui/trayicon.cpp" line="129"/>
<source>Syncthing is scanning</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="122"/>
<location filename="../gui/trayicon.cpp" line="120"/>
<source>Notifications available</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="126"/>
<location filename="../gui/trayicon.cpp" line="133"/>
<source>At least one device is paused</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="130"/>
<location filename="../gui/trayicon.cpp" line="137"/>
<source>Synchronization is ongoing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="140"/>
<location filename="../gui/trayicon.cpp" line="151"/>
<source>Synchronization complete</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QtGui::TrayWidget</name>
<message>
<location filename="../gui/traywidget.ui" line="14"/>
<source>Syncthing Tray</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="66"/>
<source>Close</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="80"/>
<location filename="../gui/traywidget.cpp" line="159"/>
<source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="107"/>
<location filename="../gui/traywidget.cpp" line="267"/>
<source>Connect</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="134"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="148"/>
<source>Web UI</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="195"/>
<source>Traffic</source>
@ -537,6 +568,18 @@
<source>Incoming traffic</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="230"/>
<location filename="../gui/traywidget.ui" line="250"/>
<location filename="../gui/traywidget.cpp" line="408"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="237"/>
<source>Out</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="247"/>
<source>Outgoing traffic</source>
@ -549,25 +592,9 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="385"/>
<source>Downloads</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="230"/>
<location filename="../gui/traywidget.ui" line="250"/>
<location filename="../gui/traywidget.cpp" line="410"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="14"/>
<source>Syncthing Tray</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="237"/>
<source>Out</source>
<location filename="../gui/traywidget.ui" line="276"/>
<location filename="../gui/traywidget.cpp" line="238"/>
<source>New notifications</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -581,19 +608,8 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="80"/>
<location filename="../gui/traywidget.cpp" line="159"/>
<source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="134"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="148"/>
<source>Web UI</source>
<location filename="../gui/traywidget.ui" line="385"/>
<source>Downloads</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -602,8 +618,8 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="93"/>
<source>Rescan all directories</source>
<location filename="../gui/traywidget.cpp" line="83"/>
<source>Restart Syncthing</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -612,8 +628,8 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="83"/>
<source>Restart Syncthing</source>
<location filename="../gui/traywidget.cpp" line="93"/>
<source>Rescan all directories</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -621,6 +637,11 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<source>Connection</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="189"/>
<source>Own device ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="199"/>
<source>device ID is unknown</source>
@ -632,9 +653,8 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="276"/>
<location filename="../gui/traywidget.cpp" line="238"/>
<source>New notifications</source>
<location filename="../gui/traywidget.cpp" line="224"/>
<source>Log</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -643,43 +663,33 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="280"/>
<location filename="../gui/traywidget.cpp" line="279"/>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="281"/>
<location filename="../gui/traywidget.cpp" line="280"/>
<source>Syncthing is running, click to pause all devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="287"/>
<source>At least one device is paused, click to resume</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="358"/>
<source>The directory &lt;i&gt;%1&lt;/i&gt; does not exist on the local machine.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="367"/>
<source>The file &lt;i&gt;%1&lt;/i&gt; does not exist on the local machine.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="286"/>
<location filename="../gui/traywidget.cpp" line="285"/>
<source>Continue</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="189"/>
<source>Own device ID</source>
<location filename="../gui/traywidget.cpp" line="286"/>
<source>At least one device is paused, click to resume</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="224"/>
<source>Log</source>
<location filename="../gui/traywidget.cpp" line="357"/>
<source>The directory &lt;i&gt;%1&lt;/i&gt; does not exist on the local machine.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="366"/>
<source>The file &lt;i&gt;%1&lt;/i&gt; does not exist on the local machine.</source>
<translation type="unfinished"></translation>
</message>
</context>
@ -709,11 +719,6 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<source>Disable web view (open regular web browser instead)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/webviewoptionpage.ui" line="64"/>
<source>Keep web view running when currently not shown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/webviewoptionpage.ui" line="34"/>
<source>Zoom factor</source>
@ -724,6 +729,11 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<source>Hiding</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/webviewoptionpage.ui" line="64"/>
<source>Keep web view running when currently not shown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="543"/>
<source>Syncthing Tray has not been built with vieb view support utilizing either Qt WebKit or Qt WebEngine.

View File

@ -159,6 +159,11 @@
<source>Remove currently selected secondary instance</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="118"/>
<source>It is possible to save multiple configurations. This allows switching quickly between multiple Syncthing instances using the connection button in the right corner of the tray menu. The config label is an arbitrary name to identify a configuration and does not have to match the name of the corresponding Syncthing device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="141"/>
<source>Syncthing URL</source>
@ -174,67 +179,62 @@
<source>User</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="181"/>
<source>Password</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="198"/>
<source>API key</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="208"/>
<source>HTTPS certificate</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="228"/>
<source>Insert values from local Syncthing configuration</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="252"/>
<source>Status</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="259"/>
<source>disconnected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="266"/>
<source>Apply connection settings and try to reconnect with the currently selected config</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="277"/>
<source>Poll interval</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="292"/>
<source>Traffic</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="299"/>
<location filename="../gui/connectionoptionpage.ui" line="326"/>
<source> ms</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="266"/>
<source>Apply connection settings and try to reconnect with the currently selected config</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="292"/>
<source>Traffic</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="319"/>
<source>Device statistics</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="118"/>
<source>It is possible to save multiple configurations. This allows switching quickly between multiple Syncthing instances using the connection button in the right corner of the tray menu. The config label is an arbitrary name to identify a configuration and does not have to match the name of the corresponding Syncthing device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="208"/>
<source>HTTPS certificate</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="252"/>
<source>Status</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="198"/>
<source>API key</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="228"/>
<source>Insert values from local Syncthing configuration</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="181"/>
<source>Password</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="56"/>
<source>Auto-detected for local instance</source>
@ -282,17 +282,22 @@
<context>
<name>QtGui::DirView</name>
<message>
<location filename="../gui/dirview.cpp" line="53"/>
<location filename="../gui/dirview.cpp" line="51"/>
<source>Errors of %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/dirview.cpp" line="67"/>
<source>Copy value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/dirview.cpp" line="55"/>
<location filename="../gui/dirview.cpp" line="69"/>
<source>Copy label/ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/dirview.cpp" line="56"/>
<location filename="../gui/dirview.cpp" line="70"/>
<source>Copy path</source>
<translation type="unfinished"></translation>
</message>
@ -410,6 +415,11 @@
<source>Tray</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="585"/>
<source>Web view</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="591"/>
<source>Startup</source>
@ -420,108 +430,129 @@
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="585"/>
<source>Web view</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QtGui::TrayIcon</name>
<message>
<location filename="../gui/trayicon.cpp" line="36"/>
<location filename="../gui/trayicon.cpp" line="37"/>
<source>Web UI</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="37"/>
<location filename="../gui/trayicon.cpp" line="38"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="38"/>
<location filename="../gui/trayicon.cpp" line="39"/>
<source>Rescan all</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="40"/>
<location filename="../gui/trayicon.cpp" line="41"/>
<source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="42"/>
<location filename="../gui/trayicon.cpp" line="43"/>
<source>Close</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="87"/>
<location filename="../gui/trayicon.cpp" line="88"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="94"/>
<location filename="../gui/trayicon.cpp" line="95"/>
<source>Syncthing notification - click to dismiss</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="103"/>
<location filename="../gui/trayicon.cpp" line="105"/>
<source>Not connected to Syncthing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="105"/>
<location filename="../gui/trayicon.cpp" line="107"/>
<source>Disconnected from Syncthing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="110"/>
<location filename="../gui/trayicon.cpp" line="112"/>
<source>Reconnecting ...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="114"/>
<location filename="../gui/trayicon.cpp" line="117"/>
<source>At least one directory is out of sync</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="125"/>
<source>Syncthing is idling</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="118"/>
<location filename="../gui/trayicon.cpp" line="129"/>
<source>Syncthing is scanning</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="122"/>
<location filename="../gui/trayicon.cpp" line="120"/>
<source>Notifications available</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="126"/>
<location filename="../gui/trayicon.cpp" line="133"/>
<source>At least one device is paused</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="130"/>
<location filename="../gui/trayicon.cpp" line="137"/>
<source>Synchronization is ongoing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="140"/>
<location filename="../gui/trayicon.cpp" line="151"/>
<source>Synchronization complete</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QtGui::TrayWidget</name>
<message>
<location filename="../gui/traywidget.ui" line="14"/>
<source>Syncthing Tray</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="66"/>
<source>Close</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="80"/>
<location filename="../gui/traywidget.cpp" line="159"/>
<source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="107"/>
<location filename="../gui/traywidget.cpp" line="267"/>
<source>Connect</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="134"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="148"/>
<source>Web UI</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="195"/>
<source>Traffic</source>
@ -537,6 +568,18 @@
<source>Incoming traffic</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="230"/>
<location filename="../gui/traywidget.ui" line="250"/>
<location filename="../gui/traywidget.cpp" line="408"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="237"/>
<source>Out</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="247"/>
<source>Outgoing traffic</source>
@ -549,25 +592,9 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="385"/>
<source>Downloads</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="230"/>
<location filename="../gui/traywidget.ui" line="250"/>
<location filename="../gui/traywidget.cpp" line="410"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="14"/>
<source>Syncthing Tray</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="237"/>
<source>Out</source>
<location filename="../gui/traywidget.ui" line="276"/>
<location filename="../gui/traywidget.cpp" line="238"/>
<source>New notifications</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -581,19 +608,8 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="80"/>
<location filename="../gui/traywidget.cpp" line="159"/>
<source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="134"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="148"/>
<source>Web UI</source>
<location filename="../gui/traywidget.ui" line="385"/>
<source>Downloads</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -602,8 +618,8 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="93"/>
<source>Rescan all directories</source>
<location filename="../gui/traywidget.cpp" line="83"/>
<source>Restart Syncthing</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -612,8 +628,8 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="83"/>
<source>Restart Syncthing</source>
<location filename="../gui/traywidget.cpp" line="93"/>
<source>Rescan all directories</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -621,6 +637,11 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<source>Connection</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="189"/>
<source>Own device ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="199"/>
<source>device ID is unknown</source>
@ -632,9 +653,8 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="276"/>
<location filename="../gui/traywidget.cpp" line="238"/>
<source>New notifications</source>
<location filename="../gui/traywidget.cpp" line="224"/>
<source>Log</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -643,43 +663,33 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="280"/>
<location filename="../gui/traywidget.cpp" line="279"/>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="281"/>
<location filename="../gui/traywidget.cpp" line="280"/>
<source>Syncthing is running, click to pause all devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="287"/>
<source>At least one device is paused, click to resume</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="358"/>
<source>The directory &lt;i&gt;%1&lt;/i&gt; does not exist on the local machine.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="367"/>
<source>The file &lt;i&gt;%1&lt;/i&gt; does not exist on the local machine.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="286"/>
<location filename="../gui/traywidget.cpp" line="285"/>
<source>Continue</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="189"/>
<source>Own device ID</source>
<location filename="../gui/traywidget.cpp" line="286"/>
<source>At least one device is paused, click to resume</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="224"/>
<source>Log</source>
<location filename="../gui/traywidget.cpp" line="357"/>
<source>The directory &lt;i&gt;%1&lt;/i&gt; does not exist on the local machine.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="366"/>
<source>The file &lt;i&gt;%1&lt;/i&gt; does not exist on the local machine.</source>
<translation type="unfinished"></translation>
</message>
</context>
@ -709,11 +719,6 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<source>Disable web view (open regular web browser instead)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/webviewoptionpage.ui" line="64"/>
<source>Keep web view running when currently not shown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/webviewoptionpage.ui" line="34"/>
<source>Zoom factor</source>
@ -724,6 +729,11 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<source>Hiding</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/webviewoptionpage.ui" line="64"/>
<source>Keep web view running when currently not shown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="543"/>
<source>Syncthing Tray has not been built with vieb view support utilizing either Qt WebKit or Qt WebEngine.