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("Auto-normalize", dir->autoNormalize);
printProperty("Rescan interval", TimeSpan::fromSeconds(dir->rescanInterval)); printProperty("Rescan interval", TimeSpan::fromSeconds(dir->rescanInterval));
printProperty("Min. free disk percentage", dir->minDiskFreePercentage); 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'; cout << '\n';
} }
} }

View File

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

View File

@ -32,9 +32,9 @@ enum class SyncthingStatus
Reconnecting, Reconnecting,
Idle, Idle,
Scanning, Scanning,
NotificationsAvailable,
Paused, Paused,
Synchronizing, Synchronizing,
OutOfSync,
BeingDestroyed BeingDestroyed
}; };
@ -48,12 +48,18 @@ enum class DirStatus
OutOfSync 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), message(message),
path(path) path(path)
{} {}
bool operator ==(const DirError &other) const
{
return message == other.message && path == other.path;
}
QString message; QString message;
QString path; QString path;
}; };
@ -92,7 +98,7 @@ struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingDir
ChronoUtilities::DateTime lastStatusUpdate; ChronoUtilities::DateTime lastStatusUpdate;
int progressPercentage = 0; int progressPercentage = 0;
int progressRate = 0; int progressRate = 0;
std::vector<DirErrors> errors; std::vector<DirError> errors;
int globalBytes = 0, globalDeleted = 0, globalFiles = 0; int globalBytes = 0, globalDeleted = 0, globalFiles = 0;
int localBytes = 0, localDeleted = 0, localFiles = 0; int localBytes = 0, localDeleted = 0, localFiles = 0;
int neededByted = 0, neededFiles = 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(QString syncthingUrl READ syncthingUrl WRITE setSyncthingUrl)
Q_PROPERTY(QByteArray apiKey READ apiKey WRITE setApiKey) Q_PROPERTY(QByteArray apiKey READ apiKey WRITE setApiKey)
Q_PROPERTY(SyncthingStatus status READ status NOTIFY statusChanged) 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 trafficPollInterval READ trafficPollInterval WRITE setTrafficPollInterval)
Q_PROPERTY(int devStatsPollInterval READ devStatsPollInterval WRITE setDevStatsPollInterval) Q_PROPERTY(int devStatsPollInterval READ devStatsPollInterval WRITE setDevStatsPollInterval)
Q_PROPERTY(QString configDir READ configDir NOTIFY configDirChanged) Q_PROPERTY(QString configDir READ configDir NOTIFY configDirChanged)
@ -180,6 +188,8 @@ public:
SyncthingStatus status() const; SyncthingStatus status() const;
QString statusText() const; QString statusText() const;
bool isConnected() const; bool isConnected() const;
bool hasUnreadNotifications() const;
bool hasOutOfSyncDirs() const;
int trafficPollInterval() const; int trafficPollInterval() const;
void setTrafficPollInterval(int trafficPollInterval); void setTrafficPollInterval(int trafficPollInterval);
int devStatsPollInterval() const; int devStatsPollInterval() const;
@ -383,6 +393,15 @@ inline bool SyncthingConnection::isConnected() const
return m_status != SyncthingStatus::Disconnected && m_status != SyncthingStatus::Reconnecting; 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. * \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. * \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 4: return tr("Rescan interval");
case 5: return tr("Last scan"); case 5: return tr("Last scan");
case 6: return tr("Last file"); case 6: return tr("Last file");
case 7: return tr("Errors");
} }
break; break;
case 1: // attribute values 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 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 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 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; break;
} }
@ -227,7 +229,7 @@ int SyncthingDirectoryModel::rowCount(const QModelIndex &parent) const
if(!parent.isValid()) { if(!parent.isValid()) {
return static_cast<int>(m_dirs.size()); return static_cast<int>(m_dirs.size());
} else if(!parent.parent().isValid()) { } 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 { } else {
return 0; return 0;
} }

View File

@ -1,7 +1,9 @@
#include "./dirview.h" #include "./dirview.h"
#include "./dirbuttonsitemdelegate.h" #include "./dirbuttonsitemdelegate.h"
#include "./textviewdialog.h"
#include "../../model/syncthingdirectorymodel.h" #include "../../model/syncthingdirectorymodel.h"
#include "../../connector/syncthingconnection.h"
#include <QHeaderView> #include <QHeaderView>
#include <QMouseEvent> #include <QMouseEvent>
@ -9,6 +11,8 @@
#include <QCursor> #include <QCursor>
#include <QGuiApplication> #include <QGuiApplication>
#include <QClipboard> #include <QClipboard>
#include <QTextBrowser>
#include <QStringBuilder>
using namespace Data; using namespace Data;
@ -30,15 +34,26 @@ void DirView::mouseReleaseEvent(QMouseEvent *event)
if(const SyncthingDirectoryModel *dirModel = qobject_cast<SyncthingDirectoryModel *>(model())) { if(const SyncthingDirectoryModel *dirModel = qobject_cast<SyncthingDirectoryModel *>(model())) {
const QPoint pos(event->pos()); const QPoint pos(event->pos());
const QModelIndex clickedIndex(indexAt(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)) { if(const SyncthingDir *dir = dirModel->dirInfo(clickedIndex)) {
const QRect itemRect(visualRect(clickedIndex)); if(!clickedIndex.parent().isValid()) {
if(pos.x() > itemRect.right() - 34) { // open/scan dir buttons
if(pos.x() > itemRect.right() - 17) { const QRect itemRect(visualRect(clickedIndex));
emit openDir(*dir); if(pos.x() > itemRect.right() - 34) {
} else { if(pos.x() > itemRect.right() - 17) {
emit scanDir(*dir); 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_statusIconNotify(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-notify.svg")))),
m_statusIconPause(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-pause.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_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_trayMenu(this),
m_status(SyncthingStatus::Disconnected) m_status(SyncthingStatus::Disconnected)
{ {
@ -97,6 +98,7 @@ void TrayIcon::showSyncthingNotification(ChronoUtilities::DateTime when, const Q
void TrayIcon::updateStatusIconAndText(SyncthingStatus status) void TrayIcon::updateStatusIconAndText(SyncthingStatus status)
{ {
const SyncthingConnection &connection = trayMenu().widget()->connection();
switch(status) { switch(status) {
case SyncthingStatus::Disconnected: case SyncthingStatus::Disconnected:
setIcon(m_statusIconDisconnected); setIcon(m_statusIconDisconnected);
@ -109,26 +111,35 @@ void TrayIcon::updateStatusIconAndText(SyncthingStatus status)
setIcon(m_statusIconDisconnected); setIcon(m_statusIconDisconnected);
setToolTip(tr("Reconnecting ...")); setToolTip(tr("Reconnecting ..."));
break; break;
case SyncthingStatus::Idle: default:
setIcon(m_statusIconIdling); if(connection.hasOutOfSyncDirs()) {
setToolTip(tr("Syncthing is idling")); setIcon(m_statusIconOutOfSync);
break; setToolTip(tr("At least one directory is out of sync"));
case SyncthingStatus::Scanning: } else if(connection.hasUnreadNotifications()) {
setIcon(m_statusIconScanning); setIcon(m_statusIconNotify);
setToolTip(tr("Syncthing is scanning")); setToolTip(tr("Notifications available"));
break; } else {
case SyncthingStatus::NotificationsAvailable: switch(status) {
setIcon(m_statusIconNotify); case SyncthingStatus::Idle:
setToolTip(tr("Notifications available")); setIcon(m_statusIconIdling);
break; setToolTip(tr("Syncthing is idling"));
case SyncthingStatus::Paused: break;
setIcon(m_statusIconPause); case SyncthingStatus::Scanning:
setToolTip(tr("At least one device is paused")); setIcon(m_statusIconScanning);
break; setToolTip(tr("Syncthing is scanning"));
case SyncthingStatus::Synchronizing: break;
setIcon(m_statusIconSync); case SyncthingStatus::Paused:
setToolTip(tr("Synchronization is ongoing")); setIcon(m_statusIconPause);
break; setToolTip(tr("At least one device is paused"));
break;
case SyncthingStatus::Synchronizing:
setIcon(m_statusIconSync);
setToolTip(tr("Synchronization is ongoing"));
break;
default:
;
}
}
} }
switch(status) { switch(status) {
case SyncthingStatus::Disconnected: case SyncthingStatus::Disconnected:
@ -140,7 +151,6 @@ void TrayIcon::updateStatusIconAndText(SyncthingStatus status)
showMessage(QCoreApplication::applicationName(), tr("Synchronization complete"), QSystemTrayIcon::Information); showMessage(QCoreApplication::applicationName(), tr("Synchronization complete"), QSystemTrayIcon::Information);
} }
} }
m_status = status; m_status = status;
} }

View File

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

View File

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

View File

@ -159,6 +159,11 @@
<source>Remove currently selected secondary instance</source> <source>Remove currently selected secondary instance</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </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> <message>
<location filename="../gui/connectionoptionpage.ui" line="141"/> <location filename="../gui/connectionoptionpage.ui" line="141"/>
<source>Syncthing URL</source> <source>Syncthing URL</source>
@ -174,67 +179,62 @@
<source>User</source> <source>User</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </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> <message>
<location filename="../gui/connectionoptionpage.ui" line="259"/> <location filename="../gui/connectionoptionpage.ui" line="259"/>
<source>disconnected</source> <source>disconnected</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </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> <message>
<location filename="../gui/connectionoptionpage.ui" line="277"/> <location filename="../gui/connectionoptionpage.ui" line="277"/>
<source>Poll interval</source> <source>Poll interval</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="292"/>
<source>Traffic</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../gui/connectionoptionpage.ui" line="299"/> <location filename="../gui/connectionoptionpage.ui" line="299"/>
<location filename="../gui/connectionoptionpage.ui" line="326"/> <location filename="../gui/connectionoptionpage.ui" line="326"/>
<source> ms</source> <source> ms</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </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> <message>
<location filename="../gui/connectionoptionpage.ui" line="319"/> <location filename="../gui/connectionoptionpage.ui" line="319"/>
<source>Device statistics</source> <source>Device statistics</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </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> <message>
<location filename="../gui/settingsdialog.cpp" line="56"/> <location filename="../gui/settingsdialog.cpp" line="56"/>
<source>Auto-detected for local instance</source> <source>Auto-detected for local instance</source>
@ -282,17 +282,22 @@
<context> <context>
<name>QtGui::DirView</name> <name>QtGui::DirView</name>
<message> <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> <source>Copy value</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/dirview.cpp" line="55"/> <location filename="../gui/dirview.cpp" line="69"/>
<source>Copy label/ID</source> <source>Copy label/ID</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/dirview.cpp" line="56"/> <location filename="../gui/dirview.cpp" line="70"/>
<source>Copy path</source> <source>Copy path</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -410,6 +415,11 @@
<source>Tray</source> <source>Tray</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../gui/settingsdialog.cpp" line="585"/>
<source>Web view</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../gui/settingsdialog.cpp" line="591"/> <location filename="../gui/settingsdialog.cpp" line="591"/>
<source>Startup</source> <source>Startup</source>
@ -420,108 +430,129 @@
<source>Settings</source> <source>Settings</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../gui/settingsdialog.cpp" line="585"/>
<source>Web view</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>QtGui::TrayIcon</name> <name>QtGui::TrayIcon</name>
<message> <message>
<location filename="../gui/trayicon.cpp" line="36"/> <location filename="../gui/trayicon.cpp" line="37"/>
<source>Web UI</source> <source>Web UI</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/trayicon.cpp" line="37"/> <location filename="../gui/trayicon.cpp" line="38"/>
<source>Settings</source> <source>Settings</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/trayicon.cpp" line="38"/> <location filename="../gui/trayicon.cpp" line="39"/>
<source>Rescan all</source> <source>Rescan all</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/trayicon.cpp" line="40"/> <location filename="../gui/trayicon.cpp" line="41"/>
<source>About</source> <source>About</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/trayicon.cpp" line="42"/> <location filename="../gui/trayicon.cpp" line="43"/>
<source>Close</source> <source>Close</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/trayicon.cpp" line="87"/> <location filename="../gui/trayicon.cpp" line="88"/>
<source>Error</source> <source>Error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/trayicon.cpp" line="94"/> <location filename="../gui/trayicon.cpp" line="95"/>
<source>Syncthing notification - click to dismiss</source> <source>Syncthing notification - click to dismiss</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/trayicon.cpp" line="103"/> <location filename="../gui/trayicon.cpp" line="105"/>
<source>Not connected to Syncthing</source> <source>Not connected to Syncthing</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/trayicon.cpp" line="105"/> <location filename="../gui/trayicon.cpp" line="107"/>
<source>Disconnected from Syncthing</source> <source>Disconnected from Syncthing</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/trayicon.cpp" line="110"/> <location filename="../gui/trayicon.cpp" line="112"/>
<source>Reconnecting ...</source> <source>Reconnecting ...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<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> <source>Syncthing is idling</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/trayicon.cpp" line="118"/> <location filename="../gui/trayicon.cpp" line="129"/>
<source>Syncthing is scanning</source> <source>Syncthing is scanning</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/trayicon.cpp" line="122"/> <location filename="../gui/trayicon.cpp" line="120"/>
<source>Notifications available</source> <source>Notifications available</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/trayicon.cpp" line="126"/> <location filename="../gui/trayicon.cpp" line="133"/>
<source>At least one device is paused</source> <source>At least one device is paused</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/trayicon.cpp" line="130"/> <location filename="../gui/trayicon.cpp" line="137"/>
<source>Synchronization is ongoing</source> <source>Synchronization is ongoing</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/trayicon.cpp" line="140"/> <location filename="../gui/trayicon.cpp" line="151"/>
<source>Synchronization complete</source> <source>Synchronization complete</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>
<name>QtGui::TrayWidget</name> <name>QtGui::TrayWidget</name>
<message>
<location filename="../gui/traywidget.ui" line="14"/>
<source>Syncthing Tray</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../gui/traywidget.ui" line="66"/> <location filename="../gui/traywidget.ui" line="66"/>
<source>Close</source> <source>Close</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </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> <message>
<location filename="../gui/traywidget.ui" line="107"/> <location filename="../gui/traywidget.ui" line="107"/>
<location filename="../gui/traywidget.cpp" line="267"/> <location filename="../gui/traywidget.cpp" line="267"/>
<source>Connect</source> <source>Connect</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </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> <message>
<location filename="../gui/traywidget.ui" line="195"/> <location filename="../gui/traywidget.ui" line="195"/>
<source>Traffic</source> <source>Traffic</source>
@ -537,6 +568,18 @@
<source>Incoming traffic</source> <source>Incoming traffic</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </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> <message>
<location filename="../gui/traywidget.ui" line="247"/> <location filename="../gui/traywidget.ui" line="247"/>
<source>Outgoing traffic</source> <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> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/traywidget.ui" line="385"/> <location filename="../gui/traywidget.ui" line="276"/>
<source>Downloads</source> <location filename="../gui/traywidget.cpp" line="238"/>
<translation type="unfinished"></translation> <source>New notifications</source>
</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>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@ -581,19 +608,8 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/traywidget.ui" line="80"/> <location filename="../gui/traywidget.ui" line="385"/>
<location filename="../gui/traywidget.cpp" line="159"/> <source>Downloads</source>
<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>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@ -602,8 +618,8 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/traywidget.cpp" line="93"/> <location filename="../gui/traywidget.cpp" line="83"/>
<source>Rescan all directories</source> <source>Restart Syncthing</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@ -612,8 +628,8 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/traywidget.cpp" line="83"/> <location filename="../gui/traywidget.cpp" line="93"/>
<source>Restart Syncthing</source> <source>Rescan all directories</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@ -621,6 +637,11 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<source>Connection</source> <source>Connection</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../gui/traywidget.cpp" line="189"/>
<source>Own device ID</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../gui/traywidget.cpp" line="199"/> <location filename="../gui/traywidget.cpp" line="199"/>
<source>device ID is unknown</source> <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> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/traywidget.ui" line="276"/> <location filename="../gui/traywidget.cpp" line="224"/>
<location filename="../gui/traywidget.cpp" line="238"/> <source>Log</source>
<source>New notifications</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@ -643,43 +663,33 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/traywidget.cpp" line="280"/> <location filename="../gui/traywidget.cpp" line="279"/>
<source>Pause</source> <source>Pause</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<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> <source>Syncthing is running, click to pause all devices</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/traywidget.cpp" line="287"/> <location filename="../gui/traywidget.cpp" line="285"/>
<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"/>
<source>Continue</source> <source>Continue</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/traywidget.cpp" line="189"/> <location filename="../gui/traywidget.cpp" line="286"/>
<source>Own device ID</source> <source>At least one device is paused, click to resume</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/traywidget.cpp" line="224"/> <location filename="../gui/traywidget.cpp" line="357"/>
<source>Log</source> <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> <translation type="unfinished"></translation>
</message> </message>
</context> </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> <source>Disable web view (open regular web browser instead)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </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> <message>
<location filename="../gui/webviewoptionpage.ui" line="34"/> <location filename="../gui/webviewoptionpage.ui" line="34"/>
<source>Zoom factor</source> <source>Zoom factor</source>
@ -724,6 +729,11 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<source>Hiding</source> <source>Hiding</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </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> <message>
<location filename="../gui/settingsdialog.cpp" line="543"/> <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. <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> <source>Remove currently selected secondary instance</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </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> <message>
<location filename="../gui/connectionoptionpage.ui" line="141"/> <location filename="../gui/connectionoptionpage.ui" line="141"/>
<source>Syncthing URL</source> <source>Syncthing URL</source>
@ -174,67 +179,62 @@
<source>User</source> <source>User</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </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> <message>
<location filename="../gui/connectionoptionpage.ui" line="259"/> <location filename="../gui/connectionoptionpage.ui" line="259"/>
<source>disconnected</source> <source>disconnected</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </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> <message>
<location filename="../gui/connectionoptionpage.ui" line="277"/> <location filename="../gui/connectionoptionpage.ui" line="277"/>
<source>Poll interval</source> <source>Poll interval</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="292"/>
<source>Traffic</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../gui/connectionoptionpage.ui" line="299"/> <location filename="../gui/connectionoptionpage.ui" line="299"/>
<location filename="../gui/connectionoptionpage.ui" line="326"/> <location filename="../gui/connectionoptionpage.ui" line="326"/>
<source> ms</source> <source> ms</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </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> <message>
<location filename="../gui/connectionoptionpage.ui" line="319"/> <location filename="../gui/connectionoptionpage.ui" line="319"/>
<source>Device statistics</source> <source>Device statistics</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </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> <message>
<location filename="../gui/settingsdialog.cpp" line="56"/> <location filename="../gui/settingsdialog.cpp" line="56"/>
<source>Auto-detected for local instance</source> <source>Auto-detected for local instance</source>
@ -282,17 +282,22 @@
<context> <context>
<name>QtGui::DirView</name> <name>QtGui::DirView</name>
<message> <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> <source>Copy value</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/dirview.cpp" line="55"/> <location filename="../gui/dirview.cpp" line="69"/>
<source>Copy label/ID</source> <source>Copy label/ID</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/dirview.cpp" line="56"/> <location filename="../gui/dirview.cpp" line="70"/>
<source>Copy path</source> <source>Copy path</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -410,6 +415,11 @@
<source>Tray</source> <source>Tray</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../gui/settingsdialog.cpp" line="585"/>
<source>Web view</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../gui/settingsdialog.cpp" line="591"/> <location filename="../gui/settingsdialog.cpp" line="591"/>
<source>Startup</source> <source>Startup</source>
@ -420,108 +430,129 @@
<source>Settings</source> <source>Settings</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../gui/settingsdialog.cpp" line="585"/>
<source>Web view</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>QtGui::TrayIcon</name> <name>QtGui::TrayIcon</name>
<message> <message>
<location filename="../gui/trayicon.cpp" line="36"/> <location filename="../gui/trayicon.cpp" line="37"/>
<source>Web UI</source> <source>Web UI</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/trayicon.cpp" line="37"/> <location filename="../gui/trayicon.cpp" line="38"/>
<source>Settings</source> <source>Settings</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/trayicon.cpp" line="38"/> <location filename="../gui/trayicon.cpp" line="39"/>
<source>Rescan all</source> <source>Rescan all</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/trayicon.cpp" line="40"/> <location filename="../gui/trayicon.cpp" line="41"/>
<source>About</source> <source>About</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/trayicon.cpp" line="42"/> <location filename="../gui/trayicon.cpp" line="43"/>
<source>Close</source> <source>Close</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/trayicon.cpp" line="87"/> <location filename="../gui/trayicon.cpp" line="88"/>
<source>Error</source> <source>Error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/trayicon.cpp" line="94"/> <location filename="../gui/trayicon.cpp" line="95"/>
<source>Syncthing notification - click to dismiss</source> <source>Syncthing notification - click to dismiss</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/trayicon.cpp" line="103"/> <location filename="../gui/trayicon.cpp" line="105"/>
<source>Not connected to Syncthing</source> <source>Not connected to Syncthing</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/trayicon.cpp" line="105"/> <location filename="../gui/trayicon.cpp" line="107"/>
<source>Disconnected from Syncthing</source> <source>Disconnected from Syncthing</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/trayicon.cpp" line="110"/> <location filename="../gui/trayicon.cpp" line="112"/>
<source>Reconnecting ...</source> <source>Reconnecting ...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<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> <source>Syncthing is idling</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/trayicon.cpp" line="118"/> <location filename="../gui/trayicon.cpp" line="129"/>
<source>Syncthing is scanning</source> <source>Syncthing is scanning</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/trayicon.cpp" line="122"/> <location filename="../gui/trayicon.cpp" line="120"/>
<source>Notifications available</source> <source>Notifications available</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/trayicon.cpp" line="126"/> <location filename="../gui/trayicon.cpp" line="133"/>
<source>At least one device is paused</source> <source>At least one device is paused</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/trayicon.cpp" line="130"/> <location filename="../gui/trayicon.cpp" line="137"/>
<source>Synchronization is ongoing</source> <source>Synchronization is ongoing</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/trayicon.cpp" line="140"/> <location filename="../gui/trayicon.cpp" line="151"/>
<source>Synchronization complete</source> <source>Synchronization complete</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context> <context>
<name>QtGui::TrayWidget</name> <name>QtGui::TrayWidget</name>
<message>
<location filename="../gui/traywidget.ui" line="14"/>
<source>Syncthing Tray</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../gui/traywidget.ui" line="66"/> <location filename="../gui/traywidget.ui" line="66"/>
<source>Close</source> <source>Close</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </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> <message>
<location filename="../gui/traywidget.ui" line="107"/> <location filename="../gui/traywidget.ui" line="107"/>
<location filename="../gui/traywidget.cpp" line="267"/> <location filename="../gui/traywidget.cpp" line="267"/>
<source>Connect</source> <source>Connect</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </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> <message>
<location filename="../gui/traywidget.ui" line="195"/> <location filename="../gui/traywidget.ui" line="195"/>
<source>Traffic</source> <source>Traffic</source>
@ -537,6 +568,18 @@
<source>Incoming traffic</source> <source>Incoming traffic</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </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> <message>
<location filename="../gui/traywidget.ui" line="247"/> <location filename="../gui/traywidget.ui" line="247"/>
<source>Outgoing traffic</source> <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> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/traywidget.ui" line="385"/> <location filename="../gui/traywidget.ui" line="276"/>
<source>Downloads</source> <location filename="../gui/traywidget.cpp" line="238"/>
<translation type="unfinished"></translation> <source>New notifications</source>
</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>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@ -581,19 +608,8 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/traywidget.ui" line="80"/> <location filename="../gui/traywidget.ui" line="385"/>
<location filename="../gui/traywidget.cpp" line="159"/> <source>Downloads</source>
<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>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@ -602,8 +618,8 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/traywidget.cpp" line="93"/> <location filename="../gui/traywidget.cpp" line="83"/>
<source>Rescan all directories</source> <source>Restart Syncthing</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@ -612,8 +628,8 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/traywidget.cpp" line="83"/> <location filename="../gui/traywidget.cpp" line="93"/>
<source>Restart Syncthing</source> <source>Rescan all directories</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@ -621,6 +637,11 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<source>Connection</source> <source>Connection</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../gui/traywidget.cpp" line="189"/>
<source>Own device ID</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../gui/traywidget.cpp" line="199"/> <location filename="../gui/traywidget.cpp" line="199"/>
<source>device ID is unknown</source> <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> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/traywidget.ui" line="276"/> <location filename="../gui/traywidget.cpp" line="224"/>
<location filename="../gui/traywidget.cpp" line="238"/> <source>Log</source>
<source>New notifications</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@ -643,43 +663,33 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/traywidget.cpp" line="280"/> <location filename="../gui/traywidget.cpp" line="279"/>
<source>Pause</source> <source>Pause</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<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> <source>Syncthing is running, click to pause all devices</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/traywidget.cpp" line="287"/> <location filename="../gui/traywidget.cpp" line="285"/>
<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"/>
<source>Continue</source> <source>Continue</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/traywidget.cpp" line="189"/> <location filename="../gui/traywidget.cpp" line="286"/>
<source>Own device ID</source> <source>At least one device is paused, click to resume</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../gui/traywidget.cpp" line="224"/> <location filename="../gui/traywidget.cpp" line="357"/>
<source>Log</source> <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> <translation type="unfinished"></translation>
</message> </message>
</context> </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> <source>Disable web view (open regular web browser instead)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </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> <message>
<location filename="../gui/webviewoptionpage.ui" line="34"/> <location filename="../gui/webviewoptionpage.ui" line="34"/>
<source>Zoom factor</source> <source>Zoom factor</source>
@ -724,6 +729,11 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<source>Hiding</source> <source>Hiding</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </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> <message>
<location filename="../gui/settingsdialog.cpp" line="543"/> <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. <source>Syncthing Tray has not been built with vieb view support utilizing either Qt WebKit or Qt WebEngine.