Make poll interval configurable

This commit is contained in:
Martchus 2016-09-25 20:54:09 +02:00
parent e50c006dd7
commit 14e0b3801b
14 changed files with 407 additions and 237 deletions

View File

@ -70,12 +70,14 @@ The application depends on [c++utilities](https://github.com/Martchus/cpp-utilit
The following Qt 5 modules are requried: core network gui widgets svg webenginewidgets/webkitwidgets
#### Select Qt modules for WebView
#### Select Qt module for WebView
* If Qt WebKitWidgets is installed on the system, the tray will link against it. Otherwise it will link against Qt WebEngineWidgets.
* To force usage of Qt WebKit/Qt WebEngine or to disable both add `-DWEBVIEW_PROVIDER=webkit/webengine/none` to the CMake arguments.
BTW: I still prefer the deprecated Qt WebKit because
* I currently don't know how to allow a particular self-signed certificate in Qt WebEngine. Currently any self-signed certificate is accepted!
#### BTW: I still prefer the deprecated Qt WebKit because
* Currently there is no way to allow a particular self-signed certificate in Qt
WebEngine. Currently any self-signed certificate is accepted! See:
https://bugreports.qt.io/browse/QTBUG-51176)
* Qt WebEngine can not be built with mingw-w64.
* Qt WebEngine is more buggy in my experience.
* Security issues are not a concern because no other website than the Syncthing web UI is shown.

View File

@ -154,6 +154,8 @@ void restore()
connectionSettings->userName = settings.value(QStringLiteral("userName")).toString();
connectionSettings->password = settings.value(QStringLiteral("password")).toString();
connectionSettings->apiKey = settings.value(QStringLiteral("apiKey")).toByteArray();
connectionSettings->trafficPollInterval = settings.value(QStringLiteral("trafficPollInterval"), connectionSettings->trafficPollInterval).toInt();
connectionSettings->devStatsPollInterval = settings.value(QStringLiteral("devStatsPollInterval"), connectionSettings->devStatsPollInterval).toInt();
connectionSettings->httpsCertPath = settings.value(QStringLiteral("httpsCertPath")).toString();
if(!connectionSettings->loadHttpsCert()) {
QMessageBox::critical(nullptr, QCoreApplication::applicationName(), QCoreApplication::translate("Settings::restore", "Unable to load certificate \"%1\" when restoring settings.").arg(connectionSettings->httpsCertPath));
@ -208,6 +210,8 @@ void save()
settings.setValue(QStringLiteral("userName"), connectionSettings->userName);
settings.setValue(QStringLiteral("password"), connectionSettings->password);
settings.setValue(QStringLiteral("apiKey"), connectionSettings->apiKey);
settings.setValue(QStringLiteral("trafficPollInterval"), connectionSettings->trafficPollInterval);
settings.setValue(QStringLiteral("devStatsPollInterval"), connectionSettings->devStatsPollInterval);
settings.setValue(QStringLiteral("httpsCertPath"), connectionSettings->httpsCertPath);
}
settings.endArray();

View File

@ -32,6 +32,8 @@ struct ConnectionSettings {
QString userName;
QString password;
QByteArray apiKey;
int trafficPollInterval = 2000;
int devStatsPollInterval = 60000;
QString httpsCertPath;
QList<QSslError> expectedSslErrors;
bool loadHttpsCert();

View File

@ -77,7 +77,7 @@ void SingleInstance::readArgs()
socket->close();
socket->deleteLater();
// reconstruct argc argv array
// reconstruct argc and argv array
uint16 argc = BE::toUInt16(argData.get());
vector<const char *> args;
args.reserve(argc + 1);
@ -91,7 +91,7 @@ void SingleInstance::readArgs()
}
args.push_back(nullptr);
emit newInstance(static_cast<int>(argc), args.data());
emit newInstance(static_cast<int>(args.size() - 1), args.data());
}
}

View File

@ -137,6 +137,8 @@ SyncthingConnection::SyncthingConnection(const QString &syncthingUrl, const QByt
m_keepPolling(false),
m_reconnecting(false),
m_lastEventId(0),
m_trafficPollInterval(2000),
m_devStatsPollInterval(60000),
m_totalIncomingTraffic(0),
m_totalOutgoingTraffic(0),
m_totalIncomingRate(0),
@ -237,6 +239,8 @@ void SyncthingConnection::reconnect(Settings::ConnectionSettings &connectionSett
} else {
setCredentials(QString(), QString());
}
setTrafficPollInterval(connectionSettings.trafficPollInterval);
setDevStatsPollInterval(connectionSettings.devStatsPollInterval);
loadSelfSignedCertificate();
if(connectionSettings.expectedSslErrors.isEmpty()) {
connectionSettings.expectedSslErrors = expectedSslErrors();
@ -794,9 +798,9 @@ void SyncthingConnection::readConnections()
m_lastConnectionsUpdate = DateTime::gmtNow();
// since there seems no event for this data, just request every 2 seconds, FIXME: make interval configurable
// since there seems no event for this data, just request every 2 seconds
if(m_keepPolling) {
QTimer::singleShot(2000, Qt::VeryCoarseTimer, this, SLOT(requestConnections()));
QTimer::singleShot(m_trafficPollInterval, Qt::VeryCoarseTimer, this, &SyncthingConnection::requestConnections);
}
} else {
emit error(tr("Unable to parse connections: ") + jsonError.errorString());
@ -900,7 +904,7 @@ void SyncthingConnection::readDeviceStatistics()
}
// since there seems no event for this data, just request every minute, FIXME: make interval configurable
if(m_keepPolling) {
QTimer::singleShot(60000, Qt::VeryCoarseTimer, this, SLOT(requestConnections()));
QTimer::singleShot(m_devStatsPollInterval, Qt::VeryCoarseTimer, this, SLOT(requestConnections()));
}
} else {
emit error(tr("Unable to parse device statistics: ") + jsonError.errorString());
@ -1153,7 +1157,7 @@ void SyncthingConnection::readDirEvent(DateTime eventTime, const QString &eventT
dirInfo->progressPercentage = percentage;
}
} else if(eventType == QLatin1String("FolderScanProgress")) {
// FIXME: for some reason current is always 0
// FIXME: for some reason this is always 0
int current = eventData.value(QStringLiteral("current")).toInt(0),
total = eventData.value(QStringLiteral("total")).toInt(0),
rate = eventData.value(QStringLiteral("rate")).toInt(0);
@ -1193,7 +1197,8 @@ void SyncthingConnection::readDeviceEvent(DateTime eventTime, const QString &eve
status = DevStatus::Rejected;
} else if(eventType == QLatin1String("DeviceResumed")) {
paused = false;
status = DevStatus::Disconnected; // FIXME: correct to assume device which has just been resumed is still disconnected?
// FIXME: correct to assume device which has just been resumed is still disconnected?
status = DevStatus::Disconnected;
} else if(eventType == QLatin1String("DeviceDiscovered")) {
// we know about this device already, set status anyways because it might still be unknown
status = DevStatus::Disconnected;
@ -1243,7 +1248,8 @@ void SyncthingConnection::readItemFinished(DateTime eventTime, const QJsonObject
}
emit dirStatusChanged(*dirInfo, index);
}
} else if(dirInfo->status == DirStatus::OutOfSync) { // FIXME: find better way to check whether the event is still relevant
} else if(dirInfo->status == DirStatus::OutOfSync) {
// FIXME: find better way to check whether the event is still relevant
dirInfo->errors.emplace_back(error, item);
emitNotification(eventTime, error);
}

View File

@ -156,10 +156,14 @@ class 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(int trafficPollInterval READ trafficPollInterval WRITE setTrafficPollInterval)
Q_PROPERTY(int devStatsPollInterval READ devStatsPollInterval WRITE setDevStatsPollInterval)
Q_PROPERTY(QString configDir READ configDir NOTIFY configDirChanged)
Q_PROPERTY(QString myId READ myId NOTIFY myIdChanged)
Q_PROPERTY(int totalIncomingTraffic READ totalIncomingTraffic NOTIFY trafficChanged)
Q_PROPERTY(int totalOutgoingTraffic READ totalOutgoingTraffic NOTIFY trafficChanged)
Q_PROPERTY(double totalIncomingRate READ totalIncomingRate NOTIFY trafficChanged)
Q_PROPERTY(double totalOutgoingRate READ totalOutgoingRate NOTIFY trafficChanged)
public:
explicit SyncthingConnection(const QString &syncthingUrl = QStringLiteral("http://localhost:8080"), const QByteArray &apiKey = QByteArray(), QObject *parent = nullptr);
@ -175,6 +179,10 @@ public:
SyncthingStatus status() const;
QString statusText() const;
bool isConnected() const;
int trafficPollInterval() const;
void setTrafficPollInterval(int trafficPollInterval);
int devStatsPollInterval() const;
void setDevStatsPollInterval(int devStatsPollInterval);
const QString &configDir() const;
const QString &myId() const;
int totalIncomingTraffic() const;
@ -325,6 +333,8 @@ private:
bool m_keepPolling;
bool m_reconnecting;
int m_lastEventId;
int m_trafficPollInterval;
int m_devStatsPollInterval;
QString m_configDir;
QString m_myId;
int m_totalIncomingTraffic;
@ -421,6 +431,42 @@ inline bool SyncthingConnection::isConnected() const
return m_status != SyncthingStatus::Disconnected && m_status != SyncthingStatus::Reconnecting;
}
/*!
* \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.
*/
inline int SyncthingConnection::trafficPollInterval() const
{
return m_trafficPollInterval;
}
/*!
* \brief Sets the interval for polling traffic status (which currently can not be received via event API) in milliseconds.
* \remarks Default value is 2000 milliseconds.
*/
inline void SyncthingConnection::setTrafficPollInterval(int trafficPollInterval)
{
m_trafficPollInterval = trafficPollInterval;
}
/*!
* \brief Returns the interval for polling device statistics (which currently can not be received via event API) in milliseconds.
* \remarks Default value is 60000 milliseconds.
*/
inline int SyncthingConnection::devStatsPollInterval() const
{
return m_devStatsPollInterval;
}
/*!
* \brief Sets the interval for polling device statistics (which currently can not be received via event API) in milliseconds.
* \remarks Default value is 60000 milliseconds.
*/
inline void SyncthingConnection::setDevStatsPollInterval(int devStatsPollInterval)
{
m_devStatsPollInterval = devStatsPollInterval;
}
/*!
* \brief Returns the Syncthing home/configuration directory.
*/

View File

@ -10,6 +10,9 @@
<normaloff>.</normaloff>.</iconset>
</property>
<layout class="QFormLayout" name="formLayout">
<property name="verticalSpacing">
<number>4</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="instanceLabel">
<property name="font">
@ -97,6 +100,41 @@
</layout>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="instanceNoteLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>42</height>
</size>
</property>
<property name="text">
<string>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.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="Line" name="line1">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="urlLabel">
<property name="text">
@ -164,6 +202,23 @@
<item row="8" column="1">
<widget class="Widgets::ClearLineEdit" name="apiKeyLineEdit"/>
</item>
<item row="9" column="0">
<widget class="QLabel" name="certificateLabel">
<property name="text">
<string>HTTPS certificate</string>
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="Widgets::PathSelection" name="certPathSelection" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="11" column="1">
<widget class="QPushButton" name="insertFromConfigFilePushButton">
<property name="styleSheet">
@ -191,21 +246,21 @@
</property>
</widget>
</item>
<item row="13" column="0">
<item row="15" column="0">
<widget class="QLabel" name="statusTextLabel">
<property name="text">
<string>Status</string>
</property>
</widget>
</item>
<item row="13" column="1">
<item row="15" column="1">
<widget class="QLabel" name="statusLabel">
<property name="text">
<string>disconnected</string>
</property>
</widget>
</item>
<item row="14" column="1">
<item row="18" column="1">
<widget class="QPushButton" name="connectPushButton">
<property name="text">
<string>Apply connection settings and try to reconnect with the currently selected config</string>
@ -216,57 +271,69 @@
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="Line" name="line1">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="instanceNoteLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>42</height>
</size>
</property>
<item row="13" column="0">
<widget class="QLabel" name="pollLabel">
<property name="text">
<string>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.</string>
<string>Poll interval</string>
</property>
<property name="wordWrap">
<bool>true</bool>
<property name="margin">
<number>1</number>
</property>
</widget>
</item>
<item row="9" column="0">
<widget class="QLabel" name="certificateLabel">
<property name="text">
<string>HTTPS certificate</string>
<item row="13" column="1">
<layout class="QHBoxLayout" name="pollHorizontalLayout">
<property name="spacing">
<number>10</number>
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="Widgets::PathSelection" name="certPathSelection" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
<item>
<widget class="QLabel" name="pollTrafficLabel">
<property name="text">
<string>Traffic</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="pollTrafficSpinBox">
<property name="suffix">
<string> ms</string>
</property>
<property name="minimum">
<number>100</number>
</property>
<property name="maximum">
<number>999999999</number>
</property>
</widget>
</item>
<item>
<widget class="Line" name="line3">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="pollDevStatsLabel">
<property name="text">
<string>Device statistics</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="pollDevStatsSpinBox">
<property name="suffix">
<string> ms</string>
</property>
<property name="minimum">
<number>100</number>
</property>
<property name="maximum">
<number>999999999</number>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>

View File

@ -117,6 +117,8 @@ bool ConnectionOptionPage::showConnectionSettings(int index)
ui()->passwordLineEdit->setText(connectionSettings.password);
ui()->apiKeyLineEdit->setText(connectionSettings.apiKey);
ui()->certPathSelection->lineEdit()->setText(connectionSettings.httpsCertPath);
ui()->pollTrafficSpinBox->setValue(connectionSettings.trafficPollInterval);
ui()->pollDevStatsSpinBox->setValue(connectionSettings.devStatsPollInterval);
m_currentIndex = index;
} else {
ui()->selectionComboBox->setCurrentIndex(m_currentIndex);
@ -139,6 +141,8 @@ bool ConnectionOptionPage::cacheCurrentSettings(bool applying)
connectionSettings.apiKey = ui()->apiKeyLineEdit->text().toUtf8();
connectionSettings.expectedSslErrors.clear();
connectionSettings.httpsCertPath = ui()->certPathSelection->lineEdit()->text();
connectionSettings.trafficPollInterval = ui()->pollTrafficSpinBox->value();
connectionSettings.devStatsPollInterval = ui()->pollDevStatsSpinBox->value();
if(!connectionSettings.loadHttpsCert()) {
const QString errorMessage = QCoreApplication::translate("QtGui::ConnectionOptionPage", "Unable to load specified certificate \"%1\".").arg(connectionSettings.httpsCertPath);
if(!applying) {

View File

@ -25,11 +25,6 @@ TrayMenu::TrayMenu(QWidget *parent) :
setPlatformMenu(nullptr);
}
TrayMenu::~TrayMenu()
{
}
QSize TrayMenu::sizeHint() const
{
return Settings::trayMenuSize();

View File

@ -15,7 +15,6 @@ class TrayMenu : public QMenu
public:
TrayMenu(TrayIcon *trayIcon, QWidget *parent = nullptr);
TrayMenu(QWidget *parent = nullptr);
~TrayMenu();
QSize sizeHint() const;
TrayWidget *widget();

View File

@ -40,6 +40,8 @@ using namespace std;
namespace QtGui {
SettingsDialog *TrayWidget::m_settingsDlg = nullptr;
Dialogs::AboutDialog *TrayWidget::m_aboutDlg = nullptr;
vector<TrayWidget *> TrayWidget::m_instances;
/*!
@ -49,8 +51,6 @@ TrayWidget::TrayWidget(TrayMenu *parent) :
QWidget(parent),
m_menu(parent),
m_ui(new Ui::TrayWidget),
m_settingsDlg(nullptr),
m_aboutDlg(nullptr),
#ifndef SYNCTHINGTRAY_NO_WEBVIEW
m_webViewDlg(nullptr),
#endif
@ -146,7 +146,7 @@ void TrayWidget::showSettingsDialog()
{
if(!m_settingsDlg) {
m_settingsDlg = new SettingsDialog(&m_connection, this);
connect(m_settingsDlg, &SettingsDialog::applied, this, &TrayWidget::applySettings);
connect(m_settingsDlg, &SettingsDialog::applied, &TrayWidget::applySettings);
}
centerWidget(m_settingsDlg);
showDialog(m_settingsDlg);
@ -290,53 +290,56 @@ void TrayWidget::handleStatusChanged(SyncthingStatus status)
void TrayWidget::applySettings()
{
// update connections menu
int connectionIndex = 0;
const int connectionCount = static_cast<int>(1 + Settings::secondaryConnectionSettings().size());
const QList<QAction *> connectionActions = m_connectionsActionGroup->actions();
m_selectedConnection = nullptr;
for(; connectionIndex < connectionCount; ++connectionIndex) {
Settings::ConnectionSettings &connectionSettings = (connectionIndex == 0 ? Settings::primaryConnectionSettings() : Settings::secondaryConnectionSettings()[static_cast<size_t>(connectionIndex - 1)]);
if(connectionIndex < connectionActions.size()) {
QAction *action = connectionActions.at(connectionIndex);
action->setText(connectionSettings.label);
if(action->isChecked()) {
m_selectedConnection = &connectionSettings;
for(TrayWidget *instance : m_instances) {
// update connections menu
int connectionIndex = 0;
const int connectionCount = static_cast<int>(1 + Settings::secondaryConnectionSettings().size());
const QList<QAction *> connectionActions = instance->m_connectionsActionGroup->actions();
instance->m_selectedConnection = nullptr;
for(; connectionIndex < connectionCount; ++connectionIndex) {
Settings::ConnectionSettings &connectionSettings = (connectionIndex == 0 ? Settings::primaryConnectionSettings() : Settings::secondaryConnectionSettings()[static_cast<size_t>(connectionIndex - 1)]);
if(connectionIndex < connectionActions.size()) {
QAction *action = connectionActions.at(connectionIndex);
action->setText(connectionSettings.label);
if(action->isChecked()) {
instance->m_selectedConnection = &connectionSettings;
}
} else {
QAction *action = instance->m_connectionsMenu->addAction(connectionSettings.label);
action->setCheckable(true);
instance->m_connectionsActionGroup->addAction(action);
}
} else {
QAction *action = m_connectionsMenu->addAction(connectionSettings.label);
action->setCheckable(true);
m_connectionsActionGroup->addAction(action);
}
}
for(; connectionIndex < connectionActions.size(); ++connectionIndex) {
m_connectionsActionGroup->removeAction(connectionActions.at(connectionIndex));
}
if(!m_selectedConnection) {
m_selectedConnection = &Settings::primaryConnectionSettings();
m_connectionsMenu->actions().at(0)->setChecked(true);
}
for(; connectionIndex < connectionActions.size(); ++connectionIndex) {
delete connectionActions.at(connectionIndex);
}
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);
}
m_connection.reconnect(*m_selectedConnection);
instance->m_connection.reconnect(*instance->m_selectedConnection);
// web view
// web view
#ifndef SYNCTHINGTRAY_NO_WEBVIEW
if(m_webViewDlg) {
m_webViewDlg->applySettings(*m_selectedConnection);
}
if(instance->m_webViewDlg) {
instance->m_webViewDlg->applySettings(*instance->m_selectedConnection);
}
#endif
// update visual appearance
m_ui->trafficFormWidget->setVisible(Settings::showTraffic());
if(Settings::showTraffic()) {
updateTraffic();
}
m_ui->infoFrame->setFrameStyle(Settings::frameStyle());
m_ui->buttonsFrame->setFrameStyle(Settings::frameStyle());
if(QApplication::style() && !QApplication::style()->objectName().compare(QLatin1String("adwaita"), Qt::CaseInsensitive)) {
m_cornerFrame->setFrameStyle(QFrame::NoFrame);
} else {
m_cornerFrame->setFrameStyle(Settings::frameStyle());
// update visual appearance
instance->m_ui->trafficFormWidget->setVisible(Settings::showTraffic());
if(Settings::showTraffic()) {
instance->updateTraffic();
}
instance->m_ui->infoFrame->setFrameStyle(Settings::frameStyle());
instance->m_ui->buttonsFrame->setFrameStyle(Settings::frameStyle());
if(QApplication::style() && !QApplication::style()->objectName().compare(QLatin1String("adwaita"), Qt::CaseInsensitive)) {
instance->m_cornerFrame->setFrameStyle(QFrame::NoFrame);
} else {
instance->m_cornerFrame->setFrameStyle(Settings::frameStyle());
}
}
}

View File

@ -59,7 +59,7 @@ public slots:
private slots:
void handleStatusChanged(Data::SyncthingStatus status);
void applySettings();
static void applySettings();
void openDir(const Data::SyncthingDir &dir);
void openItemDir(const Data::SyncthingItemDownloadProgress &item);
void scanDir(const Data::SyncthingDir &dir);
@ -76,8 +76,8 @@ private slots:
private:
TrayMenu *m_menu;
std::unique_ptr<Ui::TrayWidget> m_ui;
SettingsDialog *m_settingsDlg;
Dialogs::AboutDialog *m_aboutDlg;
static SettingsDialog *m_settingsDlg;
static Dialogs::AboutDialog *m_aboutDlg;
#ifndef SYNCTHINGTRAY_NO_WEBVIEW
WebViewDialog *m_webViewDlg;
#endif

View File

@ -4,145 +4,145 @@
<context>
<name>Data::SyncthingConnection</name>
<message>
<location filename="../data/syncthingconnection.cpp" line="170"/>
<location filename="../data/syncthingconnection.cpp" line="172"/>
<source>disconnected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="172"/>
<location filename="../data/syncthingconnection.cpp" line="174"/>
<source>reconnecting</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="174"/>
<location filename="../data/syncthingconnection.cpp" line="176"/>
<source>connected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="176"/>
<location filename="../data/syncthingconnection.cpp" line="178"/>
<source>connected, notifications available</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="178"/>
<location filename="../data/syncthingconnection.cpp" line="180"/>
<source>connected, paused</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="180"/>
<location filename="../data/syncthingconnection.cpp" line="182"/>
<source>connected, synchronizing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="182"/>
<location filename="../data/syncthingconnection.cpp" line="184"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="194"/>
<location filename="../data/syncthingconnection.cpp" line="274"/>
<location filename="../data/syncthingconnection.cpp" line="196"/>
<location filename="../data/syncthingconnection.cpp" line="278"/>
<source>Connection configuration is insufficient.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="554"/>
<location filename="../data/syncthingconnection.cpp" line="558"/>
<source>Unable to parse Syncthing log: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="558"/>
<location filename="../data/syncthingconnection.cpp" line="562"/>
<source>Unable to request system log: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="580"/>
<location filename="../data/syncthingconnection.cpp" line="584"/>
<source>Unable to locate certificate used by Syncthing GUI.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="586"/>
<location filename="../data/syncthingconnection.cpp" line="590"/>
<source>Unable to load certificate used by Syncthing GUI.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="619"/>
<location filename="../data/syncthingconnection.cpp" line="721"/>
<location filename="../data/syncthingconnection.cpp" line="623"/>
<location filename="../data/syncthingconnection.cpp" line="725"/>
<source>Unable to parse Syncthing config: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="625"/>
<location filename="../data/syncthingconnection.cpp" line="727"/>
<location filename="../data/syncthingconnection.cpp" line="629"/>
<location filename="../data/syncthingconnection.cpp" line="731"/>
<source>Unable to request Syncthing config: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="802"/>
<location filename="../data/syncthingconnection.cpp" line="806"/>
<source>Unable to parse connections: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="808"/>
<location filename="../data/syncthingconnection.cpp" line="812"/>
<source>Unable to request connections: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="863"/>
<location filename="../data/syncthingconnection.cpp" line="867"/>
<source>Unable to parse directory statistics: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="869"/>
<location filename="../data/syncthingconnection.cpp" line="873"/>
<source>Unable to request directory statistics: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="906"/>
<location filename="../data/syncthingconnection.cpp" line="910"/>
<source>Unable to parse device statistics: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="912"/>
<location filename="../data/syncthingconnection.cpp" line="916"/>
<source>Unable to request device statistics: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="947"/>
<location filename="../data/syncthingconnection.cpp" line="951"/>
<source>Unable to parse errors: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="958"/>
<location filename="../data/syncthingconnection.cpp" line="962"/>
<source>Unable to request errors: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="1009"/>
<location filename="../data/syncthingconnection.cpp" line="1013"/>
<source>Unable to parse Syncthing events: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="1028"/>
<location filename="../data/syncthingconnection.cpp" line="1032"/>
<source>Unable to request Syncthing events: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="1265"/>
<location filename="../data/syncthingconnection.cpp" line="1271"/>
<source>Unable to request rescan: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="1280"/>
<location filename="../data/syncthingconnection.cpp" line="1286"/>
<source>Unable to request pause/resume: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="1295"/>
<location filename="../data/syncthingconnection.cpp" line="1301"/>
<source>Unable to request restart: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="525"/>
<location filename="../data/syncthingconnection.cpp" line="529"/>
<source>Unable to request QR-Code: </source>
<translation type="unfinished"></translation>
</message>
@ -478,22 +478,22 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="314"/>
<location filename="../gui/settingsdialog.cpp" line="318"/>
<source>This is achieved by adding a *.desktop file under &lt;i&gt;~/.config/autostart&lt;/i&gt; so the setting only affects the current user.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="316"/>
<location filename="../gui/settingsdialog.cpp" line="320"/>
<source>This is achieved by adding a registry key under &lt;i&gt;HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run&lt;/i&gt; so the setting only affects the current user. Note that the startup entry is invalidated when moving &lt;i&gt;syncthingtray.exe&lt;/i&gt;.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="318"/>
<location filename="../gui/settingsdialog.cpp" line="322"/>
<source>This feature has not been implemented for your platform (yet).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="405"/>
<location filename="../gui/settingsdialog.cpp" line="409"/>
<source>unable to modify startup entry</source>
<translation type="unfinished"></translation>
</message>
@ -506,72 +506,93 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="22"/>
<location filename="../gui/connectionoptionpage.ui" line="25"/>
<source>Config label</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="72"/>
<location filename="../gui/connectionoptionpage.ui" line="75"/>
<source>Add secondary instance</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="89"/>
<location filename="../gui/connectionoptionpage.ui" line="92"/>
<source>Remove currently selected secondary instance</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="103"/>
<location filename="../gui/connectionoptionpage.ui" line="141"/>
<source>Syncthing URL</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="113"/>
<location filename="../gui/connectionoptionpage.ui" line="151"/>
<source>Authentication</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="126"/>
<location filename="../gui/connectionoptionpage.ui" line="164"/>
<source>User</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="204"/>
<location filename="../gui/connectionoptionpage.ui" line="259"/>
<source>disconnected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="211"/>
<location filename="../gui/connectionoptionpage.ui" line="277"/>
<source>Poll interval</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="247"/>
<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="257"/>
<location filename="../gui/connectionoptionpage.ui" line="208"/>
<source>HTTPS certificate</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="197"/>
<location filename="../gui/connectionoptionpage.ui" line="252"/>
<source>Status</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="160"/>
<location filename="../gui/connectionoptionpage.ui" line="198"/>
<source>API key</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="173"/>
<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="143"/>
<location filename="../gui/connectionoptionpage.ui" line="181"/>
<source>Password</source>
<translation type="unfinished"></translation>
</message>
@ -591,12 +612,12 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="143"/>
<location filename="../gui/settingsdialog.cpp" line="147"/>
<source>Unable to load specified certificate &quot;%1&quot;.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="167"/>
<location filename="../gui/settingsdialog.cpp" line="171"/>
<source>Instance %1</source>
<translation type="unfinished"></translation>
</message>
@ -698,13 +719,13 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="485"/>
<location filename="../gui/settingsdialog.cpp" line="489"/>
<source>Syncthing existed with exit code %1
</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="488"/>
<location filename="../gui/settingsdialog.cpp" line="492"/>
<source>Syncthing crashed with exit code %1
</source>
<translation type="unfinished"></translation>
@ -746,22 +767,22 @@
<context>
<name>QtGui::SettingsDialog</name>
<message>
<location filename="../gui/settingsdialog.cpp" line="573"/>
<location filename="../gui/settingsdialog.cpp" line="577"/>
<source>Tray</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="585"/>
<location filename="../gui/settingsdialog.cpp" line="589"/>
<source>Startup</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="595"/>
<location filename="../gui/settingsdialog.cpp" line="599"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="579"/>
<location filename="../gui/settingsdialog.cpp" line="583"/>
<source>Web view</source>
<translation type="unfinished"></translation>
</message>
@ -896,7 +917,7 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<message>
<location filename="../gui/traywidget.ui" line="230"/>
<location filename="../gui/traywidget.ui" line="250"/>
<location filename="../gui/traywidget.cpp" line="400"/>
<location filename="../gui/traywidget.cpp" line="403"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
@ -998,12 +1019,12 @@ 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="348"/>
<location filename="../gui/traywidget.cpp" line="351"/>
<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="357"/>
<location filename="../gui/traywidget.cpp" line="360"/>
<source>The file &lt;i&gt;%1&lt;/i&gt; does not exist on the local machine.</source>
<translation type="unfinished"></translation>
</message>
@ -1035,7 +1056,7 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<name>QtGui::WebViewOptionPage</name>
<message>
<location filename="../gui/webviewoptionpage.ui" line="14"/>
<location filename="../gui/settingsdialog.cpp" line="535"/>
<location filename="../gui/settingsdialog.cpp" line="539"/>
<source>General</source>
<translation type="unfinished"></translation>
</message>
@ -1065,7 +1086,7 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="537"/>
<location filename="../gui/settingsdialog.cpp" line="541"/>
<source>Syncthing Tray has not been built with vieb view support utilizing either Qt WebKit or Qt WebEngine.
The Web UI will be opened in the default web browser instead.</source>
<translation type="unfinished"></translation>
@ -1074,7 +1095,7 @@ The Web UI will be opened in the default web browser instead.</source>
<context>
<name>Settings::restore</name>
<message>
<location filename="../application/settings.cpp" line="159"/>
<location filename="../application/settings.cpp" line="161"/>
<source>Unable to load certificate &quot;%1&quot; when restoring settings.</source>
<translation type="unfinished"></translation>
</message>

View File

@ -4,145 +4,145 @@
<context>
<name>Data::SyncthingConnection</name>
<message>
<location filename="../data/syncthingconnection.cpp" line="170"/>
<location filename="../data/syncthingconnection.cpp" line="172"/>
<source>disconnected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="172"/>
<location filename="../data/syncthingconnection.cpp" line="174"/>
<source>reconnecting</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="174"/>
<location filename="../data/syncthingconnection.cpp" line="176"/>
<source>connected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="176"/>
<location filename="../data/syncthingconnection.cpp" line="178"/>
<source>connected, notifications available</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="178"/>
<location filename="../data/syncthingconnection.cpp" line="180"/>
<source>connected, paused</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="180"/>
<location filename="../data/syncthingconnection.cpp" line="182"/>
<source>connected, synchronizing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="182"/>
<location filename="../data/syncthingconnection.cpp" line="184"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="194"/>
<location filename="../data/syncthingconnection.cpp" line="274"/>
<location filename="../data/syncthingconnection.cpp" line="196"/>
<location filename="../data/syncthingconnection.cpp" line="278"/>
<source>Connection configuration is insufficient.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="554"/>
<location filename="../data/syncthingconnection.cpp" line="558"/>
<source>Unable to parse Syncthing log: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="558"/>
<location filename="../data/syncthingconnection.cpp" line="562"/>
<source>Unable to request system log: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="580"/>
<location filename="../data/syncthingconnection.cpp" line="584"/>
<source>Unable to locate certificate used by Syncthing GUI.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="586"/>
<location filename="../data/syncthingconnection.cpp" line="590"/>
<source>Unable to load certificate used by Syncthing GUI.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="619"/>
<location filename="../data/syncthingconnection.cpp" line="721"/>
<location filename="../data/syncthingconnection.cpp" line="623"/>
<location filename="../data/syncthingconnection.cpp" line="725"/>
<source>Unable to parse Syncthing config: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="625"/>
<location filename="../data/syncthingconnection.cpp" line="727"/>
<location filename="../data/syncthingconnection.cpp" line="629"/>
<location filename="../data/syncthingconnection.cpp" line="731"/>
<source>Unable to request Syncthing config: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="802"/>
<location filename="../data/syncthingconnection.cpp" line="806"/>
<source>Unable to parse connections: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="808"/>
<location filename="../data/syncthingconnection.cpp" line="812"/>
<source>Unable to request connections: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="863"/>
<location filename="../data/syncthingconnection.cpp" line="867"/>
<source>Unable to parse directory statistics: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="869"/>
<location filename="../data/syncthingconnection.cpp" line="873"/>
<source>Unable to request directory statistics: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="906"/>
<location filename="../data/syncthingconnection.cpp" line="910"/>
<source>Unable to parse device statistics: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="912"/>
<location filename="../data/syncthingconnection.cpp" line="916"/>
<source>Unable to request device statistics: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="947"/>
<location filename="../data/syncthingconnection.cpp" line="951"/>
<source>Unable to parse errors: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="958"/>
<location filename="../data/syncthingconnection.cpp" line="962"/>
<source>Unable to request errors: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="1009"/>
<location filename="../data/syncthingconnection.cpp" line="1013"/>
<source>Unable to parse Syncthing events: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="1028"/>
<location filename="../data/syncthingconnection.cpp" line="1032"/>
<source>Unable to request Syncthing events: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="1265"/>
<location filename="../data/syncthingconnection.cpp" line="1271"/>
<source>Unable to request rescan: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="1280"/>
<location filename="../data/syncthingconnection.cpp" line="1286"/>
<source>Unable to request pause/resume: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="1295"/>
<location filename="../data/syncthingconnection.cpp" line="1301"/>
<source>Unable to request restart: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="525"/>
<location filename="../data/syncthingconnection.cpp" line="529"/>
<source>Unable to request QR-Code: </source>
<translation type="unfinished"></translation>
</message>
@ -478,22 +478,22 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="314"/>
<location filename="../gui/settingsdialog.cpp" line="318"/>
<source>This is achieved by adding a *.desktop file under &lt;i&gt;~/.config/autostart&lt;/i&gt; so the setting only affects the current user.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="316"/>
<location filename="../gui/settingsdialog.cpp" line="320"/>
<source>This is achieved by adding a registry key under &lt;i&gt;HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run&lt;/i&gt; so the setting only affects the current user. Note that the startup entry is invalidated when moving &lt;i&gt;syncthingtray.exe&lt;/i&gt;.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="318"/>
<location filename="../gui/settingsdialog.cpp" line="322"/>
<source>This feature has not been implemented for your platform (yet).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="405"/>
<location filename="../gui/settingsdialog.cpp" line="409"/>
<source>unable to modify startup entry</source>
<translation type="unfinished"></translation>
</message>
@ -506,72 +506,93 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="22"/>
<location filename="../gui/connectionoptionpage.ui" line="25"/>
<source>Config label</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="72"/>
<location filename="../gui/connectionoptionpage.ui" line="75"/>
<source>Add secondary instance</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="89"/>
<location filename="../gui/connectionoptionpage.ui" line="92"/>
<source>Remove currently selected secondary instance</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="103"/>
<location filename="../gui/connectionoptionpage.ui" line="141"/>
<source>Syncthing URL</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="113"/>
<location filename="../gui/connectionoptionpage.ui" line="151"/>
<source>Authentication</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="126"/>
<location filename="../gui/connectionoptionpage.ui" line="164"/>
<source>User</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="204"/>
<location filename="../gui/connectionoptionpage.ui" line="259"/>
<source>disconnected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="211"/>
<location filename="../gui/connectionoptionpage.ui" line="277"/>
<source>Poll interval</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="247"/>
<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="257"/>
<location filename="../gui/connectionoptionpage.ui" line="208"/>
<source>HTTPS certificate</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="197"/>
<location filename="../gui/connectionoptionpage.ui" line="252"/>
<source>Status</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="160"/>
<location filename="../gui/connectionoptionpage.ui" line="198"/>
<source>API key</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/connectionoptionpage.ui" line="173"/>
<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="143"/>
<location filename="../gui/connectionoptionpage.ui" line="181"/>
<source>Password</source>
<translation type="unfinished"></translation>
</message>
@ -591,12 +612,12 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="143"/>
<location filename="../gui/settingsdialog.cpp" line="147"/>
<source>Unable to load specified certificate &quot;%1&quot;.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="167"/>
<location filename="../gui/settingsdialog.cpp" line="171"/>
<source>Instance %1</source>
<translation type="unfinished"></translation>
</message>
@ -698,13 +719,13 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="485"/>
<location filename="../gui/settingsdialog.cpp" line="489"/>
<source>Syncthing existed with exit code %1
</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="488"/>
<location filename="../gui/settingsdialog.cpp" line="492"/>
<source>Syncthing crashed with exit code %1
</source>
<translation type="unfinished"></translation>
@ -746,22 +767,22 @@
<context>
<name>QtGui::SettingsDialog</name>
<message>
<location filename="../gui/settingsdialog.cpp" line="573"/>
<location filename="../gui/settingsdialog.cpp" line="577"/>
<source>Tray</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="585"/>
<location filename="../gui/settingsdialog.cpp" line="589"/>
<source>Startup</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="595"/>
<location filename="../gui/settingsdialog.cpp" line="599"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="579"/>
<location filename="../gui/settingsdialog.cpp" line="583"/>
<source>Web view</source>
<translation type="unfinished"></translation>
</message>
@ -896,7 +917,7 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<message>
<location filename="../gui/traywidget.ui" line="230"/>
<location filename="../gui/traywidget.ui" line="250"/>
<location filename="../gui/traywidget.cpp" line="400"/>
<location filename="../gui/traywidget.cpp" line="403"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
@ -998,12 +1019,12 @@ 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="348"/>
<location filename="../gui/traywidget.cpp" line="351"/>
<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="357"/>
<location filename="../gui/traywidget.cpp" line="360"/>
<source>The file &lt;i&gt;%1&lt;/i&gt; does not exist on the local machine.</source>
<translation type="unfinished"></translation>
</message>
@ -1035,7 +1056,7 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<name>QtGui::WebViewOptionPage</name>
<message>
<location filename="../gui/webviewoptionpage.ui" line="14"/>
<location filename="../gui/settingsdialog.cpp" line="535"/>
<location filename="../gui/settingsdialog.cpp" line="539"/>
<source>General</source>
<translation type="unfinished"></translation>
</message>
@ -1065,7 +1086,7 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/settingsdialog.cpp" line="537"/>
<location filename="../gui/settingsdialog.cpp" line="541"/>
<source>Syncthing Tray has not been built with vieb view support utilizing either Qt WebKit or Qt WebEngine.
The Web UI will be opened in the default web browser instead.</source>
<translation type="unfinished"></translation>
@ -1074,7 +1095,7 @@ The Web UI will be opened in the default web browser instead.</source>
<context>
<name>Settings::restore</name>
<message>
<location filename="../application/settings.cpp" line="159"/>
<location filename="../application/settings.cpp" line="161"/>
<source>Unable to load certificate &quot;%1&quot; when restoring settings.</source>
<translation type="unfinished"></translation>
</message>