Compare commits

..

4 Commits

Author SHA1 Message Date
Martchus ffbff8ca96 WIP 2024-05-01 15:56:24 +02:00
Martchus 4f416eb6e2 WIP 2024-05-01 14:21:30 +02:00
Martchus 23425b6223 WIP 2024-05-01 14:21:30 +02:00
Martchus 18e30d8af0 WIP: Allow refreshing root in file browser 2024-05-01 14:21:30 +02:00
39 changed files with 585 additions and 1123 deletions

View File

@ -6,14 +6,13 @@ set(META_APP_AUTHOR "Martchus")
set(META_APP_AUTHOR_MAIL "martchus@gmx.net")
set(META_APP_URL "https://${META_APP_AUTHOR}.github.io/${META_PROJECT_NAME}")
set(META_APP_URL_RAW "https://raw.githubusercontent.com/${META_APP_AUTHOR}/${META_PROJECT_NAME}/master")
set(META_APP_BUGTRACKER_URL "https://github.com/${META_APP_AUTHOR}/${META_PROJECT_NAME}/issues")
set(META_APP_DESCRIPTION "Tray application for Syncthing")
set(META_APP_CATEGORIES "Network;FileTransfer")
set(META_GUI_OPTIONAL false)
set(META_VERSION_MAJOR 1)
set(META_VERSION_MINOR 5)
set(META_VERSION_PATCH 4)
set(META_RELEASE_DATE "2024-05-08")
set(META_VERSION_PATCH 3)
set(META_RELEASE_DATE "2024-04-09")
set(META_SOVERSION 14)
set(META_ADD_DEFAULT_CPP_UNIT_TEST_APPLICATION ON)
set(NETWORK_INFORMATION_SUPPORT ON)

View File

@ -118,19 +118,6 @@ Syncthing installation. You might consider different configurations:
* Checkout the *Configuring the built-in launcher* section for further details.
* It is also possible to let Syncthing Tray connect to a Syncthing instance running on a different machine.
## Installation and deinstallation
Checkout [the website](https://martchus.github.io/syncthingtray/#downloads-section) for obtaining the executable.
This README also lists more options and instructions for building from sources.
If you are using one of the package manager options you should follow the usual workflow of that package manager.
Otherwise, you just have to extract the archive and launch the contained executable. Especially on Windows, please
read the notes on the website before filing any issues. Note that automatic updates haven't been implemented yet.
To uninstall, just delete the executable again.
For further cleanup you may ensure that autostart is disabled (to avoid a dangling autostart entry). You may also
delete the configuration files (see "Location of the configuration file" section below).
## Screenshots
The screenshots are not up-to-date.

View File

@ -524,20 +524,12 @@ void SyncthingApplet::showDirectoryErrors(const QString &dirId)
void SyncthingApplet::browseRemoteFiles(const QString &dirId)
{
if (auto row = 0; auto *const dir = m_connection.findDirInfo(dirId, row)) {
showCenteredDialog(QtGui::browseRemoteFilesDialog(m_connection, *dir));
auto row = 0;
auto *const dir = m_connection.findDirInfo(dirId, row);
if (!dir) {
return;
}
}
void SyncthingApplet::showIgnorePatterns(const QString &dirId)
{
if (auto row = 0; auto *const dir = m_connection.findDirInfo(dirId, row)) {
showCenteredDialog(QtGui::ignorePatternsDialog(m_connection, *dir));
}
}
void SyncthingApplet::showCenteredDialog(QWidget *dlg)
{
auto *const dlg = QtGui::browseRemoteFilesDialog(m_connection, *dir);
dlg->resize(600, 500);
centerWidget(dlg);
dlg->show();

View File

@ -149,7 +149,6 @@ public Q_SLOTS:
void showInternalErrorsDialog();
void showDirectoryErrors(const QString &dirId);
void browseRemoteFiles(const QString &dirId);
void showIgnorePatterns(const QString &dirId);
void copyToClipboard(const QString &text);
void updateStatusIconAndTooltip();
void saveSettings();
@ -208,8 +207,6 @@ private Q_SLOTS:
void concludeWizard(const QString &errorMessage = QString());
private:
void showCenteredDialog(QWidget *dlg);
Plasma::Theme m_theme;
QString m_faUrl;
QPalette m_palette;

View File

@ -189,14 +189,6 @@ ColumnLayout {
"browseRemoteFiles", "dirId_")
visible: plasmoid.wipFeaturesEnabled
}
PlasmaExtras.MenuItem {
id: showIgnorePatternsItem
text: qsTr("Show ignore patterns")
icon: "selection-symbolic"
onClicked: directoryView.triggerNativeActionWithCurrentItemData(
"showIgnorePatterns", "dirId_")
visible: plasmoid.wipFeaturesEnabled
}
}
}
}

View File

@ -100,11 +100,6 @@
<source>Browse remote files</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../package6/contents/ui/DirectoriesPage.qml" line="194"/>
<source>Show ignore patterns</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DownloadsPage</name>
@ -358,12 +353,12 @@
<translation>Neue Benachrichtigungen</translation>
</message>
<message>
<location filename="../lib/syncthingapplet.cpp" line="573"/>
<location filename="../lib/syncthingapplet.cpp" line="565"/>
<source>Unable to establish connection to Syncthing.</source>
<translation>Verbindung zu Syncthing kann nicht hergestellt werden.</translation>
</message>
<message>
<location filename="../lib/syncthingapplet.cpp" line="641"/>
<location filename="../lib/syncthingapplet.cpp" line="633"/>
<source>D-Bus error - unable to </source>
<translation>D-Bus-Fehler bei Aktion </translation>
</message>

View File

@ -100,11 +100,6 @@
<source>Browse remote files</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../package6/contents/ui/DirectoriesPage.qml" line="194"/>
<source>Show ignore patterns</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>DownloadsPage</name>
@ -292,12 +287,12 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lib/syncthingapplet.cpp" line="573"/>
<location filename="../lib/syncthingapplet.cpp" line="565"/>
<source>Unable to establish connection to Syncthing.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../lib/syncthingapplet.cpp" line="641"/>
<location filename="../lib/syncthingapplet.cpp" line="633"/>
<source>D-Bus error - unable to </source>
<translation type="unfinished"></translation>
</message>

View File

@ -6,7 +6,7 @@ set(META_PROJECT_TYPE library)
set(META_APP_NAME "Syncthing library")
set(META_APP_DESCRIPTION "Syncthing itself, built as a shared or static library")
set(META_PROJECT_VARNAME_UPPER LIB_SYNCTHING)
set(META_SYNCTHING_VERSION "v1.27.7")
set(META_SYNCTHING_VERSION "v1.27.6")
# use testfiles directory from syncthingconnector
set(META_SRCDIR_REFS "${CMAKE_CURRENT_SOURCE_DIR}\n${CMAKE_CURRENT_SOURCE_DIR}/../syncthingconnector")

@ -1 +1 @@
Subproject commit 388f287fcbb3212879033c2c2d19faa51e48dd7c
Subproject commit 5aaf77f2765623bf9c387b6f301bb59b55c1aed8

View File

@ -1073,7 +1073,7 @@ void SyncthingConnection::emitError(const QString &message, const QJsonParseErro
}
/*!
* \brief Internally called to emit a network error (server replied error code or server could not be reached at all).
* \brief Internally called to emit a network error (server replied error code are connection or server could not be reached at all).
*/
void SyncthingConnection::emitError(const QString &message, SyncthingErrorCategory category, QNetworkReply *reply)
{
@ -1083,19 +1083,6 @@ void SyncthingConnection::emitError(const QString &message, SyncthingErrorCatego
emit error(message + reply->errorString(), category, reply->error(), reply->request(), reply->bytesAvailable() ? reply->readAll() : QByteArray());
}
/*!
* \brief Internally called to emit a network error for a specific request (server replied error code or server could not be reached at all).
* \remarks The \a message is supposed to already contain the error string of the reply.
*/
void SyncthingConnection::emitError(const QString &message, QNetworkReply *reply)
{
if (loggingFlags() & SyncthingConnectionLoggingFlags::ApiReplies) {
cerr << Phrases::Error << "Syncthing API error: " << message.toLocal8Bit().data() << reply->errorString().toLocal8Bit().data() << endl;
}
emit error(message, SyncthingErrorCategory::SpecificRequest, reply->error(), reply->request(),
reply->bytesAvailable() ? reply->readAll() : QByteArray());
}
/*!
* \brief Internally called to emit myIdChanged() signal.
*/

View File

@ -49,58 +49,19 @@ struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingLogEntry {
QString message;
};
enum class SyncthingItemType {
Unknown, /**< the type is unknown */
File, /**< the item is a regular file */
Directory, /**< the item is a directory */
Symlink, /**< the item is a symlink (pointing to a file or directory) */
Error, /**< the item represents an error message (e.g. the API query ran into an error); used by SyncthingFileModel */
Loading, /**< the item represents a loading indication; used by SyncthingFileModel */
};
enum class SyncthingItemType { Unknown, File, Directory };
struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingItem {
/// \brief The name of the filesystem item or error/loading message in case of those item types.
QString name;
/// \brief The modification time. Only populated with a meaningful value for files and directories.
CppUtilities::DateTime modificationTime = CppUtilities::DateTime();
/// \brief The file size. Only populated with a meaningful value for files.
std::size_t size = std::size_t();
/// \brief The type of the item.
SyncthingItemType type = SyncthingItemType::Unknown;
/// \brief The child items, if populated as indicated by childrenPopulated.
std::vector<std::unique_ptr<SyncthingItem>> children;
/// \brief The parent item; not populated by default but might be set as needed (take care in case the pointer gets invalidated).
SyncthingItem *parent = nullptr;
/// \brief The path of the item; not populated by default but might be set as needed.
QString path;
/// \brief The index of the item within its parent.
SyncthingItem *parent = nullptr; // not populated but might be set as needed (take care in case the pointer gets invalidated)
std::size_t index = std::size_t();
/// \brief The level of nesting, does *not* include levels of the prefix.
int level = 0;
/// \brief Whether children are populated (depends on the requested level).
bool childrenPopulated = false;
/// \brief Whether the item is "checked"; not set by default but might be set to flag an item for some mass-action.
bool checked = false;
bool isFilesystemItem() const;
};
/// \brief Returns whether the item is actually a filesystem item.
inline bool SyncthingItem::isFilesystemItem() const
{
switch (type) {
case Data::SyncthingItemType::File:
case Data::SyncthingItemType::Directory:
case Data::SyncthingItemType::Symlink:
return true;
default:
return false;
}
}
struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingIgnores {
QStringList ignore;
QStringList expanded;
int level = 0; // the level of nesting, does *not* include levels of the prefix
bool childrenPopulated = false; // populated depending on requested level
bool checked = false; // not populated but might be set to flag an item for some mass-action
};
class LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingConnection : public QObject {
@ -154,11 +115,6 @@ public:
SyncthingConnectionLoggingFlags loggingFlags = SyncthingConnectionLoggingFlags::FromEnvironment, QObject *parent = nullptr);
~SyncthingConnection() override;
struct QueryResult {
QNetworkReply *reply = nullptr;
QMetaObject::Connection connection;
};
// getter/setter for
const QString &syncthingUrl() const;
void setSyncthingUrl(const QString &url);
@ -297,10 +253,8 @@ public Q_SLOTS:
public:
// methods to GET or POST information from/to Syncthing (non-slots)
QueryResult browse(const QString &dirId, const QString &prefix, int level,
QMetaObject::Connection browse(const QString &dirId, const QString &prefix, int level,
std::function<void(std::vector<std::unique_ptr<SyncthingItem>> &&, QString &&)> &&callback);
QueryResult ignores(const QString &dirId, std::function<void(SyncthingIgnores &&, QString &&)> &&callback);
QueryResult setIgnores(const QString &dirId, const SyncthingIgnores &ignores, std::function<void(QString &&)> &&callback);
Q_SIGNALS:
void newConfig(const QJsonObject &rawConfig);
@ -403,7 +357,6 @@ private Q_SLOTS:
void emitNotification(CppUtilities::DateTime when, const QString &message);
void emitError(const QString &message, const QJsonParseError &jsonError, QNetworkReply *reply, const QByteArray &response = QByteArray());
void emitError(const QString &message, Data::SyncthingErrorCategory category, QNetworkReply *reply);
void emitError(const QString &message, QNetworkReply *reply);
void emitMyIdChanged(const QString &newId);
void emitTildeChanged(const QString &newTilde, const QString &newPathSeparator);
void emitDirStatisticsChanged();
@ -417,8 +370,6 @@ private Q_SLOTS:
private:
// handler to evaluate results from request...() methods
void readBrowse(const QString &dirId, int levels, std::function<void(std::vector<std::unique_ptr<SyncthingItem>> &&, QString &&)> &&callback);
void readIgnores(const QString &dirId, std::function<void(SyncthingIgnores &&, QString &&)> &&callback);
void readSetIgnores(const QString &dirId, std::function<void(QString &&)> &&callback);
// internal helper methods
struct Reply {

View File

@ -1586,11 +1586,11 @@ void SyncthingConnection::readRevert()
* \brief Lists items in the directory with the specified \a dirId down to \a levels (or fully if \a levels is 0) as of \a prefix.
* \sa https://docs.syncthing.net/rest/db-browse-get.html
* \remarks
* In contrast to most other functions, this one uses a \a callback to return results (instead of a signal). This makes it easier
* to consume results of a specific request. Errors are still reported via the error() signal so there's no extra error handling
* required. Note that in case of an error \a callback is invoked with a non-empty string containing the error message.
* In contrast to other functions, this one uses a \a callback to return results (instead of a signal). This makes it easier to
* consume results of a specific request. Errors are still reported via the error() signal so there's no extra error handling
* required. Note that \a callback is *not* invoked in the error case.
*/
SyncthingConnection::QueryResult SyncthingConnection::browse(const QString &dirId, const QString &prefix, int levels,
QMetaObject::Connection SyncthingConnection::browse(const QString &dirId, const QString &prefix, int levels,
std::function<void(std::vector<std::unique_ptr<SyncthingItem>> &&, QString &&)> &&callback)
{
auto query = QUrlQuery();
@ -1601,58 +1601,9 @@ SyncthingConnection::QueryResult SyncthingConnection::browse(const QString &dirI
if (levels > 0) {
query.addQueryItem(QStringLiteral("levels"), QString::number(levels));
}
auto *const reply = requestData(QStringLiteral("db/browse"), query);
return { reply,
QObject::connect(
reply, &QNetworkReply::finished, this,
[this, id = dirId, l = levels, cb = std::move(callback)]() mutable { readBrowse(id, l, std::move(cb)); }, Qt::QueuedConnection) };
}
/*!
* \brief Queries the contents of ".stignore" and expansions of the directory with the specified \a dirId.
* \sa https://docs.syncthing.net/rest/db-ignores-get.html
* \remarks
* In contrast to most other functions, this one uses a \a callback to return results (instead of a signal). This makes it easier
* to consume results of a specific request. Errors are still reported via the error() signal so there's no extra error handling
* required. Note that in case of an error \a callback is invoked with a non-empty string containing the error message.
*/
SyncthingConnection::QueryResult SyncthingConnection::ignores(const QString &dirId, std::function<void(SyncthingIgnores &&, QString &&)> &&callback)
{
auto query = QUrlQuery();
query.addQueryItem(QStringLiteral("folder"), formatQueryItem(dirId));
auto *const reply = requestData(QStringLiteral("db/ignores"), query);
return { reply,
QObject::connect(
reply, &QNetworkReply::finished, this, [this, id = dirId, cb = std::move(callback)]() mutable { readIgnores(id, std::move(cb)); },
Qt::QueuedConnection) };
}
/*!
* \brief Sets the contents of ".stignore" of the directory with the specified \a dirId.
* \sa https://docs.syncthing.net/rest/db-ignores-post.html
* \remarks
* In contrast to most other functions, this one uses a \a callback to return results (instead of a signal). This makes it easier
* to consume results of a specific request. Errors are still reported via the error() signal so there's no extra error handling
* required. Note that in case of an error \a callback is invoked with a non-empty string containing the error message.
*/
SyncthingConnection::QueryResult SyncthingConnection::setIgnores(
const QString &dirId, const SyncthingIgnores &ignores, std::function<void(QString &&)> &&callback)
{
auto query = QUrlQuery();
query.addQueryItem(QStringLiteral("folder"), formatQueryItem(dirId));
auto ignoreArray = QJsonArray();
for (const auto &ignore : ignores.ignore) {
ignoreArray.append(ignore);
}
auto jsonObj = QJsonObject();
jsonObj.insert(QLatin1String("ignore"), ignoreArray);
auto jsonDoc = QJsonDocument();
jsonDoc.setObject(jsonObj);
auto *const reply = postData(QStringLiteral("db/ignores"), query, jsonDoc.toJson(QJsonDocument::Compact));
return { reply,
QObject::connect(
reply, &QNetworkReply::finished, this, [this, id = dirId, cb = std::move(callback)]() mutable { readSetIgnores(id, std::move(cb)); },
Qt::QueuedConnection) };
return QObject::connect(
requestData(QStringLiteral("db/browse"), query), &QNetworkReply::finished, this,
[this, id = dirId, l = levels, cb = std::move(callback)]() mutable { readBrowse(id, l, std::move(cb)); }, Qt::QueuedConnection);
}
/// \cond
@ -1684,8 +1635,6 @@ static void readSyncthingItems(const QJsonArray &array, std::vector<std::unique_
item->type = SyncthingItemType::File;
} else if (type == QLatin1String("FILE_INFO_TYPE_DIRECTORY")) {
item->type = SyncthingItemType::Directory;
} else if (type == QLatin1String("FILE_INFO_TYPE_SYMLINK")) {
item->type = SyncthingItemType::Symlink;
}
readSyncthingItems(children.toArray(), item->children, level + 1, levels);
item->childrenPopulated = !levels || level < levels;
@ -1724,88 +1673,14 @@ void SyncthingConnection::readBrowse(
break;
}
default:
auto errorMessage = tr("Unable to browse \"%1\": ").arg(dirId) + reply->errorString();
emitError(errorMessage, reply);
auto errorMessage = tr("Unable to browse \"%1\": ").arg(dirId);
emitError(errorMessage, SyncthingErrorCategory::SpecificRequest, reply);
if (callback) {
callback(std::move(items), std::move(errorMessage));
}
}
}
/*!
* \brief Reads the response of ignores() and reports results via the specified \a callback. Emits error() in case of an error.
* \remarks The \a callback is also emitted in the error case (with the error message as second parameter and an empty list of items).
*/
void SyncthingConnection::readIgnores(const QString &dirId, std::function<void(SyncthingIgnores &&, QString &&)> &&callback)
{
auto const [reply, response] = prepareReply();
if (!reply) {
return;
}
auto res = SyncthingIgnores();
switch (reply->error()) {
case QNetworkReply::NoError: {
auto jsonError = QJsonParseError();
const auto replyDoc = QJsonDocument::fromJson(response, &jsonError);
if (jsonError.error != QJsonParseError::NoError) {
auto errorMessage = tr("Unable to query ignore patterns of \"%1\": ").arg(dirId) + jsonError.errorString();
emit error(errorMessage, SyncthingErrorCategory::Parsing, QNetworkReply::NoError);
if (callback) {
callback(std::move(res), std::move(errorMessage));
}
return;
}
const auto docObj = replyDoc.object();
const auto ignores = docObj.value(QLatin1String("ignore")).toArray();
const auto expanded = docObj.value(QLatin1String("expanded")).toArray();
res.ignore.reserve(ignores.size());
res.expanded.reserve(expanded.size());
for (const auto &ignore : ignores) {
res.ignore.append(ignore.toString());
}
for (const auto &expand : expanded) {
res.expanded.append(expand.toString());
}
if (callback) {
callback(std::move(res), QString());
}
break;
}
default:
auto errorMessage = tr("Unable to query ignore patterns of \"%1\": ").arg(dirId) + reply->errorString();
emitError(errorMessage, reply);
if (callback) {
callback(std::move(res), std::move(errorMessage));
}
}
}
/*!
* \brief Reads the response of setIgnores() and reports results via the specified \a callback. Emits error() in case of an error.
* \remarks The \a callback is also emitted in the error case (with the error message as second parameter and an empty list of items).
*/
void SyncthingConnection::readSetIgnores(const QString &dirId, std::function<void(QString &&)> &&callback)
{
auto const [reply, response] = prepareReply();
if (!reply) {
return;
}
switch (reply->error()) {
case QNetworkReply::NoError: {
if (callback) {
callback(QString());
}
break;
}
default:
auto errorMessage = tr("Unable to change ignore patterns of \"%1\": ").arg(dirId) + reply->errorString();
emitError(errorMessage, reply);
if (callback) {
callback(std::move(errorMessage));
}
}
}
// post config
/*!

View File

@ -4,42 +4,42 @@
<context>
<name>Data::SyncthingConnection</name>
<message>
<location filename="../syncthingconnection.cpp" line="177"/>
<location filename="../syncthingconnection.cpp" line="175"/>
<source>disconnected</source>
<translation>odpojeno</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="179"/>
<location filename="../syncthingconnection.cpp" line="177"/>
<source>reconnecting</source>
<translation>znovu se připojuje</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="181"/>
<location filename="../syncthingconnection.cpp" line="179"/>
<source>connected</source>
<translation>spojeno</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="183"/>
<location filename="../syncthingconnection.cpp" line="181"/>
<source>connected, scanning</source>
<translation>spojeno, skenování</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="185"/>
<location filename="../syncthingconnection.cpp" line="183"/>
<source>connected, paused</source>
<translation>spojeno, pozastaveno</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="187"/>
<location filename="../syncthingconnection.cpp" line="185"/>
<source>connected, synchronizing</source>
<translation>spojeno, synchronizuje se</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="189"/>
<location filename="../syncthingconnection.cpp" line="187"/>
<source>connected, remote not in sync</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="799"/>
<location filename="../syncthingconnection.cpp" line="798"/>
<source>Unable to parse timestamp &quot;%1&quot; (%2): %3</source>
<translation type="unfinished"></translation>
</message>
@ -48,13 +48,13 @@
<translation type="vanished">spojeno, nesesynchronizováno</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="191"/>
<location filename="../syncthingconnection.cpp" line="189"/>
<source>unknown</source>
<translation>neznámý stav spojení</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="341"/>
<location filename="../syncthingconnection.cpp" line="531"/>
<location filename="../syncthingconnection.cpp" line="340"/>
<location filename="../syncthingconnection.cpp" line="530"/>
<source>Connection configuration is insufficient.</source>
<translation>Nastavení spojení není dostačující.</translation>
</message>
@ -89,12 +89,12 @@
<translation>Nedaří se vyžádat si záznamy událostí v Syncthing: </translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="872"/>
<location filename="../syncthingconnection.cpp" line="871"/>
<source>Unable to locate certificate used by Syncthing.</source>
<translation>Nedaří se nalézt certifikát, používaný Syncthing.</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="878"/>
<location filename="../syncthingconnection.cpp" line="877"/>
<source>Unable to load certificate used by Syncthing.</source>
<translation>Nedaří se načíst certifikát, používaný Syncthing.</translation>
</message>
@ -165,17 +165,17 @@
<translation>Nedaří se vyžádat si vyčištění chyb: </translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="2021"/>
<location filename="../syncthingconnection_requests.cpp" line="1894"/>
<source>Unable to parse Syncthing events: </source>
<translation>Nedaří se zpracovat události v Syncthing: </translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="2048"/>
<location filename="../syncthingconnection_requests.cpp" line="1921"/>
<source>Unable to request Syncthing events: </source>
<translation>Nedaří se vyžádat si události v Syncthing: </translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="1845"/>
<location filename="../syncthingconnection_requests.cpp" line="1718"/>
<source>Unable to post config: </source>
<translation>Nedaří se odeslat nové nastavení: </translation>
</message>
@ -250,38 +250,27 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="1713"/>
<location filename="../syncthingconnection_requests.cpp" line="1660"/>
<source>Unable to parse response for browsing &quot;%1&quot;: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="1727"/>
<location filename="../syncthingconnection_requests.cpp" line="1674"/>
<source>Unable to browse &quot;%1&quot;: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="1751"/>
<location filename="../syncthingconnection_requests.cpp" line="1775"/>
<source>Unable to query ignore patterns of &quot;%1&quot;: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="1801"/>
<source>Unable to change ignore patterns of &quot;%1&quot;: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="2629"/>
<location filename="../syncthingconnection_requests.cpp" line="2502"/>
<source>Unable to parse disk events: </source>
<translation>Nedaří se zpracovat události úložiště: </translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="2652"/>
<location filename="../syncthingconnection_requests.cpp" line="2525"/>
<source>Unable to request disk events: </source>
<translation>Nedaří se vyžádat si události úložiště: </translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1071"/>
<location filename="../syncthingconnection.cpp" line="1070"/>
<source>at offset %1</source>
<translation>na posunu %1</translation>
</message>
@ -341,27 +330,27 @@
<context>
<name>Data::SyncthingService</name>
<message>
<location filename="../syncthingservice.cpp" line="394"/>
<location filename="../syncthingservice.cpp" line="378"/>
<source>start unit</source>
<translation>spustit jednotku</translation>
</message>
<message>
<location filename="../syncthingservice.cpp" line="396"/>
<location filename="../syncthingservice.cpp" line="380"/>
<source>stop unit</source>
<translation>zastavit jednotku</translation>
</message>
<message>
<location filename="../syncthingservice.cpp" line="411"/>
<location filename="../syncthingservice.cpp" line="395"/>
<source>enable unit</source>
<translation>zapnout jednotku</translation>
</message>
<message>
<location filename="../syncthingservice.cpp" line="413"/>
<location filename="../syncthingservice.cpp" line="397"/>
<source>disable unit</source>
<translation>vypnout jednotku</translation>
</message>
<message>
<location filename="../syncthingservice.cpp" line="423"/>
<location filename="../syncthingservice.cpp" line="407"/>
<source>reload all unit files</source>
<translation type="unfinished"></translation>
</message>
@ -369,22 +358,22 @@
<context>
<name>Data::Utils</name>
<message>
<location filename="../utils.cpp" line="37"/>
<location filename="../utils.cpp" line="30"/>
<source>%1 ago</source>
<translation>před %1</translation>
</message>
<message>
<location filename="../utils.cpp" line="40"/>
<location filename="../utils.cpp" line="33"/>
<source>right now</source>
<translation>právě teď</translation>
</message>
<message>
<location filename="../utils.cpp" line="51"/>
<location filename="../utils.cpp" line="44"/>
<source>unknown</source>
<translation>neznámé</translation>
</message>
<message numerus="yes">
<location filename="../utils.cpp" line="67"/>
<location filename="../utils.cpp" line="60"/>
<source>%1 file(s)</source>
<translation>
<numerusform>%1 soubor</numerusform>
@ -393,7 +382,7 @@
</translation>
</message>
<message numerus="yes">
<location filename="../utils.cpp" line="68"/>
<location filename="../utils.cpp" line="61"/>
<source>%1 dir(s)</source>
<translation>
<numerusform>%1 adr.</numerusform>
@ -402,44 +391,44 @@
</translation>
</message>
<message>
<location filename="../utils.cpp" line="83"/>
<location filename="../utils.cpp" line="76"/>
<source>Synchronization of local folder %1 complete</source>
<translation>Synchronizace místního adresáře %1 dokončena</translation>
</message>
<message>
<location filename="../utils.cpp" line="91"/>
<location filename="../utils.cpp" line="84"/>
<source>Synchronization of the following local folders complete:
</source>
<translation>Synchronizace následujících místních adresářů dokončena:
</translation>
</message>
<message>
<location filename="../utils.cpp" line="105"/>
<location filename="../utils.cpp" line="98"/>
<source>file system watcher and periodic rescan disabled</source>
<translation>sledování souborového systému a periodické skenování vypnuto</translation>
</message>
<message>
<location filename="../utils.cpp" line="107"/>
<location filename="../utils.cpp" line="100"/>
<source>file system watcher active, periodic rescan disabled</source>
<translation>sledování souborového systému zapnuto, periodické skenování vypnuto</translation>
</message>
<message>
<location filename="../utils.cpp" line="110"/>
<location filename="../utils.cpp" line="103"/>
<source>, file system watcher enabled</source>
<translation>, sledování souborového systému zapnuto</translation>
</message>
<message>
<location filename="../utils.cpp" line="111"/>
<location filename="../utils.cpp" line="104"/>
<source>, file system watcher disabled</source>
<translation>, sledování souborového systému vypnuto</translation>
</message>
<message>
<location filename="../utils.cpp" line="86"/>
<location filename="../utils.cpp" line="79"/>
<source>Synchronization of %1 on %2 complete</source>
<translation>Synchronizace %1 na %2 dokončena</translation>
</message>
<message>
<location filename="../utils.cpp" line="94"/>
<location filename="../utils.cpp" line="87"/>
<source>Synchronization of the following folders on %1 complete:
</source>
<translation>Synchronizace následujících adresářů na %1 dokončena:

View File

@ -4,42 +4,42 @@
<context>
<name>Data::SyncthingConnection</name>
<message>
<location filename="../syncthingconnection.cpp" line="177"/>
<location filename="../syncthingconnection.cpp" line="175"/>
<source>disconnected</source>
<translation>Verbindung getrennt</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="179"/>
<location filename="../syncthingconnection.cpp" line="177"/>
<source>reconnecting</source>
<translation>Verbindung wird hergestellt</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="181"/>
<location filename="../syncthingconnection.cpp" line="179"/>
<source>connected</source>
<translation>verbunden</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="183"/>
<location filename="../syncthingconnection.cpp" line="181"/>
<source>connected, scanning</source>
<translation>verbunden, scannt</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="185"/>
<location filename="../syncthingconnection.cpp" line="183"/>
<source>connected, paused</source>
<translation>verbunden, pausiert</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="187"/>
<location filename="../syncthingconnection.cpp" line="185"/>
<source>connected, synchronizing</source>
<translation>verbunden, am Synchronisieren</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="189"/>
<location filename="../syncthingconnection.cpp" line="187"/>
<source>connected, remote not in sync</source>
<translation>verbunden, entferntes Gerät nicht synchronisiert</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="799"/>
<location filename="../syncthingconnection.cpp" line="798"/>
<source>Unable to parse timestamp &quot;%1&quot; (%2): %3</source>
<translation>Fehler beim Parsen des Zeitstempels &quot;%1&quot; (Kontext: &quot;%2&quot;): %3</translation>
</message>
@ -48,13 +48,13 @@
<translation type="vanished">verbunden, nicht synchronisiert</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="191"/>
<location filename="../syncthingconnection.cpp" line="189"/>
<source>unknown</source>
<translation>Verbindungsstatus unbekannt</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="341"/>
<location filename="../syncthingconnection.cpp" line="531"/>
<location filename="../syncthingconnection.cpp" line="340"/>
<location filename="../syncthingconnection.cpp" line="530"/>
<source>Connection configuration is insufficient.</source>
<translation>Verbindungskonfiguration is ungenügend</translation>
</message>
@ -89,12 +89,12 @@
<translation>Fehler beim Abfragen des Syncthing-Logs: </translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="872"/>
<location filename="../syncthingconnection.cpp" line="871"/>
<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="878"/>
<location filename="../syncthingconnection.cpp" line="877"/>
<source>Unable to load certificate used by Syncthing.</source>
<translation>Das SSL-Zertifikat von Syncthing kann nicht ausgelesen werden.</translation>
</message>
@ -165,17 +165,17 @@
<translation>Fehler beim Löschen der Fehlermeldungen: </translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="2021"/>
<location filename="../syncthingconnection_requests.cpp" line="1894"/>
<source>Unable to parse Syncthing events: </source>
<translation>Fehler beim Auslesen der Syncthing-Ereignisse: </translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="2048"/>
<location filename="../syncthingconnection_requests.cpp" line="1921"/>
<source>Unable to request Syncthing events: </source>
<translation>Fehler beim Abfragen der Syncthing-Ereignisse: </translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="1845"/>
<location filename="../syncthingconnection_requests.cpp" line="1718"/>
<source>Unable to post config: </source>
<translation>Fehler beim Senden der neuen Konfiguration: </translation>
</message>
@ -250,38 +250,27 @@
<translation>Fehler beim Zurücksetzen: </translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="1713"/>
<location filename="../syncthingconnection_requests.cpp" line="1660"/>
<source>Unable to parse response for browsing &quot;%1&quot;: </source>
<translation>Fehler beim Auslesen der Inhalte des Ordners &quot;%1&quot;: </translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="1727"/>
<location filename="../syncthingconnection_requests.cpp" line="1674"/>
<source>Unable to browse &quot;%1&quot;: </source>
<translation>Fehler beim Durchsuchen des Ordners &quot;%1&quot;: </translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="1751"/>
<location filename="../syncthingconnection_requests.cpp" line="1775"/>
<source>Unable to query ignore patterns of &quot;%1&quot;: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="1801"/>
<source>Unable to change ignore patterns of &quot;%1&quot;: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="2629"/>
<location filename="../syncthingconnection_requests.cpp" line="2502"/>
<source>Unable to parse disk events: </source>
<translation>Fehler beim Auslesen der letzten Änderungen: </translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="2652"/>
<location filename="../syncthingconnection_requests.cpp" line="2525"/>
<source>Unable to request disk events: </source>
<translation>Fehler beim Anfordern der letzten Änderungen: </translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1071"/>
<location filename="../syncthingconnection.cpp" line="1070"/>
<source>at offset %1</source>
<translation>bei Zeichen %1</translation>
</message>
@ -341,27 +330,27 @@
<context>
<name>Data::SyncthingService</name>
<message>
<location filename="../syncthingservice.cpp" line="394"/>
<location filename="../syncthingservice.cpp" line="378"/>
<source>start unit</source>
<translation>Starten der Unit</translation>
</message>
<message>
<location filename="../syncthingservice.cpp" line="396"/>
<location filename="../syncthingservice.cpp" line="380"/>
<source>stop unit</source>
<translation>Stoppen der Unit</translation>
</message>
<message>
<location filename="../syncthingservice.cpp" line="411"/>
<location filename="../syncthingservice.cpp" line="395"/>
<source>enable unit</source>
<translation>Aktivieren der Unit</translation>
</message>
<message>
<location filename="../syncthingservice.cpp" line="413"/>
<location filename="../syncthingservice.cpp" line="397"/>
<source>disable unit</source>
<translation>Deaktivieren der Unit</translation>
</message>
<message>
<location filename="../syncthingservice.cpp" line="423"/>
<location filename="../syncthingservice.cpp" line="407"/>
<source>reload all unit files</source>
<translation>Aktualisieren aller Unit-Dateien</translation>
</message>
@ -369,22 +358,22 @@
<context>
<name>Data::Utils</name>
<message>
<location filename="../utils.cpp" line="37"/>
<location filename="../utils.cpp" line="30"/>
<source>%1 ago</source>
<translation>vor %1</translation>
</message>
<message>
<location filename="../utils.cpp" line="40"/>
<location filename="../utils.cpp" line="33"/>
<source>right now</source>
<translation>gerade eben</translation>
</message>
<message>
<location filename="../utils.cpp" line="51"/>
<location filename="../utils.cpp" line="44"/>
<source>unknown</source>
<translation>unbekannt</translation>
</message>
<message numerus="yes">
<location filename="../utils.cpp" line="67"/>
<location filename="../utils.cpp" line="60"/>
<source>%1 file(s)</source>
<translation>
<numerusform>%1 Datei</numerusform>
@ -392,7 +381,7 @@
</translation>
</message>
<message numerus="yes">
<location filename="../utils.cpp" line="68"/>
<location filename="../utils.cpp" line="61"/>
<source>%1 dir(s)</source>
<translation>
<numerusform>%1 Verz.</numerusform>
@ -400,44 +389,44 @@
</translation>
</message>
<message>
<location filename="../utils.cpp" line="83"/>
<location filename="../utils.cpp" line="76"/>
<source>Synchronization of local folder %1 complete</source>
<translation>%1 wurde lokal synchronisiert</translation>
</message>
<message>
<location filename="../utils.cpp" line="91"/>
<location filename="../utils.cpp" line="84"/>
<source>Synchronization of the following local folders complete:
</source>
<translation>Folgende Ordner wurden lokal synchronisiert:
</translation>
</message>
<message>
<location filename="../utils.cpp" line="105"/>
<location filename="../utils.cpp" line="98"/>
<source>file system watcher and periodic rescan disabled</source>
<translation>Dateisystemüberwachung und periodischer Scan deaktiviert</translation>
</message>
<message>
<location filename="../utils.cpp" line="107"/>
<location filename="../utils.cpp" line="100"/>
<source>file system watcher active, periodic rescan disabled</source>
<translation>Dateisystemüberwachung aktiv, periodischer Scan deaktiviert</translation>
</message>
<message>
<location filename="../utils.cpp" line="110"/>
<location filename="../utils.cpp" line="103"/>
<source>, file system watcher enabled</source>
<translation>, Dateisystemüberwachung aktiviert</translation>
</message>
<message>
<location filename="../utils.cpp" line="111"/>
<location filename="../utils.cpp" line="104"/>
<source>, file system watcher disabled</source>
<translation>, Dateisystemüberwachung deaktiviert</translation>
</message>
<message>
<location filename="../utils.cpp" line="86"/>
<location filename="../utils.cpp" line="79"/>
<source>Synchronization of %1 on %2 complete</source>
<translation>%1 wurde auf %2 synchronisiert</translation>
</message>
<message>
<location filename="../utils.cpp" line="94"/>
<location filename="../utils.cpp" line="87"/>
<source>Synchronization of the following folders on %1 complete:
</source>
<translation>Folgende Ordner wurden auf %1 synchronisiert:

View File

@ -4,53 +4,53 @@
<context>
<name>Data::SyncthingConnection</name>
<message>
<location filename="../syncthingconnection.cpp" line="177"/>
<location filename="../syncthingconnection.cpp" line="175"/>
<source>disconnected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="179"/>
<location filename="../syncthingconnection.cpp" line="177"/>
<source>reconnecting</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="181"/>
<location filename="../syncthingconnection.cpp" line="179"/>
<source>connected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="183"/>
<location filename="../syncthingconnection.cpp" line="181"/>
<source>connected, scanning</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="185"/>
<location filename="../syncthingconnection.cpp" line="183"/>
<source>connected, paused</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="187"/>
<location filename="../syncthingconnection.cpp" line="185"/>
<source>connected, synchronizing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="189"/>
<location filename="../syncthingconnection.cpp" line="187"/>
<source>connected, remote not in sync</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="191"/>
<location filename="../syncthingconnection.cpp" line="189"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="341"/>
<location filename="../syncthingconnection.cpp" line="531"/>
<location filename="../syncthingconnection.cpp" line="340"/>
<location filename="../syncthingconnection.cpp" line="530"/>
<source>Connection configuration is insufficient.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="799"/>
<location filename="../syncthingconnection.cpp" line="798"/>
<source>Unable to parse timestamp &quot;%1&quot; (%2): %3</source>
<translation type="unfinished"></translation>
</message>
@ -85,12 +85,12 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="872"/>
<location filename="../syncthingconnection.cpp" line="871"/>
<source>Unable to locate certificate used by Syncthing.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="878"/>
<location filename="../syncthingconnection.cpp" line="877"/>
<source>Unable to load certificate used by Syncthing.</source>
<translation type="unfinished"></translation>
</message>
@ -161,17 +161,17 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="2021"/>
<location filename="../syncthingconnection_requests.cpp" line="1894"/>
<source>Unable to parse Syncthing events: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="2048"/>
<location filename="../syncthingconnection_requests.cpp" line="1921"/>
<source>Unable to request Syncthing events: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="1845"/>
<location filename="../syncthingconnection_requests.cpp" line="1718"/>
<source>Unable to post config: </source>
<translation type="unfinished"></translation>
</message>
@ -246,38 +246,27 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="1713"/>
<location filename="../syncthingconnection_requests.cpp" line="1660"/>
<source>Unable to parse response for browsing &quot;%1&quot;: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="1727"/>
<location filename="../syncthingconnection_requests.cpp" line="1674"/>
<source>Unable to browse &quot;%1&quot;: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="1751"/>
<location filename="../syncthingconnection_requests.cpp" line="1775"/>
<source>Unable to query ignore patterns of &quot;%1&quot;: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="1801"/>
<source>Unable to change ignore patterns of &quot;%1&quot;: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="2629"/>
<location filename="../syncthingconnection_requests.cpp" line="2502"/>
<source>Unable to parse disk events: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="2652"/>
<location filename="../syncthingconnection_requests.cpp" line="2525"/>
<source>Unable to request disk events: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1071"/>
<location filename="../syncthingconnection.cpp" line="1070"/>
<source>at offset %1</source>
<translation type="unfinished"></translation>
</message>
@ -333,27 +322,27 @@
<context>
<name>Data::SyncthingService</name>
<message>
<location filename="../syncthingservice.cpp" line="394"/>
<location filename="../syncthingservice.cpp" line="378"/>
<source>start unit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingservice.cpp" line="396"/>
<location filename="../syncthingservice.cpp" line="380"/>
<source>stop unit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingservice.cpp" line="411"/>
<location filename="../syncthingservice.cpp" line="395"/>
<source>enable unit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingservice.cpp" line="413"/>
<location filename="../syncthingservice.cpp" line="397"/>
<source>disable unit</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingservice.cpp" line="423"/>
<location filename="../syncthingservice.cpp" line="407"/>
<source>reload all unit files</source>
<translation type="unfinished"></translation>
</message>
@ -361,22 +350,22 @@
<context>
<name>Data::Utils</name>
<message>
<location filename="../utils.cpp" line="37"/>
<location filename="../utils.cpp" line="30"/>
<source>%1 ago</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../utils.cpp" line="40"/>
<location filename="../utils.cpp" line="33"/>
<source>right now</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../utils.cpp" line="51"/>
<location filename="../utils.cpp" line="44"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message numerus="yes">
<location filename="../utils.cpp" line="67"/>
<location filename="../utils.cpp" line="60"/>
<source>%1 file(s)</source>
<translation>
<numerusform>%1 file</numerusform>
@ -384,7 +373,7 @@
</translation>
</message>
<message numerus="yes">
<location filename="../utils.cpp" line="68"/>
<location filename="../utils.cpp" line="61"/>
<source>%1 dir(s)</source>
<translation>
<numerusform>%1 dir</numerusform>
@ -392,43 +381,43 @@
</translation>
</message>
<message>
<location filename="../utils.cpp" line="83"/>
<location filename="../utils.cpp" line="76"/>
<source>Synchronization of local folder %1 complete</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../utils.cpp" line="91"/>
<location filename="../utils.cpp" line="84"/>
<source>Synchronization of the following local folders complete:
</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../utils.cpp" line="105"/>
<location filename="../utils.cpp" line="98"/>
<source>file system watcher and periodic rescan disabled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../utils.cpp" line="107"/>
<location filename="../utils.cpp" line="100"/>
<source>file system watcher active, periodic rescan disabled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../utils.cpp" line="110"/>
<location filename="../utils.cpp" line="103"/>
<source>, file system watcher enabled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../utils.cpp" line="111"/>
<location filename="../utils.cpp" line="104"/>
<source>, file system watcher disabled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../utils.cpp" line="86"/>
<location filename="../utils.cpp" line="79"/>
<source>Synchronization of %1 on %2 complete</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../utils.cpp" line="94"/>
<location filename="../utils.cpp" line="87"/>
<source>Synchronization of the following folders on %1 complete:
</source>
<translation type="unfinished"></translation>

View File

@ -170,114 +170,103 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="1713"/>
<location filename="../syncthingconnection_requests.cpp" line="1660"/>
<source>Unable to parse response for browsing &quot;%1&quot;: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="1727"/>
<location filename="../syncthingconnection_requests.cpp" line="1674"/>
<source>Unable to browse &quot;%1&quot;: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="1751"/>
<location filename="../syncthingconnection_requests.cpp" line="1775"/>
<source>Unable to query ignore patterns of &quot;%1&quot;: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="1801"/>
<source>Unable to change ignore patterns of &quot;%1&quot;: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="1845"/>
<location filename="../syncthingconnection_requests.cpp" line="1718"/>
<source>Unable to post config: </source>
<translation> </translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="2021"/>
<location filename="../syncthingconnection_requests.cpp" line="1894"/>
<source>Unable to parse Syncthing events: </source>
<translation> Syncthing </translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="2048"/>
<location filename="../syncthingconnection_requests.cpp" line="1921"/>
<source>Unable to request Syncthing events: </source>
<translation> Syncthing </translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="2629"/>
<location filename="../syncthingconnection_requests.cpp" line="2502"/>
<source>Unable to parse disk events: </source>
<translation> </translation>
</message>
<message>
<location filename="../syncthingconnection_requests.cpp" line="2652"/>
<location filename="../syncthingconnection_requests.cpp" line="2525"/>
<source>Unable to request disk events: </source>
<translation> </translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="177"/>
<location filename="../syncthingconnection.cpp" line="175"/>
<source>disconnected</source>
<translation>线</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="179"/>
<location filename="../syncthingconnection.cpp" line="177"/>
<source>reconnecting</source>
<translation></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="181"/>
<location filename="../syncthingconnection.cpp" line="179"/>
<source>connected</source>
<translation></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="183"/>
<location filename="../syncthingconnection.cpp" line="181"/>
<source>connected, scanning</source>
<translation></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="185"/>
<location filename="../syncthingconnection.cpp" line="183"/>
<source>connected, paused</source>
<translation></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="187"/>
<location filename="../syncthingconnection.cpp" line="185"/>
<source>connected, synchronizing</source>
<translation></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="189"/>
<location filename="../syncthingconnection.cpp" line="187"/>
<source>connected, remote not in sync</source>
<translation></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="191"/>
<location filename="../syncthingconnection.cpp" line="189"/>
<source>unknown</source>
<translation></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="341"/>
<location filename="../syncthingconnection.cpp" line="531"/>
<location filename="../syncthingconnection.cpp" line="340"/>
<location filename="../syncthingconnection.cpp" line="530"/>
<source>Connection configuration is insufficient.</source>
<translation></translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="799"/>
<location filename="../syncthingconnection.cpp" line="798"/>
<source>Unable to parse timestamp &quot;%1&quot; (%2): %3</source>
<translation> &quot;%1&quot; (%2): %3</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="872"/>
<location filename="../syncthingconnection.cpp" line="871"/>
<source>Unable to locate certificate used by Syncthing.</source>
<translation> Syncthing 使</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="878"/>
<location filename="../syncthingconnection.cpp" line="877"/>
<source>Unable to load certificate used by Syncthing.</source>
<translation> Syncthing 使</translation>
</message>
<message>
<location filename="../syncthingconnection.cpp" line="1071"/>
<location filename="../syncthingconnection.cpp" line="1070"/>
<source>at offset %1</source>
<translation> %1 </translation>
</message>
@ -333,27 +322,27 @@
<context>
<name>Data::SyncthingService</name>
<message>
<location filename="../syncthingservice.cpp" line="394"/>
<location filename="../syncthingservice.cpp" line="378"/>
<source>start unit</source>
<translation></translation>
</message>
<message>
<location filename="../syncthingservice.cpp" line="396"/>
<location filename="../syncthingservice.cpp" line="380"/>
<source>stop unit</source>
<translation></translation>
</message>
<message>
<location filename="../syncthingservice.cpp" line="411"/>
<location filename="../syncthingservice.cpp" line="395"/>
<source>enable unit</source>
<translation></translation>
</message>
<message>
<location filename="../syncthingservice.cpp" line="413"/>
<location filename="../syncthingservice.cpp" line="397"/>
<source>disable unit</source>
<translation></translation>
</message>
<message>
<location filename="../syncthingservice.cpp" line="423"/>
<location filename="../syncthingservice.cpp" line="407"/>
<source>reload all unit files</source>
<translation type="unfinished"></translation>
</message>
@ -361,75 +350,75 @@
<context>
<name>Data::Utils</name>
<message>
<location filename="../utils.cpp" line="37"/>
<location filename="../utils.cpp" line="30"/>
<source>%1 ago</source>
<translation>%1 </translation>
</message>
<message>
<location filename="../utils.cpp" line="40"/>
<location filename="../utils.cpp" line="33"/>
<source>right now</source>
<translation></translation>
</message>
<message>
<location filename="../utils.cpp" line="51"/>
<location filename="../utils.cpp" line="44"/>
<source>unknown</source>
<translation></translation>
</message>
<message numerus="yes">
<location filename="../utils.cpp" line="67"/>
<location filename="../utils.cpp" line="60"/>
<source>%1 file(s)</source>
<translation>
<numerusform>%1 </numerusform>
</translation>
</message>
<message numerus="yes">
<location filename="../utils.cpp" line="68"/>
<location filename="../utils.cpp" line="61"/>
<source>%1 dir(s)</source>
<translation>
<numerusform>%1 </numerusform>
</translation>
</message>
<message>
<location filename="../utils.cpp" line="83"/>
<location filename="../utils.cpp" line="76"/>
<source>Synchronization of local folder %1 complete</source>
<translation> %1 </translation>
</message>
<message>
<location filename="../utils.cpp" line="86"/>
<location filename="../utils.cpp" line="79"/>
<source>Synchronization of %1 on %2 complete</source>
<translation> %1 %2 </translation>
</message>
<message>
<location filename="../utils.cpp" line="91"/>
<location filename="../utils.cpp" line="84"/>
<source>Synchronization of the following local folders complete:
</source>
<translation>
</translation>
</message>
<message>
<location filename="../utils.cpp" line="94"/>
<location filename="../utils.cpp" line="87"/>
<source>Synchronization of the following folders on %1 complete:
</source>
<translation> %1
</translation>
</message>
<message>
<location filename="../utils.cpp" line="105"/>
<location filename="../utils.cpp" line="98"/>
<source>file system watcher and periodic rescan disabled</source>
<translation></translation>
</message>
<message>
<location filename="../utils.cpp" line="107"/>
<location filename="../utils.cpp" line="100"/>
<source>file system watcher active, periodic rescan disabled</source>
<translation></translation>
</message>
<message>
<location filename="../utils.cpp" line="110"/>
<location filename="../utils.cpp" line="103"/>
<source>, file system watcher enabled</source>
<translation></translation>
</message>
<message>
<location filename="../utils.cpp" line="111"/>
<location filename="../utils.cpp" line="104"/>
<source>, file system watcher disabled</source>
<translation></translation>
</message>

View File

@ -46,7 +46,7 @@ set(QT_TEST_SRC_FILES_models syncthingicons.cpp syncthingmodel.cpp syncthingdire
find_package(${PACKAGE_NAMESPACE_PREFIX}c++utilities${CONFIGURATION_PACKAGE_SUFFIX} 5.0.0 REQUIRED)
use_cpp_utilities()
# find qtutilities
# find qtutilities (only CMake modules used)
find_package(${PACKAGE_NAMESPACE_PREFIX}qtutilities${CONFIGURATION_PACKAGE_SUFFIX_QTUTILITIES} 6.3.0 REQUIRED)
use_qt_utilities()

View File

@ -4,13 +4,8 @@
#include <syncthingconnector/syncthingconnection.h>
#include <syncthingconnector/utils.h>
#include <qtutilities/misc/desktoputils.h>
#include <c++utilities/conversion/stringconversion.h>
#include <QClipboard>
#include <QGuiApplication>
#include <QNetworkReply>
#include <QStringBuilder>
using namespace std;
@ -18,65 +13,35 @@ using namespace CppUtilities;
namespace Data {
/// \cond
static void populatePath(const QString &root, std::vector<std::unique_ptr<SyncthingItem>> &items)
{
if (root.isEmpty()) {
for (auto &item : items) {
populatePath(item->path = item->name, item->children);
}
} else {
for (auto &item : items) {
populatePath(item->path = root % QChar('/') % item->name, item->children);
}
}
}
static void addErrorItem(std::vector<std::unique_ptr<SyncthingItem>> &items, QString &&errorMessage)
{
if (errorMessage.isEmpty()) {
return;
}
auto &errorItem = items.emplace_back(std::make_unique<SyncthingItem>());
errorItem->name = std::move(errorMessage);
errorItem->type = SyncthingItemType::Error;
errorItem->childrenPopulated = true;
}
static void addLoadingItem(std::vector<std::unique_ptr<SyncthingItem>> &items)
{
if (!items.empty()) {
return;
}
auto &loadingItem = items.emplace_back(std::make_unique<SyncthingItem>());
loadingItem->name = QStringLiteral("Loading…");
loadingItem->type = SyncthingItemType::Loading;
loadingItem->childrenPopulated = true;
}
/// \endcond
SyncthingFileModel::SyncthingFileModel(SyncthingConnection &connection, const SyncthingDir &dir, QObject *parent)
: SyncthingModel(connection, parent)
, m_connection(connection)
, m_dirId(dir.id)
, m_root(std::make_unique<SyncthingItem>())
{
if (m_connection.isLocal()) {
m_localPath = dir.pathWithoutTrailingSlash().toString();
}
m_root->name = dir.displayName();
m_root->modificationTime = dir.lastFileTime;
m_root->size = dir.globalStats.bytes;
m_root->type = SyncthingItemType::Directory;
m_root->path = QStringLiteral(""); // assign an empty QString that is not null
m_fetchQueue.append(QString());
processFetchQueue();
m_connection.browse(m_dirId, QString(), 1, [this](std::vector<std::unique_ptr<SyncthingItem>> &&items, QString &&errorMessage) {
Q_UNUSED(errorMessage)
m_fetchQueue.removeAll(QString());
if (items.empty()) {
return;
}
const auto last = items.size() - 1;
beginInsertRows(index(0, 0), 0, last < std::numeric_limits<int>::max() ? static_cast<int>(last) : std::numeric_limits<int>::max());
m_root->children = std::move(items);
m_root->childrenPopulated = true;
endInsertRows();
});
}
SyncthingFileModel::~SyncthingFileModel()
{
QObject::disconnect(m_pendingRequest.connection);
delete m_pendingRequest.reply;
QObject::disconnect(m_pendingRequest);
}
QHash<int, QByteArray> SyncthingFileModel::roleNames() const
@ -85,7 +50,6 @@ QHash<int, QByteArray> SyncthingFileModel::roleNames() const
{ NameRole, "name" },
{ SizeRole, "size" },
{ ModificationTimeRole, "modificationTime" },
{ PathRole, "path" },
{ Actions, "actions" },
{ ActionNames, "actionNames" },
{ ActionIcons, "actionIcons" },
@ -141,11 +105,27 @@ QModelIndex SyncthingFileModel::index(const QString &path) const
QString SyncthingFileModel::path(const QModelIndex &index) const
{
auto res = QString();
if (!index.isValid()) {
return QString();
return res;
}
auto *item = reinterpret_cast<SyncthingItem *>(index.internalPointer());
return item->isFilesystemItem() ? item->path : QString();
auto parts = QStringList();
auto size = QString::size_type();
parts.reserve(reinterpret_cast<SyncthingItem *>(index.internalPointer())->level + 1);
for (auto i = index; i.isValid(); i = i.parent()) {
const auto *const item = reinterpret_cast<SyncthingItem *>(i.internalPointer());
if (item == m_root.get()) {
break;
}
parts.append(reinterpret_cast<SyncthingItem *>(i.internalPointer())->name);
size += parts.back().size();
}
res.reserve(size + parts.size());
for (auto i = parts.rbegin(), end = parts.rend(); i != end; ++i) {
res += *i;
res += QChar('/');
}
return res;
}
QModelIndex SyncthingFileModel::parent(const QModelIndex &child) const
@ -195,22 +175,9 @@ QVariant SyncthingFileModel::data(const QModelIndex &index, int role) const
case 0:
return item->name;
case 1:
switch (item->type) {
case SyncthingItemType::File:
return QString::fromStdString(CppUtilities::dataSizeToString(item->size));
case SyncthingItemType::Directory:
return item->childrenPopulated ? tr("%1 elements").arg(item->children.size()) : QString();
default:
return QString();
}
return QString::fromStdString(CppUtilities::dataSizeToString(item->size));
case 2:
switch (item->type) {
case SyncthingItemType::File:
case SyncthingItemType::Directory:
return QString::fromStdString(item->modificationTime.toString());
default:
return QString();
}
return QString::fromStdString(item->modificationTime.toString());
}
break;
case Qt::DecorationRole: {
@ -222,66 +189,33 @@ QVariant SyncthingFileModel::data(const QModelIndex &index, int role) const
return icons.file;
case SyncthingItemType::Directory:
return icons.folder;
case SyncthingItemType::Symlink:
return icons.link;
case SyncthingItemType::Error:
return icons.exclamationTriangle;
default:
return icons.cogs;
}
}
break;
}
case Qt::ToolTipRole:
switch (index.column()) {
case 0:
return item->isFilesystemItem() ? item->path : item->name;
case 2:
return agoString(item->modificationTime);
}
break;
case NameRole:
return item->name;
case SizeRole:
return static_cast<qsizetype>(item->size);
case ModificationTimeRole:
return QString::fromStdString(item->modificationTime.toString());
case PathRole:
return item->isFilesystemItem() ? item->path : QString();
case Actions: {
auto res = QStringList();
res.reserve(3);
case Actions:
if (item->type == SyncthingItemType::Directory) {
res << QStringLiteral("refresh");
return QStringList({ QStringLiteral("refresh") });
}
if (!m_localPath.isEmpty() && item->isFilesystemItem()) {
res << QStringLiteral("open") << QStringLiteral("copy-path");
}
return res;
}
case ActionNames: {
auto res = QStringList();
res.reserve(3);
break;
case ActionNames:
if (item->type == SyncthingItemType::Directory) {
res << tr("Refresh");
return QStringList({ tr("Refresh") });
}
if (!m_localPath.isEmpty() && item->isFilesystemItem()) {
res << (item->type == SyncthingItemType::Directory ? tr("Browse locally") : tr("Open local version")) << tr("Copy local path");
}
return res;
}
case ActionIcons: {
auto res = QVariantList();
res.reserve(3);
break;
case ActionIcons:
if (item->type == SyncthingItemType::Directory) {
res << QIcon::fromTheme(QStringLiteral("view-refresh"), QIcon(QStringLiteral(":/icons/hicolor/scalable/actions/view-refresh.svg")));
return QStringList({ QStringLiteral("view-refresh") });
}
if (!m_localPath.isEmpty() && item->isFilesystemItem()) {
res << QIcon::fromTheme(QStringLiteral("folder"), QIcon(QStringLiteral(":/icons/hicolor/scalable/places/folder-open.svg")));
res << QIcon::fromTheme(QStringLiteral("edit-copy"), QIcon(QStringLiteral(":/icons/hicolor/scalable/places/edit-copy.svg")));
}
return res;
}
break;
}
return QVariant();
}
@ -321,13 +255,22 @@ bool SyncthingFileModel::canFetchMore(const QModelIndex &parent) const
return !parentItem->childrenPopulated && parentItem->type == SyncthingItemType::Directory;
}
/// \cond
static void addLevel(std::vector<std::unique_ptr<SyncthingItem>> &items, int level)
{
for (auto &item : items) {
item->level += level;
addLevel(item->children, level);
}
}
/// \endcond
void SyncthingFileModel::fetchMore(const QModelIndex &parent)
{
const auto parentPath = path(parent);
if (parentPath.isNull() || m_fetchQueue.contains(parentPath)) {
if (!parent.isValid()) {
return;
}
m_fetchQueue.append(parentPath);
m_fetchQueue.append(path(parent));
if (m_fetchQueue.size() == 1) {
processFetchQueue();
}
@ -338,18 +281,6 @@ void SyncthingFileModel::triggerAction(const QString &action, const QModelIndex
if (action == QLatin1String("refresh")) {
fetchMore(index);
}
if (m_localPath.isEmpty()) {
return;
}
const auto relPath = index.data(PathRole).toString();
const auto path = relPath.isEmpty() ? m_localPath : QString(m_localPath % QChar('/') % relPath);
if (action == QLatin1String("open")) {
QtUtilities::openLocalFileOrDir(path);
} else if (action == QLatin1String("copy-path")) {
if (auto *const clipboard = QGuiApplication::clipboard()) {
clipboard->setText(path);
}
}
}
void SyncthingFileModel::handleConfigInvalidated()
@ -371,54 +302,33 @@ void SyncthingFileModel::processFetchQueue()
return;
}
const auto &path = m_fetchQueue.front();
const auto rootIndex = index(path);
if (!rootIndex.isValid()) {
m_fetchQueue.removeAll(path);
processFetchQueue();
return;
}
// add loading item if there are items yet at all
auto *rootItem = reinterpret_cast<SyncthingItem *>(rootIndex.internalPointer());
if (rootItem->children.empty()) {
beginInsertRows(rootIndex, 0, 0);
addLoadingItem(rootItem->children);
endInsertRows();
}
m_pendingRequest = m_connection.browse(
m_dirId, path, 1, [this, p = path](std::vector<std::unique_ptr<SyncthingItem>> &&items, QString &&errorMessage) mutable {
m_pendingRequest.reply = nullptr;
m_fetchQueue.removeAll(p);
addErrorItem(items, std::move(errorMessage));
Q_UNUSED(errorMessage)
m_fetchQueue.removeAll(p);
const auto refreshedIndex = index(p);
if (!refreshedIndex.isValid()) {
processFetchQueue();
return;
}
auto *const refreshedItem = reinterpret_cast<SyncthingItem *>(refreshedIndex.internalPointer());
const auto previousChildCount = refreshedItem->children.size();
if (previousChildCount) {
if (!refreshedItem->children.empty()) {
beginRemoveRows(refreshedIndex, 0, static_cast<int>(refreshedItem->children.size() - 1));
refreshedItem->children.clear();
endRemoveRows();
}
if (!items.empty()) {
const auto last = items.size() - 1;
addLevel(items, refreshedItem->level);
for (auto &item : items) {
item->parent = refreshedItem;
}
populatePath(refreshedItem->path, items);
beginInsertRows(refreshedIndex, 0, last < std::numeric_limits<int>::max() ? static_cast<int>(last) : std::numeric_limits<int>::max());
refreshedItem->children = std::move(items);
refreshedItem->childrenPopulated = true;
endInsertRows();
}
if (refreshedItem->children.size() != previousChildCount) {
const auto sizeIndex = refreshedIndex.siblingAtColumn(1);
emit dataChanged(sizeIndex, sizeIndex, QVector<int>{ Qt::DisplayRole });
}
processFetchQueue();
});
}

View File

@ -6,21 +6,14 @@
#include <syncthingconnector/syncthingconnection.h>
#include <memory>
#include <vector>
namespace Data {
class LIB_SYNCTHING_MODEL_EXPORT SyncthingFileModel : public SyncthingModel {
Q_OBJECT
public:
enum SyncthingFileModelRole {
NameRole = SyncthingModelUserRole + 1,
SizeRole,
ModificationTimeRole,
PathRole,
Actions,
ActionNames,
ActionIcons
};
enum SyncthingFileModelRole { NameRole = SyncthingModelUserRole + 1, SizeRole, ModificationTimeRole, Actions, ActionNames, ActionIcons };
explicit SyncthingFileModel(SyncthingConnection &connection, const SyncthingDir &dir, QObject *parent = nullptr);
~SyncthingFileModel() override;
@ -53,9 +46,8 @@ private:
private:
SyncthingConnection &m_connection;
QString m_dirId;
QString m_localPath;
QStringList m_fetchQueue;
SyncthingConnection::QueryResult m_pendingRequest;
QMetaObject::Connection m_pendingRequest;
std::unique_ptr<SyncthingItem> m_root;
};

View File

@ -112,7 +112,7 @@ void ModelTests::testFileModel()
QVERIFY(rootIdx.isValid());
QVERIFY(!model.index(1, 0).isValid());
QCOMPARE(model.rowCount(rootIdx), 1);
QCOMPARE(model.index(0, 0, rootIdx).data(), QStringLiteral("Loading…"));
QCOMPARE(model.index(0, 0, rootIdx).data(), QVariant());
QCOMPARE(model.index(1, 0, rootIdx).data(), QVariant());
QVERIFY(model.canFetchMore(rootIdx));
@ -135,8 +135,8 @@ void ModelTests::testFileModel()
const auto androidIdx = QPersistentModelIndex(model.index(0, 0, rootIdx));
const auto cameraIdx = QPersistentModelIndex(model.index(1, 0, rootIdx));
const auto nestedIdx = QPersistentModelIndex(model.index(0, 0, cameraIdx));
const auto initialAndroidPtr = androidIdx.internalPointer();
const auto initialCameraPtr = cameraIdx.internalPointer();
const auto initialAndroidPtr = androidIdx.constInternalPointer();
const auto initialCameraPtr = cameraIdx.constInternalPointer();
QVERIFY(androidIdx.isValid());
QVERIFY(cameraIdx.isValid());
QCOMPARE(androidIdx.parent(), rootIdx);
@ -159,7 +159,7 @@ void ModelTests::testFileModel()
QCOMPARE(model.index(5, 3, cameraIdx).data(), QVariant());
// test conversion of indexes to/from paths
const auto testPath = QStringLiteral("Camera/IMG_20201213_122504.jpg");
const auto testPath = QStringLiteral("Camera/IMG_20201213_122504.jpg/");
const auto testPathIdx = model.index(2, 0, cameraIdx);
QCOMPARE(model.path(testPathIdx), testPath);
QCOMPARE(model.index(testPath), testPathIdx);
@ -172,9 +172,9 @@ void ModelTests::testFileModel()
// verify that only the root index is still valid (all other indexes have been invalidated)
QVERIFY(rootIdx.isValid());
QCOMPARE(model.rowCount(rootIdx), 2);
QVERIFY(androidIdx.internalPointer() != initialAndroidPtr);
QVERIFY(androidIdx.constInternalPointer() != initialAndroidPtr);
QVERIFY(!androidIdx.isValid());
QVERIFY(cameraIdx.internalPointer() != initialCameraPtr);
QVERIFY(cameraIdx.constInternalPointer() != initialCameraPtr);
QVERIFY(!cameraIdx.isValid());
QVERIFY(!nestedIdx.isValid());

View File

@ -4,42 +4,42 @@
<context>
<name>Data::StatusIconSettings</name>
<message>
<location filename="../syncthingicons.cpp" line="231"/>
<location filename="../syncthingicons.cpp" line="229"/>
<source>Misc. notifications</source>
<translation>Různá oznámení</translation>
</message>
<message>
<location filename="../syncthingicons.cpp" line="232"/>
<location filename="../syncthingicons.cpp" line="230"/>
<source>Error</source>
<translation>Chyba</translation>
</message>
<message>
<location filename="../syncthingicons.cpp" line="233"/>
<location filename="../syncthingicons.cpp" line="231"/>
<source>Warning</source>
<translation>Varování</translation>
</message>
<message>
<location filename="../syncthingicons.cpp" line="234"/>
<location filename="../syncthingicons.cpp" line="232"/>
<source>Idle</source>
<translation>Nečinné</translation>
</message>
<message>
<location filename="../syncthingicons.cpp" line="235"/>
<location filename="../syncthingicons.cpp" line="233"/>
<source>Scanning</source>
<translation>Skenuje</translation>
</message>
<message>
<location filename="../syncthingicons.cpp" line="236"/>
<location filename="../syncthingicons.cpp" line="234"/>
<source>Synchronizing</source>
<translation>Synchronizuje</translation>
</message>
<message>
<location filename="../syncthingicons.cpp" line="237"/>
<location filename="../syncthingicons.cpp" line="235"/>
<source>Paused</source>
<translation>Pozastaveno</translation>
</message>
<message>
<location filename="../syncthingicons.cpp" line="238"/>
<location filename="../syncthingicons.cpp" line="236"/>
<source>Disconnected</source>
<translation>Odpojeno</translation>
</message>
@ -382,45 +382,25 @@
<context>
<name>Data::SyncthingFileModel</name>
<message>
<location filename="../syncthingfilemodel.cpp" line="194"/>
<location filename="../syncthingfilemodel.cpp" line="111"/>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfilemodel.cpp" line="196"/>
<location filename="../syncthingfilemodel.cpp" line="113"/>
<source>Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfilemodel.cpp" line="198"/>
<location filename="../syncthingfilemodel.cpp" line="115"/>
<source>Last modified</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfilemodel.cpp" line="225"/>
<source>%1 elements</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfilemodel.cpp" line="289"/>
<location filename="../syncthingfilemodel.cpp" line="171"/>
<source>Refresh</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfilemodel.cpp" line="292"/>
<source>Open local version</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfilemodel.cpp" line="292"/>
<source>Copy local path</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfilemodel.cpp" line="292"/>
<source>Browse locally</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Data::SyncthingRecentChangesModel</name>

View File

@ -4,42 +4,42 @@
<context>
<name>Data::StatusIconSettings</name>
<message>
<location filename="../syncthingicons.cpp" line="231"/>
<location filename="../syncthingicons.cpp" line="229"/>
<source>Misc. notifications</source>
<translation>Benachrichtigungen</translation>
</message>
<message>
<location filename="../syncthingicons.cpp" line="232"/>
<location filename="../syncthingicons.cpp" line="230"/>
<source>Error</source>
<translation>Fehler</translation>
</message>
<message>
<location filename="../syncthingicons.cpp" line="233"/>
<location filename="../syncthingicons.cpp" line="231"/>
<source>Warning</source>
<translation>Warnungen</translation>
</message>
<message>
<location filename="../syncthingicons.cpp" line="234"/>
<location filename="../syncthingicons.cpp" line="232"/>
<source>Idle</source>
<translation>Leerlauf</translation>
</message>
<message>
<location filename="../syncthingicons.cpp" line="235"/>
<location filename="../syncthingicons.cpp" line="233"/>
<source>Scanning</source>
<translation>Scannen</translation>
</message>
<message>
<location filename="../syncthingicons.cpp" line="236"/>
<location filename="../syncthingicons.cpp" line="234"/>
<source>Synchronizing</source>
<translation>Synchronisieren</translation>
</message>
<message>
<location filename="../syncthingicons.cpp" line="237"/>
<location filename="../syncthingicons.cpp" line="235"/>
<source>Paused</source>
<translation>Pausiert</translation>
</message>
<message>
<location filename="../syncthingicons.cpp" line="238"/>
<location filename="../syncthingicons.cpp" line="236"/>
<source>Disconnected</source>
<translation>Getrennt</translation>
</message>
@ -380,45 +380,25 @@
<context>
<name>Data::SyncthingFileModel</name>
<message>
<location filename="../syncthingfilemodel.cpp" line="194"/>
<location filename="../syncthingfilemodel.cpp" line="111"/>
<source>Name</source>
<translation></translation>
</message>
<message>
<location filename="../syncthingfilemodel.cpp" line="196"/>
<location filename="../syncthingfilemodel.cpp" line="113"/>
<source>Size</source>
<translation>Größe</translation>
</message>
<message>
<location filename="../syncthingfilemodel.cpp" line="198"/>
<location filename="../syncthingfilemodel.cpp" line="115"/>
<source>Last modified</source>
<translation>Zuletzt geändert</translation>
</message>
<message>
<location filename="../syncthingfilemodel.cpp" line="225"/>
<source>%1 elements</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfilemodel.cpp" line="289"/>
<location filename="../syncthingfilemodel.cpp" line="171"/>
<source>Refresh</source>
<translation>Aktualisieren</translation>
</message>
<message>
<location filename="../syncthingfilemodel.cpp" line="292"/>
<source>Open local version</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfilemodel.cpp" line="292"/>
<source>Copy local path</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfilemodel.cpp" line="292"/>
<source>Browse locally</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Data::SyncthingRecentChangesModel</name>

View File

@ -4,42 +4,42 @@
<context>
<name>Data::StatusIconSettings</name>
<message>
<location filename="../syncthingicons.cpp" line="231"/>
<location filename="../syncthingicons.cpp" line="229"/>
<source>Misc. notifications</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingicons.cpp" line="232"/>
<location filename="../syncthingicons.cpp" line="230"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingicons.cpp" line="233"/>
<location filename="../syncthingicons.cpp" line="231"/>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingicons.cpp" line="234"/>
<location filename="../syncthingicons.cpp" line="232"/>
<source>Idle</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingicons.cpp" line="235"/>
<location filename="../syncthingicons.cpp" line="233"/>
<source>Scanning</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingicons.cpp" line="236"/>
<location filename="../syncthingicons.cpp" line="234"/>
<source>Synchronizing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingicons.cpp" line="237"/>
<location filename="../syncthingicons.cpp" line="235"/>
<source>Paused</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingicons.cpp" line="238"/>
<location filename="../syncthingicons.cpp" line="236"/>
<source>Disconnected</source>
<translation type="unfinished"></translation>
</message>
@ -380,45 +380,25 @@
<context>
<name>Data::SyncthingFileModel</name>
<message>
<location filename="../syncthingfilemodel.cpp" line="194"/>
<location filename="../syncthingfilemodel.cpp" line="111"/>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfilemodel.cpp" line="196"/>
<location filename="../syncthingfilemodel.cpp" line="113"/>
<source>Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfilemodel.cpp" line="198"/>
<location filename="../syncthingfilemodel.cpp" line="115"/>
<source>Last modified</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfilemodel.cpp" line="225"/>
<source>%1 elements</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfilemodel.cpp" line="289"/>
<location filename="../syncthingfilemodel.cpp" line="171"/>
<source>Refresh</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfilemodel.cpp" line="292"/>
<source>Open local version</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfilemodel.cpp" line="292"/>
<source>Copy local path</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfilemodel.cpp" line="292"/>
<source>Browse locally</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Data::SyncthingRecentChangesModel</name>

View File

@ -4,42 +4,42 @@
<context>
<name>Data::StatusIconSettings</name>
<message>
<location filename="../syncthingicons.cpp" line="231"/>
<location filename="../syncthingicons.cpp" line="229"/>
<source>Misc. notifications</source>
<translation></translation>
</message>
<message>
<location filename="../syncthingicons.cpp" line="232"/>
<location filename="../syncthingicons.cpp" line="230"/>
<source>Error</source>
<translation></translation>
</message>
<message>
<location filename="../syncthingicons.cpp" line="233"/>
<location filename="../syncthingicons.cpp" line="231"/>
<source>Warning</source>
<translation></translation>
</message>
<message>
<location filename="../syncthingicons.cpp" line="234"/>
<location filename="../syncthingicons.cpp" line="232"/>
<source>Idle</source>
<translation></translation>
</message>
<message>
<location filename="../syncthingicons.cpp" line="235"/>
<location filename="../syncthingicons.cpp" line="233"/>
<source>Scanning</source>
<translation></translation>
</message>
<message>
<location filename="../syncthingicons.cpp" line="236"/>
<location filename="../syncthingicons.cpp" line="234"/>
<source>Synchronizing</source>
<translation></translation>
</message>
<message>
<location filename="../syncthingicons.cpp" line="237"/>
<location filename="../syncthingicons.cpp" line="235"/>
<source>Paused</source>
<translation></translation>
</message>
<message>
<location filename="../syncthingicons.cpp" line="238"/>
<location filename="../syncthingicons.cpp" line="236"/>
<source>Disconnected</source>
<translation></translation>
</message>
@ -378,45 +378,25 @@
<context>
<name>Data::SyncthingFileModel</name>
<message>
<location filename="../syncthingfilemodel.cpp" line="194"/>
<location filename="../syncthingfilemodel.cpp" line="111"/>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfilemodel.cpp" line="196"/>
<location filename="../syncthingfilemodel.cpp" line="113"/>
<source>Size</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfilemodel.cpp" line="198"/>
<location filename="../syncthingfilemodel.cpp" line="115"/>
<source>Last modified</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfilemodel.cpp" line="225"/>
<source>%1 elements</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfilemodel.cpp" line="289"/>
<location filename="../syncthingfilemodel.cpp" line="171"/>
<source>Refresh</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfilemodel.cpp" line="292"/>
<source>Open local version</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfilemodel.cpp" line="292"/>
<source>Copy local path</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../syncthingfilemodel.cpp" line="292"/>
<source>Browse locally</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Data::SyncthingRecentChangesModel</name>

View File

@ -1,5 +1,4 @@
#include "./otherdialogs.h"
#include "./textviewdialog.h"
#include <syncthingconnector/syncthingconnection.h>
#include <syncthingconnector/syncthingdir.h>
@ -16,10 +15,8 @@
#include <QIcon>
#include <QLabel>
#include <QMenu>
#include <QNetworkReply>
#include <QPixmap>
#include <QPushButton>
#include <QTextBrowser>
#include <QTreeView>
#include <QVBoxLayout>
@ -105,11 +102,11 @@ QDialog *browseRemoteFilesDialog(Data::SyncthingConnection &connection, const Da
return;
}
const auto actionNames = model->data(index, SyncthingFileModel::ActionNames).toStringList();
const auto actionIcons = model->data(index, SyncthingFileModel::ActionIcons).toList();
const auto actionIcons = model->data(index, SyncthingFileModel::ActionIcons).toStringList();
auto menu = QMenu(view);
auto actionIndex = qsizetype();
for (const auto &action : actions) {
QObject::connect(menu.addAction(actionIndex < actionIcons.size() ? actionIcons.at(actionIndex).value<QIcon>() : QIcon(),
QObject::connect(menu.addAction(actionIndex < actionIcons.size() ? QIcon::fromTheme(actionIcons.at(actionIndex)) : QIcon(),
actionIndex < actionNames.size() ? actionNames.at(actionIndex) : action),
&QAction::triggered, model, [model, action, index]() { model->triggerAction(action, index); });
++actionIndex;
@ -128,24 +125,4 @@ QDialog *browseRemoteFilesDialog(Data::SyncthingConnection &connection, const Da
return dlg;
}
TextViewDialog *ignorePatternsDialog(Data::SyncthingConnection &connection, const Data::SyncthingDir &dir, QWidget *parent)
{
auto *const dlg
= new TextViewDialog(QCoreApplication::translate("QtGui::OtherDialogs", "Ignore patterns of folder \"%1\"").arg(dir.displayName()), parent);
dlg->browser()->setText(QStringLiteral("Loading…"));
auto res = connection.ignores(dir.id, [dlg](Data::SyncthingIgnores &&ignores, QString &&errorMessage) {
auto *const browser = dlg->browser();
browser->clear();
if (!errorMessage.isEmpty()) {
browser->setText(errorMessage);
return;
}
for (const auto &ignore : ignores.ignore) {
browser->append(ignore);
}
});
QObject::connect(dlg, &QObject::destroyed, res.reply, &QNetworkReply::deleteLater);
return dlg;
}
} // namespace QtGui

View File

@ -14,15 +14,11 @@ struct SyncthingDir;
} // namespace Data
namespace QtGui {
class TextViewDialog;
SYNCTHINGWIDGETS_EXPORT QDialog *ownDeviceIdDialog(Data::SyncthingConnection &connection);
SYNCTHINGWIDGETS_EXPORT QWidget *ownDeviceIdWidget(Data::SyncthingConnection &connection, int size, QWidget *parent = nullptr);
SYNCTHINGWIDGETS_EXPORT QDialog *browseRemoteFilesDialog(
Data::SyncthingConnection &connection, const Data::SyncthingDir &dir, QWidget *parent = nullptr);
SYNCTHINGWIDGETS_EXPORT TextViewDialog *ignorePatternsDialog(
Data::SyncthingConnection &connection, const Data::SyncthingDir &dir, QWidget *parent = nullptr);
} // namespace QtGui
#endif // SYNCTHINGWIDGETS_OTHERDIALOGS_H

View File

@ -374,32 +374,32 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="822"/>
<location filename="../settings/settingsdialog.cpp" line="817"/>
<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="825"/>
<location filename="../settings/settingsdialog.cpp" line="820"/>
<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="829"/>
<location filename="../settings/settingsdialog.cpp" line="824"/>
<source>This is achieved by adding a *.plist file under &lt;i&gt;~/Library/LaunchAgents&lt;/i&gt; so the setting only affects the current user.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="833"/>
<location filename="../settings/settingsdialog.cpp" line="828"/>
<source>This feature has not been implemented for your platform (yet).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1041"/>
<location filename="../settings/settingsdialog.cpp" line="1036"/>
<source>unable to modify startup entry</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1071"/>
<location filename="../settings/settingsdialog.cpp" line="1066"/>
<source>There is already an autostart entry for &quot;%1&quot;. It will not be overridden when applying changes unless you delete it first.</source>
<translation type="unfinished"></translation>
</message>
@ -462,7 +462,7 @@
<name>QtGui::BuiltinWebViewOptionPage</name>
<message>
<location filename="../settings/builtinwebviewoptionpage.ui" line="12"/>
<location filename="../settings/settingsdialog.cpp" line="1664"/>
<location filename="../settings/settingsdialog.cpp" line="1659"/>
<source>Built-in web view</source>
<translation type="unfinished"></translation>
</message>
@ -482,7 +482,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1666"/>
<location filename="../settings/settingsdialog.cpp" line="1661"/>
<source>Syncthing Tray has not been built with vieb view support utilizing either Qt WebKit or Qt WebEngine.</source>
<translation type="unfinished"></translation>
</message>
@ -965,12 +965,12 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1640"/>
<location filename="../settings/settingsdialog.cpp" line="1635"/>
<source>Custom command to launch Syncthing&apos;s UI - </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1641"/>
<location filename="../settings/settingsdialog.cpp" line="1636"/>
<source>&lt;p&gt;Enter a custom command to launch Syncthing&apos;s UI. The expression &lt;code&gt;%SYNCTHING_URL%&lt;/code&gt; will be replaced with the Syncthing-URL.&lt;/p&gt;&lt;p&gt;Leave the command empty to use the auto-detection.&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
@ -1235,7 +1235,7 @@
</message>
<message>
<location filename="../settings/launcheroptionpage.ui" line="209"/>
<location filename="../settings/settingsdialog.cpp" line="1251"/>
<location filename="../settings/settingsdialog.cpp" line="1246"/>
<source>Stop launched instance</source>
<translation type="unfinished"></translation>
</message>
@ -1250,82 +1250,82 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1112"/>
<location filename="../settings/settingsdialog.cpp" line="1107"/>
<source>%1-launcher</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1113"/>
<location filename="../settings/settingsdialog.cpp" line="1108"/>
<source>Launch %1 when starting the tray icon</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1116"/>
<location filename="../settings/settingsdialog.cpp" line="1111"/>
<source>%1 executable</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1117"/>
<location filename="../settings/settingsdialog.cpp" line="1112"/>
<source>%1 log (interleaved stdout/stderr)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1134"/>
<location filename="../settings/settingsdialog.cpp" line="1129"/>
<source>Restore default</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1140"/>
<location filename="../settings/settingsdialog.cpp" line="1135"/>
<source>Show Syncthing releases/downloads</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1286"/>
<location filename="../settings/settingsdialog.cpp" line="1281"/>
<source>%1 exited with exit code %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1289"/>
<location filename="../settings/settingsdialog.cpp" line="1284"/>
<source>%1 crashed with exit code %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1322"/>
<location filename="../settings/settingsdialog.cpp" line="1317"/>
<source>failed to start (e.g. executable does not exist or not permission error)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1325"/>
<location filename="../settings/settingsdialog.cpp" line="1320"/>
<source>process crashed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1328"/>
<location filename="../settings/settingsdialog.cpp" line="1323"/>
<source>timeout error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1331"/>
<location filename="../settings/settingsdialog.cpp" line="1326"/>
<source>read error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1334"/>
<location filename="../settings/settingsdialog.cpp" line="1329"/>
<source>write error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1337"/>
<location filename="../settings/settingsdialog.cpp" line="1332"/>
<source>unknown process error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1340"/>
<location filename="../settings/settingsdialog.cpp" line="1335"/>
<source>An error occurred when running %1: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1393"/>
<location filename="../settings/settingsdialog.cpp" line="1388"/>
<source>Kill launched instance</source>
<translation type="unfinished"></translation>
</message>
@ -1524,65 +1524,60 @@
<context>
<name>QtGui::OtherDialogs</name>
<message>
<location filename="../misc/otherdialogs.cpp" line="33"/>
<location filename="../misc/otherdialogs.cpp" line="30"/>
<source>Own device ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../misc/otherdialogs.cpp" line="43"/>
<location filename="../misc/otherdialogs.cpp" line="40"/>
<source>device ID is unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../misc/otherdialogs.cpp" line="51"/>
<location filename="../misc/otherdialogs.cpp" line="48"/>
<source>Copy to clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../misc/otherdialogs.cpp" line="88"/>
<location filename="../misc/otherdialogs.cpp" line="85"/>
<source>Remote/global tree of folder &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../misc/otherdialogs.cpp" line="134"/>
<source>Ignore patterns of folder &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QtGui::SettingsDialog</name>
<message>
<location filename="../settings/settingsdialog.cpp" line="1715"/>
<location filename="../settings/settingsdialog.cpp" line="1710"/>
<source>Tray</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1723"/>
<location filename="../settings/settingsdialog.cpp" line="1718"/>
<source>Web view</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1730"/>
<location filename="../settings/settingsdialog.cpp" line="1725"/>
<source>Startup</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1732"/>
<location filename="../settings/settingsdialog.cpp" line="1727"/>
<source>additional tool</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1732"/>
<location filename="../settings/settingsdialog.cpp" line="1727"/>
<source>Extra launcher</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1755"/>
<location filename="../settings/settingsdialog.cpp" line="1750"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1761"/>
<location filename="../settings/settingsdialog.cpp" line="1756"/>
<source>Start wizard</source>
<translation type="unfinished"></translation>
</message>
@ -1748,8 +1743,8 @@ This dialog closes automatically when the process finally terminates.</source>
<location filename="../settings/systemdoptionpage.ui" line="117"/>
<location filename="../settings/systemdoptionpage.ui" line="172"/>
<location filename="../settings/systemdoptionpage.ui" line="261"/>
<location filename="../settings/settingsdialog.cpp" line="1539"/>
<location filename="../settings/settingsdialog.cpp" line="1548"/>
<location filename="../settings/settingsdialog.cpp" line="1534"/>
<location filename="../settings/settingsdialog.cpp" line="1543"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
@ -1789,27 +1784,27 @@ This dialog closes automatically when the process finally terminates.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1429"/>
<location filename="../settings/settingsdialog.cpp" line="1424"/>
<source>Reload all unit files</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1474"/>
<location filename="../settings/settingsdialog.cpp" line="1469"/>
<source>It is not possible to show the start/stop button for the systemd service and the internal launcher at the same time. The systemd service precedes.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1480"/>
<location filename="../settings/settingsdialog.cpp" line="1475"/>
<source>It is not possible to consider the systemd service and the internal launcher for reconnects at the same time. The systemd service precedes.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1512"/>
<location filename="../settings/settingsdialog.cpp" line="1507"/>
<source>specified unit is either inactive or doesn&apos;t exist</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1534"/>
<location filename="../settings/settingsdialog.cpp" line="1529"/>
<source>since </source>
<translation type="unfinished"></translation>
</message>

View File

@ -470,32 +470,32 @@
<translation>Lösche existierenden Eintrag</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="822"/>
<location filename="../settings/settingsdialog.cpp" line="817"/>
<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="825"/>
<location filename="../settings/settingsdialog.cpp" line="820"/>
<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="829"/>
<location filename="../settings/settingsdialog.cpp" line="824"/>
<source>This is achieved by adding a *.plist file under &lt;i&gt;~/Library/LaunchAgents&lt;/i&gt; so the setting only affects the current user.</source>
<translation>Durch das Hinzufügen einer *.plist-Datei unter &lt;i&gt;~/Library/LaunchAgents&lt;/i&gt; realisiert - betrifft also nur den aktuellen Benutzer.</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="833"/>
<location filename="../settings/settingsdialog.cpp" line="828"/>
<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="1041"/>
<location filename="../settings/settingsdialog.cpp" line="1036"/>
<source>unable to modify startup entry</source>
<translation>Fehler beim aktualisieren des Auto-Start-Eintrags</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1071"/>
<location filename="../settings/settingsdialog.cpp" line="1066"/>
<source>There is already an autostart entry for &quot;%1&quot;. It will not be overridden when applying changes unless you delete it first.</source>
<translation>Es gibt bereits einen Autostart-Eintrag für &quot;%1&quot;. Dieser Eintrag wird beim Anwenden der Einstellungen nicht verändert außer er wird zuvor gelöscht.</translation>
</message>
@ -606,7 +606,7 @@ Die Weboberfläche wird stattdessen im Standardwebrowser geöffnet.</translation
</message>
<message>
<location filename="../settings/builtinwebviewoptionpage.ui" line="12"/>
<location filename="../settings/settingsdialog.cpp" line="1664"/>
<location filename="../settings/settingsdialog.cpp" line="1659"/>
<source>Built-in web view</source>
<translation>Eingebaute Webanzeige</translation>
</message>
@ -626,7 +626,7 @@ Die Weboberfläche wird stattdessen im Standardwebrowser geöffnet.</translation
<translation>Lasse Weboberfläche im Hintgergrund weiter offen, wenn Fenster nicht offen</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1666"/>
<location filename="../settings/settingsdialog.cpp" line="1661"/>
<source>Syncthing Tray has not been built with vieb view support utilizing either Qt WebKit or Qt WebEngine.</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.</translation>
</message>
@ -1120,12 +1120,12 @@ Die Weboberfläche wird stattdessen im Standardwebrowser geöffnet.</translation
<translation></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1640"/>
<location filename="../settings/settingsdialog.cpp" line="1635"/>
<source>Custom command to launch Syncthing&apos;s UI - </source>
<translation>Befehl zum Starten der Syncthing-Oberfläche - </translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1641"/>
<location filename="../settings/settingsdialog.cpp" line="1636"/>
<source>&lt;p&gt;Enter a custom command to launch Syncthing&apos;s UI. The expression &lt;code&gt;%SYNCTHING_URL%&lt;/code&gt; will be replaced with the Syncthing-URL.&lt;/p&gt;&lt;p&gt;Leave the command empty to use the auto-detection.&lt;/p&gt;</source>
<translation>&lt;p&gt;Gib den Befehl ein, mit dem die Syncthing-Oberfläche gestartet werden soll. Der Ausdruck &lt;code&gt;%SYNCTHING_URL%&lt;/code&gt; wird durch die Syncthing-URL ersetzt.&lt;/p&gt;&lt;p&gt;Lasse den Befehl leer, um die automatische Erkennung zu verwenden.&lt;/p&gt;</translation>
</message>
@ -1419,7 +1419,7 @@ Die Weboberfläche wird stattdessen im Standardwebrowser geöffnet.</translation
</message>
<message>
<location filename="../settings/launcheroptionpage.ui" line="209"/>
<location filename="../settings/settingsdialog.cpp" line="1251"/>
<location filename="../settings/settingsdialog.cpp" line="1246"/>
<source>Stop launched instance</source>
<translation>Stoppen</translation>
</message>
@ -1434,12 +1434,12 @@ Die Weboberfläche wird stattdessen im Standardwebrowser geöffnet.</translation
<translation>Log folgen</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1112"/>
<location filename="../settings/settingsdialog.cpp" line="1107"/>
<source>%1-launcher</source>
<translation>%1-Starter</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1113"/>
<location filename="../settings/settingsdialog.cpp" line="1108"/>
<source>Launch %1 when starting the tray icon</source>
<translation>Starte %1 beim Starten des Tray-Icons</translation>
</message>
@ -1448,72 +1448,72 @@ Die Weboberfläche wird stattdessen im Standardwebrowser geöffnet.</translation
<translation type="obsolete">%1-Starter {1 ?}</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1116"/>
<location filename="../settings/settingsdialog.cpp" line="1111"/>
<source>%1 executable</source>
<translation>Ausführbare Datei von %1</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1117"/>
<location filename="../settings/settingsdialog.cpp" line="1112"/>
<source>%1 log (interleaved stdout/stderr)</source>
<translation>Log von %1 (stdout/stderr)</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1134"/>
<location filename="../settings/settingsdialog.cpp" line="1129"/>
<source>Restore default</source>
<translation>Auf Vorgabe zurücksetzen</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1140"/>
<location filename="../settings/settingsdialog.cpp" line="1135"/>
<source>Show Syncthing releases/downloads</source>
<translation>Syncthing Releases/Downloads zeigen</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1286"/>
<location filename="../settings/settingsdialog.cpp" line="1281"/>
<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="1289"/>
<location filename="../settings/settingsdialog.cpp" line="1284"/>
<source>%1 crashed with exit code %2</source>
<translation>%1 ist mit dem Statuscode %2 abgestürzt</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1322"/>
<location filename="../settings/settingsdialog.cpp" line="1317"/>
<source>failed to start (e.g. executable does not exist or not permission error)</source>
<translation>Start fehlgeschlagen (z. B. weil Programmdatei nicht existiert oder nicht ausführbar ist)</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1325"/>
<location filename="../settings/settingsdialog.cpp" line="1320"/>
<source>process crashed</source>
<translation>Prozess ist abgestürzt</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1328"/>
<location filename="../settings/settingsdialog.cpp" line="1323"/>
<source>timeout error</source>
<translation>Time-out</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1331"/>
<location filename="../settings/settingsdialog.cpp" line="1326"/>
<source>read error</source>
<translation>Lesefehler</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1334"/>
<location filename="../settings/settingsdialog.cpp" line="1329"/>
<source>write error</source>
<translation>Schreibfehler</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1337"/>
<location filename="../settings/settingsdialog.cpp" line="1332"/>
<source>unknown process error</source>
<translation>unbekannter Fehler</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1340"/>
<location filename="../settings/settingsdialog.cpp" line="1335"/>
<source>An error occurred when running %1: %2</source>
<translation>Beim Ausführen von %1 ist ein Fehler aufgetreten: %2</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1393"/>
<location filename="../settings/settingsdialog.cpp" line="1388"/>
<source>Kill launched instance</source>
<translation>Töten</translation>
</message>
@ -1720,40 +1720,35 @@ Die Weboberfläche wird stattdessen im Standardwebrowser geöffnet.</translation
<context>
<name>QtGui::OtherDialogs</name>
<message>
<location filename="../misc/otherdialogs.cpp" line="33"/>
<location filename="../misc/otherdialogs.cpp" line="30"/>
<source>Own device ID</source>
<translation>Eigene Geräte-ID</translation>
</message>
<message>
<location filename="../misc/otherdialogs.cpp" line="43"/>
<location filename="../misc/otherdialogs.cpp" line="40"/>
<source>device ID is unknown</source>
<translation>Geräte-ID ist unbekannt</translation>
</message>
<message>
<location filename="../misc/otherdialogs.cpp" line="51"/>
<location filename="../misc/otherdialogs.cpp" line="48"/>
<source>Copy to clipboard</source>
<translation>In Zwischenablage kopieren</translation>
</message>
<message>
<location filename="../misc/otherdialogs.cpp" line="88"/>
<location filename="../misc/otherdialogs.cpp" line="85"/>
<source>Remote/global tree of folder &quot;%1&quot;</source>
<translation>Globale Dateistruktur von &quot;%1&quot;</translation>
</message>
<message>
<location filename="../misc/otherdialogs.cpp" line="134"/>
<source>Ignore patterns of folder &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QtGui::SettingsDialog</name>
<message>
<location filename="../settings/settingsdialog.cpp" line="1723"/>
<location filename="../settings/settingsdialog.cpp" line="1718"/>
<source>Web view</source>
<translation>Webanzeige</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1730"/>
<location filename="../settings/settingsdialog.cpp" line="1725"/>
<source>Startup</source>
<translation>Starten</translation>
</message>
@ -1762,27 +1757,27 @@ Die Weboberfläche wird stattdessen im Standardwebrowser geöffnet.</translation
<translation type="vanished">Zusatztool</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1715"/>
<location filename="../settings/settingsdialog.cpp" line="1710"/>
<source>Tray</source>
<translation></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1732"/>
<location filename="../settings/settingsdialog.cpp" line="1727"/>
<source>Extra launcher</source>
<translation>Extra-Starter</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1732"/>
<location filename="../settings/settingsdialog.cpp" line="1727"/>
<source>additional tool</source>
<translation>Zusatztool</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1755"/>
<location filename="../settings/settingsdialog.cpp" line="1750"/>
<source>Settings</source>
<translation>Einstellungen</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1761"/>
<location filename="../settings/settingsdialog.cpp" line="1756"/>
<source>Start wizard</source>
<translation>Einrichtungsassistenten öffnen</translation>
</message>
@ -1980,8 +1975,8 @@ Dieser Dialog schließt sich automatisch, wenn der Prozess beendet wird.</transl
<location filename="../settings/systemdoptionpage.ui" line="117"/>
<location filename="../settings/systemdoptionpage.ui" line="172"/>
<location filename="../settings/systemdoptionpage.ui" line="261"/>
<location filename="../settings/settingsdialog.cpp" line="1539"/>
<location filename="../settings/settingsdialog.cpp" line="1548"/>
<location filename="../settings/settingsdialog.cpp" line="1534"/>
<location filename="../settings/settingsdialog.cpp" line="1543"/>
<source>unknown</source>
<translation>unbekannt</translation>
</message>
@ -2014,27 +2009,27 @@ Dieser Dialog schließt sich automatisch, wenn der Prozess beendet wird.</transl
<translation>Stoppen</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1429"/>
<location filename="../settings/settingsdialog.cpp" line="1424"/>
<source>Reload all unit files</source>
<translation>Alle Unit-Dateien neu laden</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1474"/>
<location filename="../settings/settingsdialog.cpp" line="1469"/>
<source>It is not possible to show the start/stop button for the systemd service and the internal launcher at the same time. The systemd service precedes.</source>
<translation>Es ist nicht möglich, den Start-/Stop-Button für den Systemd-Dienst und den internen Starter gleichzeitig anzugeigen. Wenn verfügbar, wird der Button den Systemd-Dienst kontrollieren.</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1480"/>
<location filename="../settings/settingsdialog.cpp" line="1475"/>
<source>It is not possible to consider the systemd service and the internal launcher for reconnects at the same time. The systemd service precedes.</source>
<translation>Es ist nicht möglich, den Status des Systemd-Dienstes und den des internen Starters gleichzeitig für Verbindungsveruche einzubeziehen. Wenn verfügbar, wird der Status des Systemd-Dienstes verwendet.</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1512"/>
<location filename="../settings/settingsdialog.cpp" line="1507"/>
<source>specified unit is either inactive or doesn&apos;t exist</source>
<translation>angegebene Unit entweder nicht geladen oder existiert nicht</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1534"/>
<location filename="../settings/settingsdialog.cpp" line="1529"/>
<source>since </source>
<translation>seit </translation>
</message>

View File

@ -374,32 +374,32 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="822"/>
<location filename="../settings/settingsdialog.cpp" line="817"/>
<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="825"/>
<location filename="../settings/settingsdialog.cpp" line="820"/>
<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="829"/>
<location filename="../settings/settingsdialog.cpp" line="824"/>
<source>This is achieved by adding a *.plist file under &lt;i&gt;~/Library/LaunchAgents&lt;/i&gt; so the setting only affects the current user.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="833"/>
<location filename="../settings/settingsdialog.cpp" line="828"/>
<source>This feature has not been implemented for your platform (yet).</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1041"/>
<location filename="../settings/settingsdialog.cpp" line="1036"/>
<source>unable to modify startup entry</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1071"/>
<location filename="../settings/settingsdialog.cpp" line="1066"/>
<source>There is already an autostart entry for &quot;%1&quot;. It will not be overridden when applying changes unless you delete it first.</source>
<translation type="unfinished"></translation>
</message>
@ -462,7 +462,7 @@
<name>QtGui::BuiltinWebViewOptionPage</name>
<message>
<location filename="../settings/builtinwebviewoptionpage.ui" line="12"/>
<location filename="../settings/settingsdialog.cpp" line="1664"/>
<location filename="../settings/settingsdialog.cpp" line="1659"/>
<source>Built-in web view</source>
<translation type="unfinished"></translation>
</message>
@ -482,7 +482,7 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1666"/>
<location filename="../settings/settingsdialog.cpp" line="1661"/>
<source>Syncthing Tray has not been built with vieb view support utilizing either Qt WebKit or Qt WebEngine.</source>
<translation type="unfinished"></translation>
</message>
@ -964,12 +964,12 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1640"/>
<location filename="../settings/settingsdialog.cpp" line="1635"/>
<source>Custom command to launch Syncthing&apos;s UI - </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1641"/>
<location filename="../settings/settingsdialog.cpp" line="1636"/>
<source>&lt;p&gt;Enter a custom command to launch Syncthing&apos;s UI. The expression &lt;code&gt;%SYNCTHING_URL%&lt;/code&gt; will be replaced with the Syncthing-URL.&lt;/p&gt;&lt;p&gt;Leave the command empty to use the auto-detection.&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
@ -1233,7 +1233,7 @@
</message>
<message>
<location filename="../settings/launcheroptionpage.ui" line="209"/>
<location filename="../settings/settingsdialog.cpp" line="1251"/>
<location filename="../settings/settingsdialog.cpp" line="1246"/>
<source>Stop launched instance</source>
<translation type="unfinished"></translation>
</message>
@ -1248,82 +1248,82 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1112"/>
<location filename="../settings/settingsdialog.cpp" line="1107"/>
<source>%1-launcher</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1113"/>
<location filename="../settings/settingsdialog.cpp" line="1108"/>
<source>Launch %1 when starting the tray icon</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1116"/>
<location filename="../settings/settingsdialog.cpp" line="1111"/>
<source>%1 executable</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1117"/>
<location filename="../settings/settingsdialog.cpp" line="1112"/>
<source>%1 log (interleaved stdout/stderr)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1134"/>
<location filename="../settings/settingsdialog.cpp" line="1129"/>
<source>Restore default</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1140"/>
<location filename="../settings/settingsdialog.cpp" line="1135"/>
<source>Show Syncthing releases/downloads</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1286"/>
<location filename="../settings/settingsdialog.cpp" line="1281"/>
<source>%1 exited with exit code %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1289"/>
<location filename="../settings/settingsdialog.cpp" line="1284"/>
<source>%1 crashed with exit code %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1322"/>
<location filename="../settings/settingsdialog.cpp" line="1317"/>
<source>failed to start (e.g. executable does not exist or not permission error)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1325"/>
<location filename="../settings/settingsdialog.cpp" line="1320"/>
<source>process crashed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1328"/>
<location filename="../settings/settingsdialog.cpp" line="1323"/>
<source>timeout error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1331"/>
<location filename="../settings/settingsdialog.cpp" line="1326"/>
<source>read error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1334"/>
<location filename="../settings/settingsdialog.cpp" line="1329"/>
<source>write error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1337"/>
<location filename="../settings/settingsdialog.cpp" line="1332"/>
<source>unknown process error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1340"/>
<location filename="../settings/settingsdialog.cpp" line="1335"/>
<source>An error occurred when running %1: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1393"/>
<location filename="../settings/settingsdialog.cpp" line="1388"/>
<source>Kill launched instance</source>
<translation type="unfinished"></translation>
</message>
@ -1522,65 +1522,60 @@
<context>
<name>QtGui::OtherDialogs</name>
<message>
<location filename="../misc/otherdialogs.cpp" line="33"/>
<location filename="../misc/otherdialogs.cpp" line="30"/>
<source>Own device ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../misc/otherdialogs.cpp" line="43"/>
<location filename="../misc/otherdialogs.cpp" line="40"/>
<source>device ID is unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../misc/otherdialogs.cpp" line="51"/>
<location filename="../misc/otherdialogs.cpp" line="48"/>
<source>Copy to clipboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../misc/otherdialogs.cpp" line="88"/>
<location filename="../misc/otherdialogs.cpp" line="85"/>
<source>Remote/global tree of folder &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../misc/otherdialogs.cpp" line="134"/>
<source>Ignore patterns of folder &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QtGui::SettingsDialog</name>
<message>
<location filename="../settings/settingsdialog.cpp" line="1715"/>
<location filename="../settings/settingsdialog.cpp" line="1710"/>
<source>Tray</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1723"/>
<location filename="../settings/settingsdialog.cpp" line="1718"/>
<source>Web view</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1730"/>
<location filename="../settings/settingsdialog.cpp" line="1725"/>
<source>Startup</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1732"/>
<location filename="../settings/settingsdialog.cpp" line="1727"/>
<source>additional tool</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1732"/>
<location filename="../settings/settingsdialog.cpp" line="1727"/>
<source>Extra launcher</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1755"/>
<location filename="../settings/settingsdialog.cpp" line="1750"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1761"/>
<location filename="../settings/settingsdialog.cpp" line="1756"/>
<source>Start wizard</source>
<translation type="unfinished"></translation>
</message>
@ -1750,8 +1745,8 @@ This dialog closes automatically when the process finally terminates.</source>
<location filename="../settings/systemdoptionpage.ui" line="117"/>
<location filename="../settings/systemdoptionpage.ui" line="172"/>
<location filename="../settings/systemdoptionpage.ui" line="261"/>
<location filename="../settings/settingsdialog.cpp" line="1539"/>
<location filename="../settings/settingsdialog.cpp" line="1548"/>
<location filename="../settings/settingsdialog.cpp" line="1534"/>
<location filename="../settings/settingsdialog.cpp" line="1543"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
@ -1791,27 +1786,27 @@ This dialog closes automatically when the process finally terminates.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1429"/>
<location filename="../settings/settingsdialog.cpp" line="1424"/>
<source>Reload all unit files</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1474"/>
<location filename="../settings/settingsdialog.cpp" line="1469"/>
<source>It is not possible to show the start/stop button for the systemd service and the internal launcher at the same time. The systemd service precedes.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1480"/>
<location filename="../settings/settingsdialog.cpp" line="1475"/>
<source>It is not possible to consider the systemd service and the internal launcher for reconnects at the same time. The systemd service precedes.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1512"/>
<location filename="../settings/settingsdialog.cpp" line="1507"/>
<source>specified unit is either inactive or doesn&apos;t exist</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1534"/>
<location filename="../settings/settingsdialog.cpp" line="1529"/>
<source>since </source>
<translation type="unfinished"></translation>
</message>

View File

@ -382,32 +382,32 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="822"/>
<location filename="../settings/settingsdialog.cpp" line="817"/>
<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> &lt;i&gt;~/.config/autostart&lt;/i&gt; *.desktop </translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="825"/>
<location filename="../settings/settingsdialog.cpp" line="820"/>
<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> &lt;i&gt;HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run&lt;/i&gt; 下添加注册表项来实现的,因此该设置仅影响当前用户。 请注意,移动 &lt;i&gt;syncthingtray.exe&lt;/i&gt; </translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="829"/>
<location filename="../settings/settingsdialog.cpp" line="824"/>
<source>This is achieved by adding a *.plist file under &lt;i&gt;~/Library/LaunchAgents&lt;/i&gt; so the setting only affects the current user.</source>
<translation> &lt;i&gt;~/Library/LaunchAgents&lt;/i&gt; *.plist </translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="833"/>
<location filename="../settings/settingsdialog.cpp" line="828"/>
<source>This feature has not been implemented for your platform (yet).</source>
<translation></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1041"/>
<location filename="../settings/settingsdialog.cpp" line="1036"/>
<source>unable to modify startup entry</source>
<translation></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1071"/>
<location filename="../settings/settingsdialog.cpp" line="1066"/>
<source>There is already an autostart entry for &quot;%1&quot;. It will not be overridden when applying changes unless you delete it first.</source>
<translation type="unfinished"></translation>
</message>
@ -480,7 +480,7 @@ The Web UI will be opened in the default web browser instead.</source>
</message>
<message>
<location filename="../settings/builtinwebviewoptionpage.ui" line="12"/>
<location filename="../settings/settingsdialog.cpp" line="1664"/>
<location filename="../settings/settingsdialog.cpp" line="1659"/>
<source>Built-in web view</source>
<translation type="unfinished"></translation>
</message>
@ -500,7 +500,7 @@ The Web UI will be opened in the default web browser instead.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1666"/>
<location filename="../settings/settingsdialog.cpp" line="1661"/>
<source>Syncthing Tray has not been built with vieb view support utilizing either Qt WebKit or Qt WebEngine.</source>
<translation type="unfinished"></translation>
</message>
@ -985,12 +985,12 @@ The Web UI will be opened in the default web browser instead.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1640"/>
<location filename="../settings/settingsdialog.cpp" line="1635"/>
<source>Custom command to launch Syncthing&apos;s UI - </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1641"/>
<location filename="../settings/settingsdialog.cpp" line="1636"/>
<source>&lt;p&gt;Enter a custom command to launch Syncthing&apos;s UI. The expression &lt;code&gt;%SYNCTHING_URL%&lt;/code&gt; will be replaced with the Syncthing-URL.&lt;/p&gt;&lt;p&gt;Leave the command empty to use the auto-detection.&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
@ -1261,7 +1261,7 @@ The Web UI will be opened in the default web browser instead.</source>
</message>
<message>
<location filename="../settings/launcheroptionpage.ui" line="209"/>
<location filename="../settings/settingsdialog.cpp" line="1251"/>
<location filename="../settings/settingsdialog.cpp" line="1246"/>
<source>Stop launched instance</source>
<translation></translation>
</message>
@ -1276,82 +1276,82 @@ The Web UI will be opened in the default web browser instead.</source>
<translation></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1112"/>
<location filename="../settings/settingsdialog.cpp" line="1107"/>
<source>%1-launcher</source>
<translation>%1-</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1113"/>
<location filename="../settings/settingsdialog.cpp" line="1108"/>
<source>Launch %1 when starting the tray icon</source>
<translation> %1</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1116"/>
<location filename="../settings/settingsdialog.cpp" line="1111"/>
<source>%1 executable</source>
<translation>%1 </translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1117"/>
<location filename="../settings/settingsdialog.cpp" line="1112"/>
<source>%1 log (interleaved stdout/stderr)</source>
<translation>%1 /</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1134"/>
<location filename="../settings/settingsdialog.cpp" line="1129"/>
<source>Restore default</source>
<translation></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1140"/>
<location filename="../settings/settingsdialog.cpp" line="1135"/>
<source>Show Syncthing releases/downloads</source>
<translation> Syncthing /</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1286"/>
<location filename="../settings/settingsdialog.cpp" line="1281"/>
<source>%1 exited with exit code %2</source>
<translation>%1 退退 %2</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1289"/>
<location filename="../settings/settingsdialog.cpp" line="1284"/>
<source>%1 crashed with exit code %2</source>
<translation>%1 退 %2</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1322"/>
<location filename="../settings/settingsdialog.cpp" line="1317"/>
<source>failed to start (e.g. executable does not exist or not permission error)</source>
<translation></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1325"/>
<location filename="../settings/settingsdialog.cpp" line="1320"/>
<source>process crashed</source>
<translation></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1328"/>
<location filename="../settings/settingsdialog.cpp" line="1323"/>
<source>timeout error</source>
<translation></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1331"/>
<location filename="../settings/settingsdialog.cpp" line="1326"/>
<source>read error</source>
<translation></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1334"/>
<location filename="../settings/settingsdialog.cpp" line="1329"/>
<source>write error</source>
<translation></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1337"/>
<location filename="../settings/settingsdialog.cpp" line="1332"/>
<source>unknown process error</source>
<translation></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1340"/>
<location filename="../settings/settingsdialog.cpp" line="1335"/>
<source>An error occurred when running %1: %2</source>
<translation> %1 : %2</translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1393"/>
<location filename="../settings/settingsdialog.cpp" line="1388"/>
<source>Kill launched instance</source>
<translation></translation>
</message>
@ -1558,65 +1558,60 @@ The Web UI will be opened in the default web browser instead.</source>
<context>
<name>QtGui::OtherDialogs</name>
<message>
<location filename="../misc/otherdialogs.cpp" line="33"/>
<location filename="../misc/otherdialogs.cpp" line="30"/>
<source>Own device ID</source>
<translation> ID</translation>
</message>
<message>
<location filename="../misc/otherdialogs.cpp" line="43"/>
<location filename="../misc/otherdialogs.cpp" line="40"/>
<source>device ID is unknown</source>
<translation> ID </translation>
</message>
<message>
<location filename="../misc/otherdialogs.cpp" line="51"/>
<location filename="../misc/otherdialogs.cpp" line="48"/>
<source>Copy to clipboard</source>
<translation></translation>
</message>
<message>
<location filename="../misc/otherdialogs.cpp" line="88"/>
<location filename="../misc/otherdialogs.cpp" line="85"/>
<source>Remote/global tree of folder &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../misc/otherdialogs.cpp" line="134"/>
<source>Ignore patterns of folder &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QtGui::SettingsDialog</name>
<message>
<location filename="../settings/settingsdialog.cpp" line="1715"/>
<location filename="../settings/settingsdialog.cpp" line="1710"/>
<source>Tray</source>
<translation></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1723"/>
<location filename="../settings/settingsdialog.cpp" line="1718"/>
<source>Web view</source>
<translation></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1730"/>
<location filename="../settings/settingsdialog.cpp" line="1725"/>
<source>Startup</source>
<translation></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1732"/>
<location filename="../settings/settingsdialog.cpp" line="1727"/>
<source>additional tool</source>
<translation></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1732"/>
<location filename="../settings/settingsdialog.cpp" line="1727"/>
<source>Extra launcher</source>
<translation></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1755"/>
<location filename="../settings/settingsdialog.cpp" line="1750"/>
<source>Settings</source>
<translation></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1761"/>
<location filename="../settings/settingsdialog.cpp" line="1756"/>
<source>Start wizard</source>
<translation type="unfinished"></translation>
</message>
@ -1805,8 +1800,8 @@ This dialog closes automatically when the process finally terminates.</source>
<location filename="../settings/systemdoptionpage.ui" line="117"/>
<location filename="../settings/systemdoptionpage.ui" line="172"/>
<location filename="../settings/systemdoptionpage.ui" line="261"/>
<location filename="../settings/settingsdialog.cpp" line="1539"/>
<location filename="../settings/settingsdialog.cpp" line="1548"/>
<location filename="../settings/settingsdialog.cpp" line="1534"/>
<location filename="../settings/settingsdialog.cpp" line="1543"/>
<source>unknown</source>
<translation></translation>
</message>
@ -1841,27 +1836,27 @@ This dialog closes automatically when the process finally terminates.</source>
<translation></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1429"/>
<location filename="../settings/settingsdialog.cpp" line="1424"/>
<source>Reload all unit files</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1474"/>
<location filename="../settings/settingsdialog.cpp" line="1469"/>
<source>It is not possible to show the start/stop button for the systemd service and the internal launcher at the same time. The systemd service precedes.</source>
<translation> systemd / systemd </translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1480"/>
<location filename="../settings/settingsdialog.cpp" line="1475"/>
<source>It is not possible to consider the systemd service and the internal launcher for reconnects at the same time. The systemd service precedes.</source>
<translation> systemd systemd </translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1512"/>
<location filename="../settings/settingsdialog.cpp" line="1507"/>
<source>specified unit is either inactive or doesn&apos;t exist</source>
<translation></translation>
</message>
<message>
<location filename="../settings/settingsdialog.cpp" line="1534"/>
<location filename="../settings/settingsdialog.cpp" line="1529"/>
<source>since </source>
<translation> </translation>
</message>

View File

@ -89,7 +89,6 @@ set(REQUIRED_ICONS
preferences-other
process-stop
qtcreator
selection-symbolic
system-run
system-search
system-file-manager

View File

@ -108,8 +108,6 @@ void DirView::showContextMenu(const QPoint &position)
QIcon(QStringLiteral(":/icons/hicolor/scalable/places/document-open-remote.svg"))),
tr("Browse remote files")),
&QAction::triggered, triggerActionForSelectedRow(this, &DirView::browseRemoteFiles));
connect(menu.addAction(QIcon::fromTheme(QStringLiteral("selection-symbolic")), tr("Show ignore patterns")), &QAction::triggered,
triggerActionForSelectedRow(this, &DirView::showIgnorePatterns));
}
}
showViewMenu(position, *this, menu);

View File

@ -24,7 +24,6 @@ Q_SIGNALS:
void scanDir(const Data::SyncthingDir &dir);
void pauseResumeDir(const Data::SyncthingDir &dir);
void browseRemoteFiles(const Data::SyncthingDir &dir);
void showIgnorePatterns(const Data::SyncthingDir &dir);
protected:
void mouseReleaseEvent(QMouseEvent *event) override;

View File

@ -204,7 +204,6 @@ TrayWidget::TrayWidget(TrayMenu *parent)
connect(m_ui->dirsTreeView, &DirView::pauseResumeDir, this, &TrayWidget::pauseResumeDir);
connect(m_ui->devsTreeView, &DevView::pauseResumeDev, this, &TrayWidget::pauseResumeDev);
connect(m_ui->dirsTreeView, &DirView::browseRemoteFiles, this, &TrayWidget::browseRemoteFiles);
connect(m_ui->dirsTreeView, &DirView::showIgnorePatterns, this, &TrayWidget::showIgnorePatterns);
connect(m_ui->downloadsTreeView, &DownloadView::openDir, this, &TrayWidget::openDir);
connect(m_ui->downloadsTreeView, &DownloadView::openItemDir, this, &TrayWidget::openItemDir);
connect(m_ui->recentChangesTreeView, &QTreeView::customContextMenuRequested, this, &TrayWidget::showRecentChangesContextMenu);
@ -712,12 +711,10 @@ void TrayWidget::pauseResumeDir(const SyncthingDir &dir)
void TrayWidget::browseRemoteFiles(const Data::SyncthingDir &dir)
{
showCenteredDialog(browseRemoteFilesDialog(m_connection, dir, this), QSize(600, 500));
}
void TrayWidget::showIgnorePatterns(const Data::SyncthingDir &dir)
{
showCenteredDialog(ignorePatternsDialog(m_connection, dir, this), QSize(600, 500));
auto *const dlg = browseRemoteFilesDialog(m_connection, dir, this);
dlg->resize(600, 500);
centerWidget(dlg);
dlg->show();
}
void TrayWidget::showRecentChangesContextMenu(const QPoint &position)
@ -966,16 +963,6 @@ void TrayWidget::showDialog(QWidget *dlg, bool maximized)
dlg->activateWindow();
}
void TrayWidget::showCenteredDialog(QWidget *dlg, const QSize &size)
{
if (m_menu && m_menu->windowType() != TrayMenu::WindowType::NormalWindow) {
m_menu->close();
}
dlg->resize(size);
centerWidget(dlg);
dlg->show();
}
void TrayWidget::setBrightColorsOfModelsAccordingToPalette()
{
auto &qtSettings = Settings::values().qt;

View File

@ -96,7 +96,6 @@ private Q_SLOTS:
void pauseResumeDev(const Data::SyncthingDev &dev);
void pauseResumeDir(const Data::SyncthingDir &dir);
void browseRemoteFiles(const Data::SyncthingDir &dir);
void showIgnorePatterns(const Data::SyncthingDir &dir);
void showRecentChangesContextMenu(const QPoint &position);
void changeStatus();
void updateTraffic();
@ -116,7 +115,6 @@ private Q_SLOTS:
void handleConnectionSelected(QAction *connectionAction);
void concludeWizard(const QString &errorMessage = QString());
void showDialog(QWidget *dlg, bool maximized = false);
void showCenteredDialog(QWidget *dlg, const QSize &size);
void setBrightColorsOfModelsAccordingToPalette();
void setLabelPixmaps();
void setTrafficPixmaps(bool recompute = false);

View File

@ -71,11 +71,6 @@
<source>Browse remote files</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/dirview.cpp" line="111"/>
<source>Show ignore patterns</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QtGui::DownloadView</name>
@ -172,20 +167,20 @@
</message>
<message>
<location filename="../gui/traywidget.ui" line="99"/>
<location filename="../gui/traywidget.cpp" line="343"/>
<location filename="../gui/traywidget.cpp" line="342"/>
<source>About</source>
<translation>O Syncthing Tray</translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="58"/>
<location filename="../gui/traywidget.cpp" line="472"/>
<location filename="../gui/traywidget.cpp" line="471"/>
<source>Connect</source>
<translation>Připojit</translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="72"/>
<location filename="../gui/traywidget.cpp" line="863"/>
<location filename="../gui/traywidget.cpp" line="905"/>
<location filename="../gui/traywidget.cpp" line="860"/>
<location filename="../gui/traywidget.cpp" line="902"/>
<source>Start</source>
<translation>Spustit</translation>
</message>
@ -257,7 +252,7 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<message>
<location filename="../gui/traywidget.ui" line="357"/>
<location filename="../gui/traywidget.cpp" line="155"/>
<location filename="../gui/traywidget.cpp" line="383"/>
<location filename="../gui/traywidget.cpp" line="382"/>
<source>New notifications</source>
<translation>Nová oznámení</translation>
</message>
@ -327,93 +322,93 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<translation>Ukončit Syncthing Tray</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="440"/>
<location filename="../gui/traywidget.cpp" line="439"/>
<source>Do you really want to restart Syncthing?</source>
<translation>Opravdu chcete Syncthing restartovat?</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="467"/>
<location filename="../gui/traywidget.cpp" line="466"/>
<source>Connecting </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="468"/>
<location filename="../gui/traywidget.cpp" line="467"/>
<source>Establishing connection to Syncthing </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="473"/>
<location filename="../gui/traywidget.cpp" line="472"/>
<source>Not connected to Syncthing, click to connect</source>
<translation>Nepřipojeno k Syncthing, klikněte pro připojení se</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="478"/>
<location filename="../gui/traywidget.cpp" line="477"/>
<source>Unable to establish connection to Syncthing.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="486"/>
<location filename="../gui/traywidget.cpp" line="485"/>
<source>Pause</source>
<translation>Pozastavit</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="487"/>
<location filename="../gui/traywidget.cpp" line="486"/>
<source>Syncthing is running, click to pause all devices</source>
<translation>Syncthing je spuštěné, kliknutím pozastavíte veškerá zařízení</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="492"/>
<location filename="../gui/traywidget.cpp" line="491"/>
<source>Continue</source>
<translation>Pokračovat</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="493"/>
<location filename="../gui/traywidget.cpp" line="492"/>
<source>At least one device is paused, click to resume</source>
<translation>Přinejmenším jedno zařízení je pozastaveno, kliknutím pokračujte</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="616"/>
<location filename="../gui/traywidget.cpp" line="615"/>
<source>The specified connection configuration &lt;em&gt;%1&lt;/em&gt; is not defined and hence ignored.</source>
<translation>Zadané nastavení spojení &lt;em&gt;%1&lt;/em&gt; není definováno a proto je ignorováno.</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="675"/>
<location filename="../gui/traywidget.cpp" line="674"/>
<source>The folder &lt;i&gt;%1&lt;/i&gt; does not exist on the local machine.</source>
<translation>Adresář &lt;i&gt;%1&lt;/i&gt; neexistuje místně.</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="686"/>
<location filename="../gui/traywidget.cpp" line="685"/>
<source>The containing folder &lt;i&gt;%1&lt;/i&gt; does not exist on the local machine.</source>
<translation>Obsažený adresář &lt;i&gt;%1&lt;/i&gt; neexistuje místně.</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="739"/>
<location filename="../gui/traywidget.cpp" line="736"/>
<source>Copy path</source>
<translation type="unfinished">Zkopírovat popis umístění</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="743"/>
<location filename="../gui/traywidget.cpp" line="740"/>
<source>Copy device ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="746"/>
<location filename="../gui/traywidget.cpp" line="743"/>
<source>Copy folder ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="859"/>
<location filename="../gui/traywidget.cpp" line="899"/>
<location filename="../gui/traywidget.cpp" line="856"/>
<location filename="../gui/traywidget.cpp" line="896"/>
<source>Stop</source>
<translation>Zastavit</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="860"/>
<location filename="../gui/traywidget.cpp" line="857"/>
<source>Stop Syncthing instance launched via tray icon</source>
<translation>Zastavit instanci Syncthing spuštěnou prostřednictvím ikony v oznamovací oblasti</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="864"/>
<location filename="../gui/traywidget.cpp" line="861"/>
<source>Start Syncthing with the built-in launcher configured in the settings</source>
<translation>Spustit Syncthing s vestavěným spouštěčem nastaveným v nastaveních</translation>
</message>

View File

@ -71,11 +71,6 @@
<source>Browse remote files</source>
<translation>Globale Dateistruktur durchsuchen</translation>
</message>
<message>
<location filename="../gui/dirview.cpp" line="111"/>
<source>Show ignore patterns</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QtGui::DownloadView</name>
@ -172,20 +167,20 @@
</message>
<message>
<location filename="../gui/traywidget.ui" line="99"/>
<location filename="../gui/traywidget.cpp" line="343"/>
<location filename="../gui/traywidget.cpp" line="342"/>
<source>About</source>
<translation>Über Syncthing Tray</translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="58"/>
<location filename="../gui/traywidget.cpp" line="472"/>
<location filename="../gui/traywidget.cpp" line="471"/>
<source>Connect</source>
<translation>Verbinden</translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="72"/>
<location filename="../gui/traywidget.cpp" line="863"/>
<location filename="../gui/traywidget.cpp" line="905"/>
<location filename="../gui/traywidget.cpp" line="860"/>
<location filename="../gui/traywidget.cpp" line="902"/>
<source>Start</source>
<translation>Starten</translation>
</message>
@ -261,7 +256,7 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<message>
<location filename="../gui/traywidget.ui" line="357"/>
<location filename="../gui/traywidget.cpp" line="155"/>
<location filename="../gui/traywidget.cpp" line="383"/>
<location filename="../gui/traywidget.cpp" line="382"/>
<source>New notifications</source>
<translation>Neue Benachrichtigungen</translation>
</message>
@ -332,93 +327,93 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<translation>Syncthing Tray schließen</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="440"/>
<location filename="../gui/traywidget.cpp" line="439"/>
<source>Do you really want to restart Syncthing?</source>
<translation>Soll Syncthing wirklich neu gestartet werden?</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="467"/>
<location filename="../gui/traywidget.cpp" line="466"/>
<source>Connecting </source>
<translation>Verbinde </translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="468"/>
<location filename="../gui/traywidget.cpp" line="467"/>
<source>Establishing connection to Syncthing </source>
<translation>Stelle Verbindung zu Syncthing her </translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="473"/>
<location filename="../gui/traywidget.cpp" line="472"/>
<source>Not connected to Syncthing, click to connect</source>
<translation>Verbindung zu Syncthing getrennt, klicke um zu verbinden</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="478"/>
<location filename="../gui/traywidget.cpp" line="477"/>
<source>Unable to establish connection to Syncthing.</source>
<translation>Verbindung zu Syncthing kann nicht hergestellt werden.</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="486"/>
<location filename="../gui/traywidget.cpp" line="485"/>
<source>Pause</source>
<translation>Pausieren</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="487"/>
<location filename="../gui/traywidget.cpp" line="486"/>
<source>Syncthing is running, click to pause all devices</source>
<translation>Syncthing läuft, klicke um alle Geräte zu pausieren</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="492"/>
<location filename="../gui/traywidget.cpp" line="491"/>
<source>Continue</source>
<translation>Fortsetzen</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="493"/>
<location filename="../gui/traywidget.cpp" line="492"/>
<source>At least one device is paused, click to resume</source>
<translation>Mind. ein Gerät ist pausiert, klicke um fortzusetzen</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="616"/>
<location filename="../gui/traywidget.cpp" line="615"/>
<source>The specified connection configuration &lt;em&gt;%1&lt;/em&gt; is not defined and hence ignored.</source>
<translation>Die angegebene Verbindungskonfiguration &lt;em&gt;%1&lt;/em&gt; ist nicht definiert und wird daher ignoriert.</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="675"/>
<location filename="../gui/traywidget.cpp" line="674"/>
<source>The folder &lt;i&gt;%1&lt;/i&gt; does not exist on the local machine.</source>
<translation>Der Ordner &lt;i&gt;%1&lt;/i&gt; existiert nicht lokal.</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="686"/>
<location filename="../gui/traywidget.cpp" line="685"/>
<source>The containing folder &lt;i&gt;%1&lt;/i&gt; does not exist on the local machine.</source>
<translation>Der beinhaltende Ordner &lt;i&gt;%1&lt;/i&gt; existiert nicht lokal.</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="739"/>
<location filename="../gui/traywidget.cpp" line="736"/>
<source>Copy path</source>
<translation>Pfad kopieren</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="743"/>
<location filename="../gui/traywidget.cpp" line="740"/>
<source>Copy device ID</source>
<translation>Geräte-ID kopieren</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="746"/>
<location filename="../gui/traywidget.cpp" line="743"/>
<source>Copy folder ID</source>
<translation>Ordner-ID kopieren</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="859"/>
<location filename="../gui/traywidget.cpp" line="899"/>
<location filename="../gui/traywidget.cpp" line="856"/>
<location filename="../gui/traywidget.cpp" line="896"/>
<source>Stop</source>
<translation>Stoppen</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="860"/>
<location filename="../gui/traywidget.cpp" line="857"/>
<source>Stop Syncthing instance launched via tray icon</source>
<translation>Stoppe Syncthing-Instanz, die mit dem internen Starter gestartet wurde</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="864"/>
<location filename="../gui/traywidget.cpp" line="861"/>
<source>Start Syncthing with the built-in launcher configured in the settings</source>
<translation>Starte Syncthing mit dem eingebauten Starter, der in den Einstellungen konfiguriert wird</translation>
</message>

View File

@ -71,11 +71,6 @@
<source>Browse remote files</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/dirview.cpp" line="111"/>
<source>Show ignore patterns</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QtGui::DownloadView</name>
@ -172,20 +167,20 @@
</message>
<message>
<location filename="../gui/traywidget.ui" line="99"/>
<location filename="../gui/traywidget.cpp" line="343"/>
<location filename="../gui/traywidget.cpp" line="342"/>
<source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="58"/>
<location filename="../gui/traywidget.cpp" line="472"/>
<location filename="../gui/traywidget.cpp" line="471"/>
<source>Connect</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="72"/>
<location filename="../gui/traywidget.cpp" line="863"/>
<location filename="../gui/traywidget.cpp" line="905"/>
<location filename="../gui/traywidget.cpp" line="860"/>
<location filename="../gui/traywidget.cpp" line="902"/>
<source>Start</source>
<translation type="unfinished"></translation>
</message>
@ -256,7 +251,7 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<message>
<location filename="../gui/traywidget.ui" line="357"/>
<location filename="../gui/traywidget.cpp" line="155"/>
<location filename="../gui/traywidget.cpp" line="383"/>
<location filename="../gui/traywidget.cpp" line="382"/>
<source>New notifications</source>
<translation type="unfinished"></translation>
</message>
@ -326,93 +321,93 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="440"/>
<location filename="../gui/traywidget.cpp" line="439"/>
<source>Do you really want to restart Syncthing?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="467"/>
<location filename="../gui/traywidget.cpp" line="466"/>
<source>Connecting </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="468"/>
<location filename="../gui/traywidget.cpp" line="467"/>
<source>Establishing connection to Syncthing </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="473"/>
<location filename="../gui/traywidget.cpp" line="472"/>
<source>Not connected to Syncthing, click to connect</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="478"/>
<location filename="../gui/traywidget.cpp" line="477"/>
<source>Unable to establish connection to Syncthing.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="486"/>
<location filename="../gui/traywidget.cpp" line="485"/>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="487"/>
<location filename="../gui/traywidget.cpp" line="486"/>
<source>Syncthing is running, click to pause all devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="492"/>
<location filename="../gui/traywidget.cpp" line="491"/>
<source>Continue</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="493"/>
<location filename="../gui/traywidget.cpp" line="492"/>
<source>At least one device is paused, click to resume</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="616"/>
<location filename="../gui/traywidget.cpp" line="615"/>
<source>The specified connection configuration &lt;em&gt;%1&lt;/em&gt; is not defined and hence ignored.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="675"/>
<location filename="../gui/traywidget.cpp" line="674"/>
<source>The folder &lt;i&gt;%1&lt;/i&gt; does not exist on the local machine.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="686"/>
<location filename="../gui/traywidget.cpp" line="685"/>
<source>The containing folder &lt;i&gt;%1&lt;/i&gt; does not exist on the local machine.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="739"/>
<location filename="../gui/traywidget.cpp" line="736"/>
<source>Copy path</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="743"/>
<location filename="../gui/traywidget.cpp" line="740"/>
<source>Copy device ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="746"/>
<location filename="../gui/traywidget.cpp" line="743"/>
<source>Copy folder ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="859"/>
<location filename="../gui/traywidget.cpp" line="899"/>
<location filename="../gui/traywidget.cpp" line="856"/>
<location filename="../gui/traywidget.cpp" line="896"/>
<source>Stop</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="860"/>
<location filename="../gui/traywidget.cpp" line="857"/>
<source>Stop Syncthing instance launched via tray icon</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="864"/>
<location filename="../gui/traywidget.cpp" line="861"/>
<source>Start Syncthing with the built-in launcher configured in the settings</source>
<translation type="unfinished"></translation>
</message>

View File

@ -71,11 +71,6 @@
<source>Browse remote files</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/dirview.cpp" line="111"/>
<source>Show ignore patterns</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QtGui::DownloadView</name>
@ -172,20 +167,20 @@
</message>
<message>
<location filename="../gui/traywidget.ui" line="58"/>
<location filename="../gui/traywidget.cpp" line="472"/>
<location filename="../gui/traywidget.cpp" line="471"/>
<source>Connect</source>
<translation></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="72"/>
<location filename="../gui/traywidget.cpp" line="863"/>
<location filename="../gui/traywidget.cpp" line="905"/>
<location filename="../gui/traywidget.cpp" line="860"/>
<location filename="../gui/traywidget.cpp" line="902"/>
<source>Start</source>
<translation></translation>
</message>
<message>
<location filename="../gui/traywidget.ui" line="99"/>
<location filename="../gui/traywidget.cpp" line="343"/>
<location filename="../gui/traywidget.cpp" line="342"/>
<source>About</source>
<translation></translation>
</message>
@ -257,7 +252,7 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<message>
<location filename="../gui/traywidget.ui" line="357"/>
<location filename="../gui/traywidget.cpp" line="155"/>
<location filename="../gui/traywidget.cpp" line="383"/>
<location filename="../gui/traywidget.cpp" line="382"/>
<source>New notifications</source>
<translation></translation>
</message>
@ -327,93 +322,93 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<translation>退 Syncthing Tray</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="440"/>
<location filename="../gui/traywidget.cpp" line="439"/>
<source>Do you really want to restart Syncthing?</source>
<translation> Syncthing </translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="467"/>
<location filename="../gui/traywidget.cpp" line="466"/>
<source>Connecting </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="468"/>
<location filename="../gui/traywidget.cpp" line="467"/>
<source>Establishing connection to Syncthing </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="473"/>
<location filename="../gui/traywidget.cpp" line="472"/>
<source>Not connected to Syncthing, click to connect</source>
<translation> Syncthing</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="478"/>
<location filename="../gui/traywidget.cpp" line="477"/>
<source>Unable to establish connection to Syncthing.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="486"/>
<location filename="../gui/traywidget.cpp" line="485"/>
<source>Pause</source>
<translation></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="487"/>
<location filename="../gui/traywidget.cpp" line="486"/>
<source>Syncthing is running, click to pause all devices</source>
<translation>Syncthing </translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="492"/>
<location filename="../gui/traywidget.cpp" line="491"/>
<source>Continue</source>
<translation></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="493"/>
<location filename="../gui/traywidget.cpp" line="492"/>
<source>At least one device is paused, click to resume</source>
<translation></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="616"/>
<location filename="../gui/traywidget.cpp" line="615"/>
<source>The specified connection configuration &lt;em&gt;%1&lt;/em&gt; is not defined and hence ignored.</source>
<translation> &lt;em&gt;%1&lt;/em&gt; </translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="675"/>
<location filename="../gui/traywidget.cpp" line="674"/>
<source>The folder &lt;i&gt;%1&lt;/i&gt; does not exist on the local machine.</source>
<translation> &lt;i&gt;%1&lt;/i&gt;</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="686"/>
<location filename="../gui/traywidget.cpp" line="685"/>
<source>The containing folder &lt;i&gt;%1&lt;/i&gt; does not exist on the local machine.</source>
<translation> &lt;i&gt;%1&lt;/i&gt;</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="739"/>
<location filename="../gui/traywidget.cpp" line="736"/>
<source>Copy path</source>
<translation></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="743"/>
<location filename="../gui/traywidget.cpp" line="740"/>
<source>Copy device ID</source>
<translation> ID</translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="746"/>
<location filename="../gui/traywidget.cpp" line="743"/>
<source>Copy folder ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="859"/>
<location filename="../gui/traywidget.cpp" line="899"/>
<location filename="../gui/traywidget.cpp" line="856"/>
<location filename="../gui/traywidget.cpp" line="896"/>
<source>Stop</source>
<translation></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="860"/>
<location filename="../gui/traywidget.cpp" line="857"/>
<source>Stop Syncthing instance launched via tray icon</source>
<translation> Syncthing </translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="864"/>
<location filename="../gui/traywidget.cpp" line="861"/>
<source>Start Syncthing with the built-in launcher configured in the settings</source>
<translation>使 Syncthing</translation>
</message>