From 408f77f84428df945968778658f9a1d9a9e1f4b5 Mon Sep 17 00:00:00 2001 From: Martchus Date: Thu, 7 Sep 2017 16:42:24 +0200 Subject: [PATCH] Allow moving connection configurations up and down --- .../translations/syncthingconnector_de_DE.ts | 80 ++--- .../translations/syncthingconnector_en_US.ts | 80 ++--- widgets/settings/connectionoptionpage.ui | 34 +- widgets/settings/settingsdialog.cpp | 306 +++++++++++------- widgets/settings/settingsdialog.h | 9 +- .../translations/syncthingwidgets_de_DE.ts | 110 ++++--- .../translations/syncthingwidgets_en_US.ts | 106 +++--- 7 files changed, 430 insertions(+), 295 deletions(-) diff --git a/connector/translations/syncthingconnector_de_DE.ts b/connector/translations/syncthingconnector_de_DE.ts index 8e66b56..85b7eea 100644 --- a/connector/translations/syncthingconnector_de_DE.ts +++ b/connector/translations/syncthingconnector_de_DE.ts @@ -4,194 +4,194 @@ Data::SyncthingConnection - + disconnected Verbindung getrennt - + reconnecting Verbindung wird hergestellt - + connected verbunden - + connected, scanning verbunden, scannt - + connected, paused verbunden, pausiert - + connected, synchronizing verbunden, am Synchronisieren - + connected, out of sync verbunden, nicht synchronisiert - + unknown Verbindungsstatus unbekannt - - + + Connection configuration is insufficient. Verbindungskonfiguration is ungenügend - + Unable to pause/resume a devices when not connected Fehler beim Anfordern Verzeichnis zu Pausieren/Fortzusetzen - + Unable to pause/resume a directories when not connected Fehler beim Anfordern Gerät zu Pausieren/Fortzusetzen - + Unable to request QR-Code: Fehler beim Abfragen des QR-Codes: - + Unable to parse Syncthing log: Fehler beim Auslesen des Syncthing-Logs: - + Unable to request Syncthing log: Fehler beim Abfragen des Syncthing-Logs: - + Unable to locate certificate used by Syncthing. Das SSL-Zertifikat von Syncthing kann nicht gefunden werden. - + Unable to load certificate used by Syncthing. Das SSL-Zertifikat von Syncthing kann nicht ausgelesen werden. - + Unable to parse Syncthing config: Fehler beim Auslesen der Syncthing-Konfiguration: - + Unable to request Syncthing config: Fehler beim Abfragen der Syncthing-Konfiguration: - + Unable to parse Syncthing status: Fehler beim Auslesen des Syncthing-Status: - + Unable to request Syncthing status: Fehler beim Abfragen des Syncthing-Status: - + Unable to parse connections: Fehler beim Auslesen der Verbindungen: - + Unable to request connections: Fehler beim Abfragen der Verbindungen: - + Unable to parse directory statistics: Fehler beim Auslesen der Verzeichnisstatistiken: - - + + Unable to request directory statistics: Fehler beim Abfragen der Verzeichnisstatistiken: - + Unable to parse device statistics: Fehler beim Auslesen der Gerätestatistiken: - + Unable to request device statistics: Fehler beim Abfragen der Gerätestatistiken: - + Unable to parse errors: Fehler beim Auslesen der Syncthing-Fehlermeldungen: - + Unable to request errors: Fehler beim Abfragen der Syncthing-Fehlermeldungen: - + Unable to request clearing errors: Fehler beim Löschen der Fehlermeldungen: - + Unable to parse Syncthing events: Fehler beim Auslesen der Syncthing-Ereignisse: - + Unable to request Syncthing events: Fehler beim Abfragen der Syncthing-Ereignisse: - + Unable to request rescan: Fehler beim Anfordern eines Verzeichnis-Rescans: - + Unable to request device pause/resume: Fehler beim Anfordern Gerät zu Pausieren/Fortzusetzen: - + Unable to request directory pause/resume: Fehler beim Anfordern Verzeichnis zu Pausieren/Fortzusetzen: - + Unable to request restart: Fehler beim Anfordern eines Neustarts: - + Unable to request shutdown: Fehler beim Anfordern Syncthing zu beenden: - + Unable to parse status for directory %1: Fehler beim Anfordern des Status von Verzeichnis %1: - + at offset %1 bei Zeichen %1 diff --git a/connector/translations/syncthingconnector_en_US.ts b/connector/translations/syncthingconnector_en_US.ts index f310f2a..4e30a11 100644 --- a/connector/translations/syncthingconnector_en_US.ts +++ b/connector/translations/syncthingconnector_en_US.ts @@ -4,194 +4,194 @@ Data::SyncthingConnection - + disconnected - + reconnecting - + connected - + connected, scanning - + connected, paused - + connected, synchronizing - + connected, out of sync - + unknown - - + + Connection configuration is insufficient. - + Unable to pause/resume a devices when not connected - + Unable to pause/resume a directories when not connected - + Unable to request QR-Code: - + Unable to parse Syncthing log: - + Unable to request Syncthing log: - + Unable to locate certificate used by Syncthing. - + Unable to load certificate used by Syncthing. - + Unable to parse Syncthing config: - + Unable to request Syncthing config: - + Unable to parse Syncthing status: - + Unable to request Syncthing status: - + Unable to parse connections: - + Unable to request connections: - + Unable to parse directory statistics: - - + + Unable to request directory statistics: - + Unable to parse device statistics: - + Unable to request device statistics: - + Unable to parse errors: - + Unable to request errors: - + Unable to request clearing errors: - + Unable to parse Syncthing events: - + Unable to request Syncthing events: - + Unable to request rescan: - + Unable to request device pause/resume: - + Unable to request directory pause/resume: - + Unable to request restart: - + Unable to request shutdown: - + Unable to parse status for directory %1: - + at offset %1 diff --git a/widgets/settings/connectionoptionpage.ui b/widgets/settings/connectionoptionpage.ui index 8be5559..6e3a95d 100644 --- a/widgets/settings/connectionoptionpage.ui +++ b/widgets/settings/connectionoptionpage.ui @@ -63,6 +63,38 @@ + + + + + 0 + 0 + + + + Move currently selected configuration down + + + + + + + + + + + 0 + 0 + + + + Move currently selected configuration up + + + + + + @@ -119,7 +151,7 @@ - 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. + 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. The first configuration is the primary/default configuration. true diff --git a/widgets/settings/settingsdialog.cpp b/widgets/settings/settingsdialog.cpp index 2e8ebda..2ab1e61 100644 --- a/widgets/settings/settingsdialog.cpp +++ b/widgets/settings/settingsdialog.cpp @@ -84,49 +84,52 @@ QWidget *ConnectionOptionPage::setupWidget() QObject::connect(ui()->selectionComboBox, static_cast(&QComboBox::currentIndexChanged), bind(&ConnectionOptionPage::showConnectionSettings, this, _1)); QObject::connect(ui()->selectionComboBox, static_cast(&QComboBox::editTextChanged), - bind(&ConnectionOptionPage::saveCurrentConnectionName, this, _1)); - QObject::connect(ui()->addPushButton, &QPushButton::clicked, bind(&ConnectionOptionPage::addConnectionSettings, this)); - QObject::connect(ui()->removePushButton, &QPushButton::clicked, bind(&ConnectionOptionPage::removeConnectionSettings, this)); + bind(&ConnectionOptionPage::saveCurrentConfigName, this, _1)); + QObject::connect(ui()->downPushButton, &QPushButton::clicked, bind(&ConnectionOptionPage::moveSelectedConfigDown, this)); + QObject::connect(ui()->upPushButton, &QPushButton::clicked, bind(&ConnectionOptionPage::moveSelectedConfigUp, this)); + QObject::connect(ui()->addPushButton, &QPushButton::clicked, bind(&ConnectionOptionPage::addNewConfig, this)); + QObject::connect(ui()->removePushButton, &QPushButton::clicked, bind(&ConnectionOptionPage::removeSelectedConfig, this)); return w; } void ConnectionOptionPage::insertFromConfigFile() { - if (hasBeenShown()) { - QString configFile = SyncthingConfig::locateConfigFile(); - if (configFile.isEmpty()) { - // allow user to select config file manually if it could not be located - configFile = QFileDialog::getOpenFileName(widget(), - QCoreApplication::translate("QtGui::ConnectionOptionPage", "Select Syncthing config file") + QStringLiteral(" - " APP_NAME)); - } - if (configFile.isEmpty()) { - return; - } - SyncthingConfig config; - if (!config.restore(configFile)) { - QMessageBox::critical(widget(), widget()->windowTitle() + QStringLiteral(" - " APP_NAME), - QCoreApplication::translate("QtGui::ConnectionOptionPage", "Unable to parse the Syncthing config file.")); - return; - } - if (!config.guiAddress.isEmpty()) { - ui()->urlLineEdit->selectAll(); - ui()->urlLineEdit->insert( - ((config.guiEnforcesSecureConnection || !QHostAddress(config.guiAddress.mid(0, config.guiAddress.indexOf(QChar(':')))).isLoopback()) - ? QStringLiteral("https://") - : QStringLiteral("http://")) - + config.guiAddress); - } - if (!config.guiUser.isEmpty() || !config.guiPasswordHash.isEmpty()) { - ui()->authCheckBox->setChecked(true); - ui()->userNameLineEdit->selectAll(); - ui()->userNameLineEdit->insert(config.guiUser); - } else { - ui()->authCheckBox->setChecked(false); - } - if (!config.guiApiKey.isEmpty()) { - ui()->apiKeyLineEdit->selectAll(); - ui()->apiKeyLineEdit->insert(config.guiApiKey); - } + if (!hasBeenShown()) { + return; + } + QString configFile = SyncthingConfig::locateConfigFile(); + if (configFile.isEmpty()) { + // allow user to select config file manually if it could not be located + configFile = QFileDialog::getOpenFileName( + widget(), QCoreApplication::translate("QtGui::ConnectionOptionPage", "Select Syncthing config file") + QStringLiteral(" - " APP_NAME)); + } + if (configFile.isEmpty()) { + return; + } + SyncthingConfig config; + if (!config.restore(configFile)) { + QMessageBox::critical(widget(), widget()->windowTitle() + QStringLiteral(" - " APP_NAME), + QCoreApplication::translate("QtGui::ConnectionOptionPage", "Unable to parse the Syncthing config file.")); + return; + } + if (!config.guiAddress.isEmpty()) { + ui()->urlLineEdit->selectAll(); + ui()->urlLineEdit->insert( + ((config.guiEnforcesSecureConnection || !QHostAddress(config.guiAddress.mid(0, config.guiAddress.indexOf(QChar(':')))).isLoopback()) + ? QStringLiteral("https://") + : QStringLiteral("http://")) + + config.guiAddress); + } + if (!config.guiUser.isEmpty() || !config.guiPasswordHash.isEmpty()) { + ui()->authCheckBox->setChecked(true); + ui()->userNameLineEdit->selectAll(); + ui()->userNameLineEdit->insert(config.guiUser); + } else { + ui()->authCheckBox->setChecked(false); + } + if (!config.guiApiKey.isEmpty()) { + ui()->apiKeyLineEdit->selectAll(); + ui()->apiKeyLineEdit->insert(config.guiApiKey); } } @@ -139,62 +142,61 @@ void ConnectionOptionPage::updateConnectionStatus() bool ConnectionOptionPage::showConnectionSettings(int index) { - bool ok = true; - if (index != m_currentIndex) { - if ((ok = cacheCurrentSettings(false))) { - const SyncthingConnectionSettings &connectionSettings - = (index == 0 ? m_primarySettings : m_secondarySettings[static_cast(index - 1)]); - ui()->urlLineEdit->setText(connectionSettings.syncthingUrl); - ui()->authCheckBox->setChecked(connectionSettings.authEnabled); - ui()->userNameLineEdit->setText(connectionSettings.userName); - 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); - ui()->pollErrorsSpinBox->setValue(connectionSettings.errorsPollInterval); - ui()->reconnectSpinBox->setValue(connectionSettings.reconnectInterval); - m_currentIndex = index; - } else { - ui()->selectionComboBox->setCurrentIndex(m_currentIndex); - } + if (index == m_currentIndex) { + return true; } - ui()->removePushButton->setEnabled(index); - return ok; + if (!cacheCurrentSettings(false)) { + ui()->selectionComboBox->setCurrentIndex(m_currentIndex); + return false; + } + const SyncthingConnectionSettings &connectionSettings = (index == 0 ? m_primarySettings : m_secondarySettings[static_cast(index - 1)]); + ui()->urlLineEdit->setText(connectionSettings.syncthingUrl); + ui()->authCheckBox->setChecked(connectionSettings.authEnabled); + ui()->userNameLineEdit->setText(connectionSettings.userName); + 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); + ui()->pollErrorsSpinBox->setValue(connectionSettings.errorsPollInterval); + ui()->reconnectSpinBox->setValue(connectionSettings.reconnectInterval); + setCurrentIndex(index); + return true; } bool ConnectionOptionPage::cacheCurrentSettings(bool applying) { - bool ok = true; - if (m_currentIndex >= 0) { - SyncthingConnectionSettings &connectionSettings - = (m_currentIndex == 0 ? m_primarySettings : m_secondarySettings[static_cast(m_currentIndex - 1)]); - connectionSettings.syncthingUrl = ui()->urlLineEdit->text(); - connectionSettings.authEnabled = ui()->authCheckBox->isChecked(); - connectionSettings.userName = ui()->userNameLineEdit->text(); - connectionSettings.password = ui()->passwordLineEdit->text(); - 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(); - connectionSettings.errorsPollInterval = ui()->pollErrorsSpinBox->value(); - connectionSettings.reconnectInterval = ui()->reconnectSpinBox->value(); - if (!connectionSettings.loadHttpsCert()) { - const QString errorMessage = QCoreApplication::translate("QtGui::ConnectionOptionPage", "Unable to load specified certificate \"%1\".") - .arg(connectionSettings.httpsCertPath); - if (!applying) { - QMessageBox::critical(widget(), QCoreApplication::applicationName(), errorMessage); - } else { - errors() << errorMessage; - } - ok = false; - } + if (m_currentIndex < 0) { + return true; } - return ok; + + SyncthingConnectionSettings &connectionSettings + = (m_currentIndex == 0 ? m_primarySettings : m_secondarySettings[static_cast(m_currentIndex - 1)]); + connectionSettings.syncthingUrl = ui()->urlLineEdit->text(); + connectionSettings.authEnabled = ui()->authCheckBox->isChecked(); + connectionSettings.userName = ui()->userNameLineEdit->text(); + connectionSettings.password = ui()->passwordLineEdit->text(); + 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(); + connectionSettings.errorsPollInterval = ui()->pollErrorsSpinBox->value(); + connectionSettings.reconnectInterval = ui()->reconnectSpinBox->value(); + if (!connectionSettings.loadHttpsCert()) { + const QString errorMessage = QCoreApplication::translate("QtGui::ConnectionOptionPage", "Unable to load specified certificate \"%1\".") + .arg(connectionSettings.httpsCertPath); + if (!applying) { + QMessageBox::critical(widget(), QCoreApplication::applicationName(), errorMessage); + } else { + errors() << errorMessage; + } + return false; + } + return true; } -void ConnectionOptionPage::saveCurrentConnectionName(const QString &name) +void ConnectionOptionPage::saveCurrentConfigName(const QString &name) { const int index = ui()->selectionComboBox->currentIndex(); if (index == m_currentIndex && index >= 0) { @@ -203,55 +205,129 @@ void ConnectionOptionPage::saveCurrentConnectionName(const QString &name) } } -void ConnectionOptionPage::addConnectionSettings() +void ConnectionOptionPage::addNewConfig() { m_secondarySettings.emplace_back(); m_secondarySettings.back().label = QCoreApplication::translate("QtGui::ConnectionOptionPage", "Instance %1").arg(ui()->selectionComboBox->count() + 1); ui()->selectionComboBox->addItem(m_secondarySettings.back().label); ui()->selectionComboBox->setCurrentIndex(ui()->selectionComboBox->count() - 1); + ui()->removePushButton->setEnabled(true); } -void ConnectionOptionPage::removeConnectionSettings() +void ConnectionOptionPage::removeSelectedConfig() { - int index = ui()->selectionComboBox->currentIndex(); - if (index > 0) { - m_secondarySettings.erase(m_secondarySettings.begin() + (index - 1)); - m_currentIndex = -1; - ui()->selectionComboBox->removeItem(index); + if (m_secondarySettings.empty()) { + return; } + const int index = ui()->selectionComboBox->currentIndex(); + if (index < 0 || static_cast(index) >= m_secondarySettings.size()) { + return; + } + + if (index == 0) { + m_primarySettings = move(m_secondarySettings.front()); + m_secondarySettings.erase(m_secondarySettings.begin()); + } else { + m_secondarySettings.erase(m_secondarySettings.begin() + (index - 1)); + } + m_currentIndex = -1; + ui()->selectionComboBox->removeItem(index); + ui()->removePushButton->setEnabled(!m_secondarySettings.empty()); +} + +void ConnectionOptionPage::moveSelectedConfigDown() +{ + if (m_secondarySettings.empty()) { + return; + } + const int index = ui()->selectionComboBox->currentIndex(); + if (index < 0) { + return; + } + + if (index == 0) { + swap(m_primarySettings, m_secondarySettings.front()); + ui()->selectionComboBox->setItemText(0, m_primarySettings.label); + ui()->selectionComboBox->setItemText(1, m_secondarySettings.front().label); + setCurrentIndex(1); + } else if (static_cast(index) < m_secondarySettings.size()) { + SyncthingConnectionSettings ¤t = m_secondarySettings[static_cast(index) - 1]; + SyncthingConnectionSettings &exchange = m_secondarySettings[static_cast(index)]; + swap(current, exchange); + ui()->selectionComboBox->setItemText(index, current.label); + ui()->selectionComboBox->setItemText(index + 1, exchange.label); + setCurrentIndex(index + 1); + } + ui()->selectionComboBox->setCurrentIndex(m_currentIndex); +} + +void ConnectionOptionPage::moveSelectedConfigUp() +{ + if (m_secondarySettings.empty()) { + return; + } + const int index = ui()->selectionComboBox->currentIndex(); + if (index <= 0) { + return; + } + + if (index == 1) { + swap(m_primarySettings, m_secondarySettings.front()); + ui()->selectionComboBox->setItemText(0, m_primarySettings.label); + ui()->selectionComboBox->setItemText(1, m_secondarySettings.front().label); + setCurrentIndex(0); + } else if (static_cast(index) - 1 < m_secondarySettings.size()) { + SyncthingConnectionSettings ¤t = m_secondarySettings[static_cast(index) - 1]; + SyncthingConnectionSettings &exchange = m_secondarySettings[static_cast(index) - 2]; + swap(current, exchange); + ui()->selectionComboBox->setItemText(index, current.label); + ui()->selectionComboBox->setItemText(index - 1, exchange.label); + setCurrentIndex(index - 1); + } + ui()->selectionComboBox->setCurrentIndex(m_currentIndex); +} + +void ConnectionOptionPage::setCurrentIndex(int currentIndex) +{ + m_currentIndex = currentIndex; + ui()->downPushButton->setEnabled(currentIndex >= 0 && static_cast(currentIndex) < m_secondarySettings.size()); + ui()->upPushButton->setEnabled(currentIndex > 0 && static_cast(currentIndex) - 1 < m_secondarySettings.size()); } bool ConnectionOptionPage::apply() { - bool ok = true; - if (hasBeenShown()) { - ok = cacheCurrentSettings(true); - values().connection.primary = m_primarySettings; - values().connection.secondary = m_secondarySettings; + if (!hasBeenShown()) { + return true; } - return ok; + if (!cacheCurrentSettings(true)) { + return false; + } + values().connection.primary = m_primarySettings; + values().connection.secondary = m_secondarySettings; + return true; } void ConnectionOptionPage::reset() { - if (hasBeenShown()) { - m_primarySettings = values().connection.primary; - m_secondarySettings = values().connection.secondary; - m_currentIndex = -1; - - QStringList itemTexts; - itemTexts.reserve(1 + static_cast(m_secondarySettings.size())); - itemTexts << m_primarySettings.label; - for (const SyncthingConnectionSettings &settings : m_secondarySettings) { - itemTexts << settings.label; - } - ui()->selectionComboBox->clear(); - ui()->selectionComboBox->addItems(itemTexts); - ui()->selectionComboBox->setCurrentIndex(0); - - updateConnectionStatus(); + if (!hasBeenShown()) { + return; } + m_primarySettings = values().connection.primary; + m_secondarySettings = values().connection.secondary; + m_currentIndex = -1; + + QStringList itemTexts; + itemTexts.reserve(1 + static_cast(m_secondarySettings.size())); + itemTexts << m_primarySettings.label; + for (const SyncthingConnectionSettings &settings : m_secondarySettings) { + itemTexts << settings.label; + } + ui()->selectionComboBox->clear(); + ui()->selectionComboBox->addItems(itemTexts); + ui()->selectionComboBox->setCurrentIndex(0); + + updateConnectionStatus(); } void ConnectionOptionPage::applyAndReconnect() diff --git a/widgets/settings/settingsdialog.h b/widgets/settings/settingsdialog.h index 14df9f1..4a1df9d 100644 --- a/widgets/settings/settingsdialog.h +++ b/widgets/settings/settingsdialog.h @@ -33,9 +33,12 @@ void updateConnectionStatus(); void applyAndReconnect(); bool showConnectionSettings(int index); bool cacheCurrentSettings(bool applying); -void saveCurrentConnectionName(const QString &name); -void addConnectionSettings(); -void removeConnectionSettings(); +void saveCurrentConfigName(const QString &name); +void addNewConfig(); +void removeSelectedConfig(); +void moveSelectedConfigDown(); +void moveSelectedConfigUp(); +void setCurrentIndex(int currentIndex); Data::SyncthingConnection *m_connection; Data::SyncthingConnectionSettings m_primarySettings; std::vector m_secondarySettings; diff --git a/widgets/translations/syncthingwidgets_de_DE.ts b/widgets/translations/syncthingwidgets_de_DE.ts index 734bcba..8a4967e 100644 --- a/widgets/translations/syncthingwidgets_de_DE.ts +++ b/widgets/translations/syncthingwidgets_de_DE.ts @@ -127,22 +127,22 @@ Tray-Icon beim Starten der Desktopumgebung automatisch starten - + This is achieved by adding a *.desktop file under <i>~/.config/autostart</i> so the setting only affects the current user. Durch das Hinzufügen einer *.desktop-Datei unter <i>~/.config/autostart</i> realisiert - betrifft also nur den aktuellen Benutzer. - + This is achieved by adding a registry key under <i>HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run</i> so the setting only affects the current user. Note that the startup entry is invalidated when moving <i>syncthingtray.exe</i>. Durch das Hinzufügen eines Registry-Schlüssels unter <i>HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run</i> realisiert - betrifft also nur den aktuellen Benutzer. - + This feature has not been implemented for your platform (yet). Diese Funktion wurde für die aktuelle Plattform nicht nicht implementiert. - + unable to modify startup entry Fehler beim aktualisieren des Auto-Start-Eintrags @@ -161,104 +161,118 @@ + Move currently selected configuration down + Aktuelle Konfiguration in der Liste noch unten schieben + + + Add secondary instance Sekundäre Konfiguration hinzufügen - + Remove currently selected secondary instance Sekundäre Konfiguration löschen - 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. - Es ist möglich, mehrere Konfigurationen zu speichern. Zwischen diesen kann anschließend über das Verbindungsmenü rechts oben im Tray schnell hin- und hergewechselt werden. Der Name der Konfiguration muss nicht mit dem Namen des entsprechenden Syncthing-Gerätes übereinstimmen. + Es ist möglich, mehrere Konfigurationen zu speichern. Zwischen diesen kann anschließend über das Verbindungsmenü rechts oben im Tray schnell hin- und hergewechselt werden. Der Name der Konfiguration muss nicht mit dem Namen des entsprechenden Syncthing-Gerätes übereinstimmen. - + Syncthing URL - + Authentication Authentifizierung - + User Benutzername - + Password Passwort - + API key API-Schlüssel - + HTTPS certificate HTTPS-Zertifikat - + Insert values from local Syncthing configuration Werte aus lokaler Syncthing-Konfiguration einfügen - + Errors Fehler - + Status - + disconnected getrennt - + Apply connection settings and try to reconnect with the currently selected config Verbindungseinstellungen übernehmen und mit neuen Einstellungen verbinden - + Poll interval Abfrageintervall - + Traffic - - - - + + + + ms - + + Move currently selected configuration up + Aktuelle Konfiguration in der Liste noch oben schieben + + + + 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. The first configuration is the primary/default configuration. + Es ist möglich, mehrere Konfigurationen zu speichern. Zwischen diesen kann anschließend über das Verbindungsmenü rechts oben im Tray schnell hin- und hergewechselt werden. Der Name der Konfiguration muss nicht mit dem Namen des entsprechenden Syncthing-Gerätes übereinstimmen. Die erste Konfiguration in der Liste ist die Standardkonfiguration. + + + Device statistics Gerätestatistiken - + Reconnect Verbindungsveruch - + no nicht neu verbinden @@ -268,22 +282,22 @@ Kann für lokale Instanz automatisch ermittelt werden - + Select Syncthing config file Wähle die Syncthing-Konfigurationsdatei - + Unable to parse the Syncthing config file. Fehler beim Auslesen der Syncthing-Konfigurationsdatei. - + Unable to load specified certificate "%1". Fehler beim Auslesen des angegebenen Zertifikats: %1 - + Instance %1 Instanz %1 @@ -405,33 +419,33 @@ Log folgen - + %1-launcher %1-Starter - + Launch %1 when starting the tray icon Starte %1 beim Starten des Tray-Icons - + %1 executable Ausführbare Datei von %1 - + %1 log (interleaved stdout/stderr) %1-Log (stdout/stderr) - + %1 exited with exit code %2 %1 wurde mit dem Statuscode %2 beendet - + %1 crashed with exit code %2 %1 ist mit dem Statuscode %2 abgestürzt @@ -505,7 +519,7 @@ - + Configured to use D-Bus notifications but D-Bus notification daemon seems unavailabe. Benachrichtigungen via D-Bus wurden eingestellt, aber es scheint kein Daemon zu laufen der den Dienst bereitstellt. @@ -531,22 +545,22 @@ QtGui::SettingsDialog - + Tray - + Web view Weboberfläche - + Startup Starten - + Settings Einstellungen @@ -663,8 +677,8 @@ - - + + unknown unbekannt @@ -698,12 +712,12 @@ Stoppen - + specified unit is either inactive or doesn't exist angegebene Unit ist entweder nicht geladen oder existiert nicht - + since seit @@ -761,7 +775,7 @@ QtGui::WebViewOptionPage - + General Allgemein @@ -791,7 +805,7 @@ Lasse Weboberfläche im Hintgergrund weiter offen, wenn Fenster nicht offen - + 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. Syncthing Tray wurde nicht mit Unterstützung für die eingebaute Anzeige der Weboberfläche unter Verwendung von Qt WebKit oder Qt WebEngine gebaut. diff --git a/widgets/translations/syncthingwidgets_en_US.ts b/widgets/translations/syncthingwidgets_en_US.ts index 689b394..6e2fedf 100644 --- a/widgets/translations/syncthingwidgets_en_US.ts +++ b/widgets/translations/syncthingwidgets_en_US.ts @@ -127,22 +127,22 @@ - + This is achieved by adding a *.desktop file under <i>~/.config/autostart</i> so the setting only affects the current user. - + This is achieved by adding a registry key under <i>HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run</i> so the setting only affects the current user. Note that the startup entry is invalidated when moving <i>syncthingtray.exe</i>. - + This feature has not been implemented for your platform (yet). - + unable to modify startup entry @@ -161,104 +161,114 @@ + Move currently selected configuration down + + + + Add secondary instance - + Remove currently selected secondary instance - - 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. + + Move currently selected configuration up - + + 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. The first configuration is the primary/default configuration. + + + + Syncthing URL - + Authentication - + User - + Password - + API key - + HTTPS certificate - + Insert values from local Syncthing configuration - + Poll interval - - - - + + + + ms - + Traffic - + Device statistics - + Errors - + Reconnect - + no - + Status - + disconnected - + Apply connection settings and try to reconnect with the currently selected config @@ -268,22 +278,22 @@ - + Select Syncthing config file - + Unable to parse the Syncthing config file. - + Unable to load specified certificate "%1". - + Instance %1 @@ -405,33 +415,33 @@ - + %1-launcher - + Launch %1 when starting the tray icon - + %1 executable - + %1 log (interleaved stdout/stderr) - + %1 exited with exit code %2 - + %1 crashed with exit code %2 @@ -505,7 +515,7 @@ - + Configured to use D-Bus notifications but D-Bus notification daemon seems unavailabe. @@ -531,22 +541,22 @@ QtGui::SettingsDialog - + Tray - + Web view - + Startup - + Settings @@ -660,8 +670,8 @@ - - + + unknown @@ -696,12 +706,12 @@ - + specified unit is either inactive or doesn't exist - + since @@ -759,7 +769,7 @@ QtGui::WebViewOptionPage - + General @@ -789,7 +799,7 @@ - + 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.