Implement autostart and launcher
This commit is contained in:
parent
2360b2a482
commit
cb251fd123
|
@ -42,3 +42,8 @@ Makefile*
|
||||||
|
|
||||||
# tests
|
# tests
|
||||||
testfiles/output.*
|
testfiles/output.*
|
||||||
|
|
||||||
|
# experimental
|
||||||
|
plasmoid/
|
||||||
|
scripts/
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@ set(HEADER_FILES
|
||||||
data/syncthingdirectorymodel.h
|
data/syncthingdirectorymodel.h
|
||||||
data/syncthingdevicemodel.h
|
data/syncthingdevicemodel.h
|
||||||
data/syncthingconfig.h
|
data/syncthingconfig.h
|
||||||
|
data/syncthingprocess.h
|
||||||
data/utils.h
|
data/utils.h
|
||||||
)
|
)
|
||||||
set(SRC_FILES
|
set(SRC_FILES
|
||||||
|
@ -27,6 +28,7 @@ set(SRC_FILES
|
||||||
data/syncthingdirectorymodel.cpp
|
data/syncthingdirectorymodel.cpp
|
||||||
data/syncthingdevicemodel.cpp
|
data/syncthingdevicemodel.cpp
|
||||||
data/syncthingconfig.cpp
|
data/syncthingconfig.cpp
|
||||||
|
data/syncthingprocess.cpp
|
||||||
data/utils.cpp
|
data/utils.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -65,6 +67,7 @@ set(WIDGETS_UI_FILES
|
||||||
gui/notificationsoptionpage.ui
|
gui/notificationsoptionpage.ui
|
||||||
gui/appearanceoptionpage.ui
|
gui/appearanceoptionpage.ui
|
||||||
gui/autostartoptionpage.ui
|
gui/autostartoptionpage.ui
|
||||||
|
gui/launcheroptionpage.ui
|
||||||
gui/webviewoptionpage.ui
|
gui/webviewoptionpage.ui
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
16
README.md
16
README.md
|
@ -3,7 +3,10 @@
|
||||||
Qt 5-based tray application for [Syncthing](https://github.com/syncthing/syncthing)
|
Qt 5-based tray application for [Syncthing](https://github.com/syncthing/syncthing)
|
||||||
|
|
||||||
* Designed to work under any desktop environment with tray icon support
|
* Designed to work under any desktop environment with tray icon support
|
||||||
* Tested under Plasma 5 and Openbox/qt5ct/Tint2
|
* Tested under
|
||||||
|
* Plasma 5
|
||||||
|
* Openbox/qt5ct/Tint2
|
||||||
|
* Cinnamon
|
||||||
* Could be shown as regular window if no tray icon support is available
|
* Could be shown as regular window if no tray icon support is available
|
||||||
* Doesn't require desktop environment specific libraries
|
* Doesn't require desktop environment specific libraries
|
||||||
* Provides quick access to most frequently used features but does not intend to replace the official web UI
|
* Provides quick access to most frequently used features but does not intend to replace the official web UI
|
||||||
|
@ -11,18 +14,21 @@ Qt 5-based tray application for [Syncthing](https://github.com/syncthing/syncthi
|
||||||
* Check current traffic statistics
|
* Check current traffic statistics
|
||||||
* Display further details about direcoties and devices, like last file, last
|
* Display further details about direcoties and devices, like last file, last
|
||||||
scan, ...
|
scan, ...
|
||||||
* Trigger re-scan of a specific directory
|
* Trigger re-scan of a specific directory or all directories at once
|
||||||
* Open a directory with the default file browser
|
* Open a directory with the default file browser
|
||||||
* Pause/resume devices
|
* Pause/resume a specific device or all devices at once
|
||||||
* Shows Syncthing notifications
|
* Shows Syncthing notifications
|
||||||
* Does *not* allow configuring Syncthing itself (currently I do not intend to add this feature as it could cause more harm than good when not implemented correctly)
|
* Does *not* allow configuring Syncthing itself (currently I do not intend to add this feature as it could cause more harm than good when not implemented correctly)
|
||||||
|
* Can read the Syncthing configuration file for quick setup when just connecting to local instance
|
||||||
|
* Provides an option to conveniently add the tray to the applications launched when the desktop environment starts
|
||||||
|
* Can launch Syncthing when started and display stdout/stderr (useful under Windows)
|
||||||
* Provides quick access to the official web UI
|
* Provides quick access to the official web UI
|
||||||
* Utilizes either Qt WebKit or Qt WebEngine
|
* Utilizes either Qt WebKit or Qt WebEngine
|
||||||
* Can be built without web view support as well (then the web UI is opened in the regular browser)
|
* Can be built without web view support as well (then the web UI is opened in the regular browser)
|
||||||
* Still under development; the following features are planned
|
* Still under development; the following features are planned
|
||||||
* Connect to multiple instances of Syncthing at a time
|
* Connect to multiple instances of Syncthing at a time
|
||||||
* Add option to conveniently add the tray to the applications launched when the desktop environment starts
|
* Show currently processed items
|
||||||
* Add option to launch Syncthing when the tray is started and log stdout/stderr (would make sense for me under Windows, otherwise starting Syncthing via systemd is more preferable of course)
|
* Show recently processed items
|
||||||
|
|
||||||
## Screenshots
|
## Screenshots
|
||||||
### Under Openbox/Tint2
|
### Under Openbox/Tint2
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "./settings.h"
|
#include "./settings.h"
|
||||||
#include "../gui/trayicon.h"
|
#include "../gui/trayicon.h"
|
||||||
#include "../gui/traywidget.h"
|
#include "../gui/traywidget.h"
|
||||||
|
#include "../data/syncthingprocess.h"
|
||||||
|
|
||||||
#include "resources/config.h"
|
#include "resources/config.h"
|
||||||
|
|
||||||
|
@ -21,6 +22,7 @@
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace ApplicationUtilities;
|
using namespace ApplicationUtilities;
|
||||||
using namespace QtGui;
|
using namespace QtGui;
|
||||||
|
using namespace Data;
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
@ -46,12 +48,18 @@ int main(int argc, char *argv[])
|
||||||
QtUtilitiesResources::init();
|
QtUtilitiesResources::init();
|
||||||
int res;
|
int res;
|
||||||
if(windowedArg.isPresent()) {
|
if(windowedArg.isPresent()) {
|
||||||
|
if(Settings::launchSynchting()) {
|
||||||
|
syncthingProcess().startSyncthing();
|
||||||
|
}
|
||||||
TrayWidget trayWidget;
|
TrayWidget trayWidget;
|
||||||
trayWidget.show();
|
trayWidget.show();
|
||||||
res = application.exec();
|
res = application.exec();
|
||||||
} else {
|
} else {
|
||||||
#ifndef QT_NO_SYSTEMTRAYICON
|
#ifndef QT_NO_SYSTEMTRAYICON
|
||||||
if(QSystemTrayIcon::isSystemTrayAvailable()) {
|
if(QSystemTrayIcon::isSystemTrayAvailable()) {
|
||||||
|
if(Settings::launchSynchting()) {
|
||||||
|
syncthingProcess().startSyncthing();
|
||||||
|
}
|
||||||
application.setQuitOnLastWindowClosed(false);
|
application.setQuitOnLastWindowClosed(false);
|
||||||
TrayIcon trayIcon;
|
TrayIcon trayIcon;
|
||||||
trayIcon.show();
|
trayIcon.show();
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include <QByteArray>
|
#include <QByteArray>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
|
#include <QFrame>
|
||||||
|
|
||||||
using namespace Media;
|
using namespace Media;
|
||||||
|
|
||||||
|
@ -77,6 +78,11 @@ QSize &trayMenuSize()
|
||||||
static QSize v(350, 300);
|
static QSize v(350, 300);
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
int &frameStyle()
|
||||||
|
{
|
||||||
|
static int v = QFrame::StyledPanel | QFrame::Sunken;
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
// autostart/launcher
|
// autostart/launcher
|
||||||
bool &launchSynchting()
|
bool &launchSynchting()
|
||||||
|
@ -84,7 +90,16 @@ bool &launchSynchting()
|
||||||
static bool v = false;
|
static bool v = false;
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
QString &syncthingCommand()
|
QString &syncthingPath()
|
||||||
|
{
|
||||||
|
#ifdef PLATFORM_WINDOWS
|
||||||
|
static QString v(QStringLiteral("syncthing.exe"));
|
||||||
|
#else
|
||||||
|
static QString v(QStringLiteral("syncthing"));
|
||||||
|
#endif
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
QString &syncthingArgs()
|
||||||
{
|
{
|
||||||
static QString v;
|
static QString v;
|
||||||
return v;
|
return v;
|
||||||
|
@ -138,8 +153,13 @@ void restore()
|
||||||
showSyncthingNotifications() = settings.value(QStringLiteral("showSyncthingNotifications"), true).toBool();
|
showSyncthingNotifications() = settings.value(QStringLiteral("showSyncthingNotifications"), true).toBool();
|
||||||
showTraffic() = settings.value(QStringLiteral("showTraffic"), true).toBool();
|
showTraffic() = settings.value(QStringLiteral("showTraffic"), true).toBool();
|
||||||
trayMenuSize() = settings.value(QStringLiteral("trayMenuSize"), trayMenuSize()).toSize();
|
trayMenuSize() = settings.value(QStringLiteral("trayMenuSize"), trayMenuSize()).toSize();
|
||||||
|
frameStyle() = settings.value(QStringLiteral("frameStyle"), frameStyle()).toInt();
|
||||||
|
settings.endGroup();
|
||||||
|
|
||||||
|
settings.beginGroup(QStringLiteral("startup"));
|
||||||
launchSynchting() = settings.value(QStringLiteral("launchSynchting"), false).toBool();
|
launchSynchting() = settings.value(QStringLiteral("launchSynchting"), false).toBool();
|
||||||
syncthingCommand() = settings.value(QStringLiteral("syncthingCommand"), QStringLiteral("syncthing")).toString();
|
syncthingPath() = settings.value(QStringLiteral("syncthingPath"), syncthingPath()).toString();
|
||||||
|
syncthingArgs() = settings.value(QStringLiteral("syncthingArgs"), syncthingArgs()).toString();
|
||||||
settings.endGroup();
|
settings.endGroup();
|
||||||
|
|
||||||
#if defined(SYNCTHINGTRAY_USE_WEBENGINE) || defined(SYNCTHINGTRAY_USE_WEBKIT)
|
#if defined(SYNCTHINGTRAY_USE_WEBENGINE) || defined(SYNCTHINGTRAY_USE_WEBKIT)
|
||||||
|
@ -170,8 +190,13 @@ void save()
|
||||||
settings.setValue(QStringLiteral("showSyncthingNotifications"), showSyncthingNotifications());
|
settings.setValue(QStringLiteral("showSyncthingNotifications"), showSyncthingNotifications());
|
||||||
settings.setValue(QStringLiteral("showTraffic"), showTraffic());
|
settings.setValue(QStringLiteral("showTraffic"), showTraffic());
|
||||||
settings.setValue(QStringLiteral("trayMenuSize"), trayMenuSize());
|
settings.setValue(QStringLiteral("trayMenuSize"), trayMenuSize());
|
||||||
|
settings.setValue(QStringLiteral("frameStyle"), frameStyle());
|
||||||
|
settings.endGroup();
|
||||||
|
|
||||||
|
settings.beginGroup(QStringLiteral("startup"));
|
||||||
settings.setValue(QStringLiteral("launchSynchting"), launchSynchting());
|
settings.setValue(QStringLiteral("launchSynchting"), launchSynchting());
|
||||||
settings.setValue(QStringLiteral("syncthingCommand"), syncthingCommand());
|
settings.setValue(QStringLiteral("syncthingPath"), syncthingPath());
|
||||||
|
settings.setValue(QStringLiteral("syncthingArgs"), syncthingArgs());
|
||||||
settings.endGroup();
|
settings.endGroup();
|
||||||
|
|
||||||
#if defined(SYNCTHINGTRAY_USE_WEBENGINE) || defined(SYNCTHINGTRAY_USE_WEBKIT)
|
#if defined(SYNCTHINGTRAY_USE_WEBENGINE) || defined(SYNCTHINGTRAY_USE_WEBKIT)
|
||||||
|
|
|
@ -38,10 +38,12 @@ bool &showSyncthingNotifications();
|
||||||
// apprearance
|
// apprearance
|
||||||
bool &showTraffic();
|
bool &showTraffic();
|
||||||
QSize &trayMenuSize();
|
QSize &trayMenuSize();
|
||||||
|
int &frameStyle();
|
||||||
|
|
||||||
// autostart/launcher
|
// autostart/launcher
|
||||||
bool &launchSynchting();
|
bool &launchSynchting();
|
||||||
QString &syncthingCommand();
|
QString &syncthingPath();
|
||||||
|
QString &syncthingArgs();
|
||||||
|
|
||||||
// web view
|
// web view
|
||||||
#if defined(SYNCTHINGTRAY_USE_WEBENGINE) || defined(SYNCTHINGTRAY_USE_WEBKIT)
|
#if defined(SYNCTHINGTRAY_USE_WEBENGINE) || defined(SYNCTHINGTRAY_USE_WEBKIT)
|
||||||
|
|
|
@ -37,8 +37,13 @@ QNetworkAccessManager &networkAccessManager()
|
||||||
* \brief Assigns the status from the specified status string.
|
* \brief Assigns the status from the specified status string.
|
||||||
* \returns Returns whether the status has actually changed.
|
* \returns Returns whether the status has actually changed.
|
||||||
*/
|
*/
|
||||||
bool SyncthingDir::assignStatus(const QString &statusStr)
|
bool SyncthingDir::assignStatus(const QString &statusStr, DateTime time)
|
||||||
{
|
{
|
||||||
|
if(lastStatusUpdate > time) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
lastStatusUpdate = time;
|
||||||
|
}
|
||||||
DirStatus newStatus;
|
DirStatus newStatus;
|
||||||
if(statusStr == QLatin1String("idle")) {
|
if(statusStr == QLatin1String("idle")) {
|
||||||
progressPercentage = 0;
|
progressPercentage = 0;
|
||||||
|
@ -71,6 +76,27 @@ bool SyncthingDir::assignStatus(const QString &statusStr)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SyncthingDir::assignStatus(DirStatus newStatus, DateTime time)
|
||||||
|
{
|
||||||
|
if(lastStatusUpdate > time) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
lastStatusUpdate = time;
|
||||||
|
}
|
||||||
|
if(newStatus != status) {
|
||||||
|
switch(status) {
|
||||||
|
case DirStatus::Scanning:
|
||||||
|
lastScanTime = DateTime::now();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
;
|
||||||
|
}
|
||||||
|
status = newStatus;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \class SyncthingConnection
|
* \class SyncthingConnection
|
||||||
* \brief The SyncthingConnection class allows Qt applications to access Syncthing.
|
* \brief The SyncthingConnection class allows Qt applications to access Syncthing.
|
||||||
|
@ -119,7 +145,7 @@ QString SyncthingConnection::statusText() const
|
||||||
switch(m_status) {
|
switch(m_status) {
|
||||||
case SyncthingStatus::Disconnected:
|
case SyncthingStatus::Disconnected:
|
||||||
return tr("disconnected");
|
return tr("disconnected");
|
||||||
case SyncthingStatus::Default:
|
case SyncthingStatus::Idle:
|
||||||
return tr("connected");
|
return tr("connected");
|
||||||
case SyncthingStatus::NotificationsAvailable:
|
case SyncthingStatus::NotificationsAvailable:
|
||||||
return tr("connected, notifications available");
|
return tr("connected, notifications available");
|
||||||
|
@ -215,6 +241,11 @@ void SyncthingConnection::rescanAllDirs()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SyncthingConnection::restart()
|
||||||
|
{
|
||||||
|
QObject::connect(postData(QStringLiteral("system/restart"), QUrlQuery()), &QNetworkReply::finished, this, &SyncthingConnection::readRestart);
|
||||||
|
}
|
||||||
|
|
||||||
void SyncthingConnection::notificationsRead()
|
void SyncthingConnection::notificationsRead()
|
||||||
{
|
{
|
||||||
m_unreadNotifications = false;
|
m_unreadNotifications = false;
|
||||||
|
@ -379,12 +410,12 @@ void SyncthingConnection::requestEvents()
|
||||||
*
|
*
|
||||||
* The specified \a callback is called on success; otherwise error() is emitted.
|
* The specified \a callback is called on success; otherwise error() is emitted.
|
||||||
*/
|
*/
|
||||||
void SyncthingConnection::requestQrCode(const QString &text, std::function<void(const QPixmap &)> callback)
|
QMetaObject::Connection SyncthingConnection::requestQrCode(const QString &text, std::function<void(const QPixmap &)> callback)
|
||||||
{
|
{
|
||||||
QUrlQuery query;
|
QUrlQuery query;
|
||||||
query.addQueryItem(QStringLiteral("text"), text);
|
query.addQueryItem(QStringLiteral("text"), text);
|
||||||
QNetworkReply *reply = requestData(QStringLiteral("/qr/"), query, false);
|
QNetworkReply *reply = requestData(QStringLiteral("/qr/"), query, false);
|
||||||
QObject::connect(reply, &QNetworkReply::finished, [this, reply, callback] {
|
return QObject::connect(reply, &QNetworkReply::finished, [this, reply, callback] {
|
||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
QPixmap pixmap;
|
QPixmap pixmap;
|
||||||
switch(reply->error()) {
|
switch(reply->error()) {
|
||||||
|
@ -403,10 +434,10 @@ void SyncthingConnection::requestQrCode(const QString &text, std::function<void(
|
||||||
*
|
*
|
||||||
* The specified \a callback is called on success; otherwise error() is emitted.
|
* The specified \a callback is called on success; otherwise error() is emitted.
|
||||||
*/
|
*/
|
||||||
void SyncthingConnection::requestLog(std::function<void (const std::vector<SyncthingLogEntry> &)> callback)
|
QMetaObject::Connection SyncthingConnection::requestLog(std::function<void (const std::vector<SyncthingLogEntry> &)> callback)
|
||||||
{
|
{
|
||||||
QNetworkReply *reply = requestData(QStringLiteral("system/log"), QUrlQuery());
|
QNetworkReply *reply = requestData(QStringLiteral("system/log"), QUrlQuery());
|
||||||
QObject::connect(reply, &QNetworkReply::finished, [this, reply, callback] {
|
return QObject::connect(reply, &QNetworkReply::finished, [this, reply, callback] {
|
||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
switch(reply->error()) {
|
switch(reply->error()) {
|
||||||
case QNetworkReply::NoError: {
|
case QNetworkReply::NoError: {
|
||||||
|
@ -812,11 +843,11 @@ void SyncthingConnection::readEvents()
|
||||||
if(eventType == QLatin1String("Starting")) {
|
if(eventType == QLatin1String("Starting")) {
|
||||||
readStartingEvent(eventData);
|
readStartingEvent(eventData);
|
||||||
} else if(eventType == QLatin1String("StateChanged")) {
|
} else if(eventType == QLatin1String("StateChanged")) {
|
||||||
readStatusChangedEvent(eventData);
|
readStatusChangedEvent(eventTime, eventData);
|
||||||
} else if(eventType == QLatin1String("DownloadProgress")) {
|
} else if(eventType == QLatin1String("DownloadProgress")) {
|
||||||
readDownloadProgressEvent(eventData);
|
readDownloadProgressEvent(eventData);
|
||||||
} else if(eventType.startsWith(QLatin1String("Folder"))) {
|
} else if(eventType.startsWith(QLatin1String("Folder"))) {
|
||||||
readDirEvent(eventType, eventData);
|
readDirEvent(eventTime, eventType, eventData);
|
||||||
} else if(eventType.startsWith(QLatin1String("Device"))) {
|
} else if(eventType.startsWith(QLatin1String("Device"))) {
|
||||||
readDeviceEvent(eventTime, eventType, eventData);
|
readDeviceEvent(eventTime, eventType, eventData);
|
||||||
} else if(eventType == QLatin1String("ItemStarted")) {
|
} else if(eventType == QLatin1String("ItemStarted")) {
|
||||||
|
@ -856,7 +887,7 @@ void SyncthingConnection::readEvents()
|
||||||
if(m_keepPolling) {
|
if(m_keepPolling) {
|
||||||
requestEvents();
|
requestEvents();
|
||||||
// TODO: need to change the status somewhere else
|
// TODO: need to change the status somewhere else
|
||||||
setStatus(SyncthingStatus::Default);
|
setStatus(SyncthingStatus::Idle);
|
||||||
} else {
|
} else {
|
||||||
setStatus(SyncthingStatus::Disconnected);
|
setStatus(SyncthingStatus::Disconnected);
|
||||||
}
|
}
|
||||||
|
@ -880,14 +911,14 @@ void SyncthingConnection::readStartingEvent(const QJsonObject &eventData)
|
||||||
/*!
|
/*!
|
||||||
* \brief Reads results of requestEvents().
|
* \brief Reads results of requestEvents().
|
||||||
*/
|
*/
|
||||||
void SyncthingConnection::readStatusChangedEvent(const QJsonObject &eventData)
|
void SyncthingConnection::readStatusChangedEvent(DateTime eventTime, const QJsonObject &eventData)
|
||||||
{
|
{
|
||||||
const QString dir(eventData.value(QStringLiteral("folder")).toString());
|
const QString dir(eventData.value(QStringLiteral("folder")).toString());
|
||||||
if(!dir.isEmpty()) {
|
if(!dir.isEmpty()) {
|
||||||
// dir status changed
|
// dir status changed
|
||||||
int index;
|
int index;
|
||||||
if(SyncthingDir *dirInfo = findDirInfo(dir, index)) {
|
if(SyncthingDir *dirInfo = findDirInfo(dir, index)) {
|
||||||
if(dirInfo->assignStatus(eventData.value(QStringLiteral("to")).toString())) {
|
if(dirInfo->assignStatus(eventData.value(QStringLiteral("to")).toString(), eventTime)) {
|
||||||
emit dirStatusChanged(*dirInfo, index);
|
emit dirStatusChanged(*dirInfo, index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -906,7 +937,7 @@ void SyncthingConnection::readDownloadProgressEvent(const QJsonObject &eventData
|
||||||
/*!
|
/*!
|
||||||
* \brief Reads results of requestEvents().
|
* \brief Reads results of requestEvents().
|
||||||
*/
|
*/
|
||||||
void SyncthingConnection::readDirEvent(const QString &eventType, const QJsonObject &eventData)
|
void SyncthingConnection::readDirEvent(DateTime eventTime, const QString &eventType, const QJsonObject &eventData)
|
||||||
{
|
{
|
||||||
const QString dir(eventData.value(QStringLiteral("folder")).toString());
|
const QString dir(eventData.value(QStringLiteral("folder")).toString());
|
||||||
if(!dir.isEmpty()) {
|
if(!dir.isEmpty()) {
|
||||||
|
@ -920,7 +951,7 @@ void SyncthingConnection::readDirEvent(const QString &eventType, const QJsonObje
|
||||||
const QJsonObject error(errorVal.toObject());
|
const QJsonObject error(errorVal.toObject());
|
||||||
if(!error.isEmpty()) {
|
if(!error.isEmpty()) {
|
||||||
dirInfo->errors.emplace_back(error.value(QStringLiteral("error")).toString(), error.value(QStringLiteral("path")).toString());
|
dirInfo->errors.emplace_back(error.value(QStringLiteral("error")).toString(), error.value(QStringLiteral("path")).toString());
|
||||||
dirInfo->status = DirStatus::OutOfSync;
|
dirInfo->assignStatus(DirStatus::OutOfSync, eventTime);
|
||||||
emit newNotification(dirInfo->errors.back().message);
|
emit newNotification(dirInfo->errors.back().message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -958,7 +989,8 @@ void SyncthingConnection::readDirEvent(const QString &eventType, const QJsonObje
|
||||||
if(current > 0 && total > 0) {
|
if(current > 0 && total > 0) {
|
||||||
dirInfo->progressPercentage = current * 100 / total;
|
dirInfo->progressPercentage = current * 100 / total;
|
||||||
dirInfo->progressRate = rate;
|
dirInfo->progressRate = rate;
|
||||||
dirInfo->status = DirStatus::Scanning; // ensure state is scanning
|
dirInfo->assignStatus(DirStatus::Scanning, eventTime); // ensure state is scanning
|
||||||
|
emit dirStatusChanged(*dirInfo, index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1040,7 +1072,7 @@ void SyncthingConnection::readItemFinished(DateTime eventTime, const QJsonObject
|
||||||
}
|
}
|
||||||
emit dirStatusChanged(*dirInfo, index);
|
emit dirStatusChanged(*dirInfo, index);
|
||||||
}
|
}
|
||||||
} else {
|
} else if(dirInfo->status == DirStatus::OutOfSync) { // FIXME: find better way to check whether the event is still relevant
|
||||||
dirInfo->errors.emplace_back(error, item);
|
dirInfo->errors.emplace_back(error, item);
|
||||||
emit newNotification(error);
|
emit newNotification(error);
|
||||||
}
|
}
|
||||||
|
@ -1078,6 +1110,21 @@ void SyncthingConnection::readPauseResume()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Reads results of restart().
|
||||||
|
*/
|
||||||
|
void SyncthingConnection::readRestart()
|
||||||
|
{
|
||||||
|
auto *reply = static_cast<QNetworkReply *>(sender());
|
||||||
|
reply->deleteLater();
|
||||||
|
switch(reply->error()) {
|
||||||
|
case QNetworkReply::NoError:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
emit error(tr("Unable to request restart: ") + reply->errorString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Sets the connection status. Ensures statusChanged() is emitted.
|
* \brief Sets the connection status. Ensures statusChanged() is emitted.
|
||||||
* \param status Specifies the status; should be either SyncthingStatus::Disconnected or SyncthingStatus::Default. There is no use
|
* \param status Specifies the status; should be either SyncthingStatus::Disconnected or SyncthingStatus::Default. There is no use
|
||||||
|
@ -1092,16 +1139,20 @@ void SyncthingConnection::setStatus(SyncthingStatus status)
|
||||||
if(m_unreadNotifications) {
|
if(m_unreadNotifications) {
|
||||||
status = SyncthingStatus::NotificationsAvailable;
|
status = SyncthingStatus::NotificationsAvailable;
|
||||||
} else {
|
} else {
|
||||||
// check whether at least one directory is synchronizing
|
// check whether at least one directory is scanning or synchronizing
|
||||||
|
bool scanning = false;
|
||||||
bool synchronizing = false;
|
bool synchronizing = false;
|
||||||
for(const SyncthingDir &dir : m_dirs) {
|
for(const SyncthingDir &dir : m_dirs)
|
||||||
if(dir.status == DirStatus::Synchronizing) {
|
if(dir.status == DirStatus::Synchronizing) {
|
||||||
synchronizing = true;
|
synchronizing = true;
|
||||||
break;
|
break;
|
||||||
}
|
} else if(dir.status == DirStatus::Scanning) {
|
||||||
|
scanning = true;
|
||||||
}
|
}
|
||||||
if(synchronizing) {
|
if(synchronizing) {
|
||||||
status = SyncthingStatus::Synchronizing;
|
status = SyncthingStatus::Synchronizing;
|
||||||
|
} else if(scanning) {
|
||||||
|
status = SyncthingStatus::Scanning;
|
||||||
} else {
|
} else {
|
||||||
// check whether at least one device is paused
|
// check whether at least one device is paused
|
||||||
bool paused = false;
|
bool paused = false;
|
||||||
|
@ -1114,7 +1165,7 @@ void SyncthingConnection::setStatus(SyncthingStatus status)
|
||||||
if(paused) {
|
if(paused) {
|
||||||
status = SyncthingStatus::Paused;
|
status = SyncthingStatus::Paused;
|
||||||
} else {
|
} else {
|
||||||
status = SyncthingStatus::Default;
|
status = SyncthingStatus::Idle;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,8 @@ QNetworkAccessManager &networkAccessManager();
|
||||||
enum class SyncthingStatus
|
enum class SyncthingStatus
|
||||||
{
|
{
|
||||||
Disconnected,
|
Disconnected,
|
||||||
Default,
|
Idle,
|
||||||
|
Scanning,
|
||||||
NotificationsAvailable,
|
NotificationsAvailable,
|
||||||
Paused,
|
Paused,
|
||||||
Synchronizing
|
Synchronizing
|
||||||
|
@ -62,6 +63,7 @@ struct SyncthingDir
|
||||||
int rescanInterval = 0;
|
int rescanInterval = 0;
|
||||||
int minDiskFreePercentage = 0;
|
int minDiskFreePercentage = 0;
|
||||||
DirStatus status = DirStatus::Idle;
|
DirStatus status = DirStatus::Idle;
|
||||||
|
ChronoUtilities::DateTime lastStatusUpdate;
|
||||||
int progressPercentage = 0;
|
int progressPercentage = 0;
|
||||||
int progressRate = 0;
|
int progressRate = 0;
|
||||||
std::vector<DirErrors> errors;
|
std::vector<DirErrors> errors;
|
||||||
|
@ -73,7 +75,8 @@ struct SyncthingDir
|
||||||
QString lastFileName;
|
QString lastFileName;
|
||||||
bool lastFileDeleted = false;
|
bool lastFileDeleted = false;
|
||||||
|
|
||||||
bool assignStatus(const QString &statusStr);
|
bool assignStatus(const QString &statusStr, ChronoUtilities::DateTime time);
|
||||||
|
bool assignStatus(DirStatus newStatus, ChronoUtilities::DateTime time);
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class DevStatus
|
enum class DevStatus
|
||||||
|
@ -146,8 +149,8 @@ public:
|
||||||
double totalOutgoingRate() const;
|
double totalOutgoingRate() const;
|
||||||
const std::vector<SyncthingDir> &dirInfo() const;
|
const std::vector<SyncthingDir> &dirInfo() const;
|
||||||
const std::vector<SyncthingDev> &devInfo() const;
|
const std::vector<SyncthingDev> &devInfo() const;
|
||||||
void requestQrCode(const QString &text, std::function<void (const QPixmap &)> callback);
|
QMetaObject::Connection requestQrCode(const QString &text, std::function<void (const QPixmap &)> callback);
|
||||||
void requestLog(std::function<void (const std::vector<SyncthingLogEntry> &)> callback);
|
QMetaObject::Connection requestLog(std::function<void (const std::vector<SyncthingLogEntry> &)> callback);
|
||||||
static const QList<QSslError> &expectedCertificateErrors();
|
static const QList<QSslError> &expectedCertificateErrors();
|
||||||
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
|
@ -161,6 +164,7 @@ public Q_SLOTS:
|
||||||
void resumeAllDevs();
|
void resumeAllDevs();
|
||||||
void rescan(const QString &dir);
|
void rescan(const QString &dir);
|
||||||
void rescanAllDirs();
|
void rescanAllDirs();
|
||||||
|
void restart();
|
||||||
void notificationsRead();
|
void notificationsRead();
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
|
@ -249,14 +253,15 @@ private Q_SLOTS:
|
||||||
void readDeviceStatistics();
|
void readDeviceStatistics();
|
||||||
void readEvents();
|
void readEvents();
|
||||||
void readStartingEvent(const QJsonObject &eventData);
|
void readStartingEvent(const QJsonObject &eventData);
|
||||||
void readStatusChangedEvent(const QJsonObject &eventData);
|
void readStatusChangedEvent(ChronoUtilities::DateTime eventTime, const QJsonObject &eventData);
|
||||||
void readDownloadProgressEvent(const QJsonObject &eventData);
|
void readDownloadProgressEvent(const QJsonObject &eventData);
|
||||||
void readDirEvent(const QString &eventType, const QJsonObject &eventData);
|
void readDirEvent(ChronoUtilities::DateTime eventTime, const QString &eventType, const QJsonObject &eventData);
|
||||||
void readDeviceEvent(ChronoUtilities::DateTime eventTime, const QString &eventType, const QJsonObject &eventData);
|
void readDeviceEvent(ChronoUtilities::DateTime eventTime, const QString &eventType, const QJsonObject &eventData);
|
||||||
void readItemStarted(ChronoUtilities::DateTime eventTime, const QJsonObject &eventData);
|
void readItemStarted(ChronoUtilities::DateTime eventTime, const QJsonObject &eventData);
|
||||||
void readItemFinished(ChronoUtilities::DateTime eventTime, const QJsonObject &eventData);
|
void readItemFinished(ChronoUtilities::DateTime eventTime, const QJsonObject &eventData);
|
||||||
void readRescan();
|
void readRescan();
|
||||||
void readPauseResume();
|
void readPauseResume();
|
||||||
|
void readRestart();
|
||||||
|
|
||||||
void setStatus(SyncthingStatus status);
|
void setStatus(SyncthingStatus status);
|
||||||
|
|
||||||
|
|
|
@ -100,7 +100,7 @@ QVariant SyncthingDirectoryModel::data(const QModelIndex &index, int role) const
|
||||||
case 1: return dir.path;
|
case 1: return dir.path;
|
||||||
case 2: return dir.devices.join(QStringLiteral(", "));
|
case 2: return dir.devices.join(QStringLiteral(", "));
|
||||||
case 3: return dir.readOnly ? tr("yes") : tr("no");
|
case 3: return dir.readOnly ? tr("yes") : tr("no");
|
||||||
case 4: return QStringLiteral("%1 s").arg(dir.rescanInterval);
|
case 4: return QString::fromLatin1(TimeSpan::fromSeconds(dir.rescanInterval).toString(TimeSpanOutputFormat::WithMeasures, true).data());
|
||||||
case 5: return dir.lastScanTime.isNull() ? tr("unknown") : QString::fromLatin1(dir.lastScanTime.toString(DateTimeOutputFormat::DateAndTime, true).data());
|
case 5: return dir.lastScanTime.isNull() ? tr("unknown") : QString::fromLatin1(dir.lastScanTime.toString(DateTimeOutputFormat::DateAndTime, true).data());
|
||||||
case 6: return dir.lastFileName.isEmpty() ? tr("unknown") : dir.lastFileName;
|
case 6: return dir.lastFileName.isEmpty() ? tr("unknown") : dir.lastFileName;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
#include "./syncthingprocess.h"
|
||||||
|
|
||||||
|
#include "../application/settings.h"
|
||||||
|
|
||||||
|
#include <QTimer>
|
||||||
|
#include <QStringBuilder>
|
||||||
|
|
||||||
|
namespace Data {
|
||||||
|
|
||||||
|
SyncthingProcess::SyncthingProcess(QObject *parent) :
|
||||||
|
QProcess(parent),
|
||||||
|
m_restarting(false)
|
||||||
|
{
|
||||||
|
setProcessChannelMode(QProcess::MergedChannels);
|
||||||
|
connect(this, static_cast<void(SyncthingProcess::*)(int exitCode, QProcess::ExitStatus exitStatus)>(&SyncthingProcess::finished), this, &SyncthingProcess::handleFinished);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SyncthingProcess::restartSyncthing()
|
||||||
|
{
|
||||||
|
if(state() == QProcess::Running) {
|
||||||
|
m_restarting = true;
|
||||||
|
// give Syncthing 5 seconds to terminate, otherwise kill it
|
||||||
|
QTimer::singleShot(5000, this, SLOT(killToRestart()));
|
||||||
|
terminate();
|
||||||
|
} else {
|
||||||
|
startSyncthing();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SyncthingProcess::startSyncthing()
|
||||||
|
{
|
||||||
|
start(Settings::syncthingPath() % QChar(' ') % Settings::syncthingArgs(), QProcess::ReadOnly);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SyncthingProcess::handleFinished(int exitCode, QProcess::ExitStatus exitStatus)
|
||||||
|
{
|
||||||
|
Q_UNUSED(exitCode)
|
||||||
|
Q_UNUSED(exitStatus)
|
||||||
|
if(m_restarting) {
|
||||||
|
m_restarting = false;
|
||||||
|
startSyncthing();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SyncthingProcess::killToRestart()
|
||||||
|
{
|
||||||
|
if(m_restarting) {
|
||||||
|
kill();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SyncthingProcess &syncthingProcess()
|
||||||
|
{
|
||||||
|
static SyncthingProcess process;
|
||||||
|
return process;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace Data
|
|
@ -0,0 +1,30 @@
|
||||||
|
#ifndef DATA_SYNCTHINGPROCESS_H
|
||||||
|
#define DATA_SYNCTHINGPROCESS_H
|
||||||
|
|
||||||
|
#include <QProcess>
|
||||||
|
|
||||||
|
namespace Data {
|
||||||
|
|
||||||
|
class SyncthingProcess : public QProcess
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
SyncthingProcess(QObject *parent = nullptr);
|
||||||
|
|
||||||
|
public Q_SLOTS:
|
||||||
|
void restartSyncthing();
|
||||||
|
void startSyncthing();
|
||||||
|
|
||||||
|
private Q_SLOTS:
|
||||||
|
void handleFinished(int exitCode, QProcess::ExitStatus exitStatus);
|
||||||
|
void killToRestart();
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool m_restarting;
|
||||||
|
};
|
||||||
|
|
||||||
|
SyncthingProcess &syncthingProcess();
|
||||||
|
|
||||||
|
} // namespace Data
|
||||||
|
|
||||||
|
#endif // DATA_SYNCTHINGPROCESS_H
|
|
@ -6,17 +6,21 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>283</width>
|
<width>422</width>
|
||||||
<height>74</height>
|
<height>149</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Appearance</string>
|
<string>Appearance</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowIcon">
|
<property name="windowIcon">
|
||||||
<iconset theme="preferences-desktop"/>
|
<iconset theme="preferences-desktop">
|
||||||
|
<normaloff>.</normaloff>.</iconset>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QFormLayout" name="formLayout">
|
<layout class="QFormLayout" name="formLayout">
|
||||||
|
<property name="verticalSpacing">
|
||||||
|
<number>4</number>
|
||||||
|
</property>
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="sizeLabel">
|
<widget class="QLabel" name="sizeLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
@ -48,12 +52,21 @@
|
||||||
<property name="maximum">
|
<property name="maximum">
|
||||||
<number>1000</number>
|
<number>1000</number>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="singleStep">
|
||||||
|
<number>10</number>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="sizeTimesLabel">
|
<widget class="QLabel" name="sizeTimesLabel">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>x</string>
|
<string> x </string>
|
||||||
</property>
|
</property>
|
||||||
<property name="textFormat">
|
<property name="textFormat">
|
||||||
<enum>Qt::PlainText</enum>
|
<enum>Qt::PlainText</enum>
|
||||||
|
@ -68,12 +81,15 @@
|
||||||
<property name="maximum">
|
<property name="maximum">
|
||||||
<number>1000</number>
|
<number>1000</number>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="singleStep">
|
||||||
|
<number>10</number>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="sizePxLabel">
|
<widget class="QLabel" name="sizePxLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>px</string>
|
<string> px</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="textFormat">
|
<property name="textFormat">
|
||||||
<enum>Qt::PlainText</enum>
|
<enum>Qt::PlainText</enum>
|
||||||
|
@ -82,6 +98,63 @@
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<widget class="QLabel" name="frameShapeLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Frame shape</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0">
|
||||||
|
<widget class="QLabel" name="frameShadowLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Frame shadow</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="1">
|
||||||
|
<widget class="QComboBox" name="frameShapeComboBox">
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>No frame</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Box</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Panel</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Styled panel</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QComboBox" name="frameShadowComboBox">
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Plain</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Raised</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<property name="text">
|
||||||
|
<string>Sunken</string>
|
||||||
|
</property>
|
||||||
|
</item>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<resources/>
|
<resources/>
|
||||||
|
|
|
@ -6,24 +6,54 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>575</width>
|
<width>376</width>
|
||||||
<height>52</height>
|
<height>80</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Autostart</string>
|
<string>Autostart</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowIcon">
|
|
||||||
<iconset theme="system-run"/>
|
|
||||||
</property>
|
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QCheckBox" name="autostartCheckBox">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string><html><head/><body><p><span style=" font-weight:600;">Not implemented yet</span></p><p>This will allow launching the tray when the desktop environment starts and to launch Syncthing when the tray is started.</p></body></html></string>
|
<string>Start the tray icon when the desktop environment launches</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="infoIconLabel">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>32</width>
|
||||||
|
<height>32</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>32</width>
|
||||||
|
<height>32</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="platformNoteLabel">
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<resources/>
|
<resources/>
|
||||||
|
|
|
@ -6,9 +6,13 @@
|
||||||
<string>Connection</string>
|
<string>Connection</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowIcon">
|
<property name="windowIcon">
|
||||||
<iconset theme="network-connect"/>
|
<iconset theme="network-connect">
|
||||||
|
<normaloff>.</normaloff>.</iconset>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QFormLayout" name="formLayout">
|
<layout class="QFormLayout" name="formLayout">
|
||||||
|
<property name="horizontalSpacing">
|
||||||
|
<number>6</number>
|
||||||
|
</property>
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="urlLabel">
|
<widget class="QLabel" name="urlLabel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
|
|
@ -0,0 +1,207 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>QtGui::LauncherOptionPage</class>
|
||||||
|
<widget class="QWidget" name="QtGui::LauncherOptionPage">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>457</width>
|
||||||
|
<height>345</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Syncthing launcher</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="enabledCheckBox">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Launch Syncthing when starting the tray icon</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QWidget" name="launcherFormWidget" native="true">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<layout class="QFormLayout" name="formLayout">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>30</number>
|
||||||
|
</property>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="syncthingPathLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Syncthing executable</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="Widgets::PathSelection" name="syncthingPathSelection" native="true"/>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="argumentsLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Arguments</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="Widgets::ClearLineEdit" name="argumentsLineEdit"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="Line" name="line">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="logLabel">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Syncthing log (interleaved stdout/stderr)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="launchNowPushButton">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Apply and launch now</string>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset theme="view-refresh">
|
||||||
|
<normaloff>.</normaloff>.</iconset>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="stopPushButton">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Stop launched instance</string>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset theme="process-stop">
|
||||||
|
<normaloff>.</normaloff>.</iconset>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="Widgets::ClearPlainTextEdit" name="logTextEdit">
|
||||||
|
<property name="undoRedoEnabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="readOnly">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string>No log messages available yet</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="ensureCursorVisibleCheckBox">
|
||||||
|
<property name="text">
|
||||||
|
<string>Ensure latest log is visible</string>
|
||||||
|
</property>
|
||||||
|
<property name="checked">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>Widgets::ClearLineEdit</class>
|
||||||
|
<extends>QLineEdit</extends>
|
||||||
|
<header location="global">qtutilities/widgets/clearlineedit.h</header>
|
||||||
|
</customwidget>
|
||||||
|
<customwidget>
|
||||||
|
<class>Widgets::PathSelection</class>
|
||||||
|
<extends>QWidget</extends>
|
||||||
|
<header location="global">qtutilities/widgets/pathselection.h</header>
|
||||||
|
<container>1</container>
|
||||||
|
</customwidget>
|
||||||
|
<customwidget>
|
||||||
|
<class>Widgets::ClearPlainTextEdit</class>
|
||||||
|
<extends>QPlainTextEdit</extends>
|
||||||
|
<header location="global">qtutilities/widgets/clearplaintextedit.h</header>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>enabledCheckBox</sender>
|
||||||
|
<signal>toggled(bool)</signal>
|
||||||
|
<receiver>launcherFormWidget</receiver>
|
||||||
|
<slot>setEnabled(bool)</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>142</x>
|
||||||
|
<y>17</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>142</x>
|
||||||
|
<y>65</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>enabledCheckBox</sender>
|
||||||
|
<signal>toggled(bool)</signal>
|
||||||
|
<receiver>launchNowPushButton</receiver>
|
||||||
|
<slot>setEnabled(bool)</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>259</x>
|
||||||
|
<y>19</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>257</x>
|
||||||
|
<y>130</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
</ui>
|
|
@ -2,6 +2,14 @@
|
||||||
<ui version="4.0">
|
<ui version="4.0">
|
||||||
<class>QtGui::NotificationsOptionPage</class>
|
<class>QtGui::NotificationsOptionPage</class>
|
||||||
<widget class="QWidget" name="QtGui::NotificationsOptionPage">
|
<widget class="QWidget" name="QtGui::NotificationsOptionPage">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>240</width>
|
||||||
|
<height>193</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Notifications</string>
|
<string>Notifications</string>
|
||||||
</property>
|
</property>
|
||||||
|
@ -12,6 +20,12 @@
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="notifyOnLabel">
|
<widget class="QLabel" name="notifyOnLabel">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Notify on</string>
|
<string>Notify on</string>
|
||||||
</property>
|
</property>
|
||||||
|
|
|
@ -3,11 +3,13 @@
|
||||||
#include "../application/settings.h"
|
#include "../application/settings.h"
|
||||||
#include "../data/syncthingconnection.h"
|
#include "../data/syncthingconnection.h"
|
||||||
#include "../data/syncthingconfig.h"
|
#include "../data/syncthingconfig.h"
|
||||||
|
#include "../data/syncthingprocess.h"
|
||||||
|
|
||||||
#include "ui_connectionoptionpage.h"
|
#include "ui_connectionoptionpage.h"
|
||||||
#include "ui_notificationsoptionpage.h"
|
#include "ui_notificationsoptionpage.h"
|
||||||
#include "ui_appearanceoptionpage.h"
|
#include "ui_appearanceoptionpage.h"
|
||||||
#include "ui_autostartoptionpage.h"
|
#include "ui_autostartoptionpage.h"
|
||||||
|
#include "ui_launcheroptionpage.h"
|
||||||
#include "ui_webviewoptionpage.h"
|
#include "ui_webviewoptionpage.h"
|
||||||
|
|
||||||
#include "resources/config.h"
|
#include "resources/config.h"
|
||||||
|
@ -22,10 +24,18 @@
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QHostAddress>
|
#include <QHostAddress>
|
||||||
|
#if defined(PLATFORM_LINUX) && !defined(Q_OS_ANDROID)
|
||||||
|
# include <QStandardPaths>
|
||||||
|
#elif defined(PLATFORM_WINDOWS)
|
||||||
|
# include <QSettings>
|
||||||
|
#endif
|
||||||
|
#include <QFontDatabase>
|
||||||
|
#include <QTextCursor>
|
||||||
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
using namespace std::placeholders;
|
||||||
using namespace Settings;
|
using namespace Settings;
|
||||||
using namespace Dialogs;
|
using namespace Dialogs;
|
||||||
using namespace Data;
|
using namespace Data;
|
||||||
|
@ -172,6 +182,19 @@ bool AppearanceOptionPage::apply()
|
||||||
trayMenuSize().setWidth(ui()->widthSpinBox->value());
|
trayMenuSize().setWidth(ui()->widthSpinBox->value());
|
||||||
trayMenuSize().setHeight(ui()->heightSpinBox->value());
|
trayMenuSize().setHeight(ui()->heightSpinBox->value());
|
||||||
showTraffic() = ui()->showTrafficCheckBox->isChecked();
|
showTraffic() = ui()->showTrafficCheckBox->isChecked();
|
||||||
|
int style;
|
||||||
|
switch(ui()->frameShapeComboBox->currentIndex()) {
|
||||||
|
case 0: style = QFrame::NoFrame; break;
|
||||||
|
case 1: style = QFrame::Box; break;
|
||||||
|
case 2: style = QFrame::Panel; break;
|
||||||
|
default: style = QFrame::StyledPanel;
|
||||||
|
}
|
||||||
|
switch(ui()->frameShadowComboBox->currentIndex()) {
|
||||||
|
case 0: style |= QFrame::Plain; break;
|
||||||
|
case 1: style |= QFrame::Raised; break;
|
||||||
|
default: style |= QFrame::Sunken;
|
||||||
|
}
|
||||||
|
frameStyle() = style;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -182,10 +205,24 @@ void AppearanceOptionPage::reset()
|
||||||
ui()->widthSpinBox->setValue(trayMenuSize().width());
|
ui()->widthSpinBox->setValue(trayMenuSize().width());
|
||||||
ui()->heightSpinBox->setValue(trayMenuSize().height());
|
ui()->heightSpinBox->setValue(trayMenuSize().height());
|
||||||
ui()->showTrafficCheckBox->setChecked(showTraffic());
|
ui()->showTrafficCheckBox->setChecked(showTraffic());
|
||||||
|
int index;
|
||||||
|
switch(frameStyle() & QFrame::Shape_Mask) {
|
||||||
|
case QFrame::NoFrame: index = 0; break;
|
||||||
|
case QFrame::Box: index = 1; break;
|
||||||
|
case QFrame::Panel: index = 2; break;
|
||||||
|
default: index = 3;
|
||||||
|
}
|
||||||
|
ui()->frameShapeComboBox->setCurrentIndex(index);
|
||||||
|
switch(frameStyle() & QFrame::Shadow_Mask) {
|
||||||
|
case QFrame::Plain: index = 0; break;
|
||||||
|
case QFrame::Raised: index = 1; break;
|
||||||
|
default: index = 2;
|
||||||
|
}
|
||||||
|
ui()->frameShadowComboBox->setCurrentIndex(index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// LauncherOptionPage
|
// AutostartOptionPage
|
||||||
AutostartOptionPage::AutostartOptionPage(QWidget *parentWidget) :
|
AutostartOptionPage::AutostartOptionPage(QWidget *parentWidget) :
|
||||||
AutostartOptionPageBase(parentWidget)
|
AutostartOptionPageBase(parentWidget)
|
||||||
{}
|
{}
|
||||||
|
@ -193,16 +230,217 @@ AutostartOptionPage::AutostartOptionPage(QWidget *parentWidget) :
|
||||||
AutostartOptionPage::~AutostartOptionPage()
|
AutostartOptionPage::~AutostartOptionPage()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
QWidget *AutostartOptionPage::setupWidget()
|
||||||
|
{
|
||||||
|
auto *widget = AutostartOptionPageBase::setupWidget();
|
||||||
|
ui()->infoIconLabel->setPixmap(QApplication::style()->standardIcon(QStyle::SP_MessageBoxInformation, nullptr, ui()->infoIconLabel).pixmap(ui()->infoIconLabel->size()));
|
||||||
|
#if defined(PLATFORM_LINUX) && !defined(Q_OS_ANDROID)
|
||||||
|
ui()->platformNoteLabel->setText(QCoreApplication::translate("QtGui::AutostartOptionPage", "This is achieved by adding a *.desktop file under <i>~/.config/autostart</i> so the setting only affects the current user."));
|
||||||
|
#elif defined(PLATFORM_WINDOWS)
|
||||||
|
ui()->platformNoteLabel->setText(QCoreApplication::translate("QtGui::AutostartOptionPage", "This is achieved by adding a registry key under <i>HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run</i> so the setting only affects the current user. Note that the startup entry is invalidated when moving <i>syncthingtray.exe</i>."));
|
||||||
|
#else
|
||||||
|
ui()->platformNoteLabel->setText(QCoreApplication::translate("QtGui::AutostartOptionPage", "This feature has not been implemented for your platform (yet)."));
|
||||||
|
ui()->autostartCheckBox->setEnabled(false);
|
||||||
|
#endif
|
||||||
|
return widget;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Returns whether the application is launched on startup.
|
||||||
|
* \remarks
|
||||||
|
* - Only implemented under Linux/Windows. Always returns false on other platforms.
|
||||||
|
* - Does not check whether the startup entry is functional (eg. the specified path is still valid).
|
||||||
|
* -
|
||||||
|
*/
|
||||||
|
bool isAutostartEnabled()
|
||||||
|
{
|
||||||
|
#if defined(PLATFORM_LINUX) && !defined(Q_OS_ANDROID)
|
||||||
|
QFile desktopFile(QStandardPaths::locate(QStandardPaths::ConfigLocation, QStringLiteral("autostart/" PROJECT_NAME ".desktop")));
|
||||||
|
// check whether the file can be opeed and whether it is enabled but prevent reading large files
|
||||||
|
if(desktopFile.open(QFile::ReadOnly) && (desktopFile.size() > (5 * 1024) || !desktopFile.readAll().contains("Hidden=true"))) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
#elif defined(PLATFORM_WINDOWS)
|
||||||
|
QSettings settings(QStringLiteral("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"), QSettings::NativeFormat);
|
||||||
|
return settings.contains(QStringLiteral(PROJECT_NAME));
|
||||||
|
#else
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Sets whether the application is launchedc on startup.
|
||||||
|
* \remarks
|
||||||
|
* - Only implemented under Linux/Windows. Does nothing on other platforms.
|
||||||
|
* - If a startup entry already exists and \a enabled is true, this function will ensure the path of the existing entry is valid.
|
||||||
|
* - If no startup entry could be detected via isAutostartEnabled() and \a enabled is false this function doesn't touch anything.
|
||||||
|
*/
|
||||||
|
bool setAutostartEnabled(bool enabled)
|
||||||
|
{
|
||||||
|
if(!isAutostartEnabled() && !enabled) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#if defined(PLATFORM_LINUX) && !defined(Q_OS_ANDROID)
|
||||||
|
const QString configPath(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation));
|
||||||
|
if(configPath.isEmpty()) {
|
||||||
|
return !enabled;
|
||||||
|
}
|
||||||
|
if(enabled && !QDir().mkpath(configPath + QStringLiteral("/autostart"))) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
QFile desktopFile(configPath + QStringLiteral("/autostart/" PROJECT_NAME ".desktop"));
|
||||||
|
if(enabled) {
|
||||||
|
if(desktopFile.open(QFile::WriteOnly | QFile::Truncate)) {
|
||||||
|
desktopFile.write("[Desktop Entry]\n");
|
||||||
|
desktopFile.write("Name=" APP_NAME "\n");
|
||||||
|
desktopFile.write("Exec=");
|
||||||
|
desktopFile.write(QCoreApplication::applicationFilePath().toLocal8Bit().data());
|
||||||
|
desktopFile.write("\nComment=" APP_DESCRIPTION "\n");
|
||||||
|
desktopFile.write("Icon=" PROJECT_NAME "\n");
|
||||||
|
desktopFile.write("Type=Application\n");
|
||||||
|
desktopFile.write("Terminal=false\n");
|
||||||
|
desktopFile.write("X-GNOME-Autostart-Delay=0\n");
|
||||||
|
desktopFile.write("X-GNOME-Autostart-enabled=true");
|
||||||
|
return desktopFile.error() == QFile::NoError && desktopFile.flush();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return !desktopFile.exists() || desktopFile.remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(PLATFORM_WINDOWS)
|
||||||
|
QSettings settings(QStringLiteral("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"), QSettings::NativeFormat);
|
||||||
|
if(enabled) {
|
||||||
|
settings.setValue(QStringLiteral(PROJECT_NAME), QCoreApplication::applicationFilePath().replace(QChar('/'), QChar("\\")));
|
||||||
|
} else {
|
||||||
|
settings.remove(QStringLiteral(PROJECT_NAME));
|
||||||
|
}
|
||||||
|
settings.sync();
|
||||||
|
return true;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
bool AutostartOptionPage::apply()
|
bool AutostartOptionPage::apply()
|
||||||
{
|
{
|
||||||
|
bool ok = true;
|
||||||
if(hasBeenShown()) {
|
if(hasBeenShown()) {
|
||||||
|
if(!setAutostartEnabled(ui()->autostartCheckBox->isChecked())) {
|
||||||
|
errors() << QCoreApplication::translate("QtGui::AutostartOptionPage", "unable to modify startup entry");
|
||||||
|
ok = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AutostartOptionPage::reset()
|
void AutostartOptionPage::reset()
|
||||||
{
|
{
|
||||||
if(hasBeenShown()) {
|
if(hasBeenShown()) {
|
||||||
|
ui()->autostartCheckBox->setChecked(isAutostartEnabled());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// LauncherOptionPage
|
||||||
|
LauncherOptionPage::LauncherOptionPage(QWidget *parentWidget) :
|
||||||
|
LauncherOptionPageBase(parentWidget),
|
||||||
|
m_kill(false)
|
||||||
|
{}
|
||||||
|
|
||||||
|
LauncherOptionPage::~LauncherOptionPage()
|
||||||
|
{
|
||||||
|
for(const QMetaObject::Connection &connection : m_connections) {
|
||||||
|
QObject::disconnect(connection);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QWidget *LauncherOptionPage::setupWidget()
|
||||||
|
{
|
||||||
|
auto *widget = LauncherOptionPageBase::setupWidget();
|
||||||
|
ui()->syncthingPathSelection->provideCustomFileMode(QFileDialog::ExistingFile);
|
||||||
|
ui()->logTextEdit->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont));
|
||||||
|
m_connections << QObject::connect(&syncthingProcess(), &SyncthingProcess::readyRead, bind(&LauncherOptionPage::handleSyncthingReadyRead, this));
|
||||||
|
m_connections << QObject::connect(&syncthingProcess(), static_cast<void(SyncthingProcess::*)(int exitCode, QProcess::ExitStatus exitStatus)>(&SyncthingProcess::finished), bind(&LauncherOptionPage::handleSyncthingExited, this, _1, _2));
|
||||||
|
QObject::connect(ui()->launchNowPushButton, &QPushButton::clicked, bind(&LauncherOptionPage::launch, this));
|
||||||
|
QObject::connect(ui()->stopPushButton, &QPushButton::clicked, bind(&LauncherOptionPage::stop, this));
|
||||||
|
const bool running = syncthingProcess().state() != QProcess::NotRunning;
|
||||||
|
ui()->launchNowPushButton->setHidden(running);
|
||||||
|
ui()->stopPushButton->setHidden(!running);
|
||||||
|
return widget;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool LauncherOptionPage::apply()
|
||||||
|
{
|
||||||
|
if(hasBeenShown()) {
|
||||||
|
Settings::launchSynchting() = ui()->enabledCheckBox->isChecked(),
|
||||||
|
Settings::syncthingPath() = ui()->syncthingPathSelection->lineEdit()->text(),
|
||||||
|
Settings::syncthingArgs() = ui()->argumentsLineEdit->text();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LauncherOptionPage::reset()
|
||||||
|
{
|
||||||
|
if(hasBeenShown()) {
|
||||||
|
ui()->enabledCheckBox->setChecked(Settings::launchSynchting());
|
||||||
|
ui()->syncthingPathSelection->lineEdit()->setText(Settings::syncthingPath());
|
||||||
|
ui()->argumentsLineEdit->setText(Settings::syncthingArgs());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void LauncherOptionPage::handleSyncthingReadyRead()
|
||||||
|
{
|
||||||
|
if(hasBeenShown()) {
|
||||||
|
QTextCursor cursor = ui()->logTextEdit->textCursor();
|
||||||
|
cursor.movePosition(QTextCursor::End);
|
||||||
|
cursor.insertText(QString::fromLocal8Bit(syncthingProcess().readAll()));
|
||||||
|
if(ui()->ensureCursorVisibleCheckBox->isChecked()) {
|
||||||
|
ui()->logTextEdit->ensureCursorVisible();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void LauncherOptionPage::handleSyncthingExited(int exitCode, QProcess::ExitStatus exitStatus)
|
||||||
|
{
|
||||||
|
if(hasBeenShown()) {
|
||||||
|
QTextCursor cursor = ui()->logTextEdit->textCursor();
|
||||||
|
cursor.movePosition(QTextCursor::End);
|
||||||
|
switch(exitStatus) {
|
||||||
|
case QProcess::NormalExit:
|
||||||
|
cursor.insertText(QCoreApplication::translate("QtGui::LauncherOptionPage", "Syncthing existed with exit code %1\n").arg(exitCode));
|
||||||
|
break;
|
||||||
|
case QProcess::CrashExit:
|
||||||
|
cursor.insertText(QCoreApplication::translate("QtGui::LauncherOptionPage", "Syncthing crashed with exit code %1\n").arg(exitCode));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
ui()->stopPushButton->hide();
|
||||||
|
ui()->launchNowPushButton->show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void LauncherOptionPage::launch()
|
||||||
|
{
|
||||||
|
if(hasBeenShown()) {
|
||||||
|
apply();
|
||||||
|
if(syncthingProcess().state() == QProcess::NotRunning) {
|
||||||
|
ui()->launchNowPushButton->hide();
|
||||||
|
ui()->stopPushButton->show();
|
||||||
|
m_kill = false;
|
||||||
|
syncthingProcess().startSyncthing();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void LauncherOptionPage::stop()
|
||||||
|
{
|
||||||
|
if(hasBeenShown()) {
|
||||||
|
if(syncthingProcess().state() != QProcess::NotRunning) {
|
||||||
|
if(m_kill) {
|
||||||
|
syncthingProcess().kill();
|
||||||
|
} else {
|
||||||
|
m_kill = true;
|
||||||
|
syncthingProcess().terminate();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -214,7 +452,7 @@ WebViewOptionPage::WebViewOptionPage(QWidget *parentWidget) :
|
||||||
WebViewOptionPage::~WebViewOptionPage()
|
WebViewOptionPage::~WebViewOptionPage()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
#if !defined(SYNCTHINGTRAY_USE_WEBENGINE) && !defined(SYNCTHINGTRAY_USE_WEBKIT)
|
#ifdef SYNCTHINGTRAY_NO_WEBVIEW
|
||||||
QWidget *WebViewOptionPage::setupWidget()
|
QWidget *WebViewOptionPage::setupWidget()
|
||||||
{
|
{
|
||||||
auto *label = new QLabel;
|
auto *label = new QLabel;
|
||||||
|
@ -227,7 +465,7 @@ QWidget *WebViewOptionPage::setupWidget()
|
||||||
|
|
||||||
bool WebViewOptionPage::apply()
|
bool WebViewOptionPage::apply()
|
||||||
{
|
{
|
||||||
#if defined(SYNCTHINGTRAY_USE_WEBENGINE) || defined(SYNCTHINGTRAY_USE_WEBKIT)
|
#ifndef SYNCTHINGTRAY_NO_WEBVIEW
|
||||||
if(hasBeenShown()) {
|
if(hasBeenShown()) {
|
||||||
webViewDisabled() = ui()->disableCheckBox->isChecked();
|
webViewDisabled() = ui()->disableCheckBox->isChecked();
|
||||||
webViewZoomFactor() = ui()->zoomDoubleSpinBox->value();
|
webViewZoomFactor() = ui()->zoomDoubleSpinBox->value();
|
||||||
|
@ -239,7 +477,7 @@ bool WebViewOptionPage::apply()
|
||||||
|
|
||||||
void WebViewOptionPage::reset()
|
void WebViewOptionPage::reset()
|
||||||
{
|
{
|
||||||
#if defined(SYNCTHINGTRAY_USE_WEBENGINE) || defined(SYNCTHINGTRAY_USE_WEBKIT)
|
#ifndef SYNCTHINGTRAY_NO_WEBVIEW
|
||||||
if(hasBeenShown()) {
|
if(hasBeenShown()) {
|
||||||
ui()->disableCheckBox->setChecked(webViewDisabled());
|
ui()->disableCheckBox->setChecked(webViewDisabled());
|
||||||
ui()->zoomDoubleSpinBox->setValue(webViewZoomFactor());
|
ui()->zoomDoubleSpinBox->setValue(webViewZoomFactor());
|
||||||
|
@ -257,9 +495,7 @@ SettingsDialog::SettingsDialog(Data::SyncthingConnection *connection, QWidget *p
|
||||||
|
|
||||||
category = new OptionCategory(this);
|
category = new OptionCategory(this);
|
||||||
category->setDisplayName(tr("Tray"));
|
category->setDisplayName(tr("Tray"));
|
||||||
category->assignPages(QList<Dialogs::OptionPage *>()
|
category->assignPages(QList<Dialogs::OptionPage *>() << new ConnectionOptionPage(connection) << new NotificationsOptionPage << new AppearanceOptionPage);
|
||||||
<< new ConnectionOptionPage(connection) << new NotificationsOptionPage
|
|
||||||
<< new AppearanceOptionPage << new AutostartOptionPage);
|
|
||||||
category->setIcon(QIcon(QStringLiteral(":/icons/hicolor/scalable/app/syncthingtray.svg")));
|
category->setIcon(QIcon(QStringLiteral(":/icons/hicolor/scalable/app/syncthingtray.svg")));
|
||||||
categories << category;
|
categories << category;
|
||||||
|
|
||||||
|
@ -269,6 +505,12 @@ SettingsDialog::SettingsDialog(Data::SyncthingConnection *connection, QWidget *p
|
||||||
category->setIcon(QIcon::fromTheme(QStringLiteral("internet-web-browser"), QIcon(QStringLiteral(":/icons/hicolor/scalable/apps/internet-web-browser.svg"))));
|
category->setIcon(QIcon::fromTheme(QStringLiteral("internet-web-browser"), QIcon(QStringLiteral(":/icons/hicolor/scalable/apps/internet-web-browser.svg"))));
|
||||||
categories << category;
|
categories << category;
|
||||||
|
|
||||||
|
category = new OptionCategory(this);
|
||||||
|
category->setDisplayName(tr("Startup"));
|
||||||
|
category->assignPages(QList<Dialogs::OptionPage *>() << new AutostartOptionPage << new LauncherOptionPage);
|
||||||
|
category->setIcon(QIcon::fromTheme(QStringLiteral("system-run"), QIcon(QStringLiteral(":/icons/hicolor/scalable/apps/system-run.svg"))));
|
||||||
|
categories << category;
|
||||||
|
|
||||||
categories << Settings::qtSettings().category();
|
categories << Settings::qtSettings().category();
|
||||||
|
|
||||||
categoryModel()->setCategories(categories);
|
categoryModel()->setCategories(categories);
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include <qtutilities/settingsdialog/qtsettings.h>
|
#include <qtutilities/settingsdialog/qtsettings.h>
|
||||||
|
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
#include <QProcess>
|
||||||
|
|
||||||
namespace Settings {
|
namespace Settings {
|
||||||
class KnownFieldModel;
|
class KnownFieldModel;
|
||||||
|
@ -33,9 +34,20 @@ DECLARE_UI_FILE_BASED_OPTION_PAGE(NotificationsOptionPage)
|
||||||
|
|
||||||
DECLARE_UI_FILE_BASED_OPTION_PAGE(AppearanceOptionPage)
|
DECLARE_UI_FILE_BASED_OPTION_PAGE(AppearanceOptionPage)
|
||||||
|
|
||||||
DECLARE_UI_FILE_BASED_OPTION_PAGE(AutostartOptionPage)
|
DECLARE_UI_FILE_BASED_OPTION_PAGE_CUSTOM_SETUP(AutostartOptionPage)
|
||||||
|
|
||||||
#if defined(SYNCTHINGTRAY_USE_WEBENGINE) || defined(SYNCTHINGTRAY_USE_WEBKIT)
|
BEGIN_DECLARE_UI_FILE_BASED_OPTION_PAGE(LauncherOptionPage)
|
||||||
|
private:
|
||||||
|
DECLARE_SETUP_WIDGETS
|
||||||
|
void handleSyncthingReadyRead();
|
||||||
|
void handleSyncthingExited(int exitCode, QProcess::ExitStatus exitStatus);
|
||||||
|
void launch();
|
||||||
|
void stop();
|
||||||
|
QList<QMetaObject::Connection> m_connections;
|
||||||
|
bool m_kill;
|
||||||
|
END_DECLARE_OPTION_PAGE
|
||||||
|
|
||||||
|
#ifndef SYNCTHINGTRAY_NO_WEBVIEW
|
||||||
DECLARE_UI_FILE_BASED_OPTION_PAGE(WebViewOptionPage)
|
DECLARE_UI_FILE_BASED_OPTION_PAGE(WebViewOptionPage)
|
||||||
#else
|
#else
|
||||||
DECLARE_OPTION_PAGE(WebViewOptionPage)
|
DECLARE_OPTION_PAGE(WebViewOptionPage)
|
||||||
|
|
|
@ -23,7 +23,8 @@ TrayIcon::TrayIcon(QObject *parent) :
|
||||||
QSystemTrayIcon(parent),
|
QSystemTrayIcon(parent),
|
||||||
m_size(QSize(128, 128)),
|
m_size(QSize(128, 128)),
|
||||||
m_statusIconDisconnected(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-disconnected.svg")))),
|
m_statusIconDisconnected(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-disconnected.svg")))),
|
||||||
m_statusIconDefault(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-default.svg")))),
|
m_statusIconIdling(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-ok.svg")))),
|
||||||
|
m_statusIconScanning(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-default.svg")))),
|
||||||
m_statusIconNotify(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-notify.svg")))),
|
m_statusIconNotify(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-notify.svg")))),
|
||||||
m_statusIconPause(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-pause.svg")))),
|
m_statusIconPause(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-pause.svg")))),
|
||||||
m_statusIconSync(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-sync.svg")))),
|
m_statusIconSync(QIcon(renderSvgImage(QStringLiteral(":/icons/hicolor/scalable/status/syncthing-sync.svg")))),
|
||||||
|
@ -54,18 +55,16 @@ void TrayIcon::handleActivated(QSystemTrayIcon::ActivationReason reason)
|
||||||
case QSystemTrayIcon::Context:
|
case QSystemTrayIcon::Context:
|
||||||
// can't catch that event on Plasma 5 anyways
|
// can't catch that event on Plasma 5 anyways
|
||||||
break;
|
break;
|
||||||
|
case QSystemTrayIcon::MiddleClick:
|
||||||
|
m_trayMenu.widget()->showWebUi();
|
||||||
|
break;
|
||||||
case QSystemTrayIcon::Trigger:
|
case QSystemTrayIcon::Trigger:
|
||||||
// either show web UI or context menu
|
m_trayMenu.resize(m_trayMenu.sizeHint());
|
||||||
if(false) {
|
// when showing the menu manually
|
||||||
m_trayMenu.widget()->showWebUi();
|
// move the menu to the closest of the currently available screen
|
||||||
} else {
|
// this implies that the tray icon is located near the edge of the screen; otherwise this behavior makes no sense
|
||||||
m_trayMenu.resize(m_trayMenu.sizeHint());
|
cornerWidget(&m_trayMenu);
|
||||||
// when showing the menu manually
|
m_trayMenu.show();
|
||||||
// move the menu to the closest of the currently available screen
|
|
||||||
// this implies that the tray icon is located near the edge of the screen; otherwise this behavior makes no sense
|
|
||||||
cornerWidget(&m_trayMenu);
|
|
||||||
m_trayMenu.show();
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
;
|
;
|
||||||
|
@ -96,9 +95,13 @@ void TrayIcon::updateStatusIconAndText(SyncthingStatus status)
|
||||||
showMessage(QCoreApplication::applicationName(), tr("Disconnected from Syncthing"), QSystemTrayIcon::Warning);
|
showMessage(QCoreApplication::applicationName(), tr("Disconnected from Syncthing"), QSystemTrayIcon::Warning);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SyncthingStatus::Default:
|
case SyncthingStatus::Idle:
|
||||||
setIcon(m_statusIconDefault);
|
setIcon(m_statusIconIdling);
|
||||||
setToolTip(tr("Syncthing is running"));
|
setToolTip(tr("Syncthing is idling"));
|
||||||
|
break;
|
||||||
|
case SyncthingStatus::Scanning:
|
||||||
|
setIcon(m_statusIconScanning);
|
||||||
|
setToolTip(tr("Syncthing is scanning"));
|
||||||
break;
|
break;
|
||||||
case SyncthingStatus::NotificationsAvailable:
|
case SyncthingStatus::NotificationsAvailable:
|
||||||
setIcon(m_statusIconNotify);
|
setIcon(m_statusIconNotify);
|
||||||
|
|
|
@ -35,7 +35,8 @@ private:
|
||||||
|
|
||||||
const QSize m_size;
|
const QSize m_size;
|
||||||
const QIcon m_statusIconDisconnected;
|
const QIcon m_statusIconDisconnected;
|
||||||
const QIcon m_statusIconDefault;
|
const QIcon m_statusIconIdling;
|
||||||
|
const QIcon m_statusIconScanning;
|
||||||
const QIcon m_statusIconNotify;
|
const QIcon m_statusIconNotify;
|
||||||
const QIcon m_statusIconPause;
|
const QIcon m_statusIconPause;
|
||||||
const QIcon m_statusIconSync;
|
const QIcon m_statusIconSync;
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QTextBrowser>
|
#include <QTextBrowser>
|
||||||
#include <QStringBuilder>
|
#include <QStringBuilder>
|
||||||
|
#include <QFontDatabase>
|
||||||
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
|
@ -56,34 +57,38 @@ TrayWidget::TrayWidget(TrayMenu *parent) :
|
||||||
m_ui->dirsTreeView->setModel(&m_dirModel);
|
m_ui->dirsTreeView->setModel(&m_dirModel);
|
||||||
m_ui->devsTreeView->setModel(&m_devModel);
|
m_ui->devsTreeView->setModel(&m_devModel);
|
||||||
|
|
||||||
// apply settings, this also establishes the connection to Syncthing
|
|
||||||
applySettings();
|
|
||||||
|
|
||||||
// setup sync-all button
|
// setup sync-all button
|
||||||
auto *cornerFrame = new QFrame(this);
|
m_cornerFrame = new QFrame(this);
|
||||||
cornerFrame->setFrameStyle(QFrame::StyledPanel), cornerFrame->setFrameShadow(QFrame::Sunken);
|
auto *cornerFrameLayout = new QHBoxLayout(m_cornerFrame);
|
||||||
auto *cornerFrameLayout = new QHBoxLayout(cornerFrame);
|
|
||||||
cornerFrameLayout->setSpacing(0), cornerFrameLayout->setMargin(0);
|
cornerFrameLayout->setSpacing(0), cornerFrameLayout->setMargin(0);
|
||||||
cornerFrameLayout->addStretch();
|
//cornerFrameLayout->addStretch();
|
||||||
cornerFrame->setLayout(cornerFrameLayout);
|
m_cornerFrame->setLayout(cornerFrameLayout);
|
||||||
auto *viewIdButton = new QPushButton(cornerFrame);
|
auto *viewIdButton = new QPushButton(m_cornerFrame);
|
||||||
viewIdButton->setToolTip(tr("View own device ID"));
|
viewIdButton->setToolTip(tr("View own device ID"));
|
||||||
viewIdButton->setIcon(QIcon::fromTheme(QStringLiteral("view-barcode"), QIcon(QStringLiteral(":/icons/hicolor/scalable/actions/view-barcode.svg"))));
|
viewIdButton->setIcon(QIcon::fromTheme(QStringLiteral("view-barcode"), QIcon(QStringLiteral(":/icons/hicolor/scalable/actions/view-barcode.svg"))));
|
||||||
viewIdButton->setFlat(true);
|
viewIdButton->setFlat(true);
|
||||||
cornerFrameLayout->addWidget(viewIdButton);
|
cornerFrameLayout->addWidget(viewIdButton);
|
||||||
auto *showLogButton = new QPushButton(cornerFrame);
|
auto *restartButton = new QPushButton(m_cornerFrame);
|
||||||
|
restartButton->setToolTip(tr("Restart Syncthing"));
|
||||||
|
restartButton->setIcon(QIcon::fromTheme(QStringLiteral("system-reboot"), QIcon(QStringLiteral(":/icons/hicolor/scalable/actions/view-refresh.svg"))));
|
||||||
|
restartButton->setFlat(true);
|
||||||
|
connect(restartButton, &QPushButton::clicked, &m_connection, &SyncthingConnection::restart);
|
||||||
|
cornerFrameLayout->addWidget(restartButton);
|
||||||
|
auto *showLogButton = new QPushButton(m_cornerFrame);
|
||||||
showLogButton->setToolTip(tr("Show Syncthing log"));
|
showLogButton->setToolTip(tr("Show Syncthing log"));
|
||||||
showLogButton->setIcon(QIcon::fromTheme(QStringLiteral("text-x-generic"), QIcon(QStringLiteral(":/icons/hicolor/scalable/actions/text-x-generic.svg"))));
|
showLogButton->setIcon(QIcon::fromTheme(QStringLiteral("text-x-generic"), QIcon(QStringLiteral(":/icons/hicolor/scalable/mimetypes/text-x-generic.svg"))));
|
||||||
showLogButton->setFlat(true);
|
showLogButton->setFlat(true);
|
||||||
connect(showLogButton, &QPushButton::clicked, this, &TrayWidget::showLog);
|
connect(showLogButton, &QPushButton::clicked, this, &TrayWidget::showLog);
|
||||||
cornerFrameLayout->addWidget(showLogButton);
|
cornerFrameLayout->addWidget(showLogButton);
|
||||||
auto *scanAllButton = new QPushButton(cornerFrame);
|
auto *scanAllButton = new QPushButton(m_cornerFrame);
|
||||||
scanAllButton->setToolTip(tr("Rescan all directories"));
|
scanAllButton->setToolTip(tr("Rescan all directories"));
|
||||||
scanAllButton->setIcon(QIcon::fromTheme(QStringLiteral("folder-sync"), QIcon(QStringLiteral(":/icons/hicolor/scalable/actions/folder-sync.svg"))));
|
scanAllButton->setIcon(QIcon::fromTheme(QStringLiteral("folder-sync"), QIcon(QStringLiteral(":/icons/hicolor/scalable/actions/folder-sync.svg"))));
|
||||||
scanAllButton->setFlat(true);
|
scanAllButton->setFlat(true);
|
||||||
|
|
||||||
cornerFrameLayout->addWidget(scanAllButton);
|
cornerFrameLayout->addWidget(scanAllButton);
|
||||||
m_ui->tabWidget->setCornerWidget(cornerFrame, Qt::BottomRightCorner);
|
m_ui->tabWidget->setCornerWidget(m_cornerFrame, Qt::BottomRightCorner);
|
||||||
|
|
||||||
|
// apply settings, this also establishes the connection to Syncthing
|
||||||
|
applySettings();
|
||||||
|
|
||||||
m_ui->trafficIconLabel->setPixmap(QIcon::fromTheme(QStringLiteral("network-card"), QIcon(QStringLiteral(":/icons/hicolor/scalable/devices/network-card.svg"))).pixmap(32));
|
m_ui->trafficIconLabel->setPixmap(QIcon::fromTheme(QStringLiteral("network-card"), QIcon(QStringLiteral(":/icons/hicolor/scalable/devices/network-card.svg"))).pixmap(32));
|
||||||
|
|
||||||
|
@ -167,7 +172,7 @@ void TrayWidget::showWebUi()
|
||||||
|
|
||||||
void TrayWidget::showOwnDeviceId()
|
void TrayWidget::showOwnDeviceId()
|
||||||
{
|
{
|
||||||
auto *dlg = new QDialog(this);
|
auto *dlg = new QWidget(this, Qt::Window);
|
||||||
dlg->setWindowTitle(tr("Own device ID") + QStringLiteral(" - " APP_NAME));
|
dlg->setWindowTitle(tr("Own device ID") + QStringLiteral(" - " APP_NAME));
|
||||||
dlg->setWindowIcon(QIcon(QStringLiteral(":/icons/hicolor/scalable/app/syncthingtray.svg")));
|
dlg->setWindowIcon(QIcon(QStringLiteral(":/icons/hicolor/scalable/app/syncthingtray.svg")));
|
||||||
dlg->setAttribute(Qt::WA_DeleteOnClose);
|
dlg->setAttribute(Qt::WA_DeleteOnClose);
|
||||||
|
@ -189,7 +194,10 @@ void TrayWidget::showOwnDeviceId()
|
||||||
copyPushButton->setText(tr("Copy to clipboard"));
|
copyPushButton->setText(tr("Copy to clipboard"));
|
||||||
connect(copyPushButton, &QPushButton::clicked, bind(&QClipboard::setText, QGuiApplication::clipboard(), m_connection.myId(), QClipboard::Clipboard));
|
connect(copyPushButton, &QPushButton::clicked, bind(&QClipboard::setText, QGuiApplication::clipboard(), m_connection.myId(), QClipboard::Clipboard));
|
||||||
layout->addWidget(copyPushButton);
|
layout->addWidget(copyPushButton);
|
||||||
m_connection.requestQrCode(m_connection.myId(), bind(&QLabel::setPixmap, pixmapLabel, placeholders::_1));
|
connect(dlg, &QWidget::destroyed,
|
||||||
|
bind(static_cast<bool(*)(const QMetaObject::Connection &)>(&QObject::disconnect),
|
||||||
|
m_connection.requestQrCode(m_connection.myId(), bind(&QLabel::setPixmap, pixmapLabel, placeholders::_1))
|
||||||
|
));
|
||||||
dlg->setLayout(layout);
|
dlg->setLayout(layout);
|
||||||
dlg->show();
|
dlg->show();
|
||||||
centerWidget(dlg);
|
centerWidget(dlg);
|
||||||
|
@ -201,18 +209,23 @@ void TrayWidget::showOwnDeviceId()
|
||||||
|
|
||||||
void TrayWidget::showLog()
|
void TrayWidget::showLog()
|
||||||
{
|
{
|
||||||
auto *dlg = new QDialog(this);
|
auto *dlg = new QWidget(this, Qt::Window);
|
||||||
dlg->setWindowTitle(tr("Log") + QStringLiteral(" - " APP_NAME));
|
dlg->setWindowTitle(tr("Log") + QStringLiteral(" - " APP_NAME));
|
||||||
dlg->setWindowIcon(QIcon(QStringLiteral(":/icons/hicolor/scalable/app/syncthingtray.svg")));
|
dlg->setWindowIcon(QIcon(QStringLiteral(":/icons/hicolor/scalable/app/syncthingtray.svg")));
|
||||||
dlg->setAttribute(Qt::WA_DeleteOnClose);
|
dlg->setAttribute(Qt::WA_DeleteOnClose);
|
||||||
auto *layout = new QVBoxLayout(dlg);
|
auto *layout = new QVBoxLayout(dlg);
|
||||||
layout->setAlignment(Qt::AlignCenter);
|
layout->setAlignment(Qt::AlignCenter);
|
||||||
auto *browser = new QTextBrowser(dlg);
|
auto *browser = new QTextBrowser(dlg);
|
||||||
m_connection.requestLog([browser] (const std::vector<SyncthingLogEntry> &entries) {
|
connect(dlg, &QWidget::destroyed,
|
||||||
for(const SyncthingLogEntry &entry : entries) {
|
bind(static_cast<bool(*)(const QMetaObject::Connection &)>(&QObject::disconnect),
|
||||||
browser->append(entry.when % QChar(':') % QChar(' ') % QChar('\n') % entry.message % QChar('\n'));
|
m_connection.requestLog([browser] (const std::vector<SyncthingLogEntry> &entries) {
|
||||||
}
|
for(const SyncthingLogEntry &entry : entries) {
|
||||||
});
|
browser->append(entry.when % QChar(':') % QChar(' ') % QChar('\n') % entry.message % QChar('\n'));
|
||||||
|
}
|
||||||
|
})
|
||||||
|
));
|
||||||
|
browser->setReadOnly(true);
|
||||||
|
browser->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont));
|
||||||
layout->addWidget(browser);
|
layout->addWidget(browser);
|
||||||
dlg->setLayout(layout);
|
dlg->setLayout(layout);
|
||||||
dlg->show();
|
dlg->show();
|
||||||
|
@ -232,7 +245,8 @@ void TrayWidget::updateStatusButton(SyncthingStatus status)
|
||||||
m_ui->statusPushButton->setToolTip(tr("Not connected to Syncthing, click to connect"));
|
m_ui->statusPushButton->setToolTip(tr("Not connected to Syncthing, click to connect"));
|
||||||
m_ui->statusPushButton->setIcon(QIcon::fromTheme(QStringLiteral("view-refresh"), QIcon(QStringLiteral(":/icons/hicolor/scalable/actions/view-refresh.svg"))));
|
m_ui->statusPushButton->setIcon(QIcon::fromTheme(QStringLiteral("view-refresh"), QIcon(QStringLiteral(":/icons/hicolor/scalable/actions/view-refresh.svg"))));
|
||||||
break;
|
break;
|
||||||
case SyncthingStatus::Default:
|
case SyncthingStatus::Idle:
|
||||||
|
case SyncthingStatus::Scanning:
|
||||||
case SyncthingStatus::NotificationsAvailable:
|
case SyncthingStatus::NotificationsAvailable:
|
||||||
case SyncthingStatus::Synchronizing:
|
case SyncthingStatus::Synchronizing:
|
||||||
m_ui->statusPushButton->setText(tr("Pause"));
|
m_ui->statusPushButton->setText(tr("Pause"));
|
||||||
|
@ -262,6 +276,13 @@ void TrayWidget::applySettings()
|
||||||
if(Settings::showTraffic()) {
|
if(Settings::showTraffic()) {
|
||||||
updateTraffic();
|
updateTraffic();
|
||||||
}
|
}
|
||||||
|
m_ui->trafficFrame->setFrameStyle(Settings::frameStyle());
|
||||||
|
m_ui->buttonsFrame->setFrameStyle(Settings::frameStyle());
|
||||||
|
if(QApplication::style() && !QApplication::style()->objectName().compare(QLatin1String("adwaita"), Qt::CaseInsensitive)) {
|
||||||
|
m_cornerFrame->setFrameStyle(QFrame::NoFrame);
|
||||||
|
} else {
|
||||||
|
m_cornerFrame->setFrameStyle(Settings::frameStyle());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TrayWidget::openDir(const QModelIndex &dirIndex)
|
void TrayWidget::openDir(const QModelIndex &dirIndex)
|
||||||
|
@ -299,7 +320,8 @@ void TrayWidget::changeStatus()
|
||||||
case SyncthingStatus::Disconnected:
|
case SyncthingStatus::Disconnected:
|
||||||
m_connection.connect();
|
m_connection.connect();
|
||||||
break;
|
break;
|
||||||
case SyncthingStatus::Default:
|
case SyncthingStatus::Idle:
|
||||||
|
case SyncthingStatus::Scanning:
|
||||||
case SyncthingStatus::NotificationsAvailable:
|
case SyncthingStatus::NotificationsAvailable:
|
||||||
case SyncthingStatus::Synchronizing:
|
case SyncthingStatus::Synchronizing:
|
||||||
m_connection.pauseAllDevs();
|
m_connection.pauseAllDevs();
|
||||||
|
|
|
@ -6,11 +6,14 @@
|
||||||
#include "../data/syncthingconnection.h"
|
#include "../data/syncthingconnection.h"
|
||||||
#include "../data/syncthingdirectorymodel.h"
|
#include "../data/syncthingdirectorymodel.h"
|
||||||
#include "../data/syncthingdevicemodel.h"
|
#include "../data/syncthingdevicemodel.h"
|
||||||
|
#include "../data/syncthingprocess.h"
|
||||||
|
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
|
QT_FORWARD_DECLARE_CLASS(QFrame)
|
||||||
|
|
||||||
namespace ApplicationUtilities {
|
namespace ApplicationUtilities {
|
||||||
class QtConfigArguments;
|
class QtConfigArguments;
|
||||||
}
|
}
|
||||||
|
@ -65,6 +68,7 @@ private:
|
||||||
#ifndef SYNCTHINGTRAY_NO_WEBVIEW
|
#ifndef SYNCTHINGTRAY_NO_WEBVIEW
|
||||||
WebViewDialog *m_webViewDlg;
|
WebViewDialog *m_webViewDlg;
|
||||||
#endif
|
#endif
|
||||||
|
QFrame *m_cornerFrame;
|
||||||
Data::SyncthingConnection m_connection;
|
Data::SyncthingConnection m_connection;
|
||||||
Data::SyncthingDirectoryModel m_dirModel;
|
Data::SyncthingDirectoryModel m_dirModel;
|
||||||
Data::SyncthingDeviceModel m_devModel;
|
Data::SyncthingDeviceModel m_devModel;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#if defined(SYNCTHINGTRAY_USE_WEBENGINE) || defined(SYNCTHINGTRAY_USE_WEBKIT)
|
#ifndef SYNCTHINGTRAY_NO_WEBVIEW
|
||||||
#include "./webpage.h"
|
#include "./webpage.h"
|
||||||
|
|
||||||
#include "../application/settings.h"
|
#include "../application/settings.h"
|
||||||
|
@ -29,7 +29,7 @@ WebPage::WebPage(WEB_VIEW_PROVIDER *view) :
|
||||||
WEB_PAGE_PROVIDER(view),
|
WEB_PAGE_PROVIDER(view),
|
||||||
m_view(view)
|
m_view(view)
|
||||||
{
|
{
|
||||||
#if defined(SYNCTHINGTRAY_USE_WEBENGINE)
|
#ifdef SYNCTHINGTRAY_USE_WEBENGINE
|
||||||
settings()->setAttribute(QWebEngineSettings::JavascriptCanOpenWindows, true);
|
settings()->setAttribute(QWebEngineSettings::JavascriptCanOpenWindows, true);
|
||||||
connect(this, &WebPage::authenticationRequired, this, static_cast<void(WebPage::*)(const QUrl &, QAuthenticator *)>(&WebPage::supplyCredentials));
|
connect(this, &WebPage::authenticationRequired, this, static_cast<void(WebPage::*)(const QUrl &, QAuthenticator *)>(&WebPage::supplyCredentials));
|
||||||
#else
|
#else
|
||||||
|
@ -40,7 +40,7 @@ WebPage::WebPage(WEB_VIEW_PROVIDER *view) :
|
||||||
#endif
|
#endif
|
||||||
if(!m_view) {
|
if(!m_view) {
|
||||||
// delegate to external browser if no view is assigned
|
// delegate to external browser if no view is assigned
|
||||||
#if defined(SYNCTHINGTRAY_USE_WEBENGINE)
|
#ifdef SYNCTHINGTRAY_USE_WEBENGINE
|
||||||
connect(this, &WebPage::urlChanged, this, &WebPage::delegateToExternalBrowser);
|
connect(this, &WebPage::urlChanged, this, &WebPage::delegateToExternalBrowser);
|
||||||
#else
|
#else
|
||||||
connect(this->mainFrame(), &QWebFrame::urlChanged, this, &WebPage::delegateToExternalBrowser);
|
connect(this->mainFrame(), &QWebFrame::urlChanged, this, &WebPage::delegateToExternalBrowser);
|
||||||
|
@ -109,4 +109,4 @@ void WebPage::handleSslErrors(QNetworkReply *reply, const QList<QSslError> &erro
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // defined(SYNCTHINGTRAY_USE_WEBENGINE) || defined(SYNCTHINGTRAY_USE_WEBKIT)
|
#endif // SYNCTHINGTRAY_NO_WEBVIEW
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#ifndef WEBPAGE_H
|
#ifndef WEBPAGE_H
|
||||||
#define WEBPAGE_H
|
#define WEBPAGE_H
|
||||||
#if defined(SYNCTHINGTRAY_USE_WEBENGINE) || defined(SYNCTHINGTRAY_USE_WEBKIT)
|
#ifndef SYNCTHINGTRAY_NO_WEBVIEW
|
||||||
|
|
||||||
#include "./webviewprovider.h"
|
#include "./webviewprovider.h"
|
||||||
|
|
||||||
|
@ -44,5 +44,5 @@ private:
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // defined(SYNCTHINGTRAY_USE_WEBENGINE) || defined(SYNCTHINGTRAY_USE_WEBKIT)
|
#endif // SYNCTHINGTRAY_NO_WEBVIEW
|
||||||
#endif // WEBPAGE_H
|
#endif // WEBPAGE_H
|
||||||
|
|
|
@ -25,5 +25,6 @@
|
||||||
<file>icons/hicolor/scalable/places/folder-open.svg</file>
|
<file>icons/hicolor/scalable/places/folder-open.svg</file>
|
||||||
<file>icons/hicolor/scalable/places/folder.svg</file>
|
<file>icons/hicolor/scalable/places/folder.svg</file>
|
||||||
<file>icons/hicolor/scalable/places/network-workgroup.svg</file>
|
<file>icons/hicolor/scalable/places/network-workgroup.svg</file>
|
||||||
|
<file>icons/hicolor/scalable/apps/system-run.svg</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
<svg width="32" version="1.1" xmlns="http://www.w3.org/2000/svg" height="32" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape">
|
||||||
|
<defs id="defs5455">
|
||||||
|
<linearGradient inkscape:collect="always" id="linearGradient4293">
|
||||||
|
<stop id="stop4295"/>
|
||||||
|
<stop offset="1" style="stop-opacity:0" id="stop4297"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient inkscape:collect="always" id="linearGradient4303-6">
|
||||||
|
<stop style="stop-color:#c6cdd1" id="stop4305-7"/>
|
||||||
|
<stop offset="1" style="stop-color:#e0e5e7" id="stop4307-0"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient inkscape:collect="always" id="linearGradient4298">
|
||||||
|
<stop style="stop-color:#42a603" id="stop4300"/>
|
||||||
|
<stop offset="1" style="stop-color:#78da06" id="stop4302"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient inkscape:collect="always" xlink:href="#linearGradient4298" id="linearGradient4308" y1="539.79797" y2="527.79797" x2="0" gradientUnits="userSpaceOnUse"/>
|
||||||
|
<linearGradient inkscape:collect="always" id="linearGradient4643-8" xlink:href="#linearGradient4303-6" y1="543.79797" y2="502.65509" x2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.66666726 0 0 0.63518419 141.19014 191.51873)"/>
|
||||||
|
<linearGradient inkscape:collect="always" id="linearGradient4183" xlink:href="#linearGradient4293" y1="525.79797" y2="540.79797" x1="391.57144" gradientUnits="userSpaceOnUse" x2="406.57147" gradientTransform="matrix(1 0 0 1 12.999989 -6.99997)"/>
|
||||||
|
<linearGradient inkscape:collect="always" xlink:href="#linearGradient4293" id="linearGradient4256" y1="11" x1="5" y2="27" x2="21" gradientUnits="userSpaceOnUse"/>
|
||||||
|
</defs>
|
||||||
|
<metadata id="metadata5458"/>
|
||||||
|
<g inkscape:label="Capa 1" inkscape:groupmode="layer" id="layer1" transform="matrix(1 0 0 1 -384.57143 -515.798)">
|
||||||
|
<g id="g4244" transform="matrix(1 0 0 1 -12.999996 6.999998)">
|
||||||
|
<rect width="32" x="397.57144" y="510.79797" rx="0" height="28" style="fill:url(#linearGradient4643-8)" id="rect4641-5"/>
|
||||||
|
<path inkscape:connector-curvature="0" style="fill:url(#linearGradient4183);opacity:0.2;fill-rule:evenodd" id="path4167" d="m 398.57142,536.79803 30,-20 1.00001,1 -1e-5,20.99997 -29,3e-5 z"/>
|
||||||
|
<rect width="31.999983" x="397.57141" y="537.79797" height="1" style="fill:#99a1a7" id="rect4645-7-7"/>
|
||||||
|
<rect width="32.00001" x="397.57141" y="510.79797" height="4" style="fill:#566069" id="rect4647-8"/>
|
||||||
|
<rect width="31.999968" x="397.57141" y="514.79797" height="1" style="fill:#3daee9" id="rect4649-8"/>
|
||||||
|
<rect width="30" x="398.57141" y="516.79797" height="20.00003" style="fill:#ffffff" id="rect4653-5"/>
|
||||||
|
<rect width="2" x="426.57141" y="511.79797" rx="1" height="2" style="fill:#eff0f1" id="rect4661-1"/>
|
||||||
|
</g>
|
||||||
|
<path style="fill:url(#linearGradient4256);opacity:0.2;fill-rule:evenodd" id="path4242" d="M 21 18 L 12 24 L 18 30 L 25 30 L 32 30 L 21 18 z " transform="matrix(1 0 0 1 384.57143 515.798)"/>
|
||||||
|
<path inkscape:connector-curvature="0" style="fill:url(#linearGradient4308);fill-rule:evenodd" id="path4237-9" d="m 396.57141,527.79796 0,12 9,-6 z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.1 KiB |
|
@ -4,119 +4,124 @@
|
||||||
<context>
|
<context>
|
||||||
<name>Data::SyncthingConnection</name>
|
<name>Data::SyncthingConnection</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="120"/>
|
<location filename="../data/syncthingconnection.cpp" line="147"/>
|
||||||
<source>disconnected</source>
|
<source>disconnected</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="122"/>
|
<location filename="../data/syncthingconnection.cpp" line="149"/>
|
||||||
<source>connected</source>
|
<source>connected</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="124"/>
|
<location filename="../data/syncthingconnection.cpp" line="151"/>
|
||||||
<source>connected, notifications available</source>
|
<source>connected, notifications available</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="126"/>
|
<location filename="../data/syncthingconnection.cpp" line="153"/>
|
||||||
<source>connected, paused</source>
|
<source>connected, paused</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="128"/>
|
<location filename="../data/syncthingconnection.cpp" line="155"/>
|
||||||
<source>connected, synchronizing</source>
|
<source>connected, synchronizing</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="130"/>
|
<location filename="../data/syncthingconnection.cpp" line="157"/>
|
||||||
<source>unknown</source>
|
<source>unknown</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="427"/>
|
<location filename="../data/syncthingconnection.cpp" line="459"/>
|
||||||
<source>Unable to parse Syncthing log: </source>
|
<source>Unable to parse Syncthing log: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="431"/>
|
<location filename="../data/syncthingconnection.cpp" line="463"/>
|
||||||
<source>Unable to request system log: </source>
|
<source>Unable to request system log: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="452"/>
|
<location filename="../data/syncthingconnection.cpp" line="484"/>
|
||||||
<source>Unable to locate certificate used by Syncthing GUI.</source>
|
<source>Unable to locate certificate used by Syncthing GUI.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="458"/>
|
<location filename="../data/syncthingconnection.cpp" line="490"/>
|
||||||
<source>Unable to load certificate used by Syncthing GUI.</source>
|
<source>Unable to load certificate used by Syncthing GUI.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="490"/>
|
<location filename="../data/syncthingconnection.cpp" line="522"/>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="590"/>
|
<location filename="../data/syncthingconnection.cpp" line="622"/>
|
||||||
<source>Unable to parse Syncthing config: </source>
|
<source>Unable to parse Syncthing config: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="495"/>
|
<location filename="../data/syncthingconnection.cpp" line="527"/>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="595"/>
|
<location filename="../data/syncthingconnection.cpp" line="627"/>
|
||||||
<source>Unable to request Syncthing config: </source>
|
<source>Unable to request Syncthing config: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="670"/>
|
<location filename="../data/syncthingconnection.cpp" line="702"/>
|
||||||
<source>Unable to parse connections: </source>
|
<source>Unable to parse connections: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="675"/>
|
<location filename="../data/syncthingconnection.cpp" line="707"/>
|
||||||
<source>Unable to request connections: </source>
|
<source>Unable to request connections: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="725"/>
|
<location filename="../data/syncthingconnection.cpp" line="762"/>
|
||||||
<source>Unable to parse directory statistics: </source>
|
<source>Unable to parse directory statistics: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="730"/>
|
<location filename="../data/syncthingconnection.cpp" line="767"/>
|
||||||
<source>Unable to request directory statistics: </source>
|
<source>Unable to request directory statistics: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="767"/>
|
<location filename="../data/syncthingconnection.cpp" line="804"/>
|
||||||
<source>Unable to parse device statistics: </source>
|
<source>Unable to parse device statistics: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="772"/>
|
<location filename="../data/syncthingconnection.cpp" line="809"/>
|
||||||
<source>Unable to request device statistics: </source>
|
<source>Unable to request device statistics: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="823"/>
|
<location filename="../data/syncthingconnection.cpp" line="860"/>
|
||||||
<source>Unable to parse Syncthing events: </source>
|
<source>Unable to parse Syncthing events: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="845"/>
|
<location filename="../data/syncthingconnection.cpp" line="882"/>
|
||||||
<source>Unable to request Syncthing events: </source>
|
<source>Unable to request Syncthing events: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="1051"/>
|
<location filename="../data/syncthingconnection.cpp" line="1094"/>
|
||||||
<source>Unable to request rescan: </source>
|
<source>Unable to request rescan: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="1066"/>
|
<location filename="../data/syncthingconnection.cpp" line="1109"/>
|
||||||
<source>Unable to request pause/resume: </source>
|
<source>Unable to request pause/resume: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="395"/>
|
<location filename="../data/syncthingconnection.cpp" line="1124"/>
|
||||||
|
<source>Unable to request restart: </source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../data/syncthingconnection.cpp" line="427"/>
|
||||||
<source>Unable to request QR-Code: </source>
|
<source>Unable to request QR-Code: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -356,28 +361,73 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/appearanceoptionpage.ui" line="23"/>
|
<location filename="../gui/appearanceoptionpage.ui" line="27"/>
|
||||||
<source>Menu size</source>
|
<source>Menu size</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/appearanceoptionpage.ui" line="30"/>
|
<location filename="../gui/appearanceoptionpage.ui" line="34"/>
|
||||||
<source>Optional GUI elements</source>
|
<source>Optional GUI elements</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/appearanceoptionpage.ui" line="37"/>
|
<location filename="../gui/appearanceoptionpage.ui" line="41"/>
|
||||||
<source>Traffic statistics</source>
|
<source>Traffic statistics</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/appearanceoptionpage.ui" line="56"/>
|
<location filename="../gui/appearanceoptionpage.ui" line="69"/>
|
||||||
<source>x</source>
|
<source> x </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/appearanceoptionpage.ui" line="76"/>
|
<location filename="../gui/appearanceoptionpage.ui" line="92"/>
|
||||||
<source>px</source>
|
<source> px</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/appearanceoptionpage.ui" line="104"/>
|
||||||
|
<source>Frame shape</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/appearanceoptionpage.ui" line="111"/>
|
||||||
|
<source>Frame shadow</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/appearanceoptionpage.ui" line="119"/>
|
||||||
|
<source>No frame</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/appearanceoptionpage.ui" line="124"/>
|
||||||
|
<source>Box</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/appearanceoptionpage.ui" line="129"/>
|
||||||
|
<source>Panel</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/appearanceoptionpage.ui" line="134"/>
|
||||||
|
<source>Styled panel</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/appearanceoptionpage.ui" line="143"/>
|
||||||
|
<source>Plain</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/appearanceoptionpage.ui" line="148"/>
|
||||||
|
<source>Raised</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/appearanceoptionpage.ui" line="153"/>
|
||||||
|
<source>Sunken</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
@ -389,8 +439,28 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/autostartoptionpage.ui" line="23"/>
|
<location filename="../gui/autostartoptionpage.ui" line="26"/>
|
||||||
<source><html><head/><body><p><span style=" font-weight:600;">Not implemented yet</span></p><p>This will allow launching the tray when the desktop environment starts and to launch Syncthing when the tray is started.</p></body></html></source>
|
<source>Start the tray icon when the desktop environment launches</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/settingsdialog.cpp" line="238"/>
|
||||||
|
<source>This is achieved by adding a *.desktop file under <i>~/.config/autostart</i> so the setting only affects the current user.</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/settingsdialog.cpp" line="240"/>
|
||||||
|
<source>This is achieved by adding a registry key under <i>HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run</i> so the setting only affects the current user. Note that the startup entry is invalidated when moving <i>syncthingtray.exe</i>.</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/settingsdialog.cpp" line="242"/>
|
||||||
|
<source>This feature has not been implemented for your platform (yet).</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/settingsdialog.cpp" line="329"/>
|
||||||
|
<source>unable to modify startup entry</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
@ -402,57 +472,57 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/connectionoptionpage.ui" line="15"/>
|
<location filename="../gui/connectionoptionpage.ui" line="19"/>
|
||||||
<source>Syncthing URL</source>
|
<source>Syncthing URL</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/connectionoptionpage.ui" line="25"/>
|
<location filename="../gui/connectionoptionpage.ui" line="29"/>
|
||||||
<source>Authentication</source>
|
<source>Authentication</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/connectionoptionpage.ui" line="38"/>
|
<location filename="../gui/connectionoptionpage.ui" line="42"/>
|
||||||
<source>User</source>
|
<source>User</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/connectionoptionpage.ui" line="72"/>
|
<location filename="../gui/connectionoptionpage.ui" line="76"/>
|
||||||
<source>disconnected</source>
|
<source>disconnected</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/connectionoptionpage.ui" line="79"/>
|
<location filename="../gui/connectionoptionpage.ui" line="83"/>
|
||||||
<source>Status</source>
|
<source>Status</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/connectionoptionpage.ui" line="86"/>
|
<location filename="../gui/connectionoptionpage.ui" line="90"/>
|
||||||
<source>Apply connection settings and try to reconnect</source>
|
<source>Apply connection settings and try to reconnect</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/connectionoptionpage.ui" line="100"/>
|
<location filename="../gui/connectionoptionpage.ui" line="104"/>
|
||||||
<source>API key</source>
|
<source>API key</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/connectionoptionpage.ui" line="110"/>
|
<location filename="../gui/connectionoptionpage.ui" line="114"/>
|
||||||
<source>Insert values from local Syncthing configuration</source>
|
<source>Insert values from local Syncthing configuration</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/connectionoptionpage.ui" line="48"/>
|
<location filename="../gui/connectionoptionpage.ui" line="52"/>
|
||||||
<source>Password</source>
|
<source>Password</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/settingsdialog.cpp" line="60"/>
|
<location filename="../gui/settingsdialog.cpp" line="70"/>
|
||||||
<source>Select Syncthing config file</source>
|
<source>Select Syncthing config file</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/settingsdialog.cpp" line="67"/>
|
<location filename="../gui/settingsdialog.cpp" line="77"/>
|
||||||
<source>Unable to parse the Syncthing config file.</source>
|
<source>Unable to parse the Syncthing config file.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -493,6 +563,66 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>QtGui::LauncherOptionPage</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/launcheroptionpage.ui" line="14"/>
|
||||||
|
<source>Syncthing launcher</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/launcheroptionpage.ui" line="26"/>
|
||||||
|
<source>Launch Syncthing when starting the tray icon</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/launcheroptionpage.ui" line="42"/>
|
||||||
|
<source>Syncthing executable</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/launcheroptionpage.ui" line="52"/>
|
||||||
|
<source>Arguments</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/launcheroptionpage.ui" line="86"/>
|
||||||
|
<source>Syncthing log (stdout/stderr)</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/launcheroptionpage.ui" line="102"/>
|
||||||
|
<source>Apply and launch now</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/launcheroptionpage.ui" line="119"/>
|
||||||
|
<source>Stop launched instance</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/launcheroptionpage.ui" line="138"/>
|
||||||
|
<source>No log messages available yet</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/launcheroptionpage.ui" line="145"/>
|
||||||
|
<source>Ensure latest log is visible</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/settingsdialog.cpp" line="409"/>
|
||||||
|
<source>Syncthing existed with exit code %1
|
||||||
|
</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/settingsdialog.cpp" line="412"/>
|
||||||
|
<source>Syncthing crashed with exit code %1
|
||||||
|
</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>QtGui::NotificationsOptionPage</name>
|
<name>QtGui::NotificationsOptionPage</name>
|
||||||
<message>
|
<message>
|
||||||
|
@ -501,27 +631,27 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/notificationsoptionpage.ui" line="23"/>
|
<location filename="../gui/notificationsoptionpage.ui" line="30"/>
|
||||||
<source>Notify on</source>
|
<source>Notify on</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/notificationsoptionpage.ui" line="30"/>
|
<location filename="../gui/notificationsoptionpage.ui" line="37"/>
|
||||||
<source>disconnect</source>
|
<source>disconnect</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/notificationsoptionpage.ui" line="37"/>
|
<location filename="../gui/notificationsoptionpage.ui" line="44"/>
|
||||||
<source>internal errors</source>
|
<source>internal errors</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/notificationsoptionpage.ui" line="44"/>
|
<location filename="../gui/notificationsoptionpage.ui" line="51"/>
|
||||||
<source>Syncthing errors</source>
|
<source>errors/notifications from Syncthing</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/notificationsoptionpage.ui" line="51"/>
|
<location filename="../gui/notificationsoptionpage.ui" line="58"/>
|
||||||
<source>sync complete</source>
|
<source>sync complete</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -529,12 +659,17 @@
|
||||||
<context>
|
<context>
|
||||||
<name>QtGui::SettingsDialog</name>
|
<name>QtGui::SettingsDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/settingsdialog.cpp" line="259"/>
|
<location filename="../gui/settingsdialog.cpp" line="497"/>
|
||||||
<source>Tray</source>
|
<source>Tray</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/settingsdialog.cpp" line="267"/>
|
<location filename="../gui/settingsdialog.cpp" line="509"/>
|
||||||
|
<source>Startup</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/settingsdialog.cpp" line="503"/>
|
||||||
<source>Web view</source>
|
<source>Web view</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -542,67 +677,72 @@
|
||||||
<context>
|
<context>
|
||||||
<name>QtGui::TrayIcon</name>
|
<name>QtGui::TrayIcon</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/trayicon.cpp" line="33"/>
|
<location filename="../gui/trayicon.cpp" line="34"/>
|
||||||
<source>Web UI</source>
|
<source>Web UI</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/trayicon.cpp" line="34"/>
|
<location filename="../gui/trayicon.cpp" line="35"/>
|
||||||
<source>Settings</source>
|
<source>Settings</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/trayicon.cpp" line="35"/>
|
<location filename="../gui/trayicon.cpp" line="36"/>
|
||||||
<source>About</source>
|
<source>About</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/trayicon.cpp" line="37"/>
|
<location filename="../gui/trayicon.cpp" line="38"/>
|
||||||
<source>Close</source>
|
<source>Close</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/trayicon.cpp" line="78"/>
|
<location filename="../gui/trayicon.cpp" line="77"/>
|
||||||
<source>Syncthing error</source>
|
<source>Error</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/trayicon.cpp" line="85"/>
|
<location filename="../gui/trayicon.cpp" line="84"/>
|
||||||
<source>Syncthing notification</source>
|
<source>Syncthing notification</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/trayicon.cpp" line="94"/>
|
<location filename="../gui/trayicon.cpp" line="93"/>
|
||||||
<source>Not connected to Syncthing</source>
|
<source>Not connected to Syncthing</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/trayicon.cpp" line="96"/>
|
<location filename="../gui/trayicon.cpp" line="95"/>
|
||||||
<source>Disconnected from Syncthing</source>
|
<source>Disconnected from Syncthing</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/trayicon.cpp" line="101"/>
|
<location filename="../gui/trayicon.cpp" line="100"/>
|
||||||
<source>Syncthing is running</source>
|
<source>Syncthing is idling</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/trayicon.cpp" line="105"/>
|
<location filename="../gui/trayicon.cpp" line="104"/>
|
||||||
|
<source>Syncthing is scanning</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/trayicon.cpp" line="108"/>
|
||||||
<source>Notifications available</source>
|
<source>Notifications available</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/trayicon.cpp" line="109"/>
|
<location filename="../gui/trayicon.cpp" line="112"/>
|
||||||
<source>At least one device is paused</source>
|
<source>At least one device is paused</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/trayicon.cpp" line="113"/>
|
<location filename="../gui/trayicon.cpp" line="116"/>
|
||||||
<source>Synchronization is ongoing</source>
|
<source>Synchronization is ongoing</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/trayicon.cpp" line="122"/>
|
<location filename="../gui/trayicon.cpp" line="125"/>
|
||||||
<source>Synchronization complete</source>
|
<source>Synchronization complete</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -616,7 +756,7 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.ui" line="107"/>
|
<location filename="../gui/traywidget.ui" line="107"/>
|
||||||
<location filename="../gui/traywidget.cpp" line="230"/>
|
<location filename="../gui/traywidget.cpp" line="244"/>
|
||||||
<source>Connect</source>
|
<source>Connect</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -643,8 +783,8 @@
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.ui" line="230"/>
|
<location filename="../gui/traywidget.ui" line="230"/>
|
||||||
<location filename="../gui/traywidget.ui" line="250"/>
|
<location filename="../gui/traywidget.ui" line="250"/>
|
||||||
<location filename="../gui/traywidget.cpp" line="322"/>
|
<location filename="../gui/traywidget.cpp" line="345"/>
|
||||||
<location filename="../gui/traywidget.cpp" line="329"/>
|
<location filename="../gui/traywidget.cpp" line="352"/>
|
||||||
<source>unknown</source>
|
<source>unknown</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -670,13 +810,13 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.ui" line="80"/>
|
<location filename="../gui/traywidget.ui" line="80"/>
|
||||||
<location filename="../gui/traywidget.cpp" line="132"/>
|
<location filename="../gui/traywidget.cpp" line="138"/>
|
||||||
<source>About</source>
|
<source>About</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.ui" line="134"/>
|
<location filename="../gui/traywidget.ui" line="134"/>
|
||||||
<location filename="../gui/traywidget.cpp" line="112"/>
|
<location filename="../gui/traywidget.cpp" line="118"/>
|
||||||
<source>Settings</source>
|
<source>Settings</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -686,70 +826,75 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.cpp" line="70"/>
|
<location filename="../gui/traywidget.cpp" line="67"/>
|
||||||
<source>View own device ID</source>
|
<source>View own device ID</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.cpp" line="81"/>
|
<location filename="../gui/traywidget.cpp" line="84"/>
|
||||||
<source>Rescan all directories</source>
|
<source>Rescan all directories</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.cpp" line="75"/>
|
<location filename="../gui/traywidget.cpp" line="78"/>
|
||||||
<source>Show Syncthing log</source>
|
<source>Show Syncthing log</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.cpp" line="180"/>
|
<location filename="../gui/traywidget.cpp" line="72"/>
|
||||||
|
<source>Restart Syncthing</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/traywidget.cpp" line="186"/>
|
||||||
<source>device ID is unknown</source>
|
<source>device ID is unknown</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.cpp" line="188"/>
|
<location filename="../gui/traywidget.cpp" line="194"/>
|
||||||
<source>Copy to clipboard</source>
|
<source>Copy to clipboard</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.cpp" line="231"/>
|
<location filename="../gui/traywidget.cpp" line="245"/>
|
||||||
<source>Not connected to Syncthing, click to connect</source>
|
<source>Not connected to Syncthing, click to connect</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.cpp" line="237"/>
|
<location filename="../gui/traywidget.cpp" line="252"/>
|
||||||
<source>Pause</source>
|
<source>Pause</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.cpp" line="238"/>
|
<location filename="../gui/traywidget.cpp" line="253"/>
|
||||||
<source>Syncthing is running, click to pause all devices</source>
|
<source>Syncthing is running, click to pause all devices</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.cpp" line="243"/>
|
<location filename="../gui/traywidget.cpp" line="258"/>
|
||||||
<source>At least one device is paused, click to resume</source>
|
<source>At least one device is paused, click to resume</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.cpp" line="242"/>
|
<location filename="../gui/traywidget.cpp" line="294"/>
|
||||||
|
<source>The directory <i>%1</i> does not exist on the local machine.</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/traywidget.cpp" line="257"/>
|
||||||
<source>Continue</source>
|
<source>Continue</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.cpp" line="170"/>
|
<location filename="../gui/traywidget.cpp" line="176"/>
|
||||||
<source>Own device ID</source>
|
<source>Own device ID</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.cpp" line="204"/>
|
<location filename="../gui/traywidget.cpp" line="213"/>
|
||||||
<source>Log</source>
|
<source>Log</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../gui/traywidget.cpp" line="272"/>
|
|
||||||
<source>The directly <i>%1</i> does not exist on the local machine.</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>QtGui::WebViewDialog</name>
|
<name>QtGui::WebViewDialog</name>
|
||||||
|
@ -763,7 +908,7 @@
|
||||||
<name>QtGui::WebViewOptionPage</name>
|
<name>QtGui::WebViewOptionPage</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/webviewoptionpage.ui" line="14"/>
|
<location filename="../gui/webviewoptionpage.ui" line="14"/>
|
||||||
<location filename="../gui/settingsdialog.cpp" line="221"/>
|
<location filename="../gui/settingsdialog.cpp" line="459"/>
|
||||||
<source>General</source>
|
<source>General</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -793,7 +938,7 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/settingsdialog.cpp" line="223"/>
|
<location filename="../gui/settingsdialog.cpp" line="461"/>
|
||||||
<source>Syncthing Tray has not been built with vieb view support utilizing either Qt WebKit or Qt WebEngine.
|
<source>Syncthing Tray has not been built with vieb view support utilizing either Qt WebKit or Qt WebEngine.
|
||||||
The Web UI will be opened in the default web browser instead.</source>
|
The Web UI will be opened in the default web browser instead.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
|
@ -802,22 +947,22 @@ The Web UI will be opened in the default web browser instead.</source>
|
||||||
<context>
|
<context>
|
||||||
<name>main</name>
|
<name>main</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../application/main.cpp" line="62"/>
|
<location filename="../application/main.cpp" line="70"/>
|
||||||
<source>You must configure how to connect to Syncthing when using Syncthing Tray the first time.</source>
|
<source>You must configure how to connect to Syncthing when using Syncthing Tray the first time.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../application/main.cpp" line="63"/>
|
<location filename="../application/main.cpp" line="71"/>
|
||||||
<source>Note that the settings dialog allows importing URL, credentials and API-key from the local Syncthing configuration.</source>
|
<source>Note that the settings dialog allows importing URL, credentials and API-key from the local Syncthing configuration.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../application/main.cpp" line="68"/>
|
<location filename="../application/main.cpp" line="76"/>
|
||||||
<source>The system tray is (currently) not available. You could open the tray menu as a regular window using the -w flag, though.</source>
|
<source>The system tray is (currently) not available. You could open the tray menu as a regular window using the -w flag, though.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../application/main.cpp" line="72"/>
|
<location filename="../application/main.cpp" line="80"/>
|
||||||
<source>The Qt libraries have not been built with tray icon support. You could open the tray menu as a regular window using the -w flag, though.</source>
|
<source>The Qt libraries have not been built with tray icon support. You could open the tray menu as a regular window using the -w flag, though.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
|
|
@ -4,119 +4,124 @@
|
||||||
<context>
|
<context>
|
||||||
<name>Data::SyncthingConnection</name>
|
<name>Data::SyncthingConnection</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="120"/>
|
<location filename="../data/syncthingconnection.cpp" line="147"/>
|
||||||
<source>disconnected</source>
|
<source>disconnected</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="122"/>
|
<location filename="../data/syncthingconnection.cpp" line="149"/>
|
||||||
<source>connected</source>
|
<source>connected</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="124"/>
|
<location filename="../data/syncthingconnection.cpp" line="151"/>
|
||||||
<source>connected, notifications available</source>
|
<source>connected, notifications available</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="126"/>
|
<location filename="../data/syncthingconnection.cpp" line="153"/>
|
||||||
<source>connected, paused</source>
|
<source>connected, paused</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="128"/>
|
<location filename="../data/syncthingconnection.cpp" line="155"/>
|
||||||
<source>connected, synchronizing</source>
|
<source>connected, synchronizing</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="130"/>
|
<location filename="../data/syncthingconnection.cpp" line="157"/>
|
||||||
<source>unknown</source>
|
<source>unknown</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="427"/>
|
<location filename="../data/syncthingconnection.cpp" line="459"/>
|
||||||
<source>Unable to parse Syncthing log: </source>
|
<source>Unable to parse Syncthing log: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="431"/>
|
<location filename="../data/syncthingconnection.cpp" line="463"/>
|
||||||
<source>Unable to request system log: </source>
|
<source>Unable to request system log: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="452"/>
|
<location filename="../data/syncthingconnection.cpp" line="484"/>
|
||||||
<source>Unable to locate certificate used by Syncthing GUI.</source>
|
<source>Unable to locate certificate used by Syncthing GUI.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="458"/>
|
<location filename="../data/syncthingconnection.cpp" line="490"/>
|
||||||
<source>Unable to load certificate used by Syncthing GUI.</source>
|
<source>Unable to load certificate used by Syncthing GUI.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="490"/>
|
<location filename="../data/syncthingconnection.cpp" line="522"/>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="590"/>
|
<location filename="../data/syncthingconnection.cpp" line="622"/>
|
||||||
<source>Unable to parse Syncthing config: </source>
|
<source>Unable to parse Syncthing config: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="495"/>
|
<location filename="../data/syncthingconnection.cpp" line="527"/>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="595"/>
|
<location filename="../data/syncthingconnection.cpp" line="627"/>
|
||||||
<source>Unable to request Syncthing config: </source>
|
<source>Unable to request Syncthing config: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="670"/>
|
<location filename="../data/syncthingconnection.cpp" line="702"/>
|
||||||
<source>Unable to parse connections: </source>
|
<source>Unable to parse connections: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="675"/>
|
<location filename="../data/syncthingconnection.cpp" line="707"/>
|
||||||
<source>Unable to request connections: </source>
|
<source>Unable to request connections: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="725"/>
|
<location filename="../data/syncthingconnection.cpp" line="762"/>
|
||||||
<source>Unable to parse directory statistics: </source>
|
<source>Unable to parse directory statistics: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="730"/>
|
<location filename="../data/syncthingconnection.cpp" line="767"/>
|
||||||
<source>Unable to request directory statistics: </source>
|
<source>Unable to request directory statistics: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="767"/>
|
<location filename="../data/syncthingconnection.cpp" line="804"/>
|
||||||
<source>Unable to parse device statistics: </source>
|
<source>Unable to parse device statistics: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="772"/>
|
<location filename="../data/syncthingconnection.cpp" line="809"/>
|
||||||
<source>Unable to request device statistics: </source>
|
<source>Unable to request device statistics: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="823"/>
|
<location filename="../data/syncthingconnection.cpp" line="860"/>
|
||||||
<source>Unable to parse Syncthing events: </source>
|
<source>Unable to parse Syncthing events: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="845"/>
|
<location filename="../data/syncthingconnection.cpp" line="882"/>
|
||||||
<source>Unable to request Syncthing events: </source>
|
<source>Unable to request Syncthing events: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="1051"/>
|
<location filename="../data/syncthingconnection.cpp" line="1094"/>
|
||||||
<source>Unable to request rescan: </source>
|
<source>Unable to request rescan: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="1066"/>
|
<location filename="../data/syncthingconnection.cpp" line="1109"/>
|
||||||
<source>Unable to request pause/resume: </source>
|
<source>Unable to request pause/resume: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../data/syncthingconnection.cpp" line="395"/>
|
<location filename="../data/syncthingconnection.cpp" line="1124"/>
|
||||||
|
<source>Unable to request restart: </source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../data/syncthingconnection.cpp" line="427"/>
|
||||||
<source>Unable to request QR-Code: </source>
|
<source>Unable to request QR-Code: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -356,28 +361,73 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/appearanceoptionpage.ui" line="23"/>
|
<location filename="../gui/appearanceoptionpage.ui" line="27"/>
|
||||||
<source>Menu size</source>
|
<source>Menu size</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/appearanceoptionpage.ui" line="30"/>
|
<location filename="../gui/appearanceoptionpage.ui" line="34"/>
|
||||||
<source>Optional GUI elements</source>
|
<source>Optional GUI elements</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/appearanceoptionpage.ui" line="37"/>
|
<location filename="../gui/appearanceoptionpage.ui" line="41"/>
|
||||||
<source>Traffic statistics</source>
|
<source>Traffic statistics</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/appearanceoptionpage.ui" line="56"/>
|
<location filename="../gui/appearanceoptionpage.ui" line="69"/>
|
||||||
<source>x</source>
|
<source> x </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/appearanceoptionpage.ui" line="76"/>
|
<location filename="../gui/appearanceoptionpage.ui" line="92"/>
|
||||||
<source>px</source>
|
<source> px</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/appearanceoptionpage.ui" line="104"/>
|
||||||
|
<source>Frame shape</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/appearanceoptionpage.ui" line="111"/>
|
||||||
|
<source>Frame shadow</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/appearanceoptionpage.ui" line="119"/>
|
||||||
|
<source>No frame</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/appearanceoptionpage.ui" line="124"/>
|
||||||
|
<source>Box</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/appearanceoptionpage.ui" line="129"/>
|
||||||
|
<source>Panel</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/appearanceoptionpage.ui" line="134"/>
|
||||||
|
<source>Styled panel</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/appearanceoptionpage.ui" line="143"/>
|
||||||
|
<source>Plain</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/appearanceoptionpage.ui" line="148"/>
|
||||||
|
<source>Raised</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/appearanceoptionpage.ui" line="153"/>
|
||||||
|
<source>Sunken</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
@ -389,8 +439,28 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/autostartoptionpage.ui" line="23"/>
|
<location filename="../gui/autostartoptionpage.ui" line="26"/>
|
||||||
<source><html><head/><body><p><span style=" font-weight:600;">Not implemented yet</span></p><p>This will allow launching the tray when the desktop environment starts and to launch Syncthing when the tray is started.</p></body></html></source>
|
<source>Start the tray icon when the desktop environment launches</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/settingsdialog.cpp" line="238"/>
|
||||||
|
<source>This is achieved by adding a *.desktop file under <i>~/.config/autostart</i> so the setting only affects the current user.</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/settingsdialog.cpp" line="240"/>
|
||||||
|
<source>This is achieved by adding a registry key under <i>HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run</i> so the setting only affects the current user. Note that the startup entry is invalidated when moving <i>syncthingtray.exe</i>.</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/settingsdialog.cpp" line="242"/>
|
||||||
|
<source>This feature has not been implemented for your platform (yet).</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/settingsdialog.cpp" line="329"/>
|
||||||
|
<source>unable to modify startup entry</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
@ -402,57 +472,57 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/connectionoptionpage.ui" line="15"/>
|
<location filename="../gui/connectionoptionpage.ui" line="19"/>
|
||||||
<source>Syncthing URL</source>
|
<source>Syncthing URL</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/connectionoptionpage.ui" line="25"/>
|
<location filename="../gui/connectionoptionpage.ui" line="29"/>
|
||||||
<source>Authentication</source>
|
<source>Authentication</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/connectionoptionpage.ui" line="38"/>
|
<location filename="../gui/connectionoptionpage.ui" line="42"/>
|
||||||
<source>User</source>
|
<source>User</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/connectionoptionpage.ui" line="72"/>
|
<location filename="../gui/connectionoptionpage.ui" line="76"/>
|
||||||
<source>disconnected</source>
|
<source>disconnected</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/connectionoptionpage.ui" line="79"/>
|
<location filename="../gui/connectionoptionpage.ui" line="83"/>
|
||||||
<source>Status</source>
|
<source>Status</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/connectionoptionpage.ui" line="86"/>
|
<location filename="../gui/connectionoptionpage.ui" line="90"/>
|
||||||
<source>Apply connection settings and try to reconnect</source>
|
<source>Apply connection settings and try to reconnect</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/connectionoptionpage.ui" line="100"/>
|
<location filename="../gui/connectionoptionpage.ui" line="104"/>
|
||||||
<source>API key</source>
|
<source>API key</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/connectionoptionpage.ui" line="110"/>
|
<location filename="../gui/connectionoptionpage.ui" line="114"/>
|
||||||
<source>Insert values from local Syncthing configuration</source>
|
<source>Insert values from local Syncthing configuration</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/connectionoptionpage.ui" line="48"/>
|
<location filename="../gui/connectionoptionpage.ui" line="52"/>
|
||||||
<source>Password</source>
|
<source>Password</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/settingsdialog.cpp" line="60"/>
|
<location filename="../gui/settingsdialog.cpp" line="70"/>
|
||||||
<source>Select Syncthing config file</source>
|
<source>Select Syncthing config file</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/settingsdialog.cpp" line="67"/>
|
<location filename="../gui/settingsdialog.cpp" line="77"/>
|
||||||
<source>Unable to parse the Syncthing config file.</source>
|
<source>Unable to parse the Syncthing config file.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -493,6 +563,66 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>QtGui::LauncherOptionPage</name>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/launcheroptionpage.ui" line="14"/>
|
||||||
|
<source>Syncthing launcher</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/launcheroptionpage.ui" line="26"/>
|
||||||
|
<source>Launch Syncthing when starting the tray icon</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/launcheroptionpage.ui" line="42"/>
|
||||||
|
<source>Syncthing executable</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/launcheroptionpage.ui" line="52"/>
|
||||||
|
<source>Arguments</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/launcheroptionpage.ui" line="86"/>
|
||||||
|
<source>Syncthing log (stdout/stderr)</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/launcheroptionpage.ui" line="102"/>
|
||||||
|
<source>Apply and launch now</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/launcheroptionpage.ui" line="119"/>
|
||||||
|
<source>Stop launched instance</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/launcheroptionpage.ui" line="138"/>
|
||||||
|
<source>No log messages available yet</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/launcheroptionpage.ui" line="145"/>
|
||||||
|
<source>Ensure latest log is visible</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/settingsdialog.cpp" line="409"/>
|
||||||
|
<source>Syncthing existed with exit code %1
|
||||||
|
</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/settingsdialog.cpp" line="412"/>
|
||||||
|
<source>Syncthing crashed with exit code %1
|
||||||
|
</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>QtGui::NotificationsOptionPage</name>
|
<name>QtGui::NotificationsOptionPage</name>
|
||||||
<message>
|
<message>
|
||||||
|
@ -501,27 +631,27 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/notificationsoptionpage.ui" line="23"/>
|
<location filename="../gui/notificationsoptionpage.ui" line="30"/>
|
||||||
<source>Notify on</source>
|
<source>Notify on</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/notificationsoptionpage.ui" line="30"/>
|
<location filename="../gui/notificationsoptionpage.ui" line="37"/>
|
||||||
<source>disconnect</source>
|
<source>disconnect</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/notificationsoptionpage.ui" line="37"/>
|
<location filename="../gui/notificationsoptionpage.ui" line="44"/>
|
||||||
<source>internal errors</source>
|
<source>internal errors</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/notificationsoptionpage.ui" line="44"/>
|
<location filename="../gui/notificationsoptionpage.ui" line="51"/>
|
||||||
<source>Syncthing errors</source>
|
<source>errors/notifications from Syncthing</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/notificationsoptionpage.ui" line="51"/>
|
<location filename="../gui/notificationsoptionpage.ui" line="58"/>
|
||||||
<source>sync complete</source>
|
<source>sync complete</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -529,12 +659,17 @@
|
||||||
<context>
|
<context>
|
||||||
<name>QtGui::SettingsDialog</name>
|
<name>QtGui::SettingsDialog</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/settingsdialog.cpp" line="259"/>
|
<location filename="../gui/settingsdialog.cpp" line="497"/>
|
||||||
<source>Tray</source>
|
<source>Tray</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/settingsdialog.cpp" line="267"/>
|
<location filename="../gui/settingsdialog.cpp" line="509"/>
|
||||||
|
<source>Startup</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/settingsdialog.cpp" line="503"/>
|
||||||
<source>Web view</source>
|
<source>Web view</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -542,67 +677,72 @@
|
||||||
<context>
|
<context>
|
||||||
<name>QtGui::TrayIcon</name>
|
<name>QtGui::TrayIcon</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/trayicon.cpp" line="33"/>
|
<location filename="../gui/trayicon.cpp" line="34"/>
|
||||||
<source>Web UI</source>
|
<source>Web UI</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/trayicon.cpp" line="34"/>
|
<location filename="../gui/trayicon.cpp" line="35"/>
|
||||||
<source>Settings</source>
|
<source>Settings</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/trayicon.cpp" line="35"/>
|
<location filename="../gui/trayicon.cpp" line="36"/>
|
||||||
<source>About</source>
|
<source>About</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/trayicon.cpp" line="37"/>
|
<location filename="../gui/trayicon.cpp" line="38"/>
|
||||||
<source>Close</source>
|
<source>Close</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/trayicon.cpp" line="78"/>
|
<location filename="../gui/trayicon.cpp" line="77"/>
|
||||||
<source>Syncthing error</source>
|
<source>Error</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/trayicon.cpp" line="85"/>
|
<location filename="../gui/trayicon.cpp" line="84"/>
|
||||||
<source>Syncthing notification</source>
|
<source>Syncthing notification</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/trayicon.cpp" line="94"/>
|
<location filename="../gui/trayicon.cpp" line="93"/>
|
||||||
<source>Not connected to Syncthing</source>
|
<source>Not connected to Syncthing</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/trayicon.cpp" line="96"/>
|
<location filename="../gui/trayicon.cpp" line="95"/>
|
||||||
<source>Disconnected from Syncthing</source>
|
<source>Disconnected from Syncthing</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/trayicon.cpp" line="101"/>
|
<location filename="../gui/trayicon.cpp" line="100"/>
|
||||||
<source>Syncthing is running</source>
|
<source>Syncthing is idling</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/trayicon.cpp" line="105"/>
|
<location filename="../gui/trayicon.cpp" line="104"/>
|
||||||
|
<source>Syncthing is scanning</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/trayicon.cpp" line="108"/>
|
||||||
<source>Notifications available</source>
|
<source>Notifications available</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/trayicon.cpp" line="109"/>
|
<location filename="../gui/trayicon.cpp" line="112"/>
|
||||||
<source>At least one device is paused</source>
|
<source>At least one device is paused</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/trayicon.cpp" line="113"/>
|
<location filename="../gui/trayicon.cpp" line="116"/>
|
||||||
<source>Synchronization is ongoing</source>
|
<source>Synchronization is ongoing</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/trayicon.cpp" line="122"/>
|
<location filename="../gui/trayicon.cpp" line="125"/>
|
||||||
<source>Synchronization complete</source>
|
<source>Synchronization complete</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -616,7 +756,7 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.ui" line="107"/>
|
<location filename="../gui/traywidget.ui" line="107"/>
|
||||||
<location filename="../gui/traywidget.cpp" line="230"/>
|
<location filename="../gui/traywidget.cpp" line="244"/>
|
||||||
<source>Connect</source>
|
<source>Connect</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -643,8 +783,8 @@
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.ui" line="230"/>
|
<location filename="../gui/traywidget.ui" line="230"/>
|
||||||
<location filename="../gui/traywidget.ui" line="250"/>
|
<location filename="../gui/traywidget.ui" line="250"/>
|
||||||
<location filename="../gui/traywidget.cpp" line="322"/>
|
<location filename="../gui/traywidget.cpp" line="345"/>
|
||||||
<location filename="../gui/traywidget.cpp" line="329"/>
|
<location filename="../gui/traywidget.cpp" line="352"/>
|
||||||
<source>unknown</source>
|
<source>unknown</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -670,13 +810,13 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.ui" line="80"/>
|
<location filename="../gui/traywidget.ui" line="80"/>
|
||||||
<location filename="../gui/traywidget.cpp" line="132"/>
|
<location filename="../gui/traywidget.cpp" line="138"/>
|
||||||
<source>About</source>
|
<source>About</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.ui" line="134"/>
|
<location filename="../gui/traywidget.ui" line="134"/>
|
||||||
<location filename="../gui/traywidget.cpp" line="112"/>
|
<location filename="../gui/traywidget.cpp" line="118"/>
|
||||||
<source>Settings</source>
|
<source>Settings</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -686,70 +826,75 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.cpp" line="70"/>
|
<location filename="../gui/traywidget.cpp" line="67"/>
|
||||||
<source>View own device ID</source>
|
<source>View own device ID</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.cpp" line="81"/>
|
<location filename="../gui/traywidget.cpp" line="84"/>
|
||||||
<source>Rescan all directories</source>
|
<source>Rescan all directories</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.cpp" line="75"/>
|
<location filename="../gui/traywidget.cpp" line="78"/>
|
||||||
<source>Show Syncthing log</source>
|
<source>Show Syncthing log</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.cpp" line="180"/>
|
<location filename="../gui/traywidget.cpp" line="72"/>
|
||||||
|
<source>Restart Syncthing</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/traywidget.cpp" line="186"/>
|
||||||
<source>device ID is unknown</source>
|
<source>device ID is unknown</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.cpp" line="188"/>
|
<location filename="../gui/traywidget.cpp" line="194"/>
|
||||||
<source>Copy to clipboard</source>
|
<source>Copy to clipboard</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.cpp" line="231"/>
|
<location filename="../gui/traywidget.cpp" line="245"/>
|
||||||
<source>Not connected to Syncthing, click to connect</source>
|
<source>Not connected to Syncthing, click to connect</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.cpp" line="237"/>
|
<location filename="../gui/traywidget.cpp" line="252"/>
|
||||||
<source>Pause</source>
|
<source>Pause</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.cpp" line="238"/>
|
<location filename="../gui/traywidget.cpp" line="253"/>
|
||||||
<source>Syncthing is running, click to pause all devices</source>
|
<source>Syncthing is running, click to pause all devices</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.cpp" line="243"/>
|
<location filename="../gui/traywidget.cpp" line="258"/>
|
||||||
<source>At least one device is paused, click to resume</source>
|
<source>At least one device is paused, click to resume</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.cpp" line="242"/>
|
<location filename="../gui/traywidget.cpp" line="294"/>
|
||||||
|
<source>The directory <i>%1</i> does not exist on the local machine.</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui/traywidget.cpp" line="257"/>
|
||||||
<source>Continue</source>
|
<source>Continue</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.cpp" line="170"/>
|
<location filename="../gui/traywidget.cpp" line="176"/>
|
||||||
<source>Own device ID</source>
|
<source>Own device ID</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/traywidget.cpp" line="204"/>
|
<location filename="../gui/traywidget.cpp" line="213"/>
|
||||||
<source>Log</source>
|
<source>Log</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../gui/traywidget.cpp" line="272"/>
|
|
||||||
<source>The directly <i>%1</i> does not exist on the local machine.</source>
|
|
||||||
<translation type="unfinished"></translation>
|
|
||||||
</message>
|
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>QtGui::WebViewDialog</name>
|
<name>QtGui::WebViewDialog</name>
|
||||||
|
@ -763,7 +908,7 @@
|
||||||
<name>QtGui::WebViewOptionPage</name>
|
<name>QtGui::WebViewOptionPage</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/webviewoptionpage.ui" line="14"/>
|
<location filename="../gui/webviewoptionpage.ui" line="14"/>
|
||||||
<location filename="../gui/settingsdialog.cpp" line="221"/>
|
<location filename="../gui/settingsdialog.cpp" line="459"/>
|
||||||
<source>General</source>
|
<source>General</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
@ -793,7 +938,7 @@
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui/settingsdialog.cpp" line="223"/>
|
<location filename="../gui/settingsdialog.cpp" line="461"/>
|
||||||
<source>Syncthing Tray has not been built with vieb view support utilizing either Qt WebKit or Qt WebEngine.
|
<source>Syncthing Tray has not been built with vieb view support utilizing either Qt WebKit or Qt WebEngine.
|
||||||
The Web UI will be opened in the default web browser instead.</source>
|
The Web UI will be opened in the default web browser instead.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
|
@ -802,22 +947,22 @@ The Web UI will be opened in the default web browser instead.</source>
|
||||||
<context>
|
<context>
|
||||||
<name>main</name>
|
<name>main</name>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../application/main.cpp" line="62"/>
|
<location filename="../application/main.cpp" line="70"/>
|
||||||
<source>You must configure how to connect to Syncthing when using Syncthing Tray the first time.</source>
|
<source>You must configure how to connect to Syncthing when using Syncthing Tray the first time.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../application/main.cpp" line="63"/>
|
<location filename="../application/main.cpp" line="71"/>
|
||||||
<source>Note that the settings dialog allows importing URL, credentials and API-key from the local Syncthing configuration.</source>
|
<source>Note that the settings dialog allows importing URL, credentials and API-key from the local Syncthing configuration.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../application/main.cpp" line="68"/>
|
<location filename="../application/main.cpp" line="76"/>
|
||||||
<source>The system tray is (currently) not available. You could open the tray menu as a regular window using the -w flag, though.</source>
|
<source>The system tray is (currently) not available. You could open the tray menu as a regular window using the -w flag, though.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../application/main.cpp" line="72"/>
|
<location filename="../application/main.cpp" line="80"/>
|
||||||
<source>The Qt libraries have not been built with tray icon support. You could open the tray menu as a regular window using the -w flag, though.</source>
|
<source>The Qt libraries have not been built with tray icon support. You could open the tray menu as a regular window using the -w flag, though.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
|
Loading…
Reference in New Issue