Allow moving connection configurations up and down

This commit is contained in:
Martchus 2017-09-07 16:42:24 +02:00
parent fe0688cb27
commit 408f77f844
7 changed files with 430 additions and 295 deletions

View File

@ -4,194 +4,194 @@
<context>
<name>Data::SyncthingConnection</name>
<message>
<location filename="../syncthingconnection.cpp" line="109"/>
<location filename="../syncthingconnection.cpp" line="110"/>
<source>disconnected</source>
<translation>Verbindung getrennt</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="111"/>
<location filename="../syncthingconnection.cpp" line="112"/>
<source>reconnecting</source>
<translation>Verbindung wird hergestellt</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="113"/>
<location filename="../syncthingconnection.cpp" line="114"/>
<source>connected</source>
<translation>verbunden</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="115"/>
<location filename="../syncthingconnection.cpp" line="116"/>
<source>connected, scanning</source>
<translation>verbunden, scannt</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="117"/>
<location filename="../syncthingconnection.cpp" line="118"/>
<source>connected, paused</source>
<translation>verbunden, pausiert</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="119"/>
<location filename="../syncthingconnection.cpp" line="120"/>
<source>connected, synchronizing</source>
<translation>verbunden, am Synchronisieren</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="121"/>
<location filename="../syncthingconnection.cpp" line="122"/>
<source>connected, out of sync</source>
<translation>verbunden, nicht synchronisiert</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="123"/>
<location filename="../syncthingconnection.cpp" line="124"/>
<source>unknown</source>
<translation>Verbindungsstatus unbekannt</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="153"/>
<location filename="../syncthingconnection.cpp" line="240"/>
<location filename="../syncthingconnection.cpp" line="154"/>
<location filename="../syncthingconnection.cpp" line="241"/>
<source>Connection configuration is insufficient.</source>
<translation>Verbindungskonfiguration is ungenügend</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="449"/>
<location filename="../syncthingconnection.cpp" line="450"/>
<source>Unable to pause/resume a devices when not connected</source>
<translation>Fehler beim Anfordern Verzeichnis zu Pausieren/Fortzusetzen</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="480"/>
<location filename="../syncthingconnection.cpp" line="481"/>
<source>Unable to pause/resume a directories when not connected</source>
<translation>Fehler beim Anfordern Gerät zu Pausieren/Fortzusetzen</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="759"/>
<location filename="../syncthingconnection.cpp" line="760"/>
<source>Unable to request QR-Code: </source>
<translation>Fehler beim Abfragen des QR-Codes: </translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="779"/>
<location filename="../syncthingconnection.cpp" line="780"/>
<source>Unable to parse Syncthing log: </source>
<translation>Fehler beim Auslesen des Syncthing-Logs: </translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="794"/>
<location filename="../syncthingconnection.cpp" line="795"/>
<source>Unable to request Syncthing log: </source>
<translation>Fehler beim Abfragen des Syncthing-Logs: </translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="828"/>
<location filename="../syncthingconnection.cpp" line="829"/>
<source>Unable to locate certificate used by Syncthing.</source>
<translation>Das SSL-Zertifikat von Syncthing kann nicht gefunden werden.</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="834"/>
<location filename="../syncthingconnection.cpp" line="835"/>
<source>Unable to load certificate used by Syncthing.</source>
<translation>Das SSL-Zertifikat von Syncthing kann nicht ausgelesen werden.</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="909"/>
<location filename="../syncthingconnection.cpp" line="910"/>
<source>Unable to parse Syncthing config: </source>
<translation>Fehler beim Auslesen der Syncthing-Konfiguration: </translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="923"/>
<location filename="../syncthingconnection.cpp" line="924"/>
<source>Unable to request Syncthing config: </source>
<translation>Fehler beim Abfragen der Syncthing-Konfiguration: </translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1019"/>
<location filename="../syncthingconnection.cpp" line="1020"/>
<source>Unable to parse Syncthing status: </source>
<translation>Fehler beim Auslesen des Syncthing-Status: </translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1033"/>
<location filename="../syncthingconnection.cpp" line="1034"/>
<source>Unable to request Syncthing status: </source>
<translation>Fehler beim Abfragen des Syncthing-Status: </translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1074"/>
<location filename="../syncthingconnection.cpp" line="1075"/>
<source>Unable to parse connections: </source>
<translation>Fehler beim Auslesen der Verbindungen: </translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1147"/>
<location filename="../syncthingconnection.cpp" line="1148"/>
<source>Unable to request connections: </source>
<translation>Fehler beim Abfragen der Verbindungen: </translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1165"/>
<location filename="../syncthingconnection.cpp" line="1166"/>
<source>Unable to parse directory statistics: </source>
<translation>Fehler beim Auslesen der Verzeichnisstatistiken: </translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1211"/>
<location filename="../syncthingconnection.cpp" line="1795"/>
<location filename="../syncthingconnection.cpp" line="1212"/>
<location filename="../syncthingconnection.cpp" line="1796"/>
<source>Unable to request directory statistics: </source>
<translation>Fehler beim Abfragen der Verzeichnisstatistiken: </translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1229"/>
<location filename="../syncthingconnection.cpp" line="1230"/>
<source>Unable to parse device statistics: </source>
<translation>Fehler beim Auslesen der Gerätestatistiken: </translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1256"/>
<location filename="../syncthingconnection.cpp" line="1257"/>
<source>Unable to request device statistics: </source>
<translation>Fehler beim Abfragen der Gerätestatistiken: </translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1282"/>
<location filename="../syncthingconnection.cpp" line="1283"/>
<source>Unable to parse errors: </source>
<translation>Fehler beim Auslesen der Syncthing-Fehlermeldungen: </translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1309"/>
<location filename="../syncthingconnection.cpp" line="1310"/>
<source>Unable to request errors: </source>
<translation>Fehler beim Abfragen der Syncthing-Fehlermeldungen: </translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1325"/>
<location filename="../syncthingconnection.cpp" line="1326"/>
<source>Unable to request clearing errors: </source>
<translation>Fehler beim Löschen der Fehlermeldungen: </translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1346"/>
<location filename="../syncthingconnection.cpp" line="1347"/>
<source>Unable to parse Syncthing events: </source>
<translation>Fehler beim Auslesen der Syncthing-Ereignisse: </translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1399"/>
<location filename="../syncthingconnection.cpp" line="1400"/>
<source>Unable to request Syncthing events: </source>
<translation>Fehler beim Abfragen der Syncthing-Ereignisse: </translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1681"/>
<location filename="../syncthingconnection.cpp" line="1682"/>
<source>Unable to request rescan: </source>
<translation>Fehler beim Anfordern eines Verzeichnis-Rescans: </translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1705"/>
<location filename="../syncthingconnection.cpp" line="1706"/>
<source>Unable to request device pause/resume: </source>
<translation>Fehler beim Anfordern Gerät zu Pausieren/Fortzusetzen: </translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1726"/>
<location filename="../syncthingconnection.cpp" line="1727"/>
<source>Unable to request directory pause/resume: </source>
<translation>Fehler beim Anfordern Verzeichnis zu Pausieren/Fortzusetzen: </translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1742"/>
<location filename="../syncthingconnection.cpp" line="1743"/>
<source>Unable to request restart: </source>
<translation>Fehler beim Anfordern eines Neustarts: </translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1758"/>
<location filename="../syncthingconnection.cpp" line="1759"/>
<source>Unable to request shutdown: </source>
<translation>Fehler beim Anfordern Syncthing zu beenden: </translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1785"/>
<location filename="../syncthingconnection.cpp" line="1786"/>
<source>Unable to parse status for directory %1: </source>
<translation>Fehler beim Anfordern des Status von Verzeichnis %1: </translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1922"/>
<location filename="../syncthingconnection.cpp" line="1923"/>
<source>at offset %1</source>
<translation>bei Zeichen %1</translation>
</message>

View File

@ -4,194 +4,194 @@
<context>
<name>Data::SyncthingConnection</name>
<message>
<location filename="../syncthingconnection.cpp" line="109"/>
<location filename="../syncthingconnection.cpp" line="110"/>
<source>disconnected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="111"/>
<location filename="../syncthingconnection.cpp" line="112"/>
<source>reconnecting</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="113"/>
<location filename="../syncthingconnection.cpp" line="114"/>
<source>connected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="115"/>
<location filename="../syncthingconnection.cpp" line="116"/>
<source>connected, scanning</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="117"/>
<location filename="../syncthingconnection.cpp" line="118"/>
<source>connected, paused</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="119"/>
<location filename="../syncthingconnection.cpp" line="120"/>
<source>connected, synchronizing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="121"/>
<location filename="../syncthingconnection.cpp" line="122"/>
<source>connected, out of sync</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="123"/>
<location filename="../syncthingconnection.cpp" line="124"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="153"/>
<location filename="../syncthingconnection.cpp" line="240"/>
<location filename="../syncthingconnection.cpp" line="154"/>
<location filename="../syncthingconnection.cpp" line="241"/>
<source>Connection configuration is insufficient.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="449"/>
<location filename="../syncthingconnection.cpp" line="450"/>
<source>Unable to pause/resume a devices when not connected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="480"/>
<location filename="../syncthingconnection.cpp" line="481"/>
<source>Unable to pause/resume a directories when not connected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="759"/>
<location filename="../syncthingconnection.cpp" line="760"/>
<source>Unable to request QR-Code: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="779"/>
<location filename="../syncthingconnection.cpp" line="780"/>
<source>Unable to parse Syncthing log: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="794"/>
<location filename="../syncthingconnection.cpp" line="795"/>
<source>Unable to request Syncthing log: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="828"/>
<location filename="../syncthingconnection.cpp" line="829"/>
<source>Unable to locate certificate used by Syncthing.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="834"/>
<location filename="../syncthingconnection.cpp" line="835"/>
<source>Unable to load certificate used by Syncthing.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="909"/>
<location filename="../syncthingconnection.cpp" line="910"/>
<source>Unable to parse Syncthing config: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="923"/>
<location filename="../syncthingconnection.cpp" line="924"/>
<source>Unable to request Syncthing config: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1019"/>
<location filename="../syncthingconnection.cpp" line="1020"/>
<source>Unable to parse Syncthing status: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1033"/>
<location filename="../syncthingconnection.cpp" line="1034"/>
<source>Unable to request Syncthing status: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1074"/>
<location filename="../syncthingconnection.cpp" line="1075"/>
<source>Unable to parse connections: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1147"/>
<location filename="../syncthingconnection.cpp" line="1148"/>
<source>Unable to request connections: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1165"/>
<location filename="../syncthingconnection.cpp" line="1166"/>
<source>Unable to parse directory statistics: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1211"/>
<location filename="../syncthingconnection.cpp" line="1795"/>
<location filename="../syncthingconnection.cpp" line="1212"/>
<location filename="../syncthingconnection.cpp" line="1796"/>
<source>Unable to request directory statistics: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1229"/>
<location filename="../syncthingconnection.cpp" line="1230"/>
<source>Unable to parse device statistics: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1256"/>
<location filename="../syncthingconnection.cpp" line="1257"/>
<source>Unable to request device statistics: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1282"/>
<location filename="../syncthingconnection.cpp" line="1283"/>
<source>Unable to parse errors: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1309"/>
<location filename="../syncthingconnection.cpp" line="1310"/>
<source>Unable to request errors: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1325"/>
<location filename="../syncthingconnection.cpp" line="1326"/>
<source>Unable to request clearing errors: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1346"/>
<location filename="../syncthingconnection.cpp" line="1347"/>
<source>Unable to parse Syncthing events: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1399"/>
<location filename="../syncthingconnection.cpp" line="1400"/>
<source>Unable to request Syncthing events: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1681"/>
<location filename="../syncthingconnection.cpp" line="1682"/>
<source>Unable to request rescan: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1705"/>
<location filename="../syncthingconnection.cpp" line="1706"/>
<source>Unable to request device pause/resume: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1726"/>
<location filename="../syncthingconnection.cpp" line="1727"/>
<source>Unable to request directory pause/resume: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1742"/>
<location filename="../syncthingconnection.cpp" line="1743"/>
<source>Unable to request restart: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1758"/>
<location filename="../syncthingconnection.cpp" line="1759"/>
<source>Unable to request shutdown: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1785"/>
<location filename="../syncthingconnection.cpp" line="1786"/>
<source>Unable to parse status for directory %1: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1922"/>
<location filename="../syncthingconnection.cpp" line="1923"/>
<source>at offset %1</source>
<translation type="unfinished"></translation>
</message>

View File

@ -63,6 +63,38 @@
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="downPushButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Move currently selected configuration down</string>
</property>
<property name="icon">
<iconset theme="go-down"/>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="upPushButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string>Move currently selected configuration up</string>
</property>
<property name="icon">
<iconset theme="go-up"/>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="addPushButton">
<property name="sizePolicy">
@ -119,7 +151,7 @@
</sizepolicy>
</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>
<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. The first configuration is the primary/default configuration.</string>
</property>
<property name="wordWrap">
<bool>true</bool>

View File

@ -84,49 +84,52 @@ QWidget *ConnectionOptionPage::setupWidget()
QObject::connect(ui()->selectionComboBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
bind(&ConnectionOptionPage::showConnectionSettings, this, _1));
QObject::connect(ui()->selectionComboBox, static_cast<void (QComboBox::*)(const QString &)>(&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<size_t>(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<size_t>(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<size_t>(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<size_t>(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<unsigned>(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<unsigned>(index) < m_secondarySettings.size()) {
SyncthingConnectionSettings &current = m_secondarySettings[static_cast<unsigned>(index) - 1];
SyncthingConnectionSettings &exchange = m_secondarySettings[static_cast<unsigned>(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<unsigned>(index) - 1 < m_secondarySettings.size()) {
SyncthingConnectionSettings &current = m_secondarySettings[static_cast<unsigned>(index) - 1];
SyncthingConnectionSettings &exchange = m_secondarySettings[static_cast<unsigned>(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<unsigned>(currentIndex) < m_secondarySettings.size());
ui()->upPushButton->setEnabled(currentIndex > 0 && static_cast<unsigned>(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<int>(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<int>(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()

View File

@ -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<Data::SyncthingConnectionSettings> m_secondarySettings;

View File

@ -127,22 +127,22 @@
<translation>Tray-Icon beim Starten der Desktopumgebung automatisch starten</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="414"/>
<location filename="../settings/settingsdialog.cpp" line="490"/>
<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>Durch das Hinzufügen einer *.desktop-Datei unter &lt;i&gt;~/.config/autostart&lt;/i&gt; realisiert - betrifft also nur den aktuellen Benutzer.</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="417"/>
<location filename="../settings/settingsdialog.cpp" line="493"/>
<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>Durch das Hinzufügen eines Registry-Schlüssels unter &lt;i&gt;HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run&lt;/i&gt; realisiert - betrifft also nur den aktuellen Benutzer.</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="422"/>
<location filename="../settings/settingsdialog.cpp" line="498"/>
<source>This feature has not been implemented for your platform (yet).</source>
<translation>Diese Funktion wurde für die aktuelle Plattform nicht nicht implementiert.</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="509"/>
<location filename="../settings/settingsdialog.cpp" line="585"/>
<source>unable to modify startup entry</source>
<translation>Fehler beim aktualisieren des Auto-Start-Eintrags</translation>
</message>
@ -161,104 +161,118 @@
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="75"/>
<source>Move currently selected configuration down</source>
<translation>Aktuelle Konfiguration in der Liste noch unten schieben</translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="107"/>
<source>Add secondary instance</source>
<translation>Sekundäre Konfiguration hinzufügen</translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="92"/>
<location filename="../settings/connectionoptionpage.ui" line="124"/>
<source>Remove currently selected secondary instance</source>
<translation>Sekundäre Konfiguration löschen</translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="122"/>
<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>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.</translation>
<translation type="vanished">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.</translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="145"/>
<location filename="../settings/connectionoptionpage.ui" line="177"/>
<source>Syncthing URL</source>
<translation></translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="155"/>
<location filename="../settings/connectionoptionpage.ui" line="187"/>
<source>Authentication</source>
<translation>Authentifizierung</translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="168"/>
<location filename="../settings/connectionoptionpage.ui" line="200"/>
<source>User</source>
<translation>Benutzername</translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="185"/>
<location filename="../settings/connectionoptionpage.ui" line="217"/>
<source>Password</source>
<translation>Passwort</translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="202"/>
<location filename="../settings/connectionoptionpage.ui" line="234"/>
<source>API key</source>
<translation>API-Schlüssel</translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="212"/>
<location filename="../settings/connectionoptionpage.ui" line="244"/>
<source>HTTPS certificate</source>
<translation>HTTPS-Zertifikat</translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="232"/>
<location filename="../settings/connectionoptionpage.ui" line="264"/>
<source>Insert values from local Syncthing configuration</source>
<translation>Werte aus lokaler Syncthing-Konfiguration einfügen</translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="333"/>
<location filename="../settings/connectionoptionpage.ui" line="365"/>
<source>Errors</source>
<translation>Fehler</translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="394"/>
<location filename="../settings/connectionoptionpage.ui" line="426"/>
<source>Status</source>
<translation></translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="401"/>
<location filename="../settings/connectionoptionpage.ui" line="433"/>
<source>disconnected</source>
<translation>getrennt</translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="408"/>
<location filename="../settings/connectionoptionpage.ui" line="440"/>
<source>Apply connection settings and try to reconnect with the currently selected config</source>
<translation>Verbindungseinstellungen übernehmen und mit neuen Einstellungen verbinden</translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="256"/>
<location filename="../settings/connectionoptionpage.ui" line="288"/>
<source>Poll interval</source>
<translation>Abfrageintervall</translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="293"/>
<location filename="../settings/connectionoptionpage.ui" line="325"/>
<source>Traffic</source>
<translation></translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="280"/>
<location filename="../settings/connectionoptionpage.ui" line="320"/>
<location filename="../settings/connectionoptionpage.ui" line="346"/>
<location filename="../settings/connectionoptionpage.ui" line="375"/>
<location filename="../settings/connectionoptionpage.ui" line="312"/>
<location filename="../settings/connectionoptionpage.ui" line="352"/>
<location filename="../settings/connectionoptionpage.ui" line="378"/>
<location filename="../settings/connectionoptionpage.ui" line="407"/>
<source> ms</source>
<translation></translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="300"/>
<location filename="../settings/connectionoptionpage.ui" line="91"/>
<source>Move currently selected configuration up</source>
<translation>Aktuelle Konfiguration in der Liste noch oben schieben</translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="154"/>
<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. The first configuration is the primary/default configuration.</source>
<translation>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.</translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="332"/>
<source>Device statistics</source>
<translation>Gerätestatistiken</translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="359"/>
<location filename="../settings/connectionoptionpage.ui" line="391"/>
<source>Reconnect</source>
<translation>Verbindungsveruch</translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="372"/>
<location filename="../settings/connectionoptionpage.ui" line="404"/>
<source>no</source>
<translation>nicht neu verbinden</translation>
</message>
@ -268,22 +282,22 @@
<translation>Kann für lokale Instanz automatisch ermittelt werden</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="100"/>
<location filename="../settings/settingsdialog.cpp" line="104"/>
<source>Select Syncthing config file</source>
<translation>Wähle die Syncthing-Konfigurationsdatei</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="108"/>
<location filename="../settings/settingsdialog.cpp" line="112"/>
<source>Unable to parse the Syncthing config file.</source>
<translation>Fehler beim Auslesen der Syncthing-Konfigurationsdatei.</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="184"/>
<location filename="../settings/settingsdialog.cpp" line="187"/>
<source>Unable to load specified certificate &quot;%1&quot;.</source>
<translation>Fehler beim Auslesen des angegebenen Zertifikats: %1</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="210"/>
<location filename="../settings/settingsdialog.cpp" line="212"/>
<source>Instance %1</source>
<translation>Instanz %1</translation>
</message>
@ -405,33 +419,33 @@
<translation>Log folgen</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="551"/>
<location filename="../settings/settingsdialog.cpp" line="627"/>
<source>%1-launcher</source>
<translation>%1-Starter</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="552"/>
<location filename="../settings/settingsdialog.cpp" line="628"/>
<source>Launch %1 when starting the tray icon</source>
<translation>Starte %1 beim Starten des Tray-Icons</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="553"/>
<location filename="../settings/settingsdialog.cpp" line="629"/>
<source>%1 executable</source>
<translation>Ausführbare Datei von %1</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="554"/>
<location filename="../settings/settingsdialog.cpp" line="630"/>
<source>%1 log (interleaved stdout/stderr)</source>
<translation>%1-Log (stdout/stderr)</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="626"/>
<location filename="../settings/settingsdialog.cpp" line="702"/>
<source>%1 exited with exit code %2
</source>
<translation>%1 wurde mit dem Statuscode %2 beendet</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="630"/>
<location filename="../settings/settingsdialog.cpp" line="706"/>
<source>%1 crashed with exit code %2
</source>
<translation>%1 ist mit dem Statuscode %2 abgestürzt</translation>
@ -505,7 +519,7 @@
<translation></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="284"/>
<location filename="../settings/settingsdialog.cpp" line="360"/>
<source>Configured to use D-Bus notifications but D-Bus notification daemon seems unavailabe.</source>
<translation>Benachrichtigungen via D-Bus wurden eingestellt, aber es scheint kein Daemon zu laufen der den Dienst bereitstellt.</translation>
</message>
@ -531,22 +545,22 @@
<context>
<name>QtGui::SettingsDialog</name>
<message>
<location filename="../settings/settingsdialog.cpp" line="826"/>
<location filename="../settings/settingsdialog.cpp" line="902"/>
<source>Tray</source>
<translation></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="833"/>
<location filename="../settings/settingsdialog.cpp" line="909"/>
<source>Web view</source>
<translation>Weboberfläche</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="840"/>
<location filename="../settings/settingsdialog.cpp" line="916"/>
<source>Startup</source>
<translation>Starten</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="855"/>
<location filename="../settings/settingsdialog.cpp" line="931"/>
<source>Settings</source>
<translation>Einstellungen</translation>
</message>
@ -663,8 +677,8 @@
<location filename="../settings/systemdoptionpage.ui" line="99"/>
<location filename="../settings/systemdoptionpage.ui" line="154"/>
<location filename="../settings/systemdoptionpage.ui" line="231"/>
<location filename="../settings/settingsdialog.cpp" line="750"/>
<location filename="../settings/settingsdialog.cpp" line="762"/>
<location filename="../settings/settingsdialog.cpp" line="826"/>
<location filename="../settings/settingsdialog.cpp" line="838"/>
<source>unknown</source>
<translation>unbekannt</translation>
</message>
@ -698,12 +712,12 @@
<translation>Stoppen</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="723"/>
<location filename="../settings/settingsdialog.cpp" line="799"/>
<source>specified unit is either inactive or doesn&apos;t exist</source>
<translation>angegebene Unit ist entweder nicht geladen oder existiert nicht</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="745"/>
<location filename="../settings/settingsdialog.cpp" line="821"/>
<source>since </source>
<translation>seit </translation>
</message>
@ -761,7 +775,7 @@
<name>QtGui::WebViewOptionPage</name>
<message>
<location filename="../settings/webviewoptionpage.ui" line="6"/>
<location filename="../settings/settingsdialog.cpp" line="784"/>
<location filename="../settings/settingsdialog.cpp" line="860"/>
<source>General</source>
<translation>Allgemein</translation>
</message>
@ -791,7 +805,7 @@
<translation>Lasse Weboberfläche im Hintgergrund weiter offen, wenn Fenster nicht offen</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="787"/>
<location filename="../settings/settingsdialog.cpp" line="863"/>
<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>Syncthing Tray wurde nicht mit Unterstützung für die eingebaute Anzeige der Weboberfläche unter Verwendung von Qt WebKit oder Qt WebEngine gebaut.

View File

@ -127,22 +127,22 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="414"/>
<location filename="../settings/settingsdialog.cpp" line="490"/>
<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="../settings/settingsdialog.cpp" line="417"/>
<location filename="../settings/settingsdialog.cpp" line="493"/>
<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="../settings/settingsdialog.cpp" line="422"/>
<location filename="../settings/settingsdialog.cpp" line="498"/>
<source>This feature has not been implemented for your platform (yet).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="509"/>
<location filename="../settings/settingsdialog.cpp" line="585"/>
<source>unable to modify startup entry</source>
<translation type="unfinished"></translation>
</message>
@ -161,104 +161,114 @@
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="75"/>
<source>Move currently selected configuration down</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="107"/>
<source>Add secondary instance</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="92"/>
<location filename="../settings/connectionoptionpage.ui" line="124"/>
<source>Remove currently selected secondary instance</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="122"/>
<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>
<location filename="../settings/connectionoptionpage.ui" line="91"/>
<source>Move currently selected configuration up</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="145"/>
<location filename="../settings/connectionoptionpage.ui" line="154"/>
<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. The first configuration is the primary/default configuration.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="177"/>
<source>Syncthing URL</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="155"/>
<location filename="../settings/connectionoptionpage.ui" line="187"/>
<source>Authentication</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="168"/>
<location filename="../settings/connectionoptionpage.ui" line="200"/>
<source>User</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="185"/>
<location filename="../settings/connectionoptionpage.ui" line="217"/>
<source>Password</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="202"/>
<location filename="../settings/connectionoptionpage.ui" line="234"/>
<source>API key</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="212"/>
<location filename="../settings/connectionoptionpage.ui" line="244"/>
<source>HTTPS certificate</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="232"/>
<location filename="../settings/connectionoptionpage.ui" line="264"/>
<source>Insert values from local Syncthing configuration</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="256"/>
<location filename="../settings/connectionoptionpage.ui" line="288"/>
<source>Poll interval</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="280"/>
<location filename="../settings/connectionoptionpage.ui" line="320"/>
<location filename="../settings/connectionoptionpage.ui" line="346"/>
<location filename="../settings/connectionoptionpage.ui" line="375"/>
<location filename="../settings/connectionoptionpage.ui" line="312"/>
<location filename="../settings/connectionoptionpage.ui" line="352"/>
<location filename="../settings/connectionoptionpage.ui" line="378"/>
<location filename="../settings/connectionoptionpage.ui" line="407"/>
<source> ms</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="293"/>
<location filename="../settings/connectionoptionpage.ui" line="325"/>
<source>Traffic</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="300"/>
<location filename="../settings/connectionoptionpage.ui" line="332"/>
<source>Device statistics</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="333"/>
<location filename="../settings/connectionoptionpage.ui" line="365"/>
<source>Errors</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="359"/>
<location filename="../settings/connectionoptionpage.ui" line="391"/>
<source>Reconnect</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="372"/>
<location filename="../settings/connectionoptionpage.ui" line="404"/>
<source>no</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="394"/>
<location filename="../settings/connectionoptionpage.ui" line="426"/>
<source>Status</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="401"/>
<location filename="../settings/connectionoptionpage.ui" line="433"/>
<source>disconnected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/connectionoptionpage.ui" line="408"/>
<location filename="../settings/connectionoptionpage.ui" line="440"/>
<source>Apply connection settings and try to reconnect with the currently selected config</source>
<translation type="unfinished"></translation>
</message>
@ -268,22 +278,22 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="100"/>
<location filename="../settings/settingsdialog.cpp" line="104"/>
<source>Select Syncthing config file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="108"/>
<location filename="../settings/settingsdialog.cpp" line="112"/>
<source>Unable to parse the Syncthing config file.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="184"/>
<location filename="../settings/settingsdialog.cpp" line="187"/>
<source>Unable to load specified certificate &quot;%1&quot;.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="210"/>
<location filename="../settings/settingsdialog.cpp" line="212"/>
<source>Instance %1</source>
<translation type="unfinished"></translation>
</message>
@ -405,33 +415,33 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="551"/>
<location filename="../settings/settingsdialog.cpp" line="627"/>
<source>%1-launcher</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="552"/>
<location filename="../settings/settingsdialog.cpp" line="628"/>
<source>Launch %1 when starting the tray icon</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="553"/>
<location filename="../settings/settingsdialog.cpp" line="629"/>
<source>%1 executable</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="554"/>
<location filename="../settings/settingsdialog.cpp" line="630"/>
<source>%1 log (interleaved stdout/stderr)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="626"/>
<location filename="../settings/settingsdialog.cpp" line="702"/>
<source>%1 exited with exit code %2
</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="630"/>
<location filename="../settings/settingsdialog.cpp" line="706"/>
<source>%1 crashed with exit code %2
</source>
<translation type="unfinished"></translation>
@ -505,7 +515,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="284"/>
<location filename="../settings/settingsdialog.cpp" line="360"/>
<source>Configured to use D-Bus notifications but D-Bus notification daemon seems unavailabe.</source>
<translation type="unfinished"></translation>
</message>
@ -531,22 +541,22 @@
<context>
<name>QtGui::SettingsDialog</name>
<message>
<location filename="../settings/settingsdialog.cpp" line="826"/>
<location filename="../settings/settingsdialog.cpp" line="902"/>
<source>Tray</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="833"/>
<location filename="../settings/settingsdialog.cpp" line="909"/>
<source>Web view</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="840"/>
<location filename="../settings/settingsdialog.cpp" line="916"/>
<source>Startup</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="855"/>
<location filename="../settings/settingsdialog.cpp" line="931"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
@ -660,8 +670,8 @@
<location filename="../settings/systemdoptionpage.ui" line="99"/>
<location filename="../settings/systemdoptionpage.ui" line="154"/>
<location filename="../settings/systemdoptionpage.ui" line="231"/>
<location filename="../settings/settingsdialog.cpp" line="750"/>
<location filename="../settings/settingsdialog.cpp" line="762"/>
<location filename="../settings/settingsdialog.cpp" line="826"/>
<location filename="../settings/settingsdialog.cpp" line="838"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
@ -696,12 +706,12 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="723"/>
<location filename="../settings/settingsdialog.cpp" line="799"/>
<source>specified unit is either inactive or doesn&apos;t exist</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="745"/>
<location filename="../settings/settingsdialog.cpp" line="821"/>
<source>since </source>
<translation type="unfinished"></translation>
</message>
@ -759,7 +769,7 @@
<name>QtGui::WebViewOptionPage</name>
<message>
<location filename="../settings/webviewoptionpage.ui" line="6"/>
<location filename="../settings/settingsdialog.cpp" line="784"/>
<location filename="../settings/settingsdialog.cpp" line="860"/>
<source>General</source>
<translation type="unfinished"></translation>
</message>
@ -789,7 +799,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="787"/>
<location filename="../settings/settingsdialog.cpp" line="863"/>
<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>