Refactor to allow sharing backend with other apps

Intended for creating command line tool and plasmoid
This commit is contained in:
Martchus 2016-09-30 23:55:25 +02:00
parent 3335350a81
commit 6470038fc7
97 changed files with 413 additions and 1033 deletions

View File

@ -8,158 +8,23 @@ set(META_APP_AUTHOR "Martchus")
set(META_APP_URL "https://github.com/${META_APP_AUTHOR}/${META_PROJECT_NAME}")
set(META_APP_DESCRIPTION "Tray application for Syncthing")
set(META_APP_CATEGORIES "Utility;Network;")
set(META_GUI_OPTIONAL false)
set(META_VERSION_MAJOR 0)
set(META_VERSION_MINOR 0)
set(META_VERSION_PATCH 2)
set(META_APP_VERSION ${META_VERSION_MAJOR}.${META_VERSION_MINOR}.${META_VERSION_PATCH})
# add project files
set(HEADER_FILES
data/syncthingconnection.h
data/syncthingconnectionsettings.h
data/syncthingdirectorymodel.h
data/syncthingdevicemodel.h
data/syncthingdownloadmodel.h
data/syncthingconfig.h
data/syncthingprocess.h
data/utils.h
)
set(SRC_FILES
data/syncthingconnection.cpp
data/syncthingconnectionsettings.cpp
data/syncthingdirectorymodel.cpp
data/syncthingdevicemodel.cpp
data/syncthingdownloadmodel.cpp
data/syncthingconfig.cpp
data/syncthingprocess.cpp
data/utils.cpp
)
project(${META_PROJECT_NAME})
set(WIDGETS_HEADER_FILES
application/settings.h
application/singleinstance.h
gui/trayicon.h
gui/traywidget.h
gui/traymenu.h
gui/settingsdialog.h
gui/webpage.h
gui/webviewdialog.h
gui/webviewprovider.h
gui/dirbuttonsitemdelegate.h
gui/devbuttonsitemdelegate.h
gui/downloaditemdelegate.h
gui/dirview.h
gui/devview.h
gui/downloadview.h
gui/textviewdialog.h
)
set(WIDGETS_SRC_FILES
application/main.cpp
application/settings.cpp
application/singleinstance.cpp
gui/trayicon.cpp
gui/traywidget.cpp
gui/traymenu.cpp
gui/settingsdialog.cpp
gui/webpage.cpp
gui/webviewdialog.cpp
gui/dirbuttonsitemdelegate.cpp
gui/devbuttonsitemdelegate.cpp
gui/downloaditemdelegate.cpp
gui/dirview.cpp
gui/devview.cpp
gui/downloadview.cpp
gui/textviewdialog.cpp
resources/icons.qrc
)
set(WIDGETS_UI_FILES
gui/traywidget.ui
gui/connectionoptionpage.ui
gui/notificationsoptionpage.ui
gui/appearanceoptionpage.ui
gui/autostartoptionpage.ui
gui/launcheroptionpage.ui
gui/webviewoptionpage.ui
)
# options for partial build
option(NO_TRAY "specifies whether building the tray should be skipped" OFF)
option(NO_MODEL "specifies whether building models should be skipped, implies NO_TRAY" OFF)
#set(QUICK_HEADER_FILES
#)
#set(QUICK_SRC_FILES
#)
set(TS_FILES
translations/${META_PROJECT_NAME}_de_DE.ts
translations/${META_PROJECT_NAME}_en_US.ts
)
set(ICON_FILES
resources/icons/hicolor/scalable/app/${META_PROJECT_NAME}.svg
)
set(PNG_ICON_PATH "${CMAKE_CURRENT_SOURCE_DIR}/resources/icons/hicolor/scalable/app/${META_PROJECT_NAME}.png")
set(PNG_ICON_NO_CROP ON)
set(DOC_FILES
README.md
)
set(REQUIRED_ICONS
dialog-cancel
dialog-ok
dialog-ok-apply
edit-copy
edit-paste
folder
folder-download
folder-open
folder-sync
help-about
internet-web-browser
list-add
list-remove
media-playback-pause
media-playback-start
network-card
network-connect
network-server
preferences-desktop
preferences-desktop-icons
preferences-desktop-locale
preferences-desktop-notification
preferences-other
qtcreator
system-run
system-search
system-file-manager
text-plain
view-barcode
view-refresh
window-close
)
# find c++utilities
find_package(c++utilities 4.0.0 REQUIRED)
use_cpp_utilities()
include(BasicConfig)
# find qtutilities
if(WIDGETS_GUI OR QUICK_GUI)
find_package(qtutilities 5.0.0 REQUIRED)
use_qt_utilities()
# add subdirectories
add_subdirectory(connector)
link_directories(${LIB_SYNCTHING_CONNECTOR_BINARY_DIR})
if(NOT NO_MODEL)
add_subdirectory(model)
link_directories(${LIB_SYNCTHING_MODEL_BINARY_DIR})
if(NOT NO_TRAY)
add_subdirectory(tray)
endif()
endif()
list(APPEND ADDITIONAL_QT_MODULES Network Svg)
# include modules to apply configuration
include(BasicConfig)
include(QtGuiConfig)
include(QtConfig)
include(WindowsResources)
include(WebViewProviderConfig)
include(AppTarget)
include(ShellCompletion)
include(Doxygen)
include(ConfigHeader)
# create desktop file using previously defined meta data
add_desktop_file()

View File

@ -36,23 +36,22 @@ support
The tray is still under development; the following features are planned:
* Show recently processed items
* Improve notification handling
* Create simple command line application
* Create Plasmoid for Plasma 5 desktop
* Outsource backend to extra library so it can be shared by regular tray menu
and Plasmoid
## Screenshots
### Under Openbox/Tint2
![Openbox/Tint2](/resources/screenshots/tint2.png?raw=true)
![Openbox/Tint2](/tray/resources/screenshots/tint2.png?raw=true)
### Under Plasma 5 (dark color theme)
![Plasma 5](/resources/screenshots/plasma.png?raw=true)
![Plasma 5](/tray/resources/screenshots/plasma.png?raw=true)
### Settings dialog (dark color theme)
![Settings dialog](/resources/screenshots/settings.png?raw=true)
![Settings dialog](/tray/resources/screenshots/settings.png?raw=true)
### Web view (dark color theme)
![Web view](/resources/screenshots/webview.png?raw=true)
![Web view](/tray/resources/screenshots/webview.png?raw=true)
## Hotkey for Web UI
To create a hotkey for the web UI, you can use the same approach as for any other
@ -66,10 +65,30 @@ separate [repository](https://github.com/Martchus/PKGBUILDs). For binaries check
[website](http://martchus.no-ip.biz/website/page.php?name=programming).
## Build instructions
The application depends on [c++utilities](https://github.com/Martchus/cpp-utilities) and [qtutilities](https://github.com/Martchus/qtutilities) and is built the same way as these libaries. For basic instructions checkout the README file of [c++utilities](https://github.com/Martchus/cpp-utilities).
The application depends on [c++utilities](https://github.com/Martchus/cpp-utilities) and [qtutilities](https://github.com/Martchus/qtutilities) and is built the same way as these libaries. For basic instructions checkout the README file of [c++utilities](https://github.com/Martchus/cpp-utilities). For building this straight, see the next section.
The following Qt 5 modules are requried: core network gui widgets svg webenginewidgets/webkitwidgets
#### Building this straight
0. Install (preferably the latest version of) g++ or clang, the required Qt 5 modules and CMake.
1. Get the sources. For the lastest version from Git clone the following repositories:
```
cd $SOURCES
git clone https://github.com/Martchus/cpp-utilities.git
git clone https://github.com/Martchus/qtutilities.git
git glone https://github.com/Martchus/syncthingtray.git
git clone https://github.com/Martchus/subdirs.git
```
2. Build and install everything in one step:
```
cd $BUILD_DIR
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="/install/prefix" \
$SOURCES/subdirs/syncthingtray
make install -j$(nproc)
```
#### Select Qt module for WebView
* If Qt WebKitWidgets is installed on the system, the tray will link against it. Otherwise it will link against Qt WebEngineWidgets.
* To force usage of Qt WebKit/Qt WebEngine or to disable both add `-DWEBVIEW_PROVIDER=webkit/webengine/none` to the CMake arguments.
@ -77,7 +96,9 @@ The following Qt 5 modules are requried: core network gui widgets svg webenginew
#### BTW: I still prefer the deprecated Qt WebKit because
* Currently there is no way to allow a particular self-signed certificate in Qt
WebEngine. Currently any self-signed certificate is accepted! See:
https://bugreports.qt.io/browse/QTBUG-51176)
https://bugreports.qt.io/browse/QTBUG-51176
* Qt WebEngine can not be built with mingw-w64.
* Qt WebEngine is more buggy in my experience.
* Security issues are not a concern because no other website than the Syncthing web UI is shown.
* Security issues are not a concern because no other website than the
Syncthing web UI is shown. Any external links will be opened in the
regular web browser anyways.

42
connector/CMakeLists.txt Normal file
View File

@ -0,0 +1,42 @@
cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
# metadata
set(META_PROJECT_NAME syncthingconnector)
set(META_PROJECT_TYPE library)
set(META_APP_DESCRIPTION "Connection backend of Syncthing Tray")
set(META_PROJECT_VARNAME_UPPER LIB_SYNCTHING_CONNECTOR)
# add project files
set(HEADER_FILES
syncthingconnection.h
syncthingconnectionsettings.h
syncthingconfig.h
syncthingprocess.h
utils.h
)
set(SRC_FILES
syncthingconnection.cpp
syncthingconnectionsettings.cpp
syncthingconfig.cpp
syncthingprocess.cpp
utils.cpp
)
# find c++utilities
find_package(c++utilities 4.0.0 REQUIRED)
use_cpp_utilities()
# find qtutilities (only header used)
find_package(qtutilities 5.0.0 REQUIRED)
include_directories(BEFORE SYSTEM ${QT_UTILITIES_INCLUDE_DIRS})
# link also explicitely against the following Qt 5 modules
list(APPEND ADDITIONAL_QT_MODULES Network)
# include modules to apply configuration
include(BasicConfig)
include(QtConfig)
include(WindowsResources)
include(LibraryTarget)
include(Doxygen)
include(ConfigHeader)

17
connector/global.h Normal file
View File

@ -0,0 +1,17 @@
// Created via CMake from template global.h.in
// WARNING! Any changes to this file will be overwritten by the next CMake run!
#ifndef LIB_SYNCTHING_CONNECTOR_GLOBAL
#define LIB_SYNCTHING_CONNECTOR_GLOBAL
#include <c++utilities/application/global.h>
#ifdef LIB_SYNCTHING_CONNECTOR_STATIC
# define LIB_SYNCTHING_CONNECTOR_EXPORT
# define LIB_SYNCTHING_CONNECTOR_IMPORT
#else
# define LIB_SYNCTHING_CONNECTOR_EXPORT LIB_EXPORT
# define LIB_SYNCTHING_CONNECTOR_IMPORT LIB_IMPORT
#endif
#endif // LIB_SYNCTHING_CONNECTOR_GLOBAL

View File

@ -1,11 +1,13 @@
#ifndef DATA_SYNCTHINGCONFIG_H
#define DATA_SYNCTHINGCONFIG_H
#include "./global.h"
#include <QString>
namespace Data {
struct SyncthingConfig
struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingConfig
{
QString version;
bool guiEnabled = false;

View File

@ -12,7 +12,6 @@
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonValue>
#include <QPixmap>
#include <QAuthenticator>
#include <QStringBuilder>
#include <QTimer>
@ -555,18 +554,16 @@ void SyncthingConnection::requestEvents()
*
* The specified \a callback is called on success; otherwise error() is emitted.
*/
QMetaObject::Connection SyncthingConnection::requestQrCode(const QString &text, std::function<void(const QPixmap &)> callback)
QMetaObject::Connection SyncthingConnection::requestQrCode(const QString &text, std::function<void(const QByteArray &)> callback)
{
QUrlQuery query;
query.addQueryItem(QStringLiteral("text"), text);
QNetworkReply *reply = requestData(QStringLiteral("/qr/"), query, false);
return QObject::connect(reply, &QNetworkReply::finished, [this, reply, callback] {
reply->deleteLater();
QPixmap pixmap;
switch(reply->error()) {
case QNetworkReply::NoError:
pixmap.loadFromData(reply->readAll());
callback(pixmap);
callback(reply->readAll());
break;
default:
emit error(tr("Unable to request QR-Code: ") + reply->errorString());

View File

@ -1,6 +1,8 @@
#ifndef SYNCTHINGCONNECTION_H
#define SYNCTHINGCONNECTION_H
#include "./global.h"
#include <c++utilities/chrono/datetime.h>
#include <QObject>
@ -45,7 +47,7 @@ enum class DirStatus
OutOfSync
};
struct DirErrors
struct LIB_SYNCTHING_CONNECTOR_EXPORT DirErrors
{
DirErrors(const QString &message, const QString &path) :
message(message),
@ -55,7 +57,7 @@ struct DirErrors
QString path;
};
struct SyncthingItemDownloadProgress
struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingItemDownloadProgress
{
SyncthingItemDownloadProgress(const QString &containingDirPath, const QString &relativeItemPath, const QJsonObject &values);
QString relativePath;
@ -74,7 +76,7 @@ struct SyncthingItemDownloadProgress
static constexpr unsigned int syncthingBlockSize = 128 * 1024;
};
struct SyncthingDir
struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingDir
{
QString id;
QString label;
@ -118,7 +120,7 @@ enum class DevStatus
Rejected
};
struct SyncthingDev
struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingDev
{
QString id;
QString name;
@ -138,7 +140,7 @@ struct SyncthingDev
ChronoUtilities::DateTime lastSeen;
};
struct SyncthingLogEntry
struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingLogEntry
{
SyncthingLogEntry(const QString &when, const QString &message) :
when(when),
@ -148,7 +150,7 @@ struct SyncthingLogEntry
QString message;
};
class SyncthingConnection : public QObject
class LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingConnection : public QObject
{
Q_OBJECT
Q_PROPERTY(QString syncthingUrl READ syncthingUrl WRITE setSyncthingUrl)
@ -189,7 +191,7 @@ public:
double totalOutgoingRate() const;
const std::vector<SyncthingDir> &dirInfo() const;
const std::vector<SyncthingDev> &devInfo() const;
QMetaObject::Connection requestQrCode(const QString &text, std::function<void (const QPixmap &)> callback);
QMetaObject::Connection requestQrCode(const QString &text, std::function<void (const QByteArray &)> callback);
QMetaObject::Connection requestLog(std::function<void (const std::vector<SyncthingLogEntry> &)> callback);
const QList<QSslError> &expectedSslErrors();

View File

@ -1,13 +1,15 @@
#ifndef SYNCTHINGCONNECTIONSETTINGS_H
#define SYNCTHINGCONNECTIONSETTINGS_H
#include "./global.h"
#include <QString>
#include <QByteArray>
#include <QSslError>
namespace Data {
struct SyncthingConnectionSettings {
struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingConnectionSettings {
QString label;
QString syncthingUrl;
bool authEnabled = false;

View File

@ -1,11 +1,13 @@
#ifndef DATA_SYNCTHINGPROCESS_H
#define DATA_SYNCTHINGPROCESS_H
#include "./global.h"
#include <QProcess>
namespace Data {
class SyncthingProcess : public QProcess
class LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingProcess : public QProcess
{
Q_OBJECT
public:

View File

@ -1,6 +1,8 @@
#ifndef DATA_UTILS_H
#define DATA_UTILS_H
#include "./global.h"
#include <QtGlobal>
QT_FORWARD_DECLARE_CLASS(QString)
@ -11,7 +13,7 @@ class DateTime;
namespace Data {
QString agoString(ChronoUtilities::DateTime dateTime);
QString LIB_SYNCTHING_CONNECTOR_EXPORT agoString(ChronoUtilities::DateTime dateTime);
}

38
model/CMakeLists.txt Normal file
View File

@ -0,0 +1,38 @@
cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
# metadata
set(META_PROJECT_NAME syncthingmodel)
set(META_PROJECT_TYPE library)
set(META_APP_DESCRIPTION "Data models of Syncthing Tray")
set(META_PROJECT_VARNAME_UPPER LIB_SYNCTHING_MODEL)
# add project files
set(HEADER_FILES
syncthingdirectorymodel.h
syncthingdevicemodel.h
syncthingdownloadmodel.h
)
set(SRC_FILES
syncthingdirectorymodel.cpp
syncthingdevicemodel.cpp
syncthingdownloadmodel.cpp
)
# find c++utilities
find_package(c++utilities 4.0.0 REQUIRED)
use_cpp_utilities()
# find backend libraries
find_package(syncthingconnector ${META_APP_VERSION} REQUIRED)
use_syncthingconnector()
# link also explicitely against the following Qt 5 modules
list(APPEND ADDITIONAL_QT_MODULES Network Gui Widgets)
# include modules to apply configuration
include(BasicConfig)
include(QtConfig)
include(WindowsResources)
include(LibraryTarget)
include(Doxygen)
include(ConfigHeader)

17
model/global.h Normal file
View File

@ -0,0 +1,17 @@
// Created via CMake from template global.h.in
// WARNING! Any changes to this file will be overwritten by the next CMake run!
#ifndef LIB_SYNCTHING_MODEL_GLOBAL
#define LIB_SYNCTHING_MODEL_GLOBAL
#include <c++utilities/application/global.h>
#ifdef LIB_SYNCTHING_MODEL_STATIC
# define LIB_SYNCTHING_MODEL_EXPORT
# define LIB_SYNCTHING_MODEL_IMPORT
#else
# define LIB_SYNCTHING_MODEL_EXPORT LIB_EXPORT
# define LIB_SYNCTHING_MODEL_IMPORT LIB_IMPORT
#endif
#endif // LIB_SYNCTHING_MODEL_GLOBAL

View File

@ -1,6 +1,7 @@
#include "./syncthingdevicemodel.h"
#include "./syncthingconnection.h"
#include "./utils.h"
#include "../connector/syncthingconnection.h"
#include "../connector/utils.h"
using namespace ChronoUtilities;

View File

@ -1,6 +1,8 @@
#ifndef DATA_SYNCTHINGDEVICEMODEL_H
#define DATA_SYNCTHINGDEVICEMODEL_H
#include "./global.h"
#include <QAbstractItemModel>
#include <QIcon>
@ -11,7 +13,7 @@ namespace Data {
class SyncthingConnection;
struct SyncthingDev;
class SyncthingDeviceModel : public QAbstractItemModel
class LIB_SYNCTHING_MODEL_EXPORT SyncthingDeviceModel : public QAbstractItemModel
{
Q_OBJECT
public:

View File

@ -1,6 +1,7 @@
#include "./syncthingdirectorymodel.h"
#include "./syncthingconnection.h"
#include "./utils.h"
#include "../connector/syncthingconnection.h"
#include "../connector/utils.h"
using namespace ChronoUtilities;

View File

@ -1,6 +1,8 @@
#ifndef DATA_SYNCTHINGDIRECTORYMODEL_H
#define DATA_SYNCTHINGDIRECTORYMODEL_H
#include "./global.h"
#include <QAbstractItemModel>
#include <QIcon>
@ -11,7 +13,7 @@ namespace Data {
class SyncthingConnection;
struct SyncthingDir;
class SyncthingDirectoryModel : public QAbstractItemModel
class LIB_SYNCTHING_MODEL_EXPORT SyncthingDirectoryModel : public QAbstractItemModel
{
Q_OBJECT
public:

View File

@ -1,6 +1,7 @@
#include "./syncthingdownloadmodel.h"
#include "./syncthingconnection.h"
#include "./utils.h"
#include "../connector/syncthingconnection.h"
#include "../connector/utils.h"
#include <QStringBuilder>

View File

@ -1,6 +1,8 @@
#ifndef DATA_SYNCTHINGDOWNLOADMODEL_H
#define DATA_SYNCTHINGDOWNLOADMODEL_H
#include "./global.h"
#include <QAbstractItemModel>
#include <QIcon>
#include <QFileIconProvider>
@ -13,7 +15,7 @@ class SyncthingConnection;
struct SyncthingDir;
struct SyncthingItemDownloadProgress;
class SyncthingDownloadModel : public QAbstractItemModel
class LIB_SYNCTHING_MODEL_EXPORT SyncthingDownloadModel : public QAbstractItemModel
{
Q_OBJECT
Q_PROPERTY(unsigned int pendingDownloads READ pendingDownloads NOTIFY pendingDownloadsChanged)

133
tray/CMakeLists.txt Normal file
View File

@ -0,0 +1,133 @@
cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
# metadata
set(META_PROJECT_TYPE application)
set(META_GUI_OPTIONAL false)
# add project files
set(WIDGETS_HEADER_FILES
application/settings.h
application/singleinstance.h
gui/trayicon.h
gui/traywidget.h
gui/traymenu.h
gui/settingsdialog.h
gui/webpage.h
gui/webviewdialog.h
gui/webviewprovider.h
gui/dirbuttonsitemdelegate.h
gui/devbuttonsitemdelegate.h
gui/downloaditemdelegate.h
gui/dirview.h
gui/devview.h
gui/downloadview.h
gui/textviewdialog.h
)
set(WIDGETS_SRC_FILES
application/main.cpp
application/settings.cpp
application/singleinstance.cpp
gui/trayicon.cpp
gui/traywidget.cpp
gui/traymenu.cpp
gui/settingsdialog.cpp
gui/webpage.cpp
gui/webviewdialog.cpp
gui/dirbuttonsitemdelegate.cpp
gui/devbuttonsitemdelegate.cpp
gui/downloaditemdelegate.cpp
gui/dirview.cpp
gui/devview.cpp
gui/downloadview.cpp
gui/textviewdialog.cpp
resources/icons.qrc
)
set(WIDGETS_UI_FILES
gui/traywidget.ui
gui/connectionoptionpage.ui
gui/notificationsoptionpage.ui
gui/appearanceoptionpage.ui
gui/autostartoptionpage.ui
gui/launcheroptionpage.ui
gui/webviewoptionpage.ui
)
set(TS_FILES
translations/${META_PROJECT_NAME}_de_DE.ts
translations/${META_PROJECT_NAME}_en_US.ts
)
set(ICON_FILES
resources/icons/hicolor/scalable/app/${META_PROJECT_NAME}.svg
)
set(PNG_ICON_PATH "${CMAKE_CURRENT_SOURCE_DIR}/resources/icons/hicolor/scalable/app/${META_PROJECT_NAME}.png")
set(PNG_ICON_NO_CROP ON)
set(DOC_FILES
README.md
)
set(REQUIRED_ICONS
dialog-cancel
dialog-ok
dialog-ok-apply
edit-copy
edit-paste
folder
folder-download
folder-open
folder-sync
help-about
internet-web-browser
list-add
list-remove
media-playback-pause
media-playback-start
network-card
network-connect
network-server
preferences-desktop
preferences-desktop-icons
preferences-desktop-locale
preferences-desktop-notification
preferences-other
qtcreator
system-run
system-search
system-file-manager
text-plain
view-barcode
view-refresh
window-close
)
# find c++utilities
find_package(c++utilities 4.0.0 REQUIRED)
use_cpp_utilities()
# find qtutilities
find_package(qtutilities 5.0.0 REQUIRED)
use_qt_utilities()
# find backend libraries
find_package(syncthingconnector ${META_APP_VERSION} REQUIRED)
use_syncthingconnector()
find_package(syncthingmodel ${META_APP_VERSION} REQUIRED)
use_syncthingmodel()
# link also explicitely against the following Qt 5 modules
list(APPEND ADDITIONAL_QT_MODULES Network Svg)
# include modules to apply configuration
include(BasicConfig)
include(QtGuiConfig)
include(QtConfig)
include(WindowsResources)
include(WebViewProviderConfig)
include(AppTarget)
include(ShellCompletion)
include(Doxygen)
include(ConfigHeader)
# create desktop file using previously defined meta data
add_desktop_file()

View File

@ -4,7 +4,7 @@
#include "../gui/trayicon.h"
#include "../gui/traywidget.h"
#include "../data/syncthingprocess.h"
#include "../../connector/syncthingprocess.h"
#include "resources/config.h"

View File

@ -1,7 +1,7 @@
#ifndef SETTINGS_H
#define SETTINGS_H
#include "../data/syncthingconnectionsettings.h"
#include "../../connector/syncthingconnectionsettings.h"
#include <c++utilities/conversion/types.h>

View File

@ -1,7 +1,7 @@
#include "./devbuttonsitemdelegate.h"
#include "../data/syncthingdevicemodel.h"
#include "../data/syncthingconnection.h"
#include "../../connector/syncthingconnection.h"
#include "../../model/syncthingdevicemodel.h"
#include <QPixmap>
#include <QPainter>

View File

@ -1,7 +1,7 @@
#include "./devview.h"
#include "./devbuttonsitemdelegate.h"
#include "../data/syncthingdevicemodel.h"
#include "../../model/syncthingdevicemodel.h"
#include <QHeaderView>
#include <QMouseEvent>

View File

@ -1,7 +1,7 @@
#include "./dirview.h"
#include "./dirbuttonsitemdelegate.h"
#include "../data/syncthingdirectorymodel.h"
#include "../../model/syncthingdirectorymodel.h"
#include <QHeaderView>
#include <QMouseEvent>

View File

@ -1,6 +1,6 @@
#include "./downloaditemdelegate.h"
#include "../data/syncthingdownloadmodel.h"
#include "../../model/syncthingdownloadmodel.h"
#include <QPixmap>
#include <QPainter>

View File

@ -1,7 +1,7 @@
#include "./downloadview.h"
#include "./downloaditemdelegate.h"
#include "../data/syncthingdownloadmodel.h"
#include "../../model/syncthingdownloadmodel.h"
#include <QHeaderView>
#include <QMouseEvent>

View File

@ -1,8 +1,8 @@
#include "./settingsdialog.h"
#include "../data/syncthingconnection.h"
#include "../data/syncthingconfig.h"
#include "../data/syncthingprocess.h"
#include "../../connector/syncthingconnection.h"
#include "../../connector/syncthingconfig.h"
#include "../../connector/syncthingprocess.h"
#include "ui_connectionoptionpage.h"
#include "ui_notificationsoptionpage.h"

View File

@ -2,7 +2,8 @@
#include "./traywidget.h"
#include "../application/settings.h"
#include "../data/syncthingconnection.h"
#include "../../connector/syncthingconnection.h"
#include <qtutilities/misc/dialogutils.h>

View File

@ -3,17 +3,13 @@
#include "./traymenu.h"
#include <c++utilities/application/global.h>
#include <c++utilities/chrono/datetime.h>
#include <QSystemTrayIcon>
#include <QIcon>
QT_FORWARD_DECLARE_CLASS(QPixmap)
namespace ChronoUtilities {
class DateTime;
}
namespace Data {
enum class SyncthingStatus;
}

View File

@ -209,8 +209,11 @@ void TrayWidget::showOwnDeviceId()
layout->addWidget(copyPushButton);
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))
));
m_connection.requestQrCode(m_connection.myId(), [pixmapLabel](const QByteArray &data) {
QPixmap pixmap;
pixmap.loadFromData(data);
pixmapLabel->setPixmap(pixmap);
})));
dlg->setLayout(layout);
centerWidget(dlg);
showDialog(dlg);

View File

@ -3,13 +3,15 @@
#include "./webviewprovider.h"
#include "../data/syncthingconnection.h"
#include "../data/syncthingdirectorymodel.h"
#include "../data/syncthingdevicemodel.h"
#include "../data/syncthingdownloadmodel.h"
#include "../data/syncthingprocess.h"
#include "../application/settings.h"
#include "../../connector/syncthingconnection.h"
#include "../../connector/syncthingprocess.h"
#include "../../model/syncthingdirectorymodel.h"
#include "../../model/syncthingdevicemodel.h"
#include "../../model/syncthingdownloadmodel.h"
#include <QWidget>
#include <memory>

View File

@ -3,7 +3,8 @@
#include "./webviewdialog.h"
#include "../application/settings.h"
#include "../data/syncthingconnection.h"
#include "../../connector/syncthingconnection.h"
#include "resources/config.h"

View File

Before

Width:  |  Height:  |  Size: 443 B

After

Width:  |  Height:  |  Size: 443 B

View File

Before

Width:  |  Height:  |  Size: 522 B

After

Width:  |  Height:  |  Size: 522 B

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 577 B

After

Width:  |  Height:  |  Size: 577 B

View File

Before

Width:  |  Height:  |  Size: 586 B

After

Width:  |  Height:  |  Size: 586 B

View File

Before

Width:  |  Height:  |  Size: 546 B

After

Width:  |  Height:  |  Size: 546 B

View File

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

Before

Width:  |  Height:  |  Size: 626 B

After

Width:  |  Height:  |  Size: 626 B

View File

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

View File

Before

Width:  |  Height:  |  Size: 635 B

After

Width:  |  Height:  |  Size: 635 B

View File

Before

Width:  |  Height:  |  Size: 585 B

After

Width:  |  Height:  |  Size: 585 B

View File

Before

Width:  |  Height:  |  Size: 654 B

After

Width:  |  Height:  |  Size: 654 B

View File

Before

Width:  |  Height:  |  Size: 574 B

After

Width:  |  Height:  |  Size: 574 B

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 112 KiB

View File

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

View File

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 116 KiB

View File

Before

Width:  |  Height:  |  Size: 99 KiB

After

Width:  |  Height:  |  Size: 99 KiB

View File

@ -1,392 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="de_DE">
<context>
<name>Data::SyncthingConnection</name>
<message>
<location filename="../data/syncthingconnection.cpp" line="172"/>
<source>disconnected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="174"/>
<source>reconnecting</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="176"/>
<source>connected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="178"/>
<source>connected, notifications available</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="180"/>
<source>connected, paused</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="182"/>
<source>connected, synchronizing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="184"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="196"/>
<location filename="../data/syncthingconnection.cpp" line="278"/>
<source>Connection configuration is insufficient.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="601"/>
<source>Unable to parse Syncthing log: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="605"/>
<source>Unable to request system log: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="627"/>
<source>Unable to locate certificate used by Syncthing GUI.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="633"/>
<source>Unable to load certificate used by Syncthing GUI.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="666"/>
<location filename="../data/syncthingconnection.cpp" line="768"/>
<source>Unable to parse Syncthing config: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="672"/>
<location filename="../data/syncthingconnection.cpp" line="774"/>
<source>Unable to request Syncthing config: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="849"/>
<source>Unable to parse connections: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="855"/>
<source>Unable to request connections: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="910"/>
<source>Unable to parse directory statistics: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="916"/>
<source>Unable to request directory statistics: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="953"/>
<source>Unable to parse device statistics: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="959"/>
<source>Unable to request device statistics: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="994"/>
<source>Unable to parse errors: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="1005"/>
<source>Unable to request errors: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="1056"/>
<source>Unable to parse Syncthing events: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="1075"/>
<source>Unable to request Syncthing events: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="1313"/>
<source>Unable to request rescan: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="1328"/>
<source>Unable to request pause/resume: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="1343"/>
<source>Unable to request restart: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="572"/>
<source>Unable to request QR-Code: </source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Data::SyncthingDeviceModel</name>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="61"/>
<location filename="../data/syncthingdevicemodel.cpp" line="87"/>
<source>ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="62"/>
<source>Status</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="88"/>
<source>Addresses</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="89"/>
<source>Last seen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="90"/>
<source>Compression</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="91"/>
<source>Certificate</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="92"/>
<source>Introducer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="102"/>
<source>none</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="103"/>
<source>yes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="103"/>
<source>no</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="155"/>
<source>Unknown status</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="157"/>
<source>Idle</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="158"/>
<source>Disconnected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="159"/>
<source>Synchronizing (%1 %)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="159"/>
<source>Synchronizing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="156"/>
<source>Own device</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="100"/>
<source>unknown or own device</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="152"/>
<source>Paused</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="160"/>
<source>Out of sync</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="161"/>
<source>Rejected</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Data::SyncthingDirectoryModel</name>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="61"/>
<location filename="../data/syncthingdirectorymodel.cpp" line="87"/>
<source>ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="62"/>
<source>Status</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="88"/>
<source>Path</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="89"/>
<source>Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="91"/>
<source>Rescan interval</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="92"/>
<source>Last scan</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="93"/>
<source>Last file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="102"/>
<source>yes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="102"/>
<source>no</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="104"/>
<location filename="../data/syncthingdirectorymodel.cpp" line="105"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="143"/>
<source>Deleted at %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="145"/>
<source>Updated at %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="166"/>
<source>Idle</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="167"/>
<source>Scanning (%1 %)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="168"/>
<source>Synchronizing (%1 %)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="170"/>
<source>Out of sync</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="167"/>
<source>Scanning</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="90"/>
<source>Read-only</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="165"/>
<source>Unknown status</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="168"/>
<source>Synchronizing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="169"/>
<source>Paused</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Data::SyncthingDownloadModel</name>
<message>
<location filename="../data/syncthingdownloadmodel.cpp" line="71"/>
<source>Dir/item</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdownloadmodel.cpp" line="72"/>
<source>Progress</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Data::Utils</name>
<message>
<location filename="../data/utils.cpp" line="16"/>
<source>%1 ago</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/utils.cpp" line="18"/>
<source>right now</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QtGui::AppearanceOptionPage</name>
<message>
@ -790,82 +404,82 @@
<context>
<name>QtGui::TrayIcon</name>
<message>
<location filename="../gui/trayicon.cpp" line="35"/>
<location filename="../gui/trayicon.cpp" line="36"/>
<source>Web UI</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="36"/>
<location filename="../gui/trayicon.cpp" line="37"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="37"/>
<location filename="../gui/trayicon.cpp" line="38"/>
<source>Rescan all</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="39"/>
<location filename="../gui/trayicon.cpp" line="40"/>
<source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="41"/>
<location filename="../gui/trayicon.cpp" line="42"/>
<source>Close</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="86"/>
<location filename="../gui/trayicon.cpp" line="87"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="93"/>
<location filename="../gui/trayicon.cpp" line="94"/>
<source>Syncthing notification - click to dismiss</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="102"/>
<location filename="../gui/trayicon.cpp" line="103"/>
<source>Not connected to Syncthing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="104"/>
<location filename="../gui/trayicon.cpp" line="105"/>
<source>Disconnected from Syncthing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="109"/>
<location filename="../gui/trayicon.cpp" line="110"/>
<source>Reconnecting ...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="113"/>
<location filename="../gui/trayicon.cpp" line="114"/>
<source>Syncthing is idling</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="117"/>
<location filename="../gui/trayicon.cpp" line="118"/>
<source>Syncthing is scanning</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="121"/>
<location filename="../gui/trayicon.cpp" line="122"/>
<source>Notifications available</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="125"/>
<location filename="../gui/trayicon.cpp" line="126"/>
<source>At least one device is paused</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="129"/>
<location filename="../gui/trayicon.cpp" line="130"/>
<source>Synchronization is ongoing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="139"/>
<location filename="../gui/trayicon.cpp" line="140"/>
<source>Synchronization complete</source>
<translation type="unfinished"></translation>
</message>
@ -879,7 +493,7 @@
</message>
<message>
<location filename="../gui/traywidget.ui" line="107"/>
<location filename="../gui/traywidget.cpp" line="264"/>
<location filename="../gui/traywidget.cpp" line="267"/>
<source>Connect</source>
<translation type="unfinished"></translation>
</message>
@ -917,7 +531,7 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<message>
<location filename="../gui/traywidget.ui" line="230"/>
<location filename="../gui/traywidget.ui" line="250"/>
<location filename="../gui/traywidget.cpp" line="403"/>
<location filename="../gui/traywidget.cpp" line="406"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
@ -994,42 +608,42 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
</message>
<message>
<location filename="../gui/traywidget.ui" line="276"/>
<location filename="../gui/traywidget.cpp" line="235"/>
<location filename="../gui/traywidget.cpp" line="238"/>
<source>New notifications</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="265"/>
<location filename="../gui/traywidget.cpp" line="268"/>
<source>Not connected to Syncthing, click to connect</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="277"/>
<location filename="../gui/traywidget.cpp" line="280"/>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="278"/>
<location filename="../gui/traywidget.cpp" line="281"/>
<source>Syncthing is running, click to pause all devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="284"/>
<location filename="../gui/traywidget.cpp" line="287"/>
<source>At least one device is paused, click to resume</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="351"/>
<location filename="../gui/traywidget.cpp" line="354"/>
<source>The directory &lt;i&gt;%1&lt;/i&gt; does not exist on the local machine.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="360"/>
<location filename="../gui/traywidget.cpp" line="363"/>
<source>The file &lt;i&gt;%1&lt;/i&gt; does not exist on the local machine.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="283"/>
<location filename="../gui/traywidget.cpp" line="286"/>
<source>Continue</source>
<translation type="unfinished"></translation>
</message>
@ -1039,7 +653,7 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="221"/>
<location filename="../gui/traywidget.cpp" line="224"/>
<source>Log</source>
<translation type="unfinished"></translation>
</message>

View File

@ -1,392 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="en_US">
<context>
<name>Data::SyncthingConnection</name>
<message>
<location filename="../data/syncthingconnection.cpp" line="172"/>
<source>disconnected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="174"/>
<source>reconnecting</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="176"/>
<source>connected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="178"/>
<source>connected, notifications available</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="180"/>
<source>connected, paused</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="182"/>
<source>connected, synchronizing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="184"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="196"/>
<location filename="../data/syncthingconnection.cpp" line="278"/>
<source>Connection configuration is insufficient.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="601"/>
<source>Unable to parse Syncthing log: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="605"/>
<source>Unable to request system log: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="627"/>
<source>Unable to locate certificate used by Syncthing GUI.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="633"/>
<source>Unable to load certificate used by Syncthing GUI.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="666"/>
<location filename="../data/syncthingconnection.cpp" line="768"/>
<source>Unable to parse Syncthing config: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="672"/>
<location filename="../data/syncthingconnection.cpp" line="774"/>
<source>Unable to request Syncthing config: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="849"/>
<source>Unable to parse connections: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="855"/>
<source>Unable to request connections: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="910"/>
<source>Unable to parse directory statistics: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="916"/>
<source>Unable to request directory statistics: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="953"/>
<source>Unable to parse device statistics: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="959"/>
<source>Unable to request device statistics: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="994"/>
<source>Unable to parse errors: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="1005"/>
<source>Unable to request errors: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="1056"/>
<source>Unable to parse Syncthing events: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="1075"/>
<source>Unable to request Syncthing events: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="1313"/>
<source>Unable to request rescan: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="1328"/>
<source>Unable to request pause/resume: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="1343"/>
<source>Unable to request restart: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingconnection.cpp" line="572"/>
<source>Unable to request QR-Code: </source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Data::SyncthingDeviceModel</name>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="61"/>
<location filename="../data/syncthingdevicemodel.cpp" line="87"/>
<source>ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="62"/>
<source>Status</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="88"/>
<source>Addresses</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="89"/>
<source>Last seen</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="90"/>
<source>Compression</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="91"/>
<source>Certificate</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="92"/>
<source>Introducer</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="102"/>
<source>none</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="103"/>
<source>yes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="103"/>
<source>no</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="155"/>
<source>Unknown status</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="157"/>
<source>Idle</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="158"/>
<source>Disconnected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="159"/>
<source>Synchronizing (%1 %)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="159"/>
<source>Synchronizing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="156"/>
<source>Own device</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="100"/>
<source>unknown or own device</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="152"/>
<source>Paused</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="160"/>
<source>Out of sync</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdevicemodel.cpp" line="161"/>
<source>Rejected</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Data::SyncthingDirectoryModel</name>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="61"/>
<location filename="../data/syncthingdirectorymodel.cpp" line="87"/>
<source>ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="62"/>
<source>Status</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="88"/>
<source>Path</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="89"/>
<source>Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="91"/>
<source>Rescan interval</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="92"/>
<source>Last scan</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="93"/>
<source>Last file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="102"/>
<source>yes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="102"/>
<source>no</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="104"/>
<location filename="../data/syncthingdirectorymodel.cpp" line="105"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="143"/>
<source>Deleted at %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="145"/>
<source>Updated at %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="166"/>
<source>Idle</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="167"/>
<source>Scanning (%1 %)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="168"/>
<source>Synchronizing (%1 %)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="170"/>
<source>Out of sync</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="167"/>
<source>Scanning</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="90"/>
<source>Read-only</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="165"/>
<source>Unknown status</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="168"/>
<source>Synchronizing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdirectorymodel.cpp" line="169"/>
<source>Paused</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Data::SyncthingDownloadModel</name>
<message>
<location filename="../data/syncthingdownloadmodel.cpp" line="71"/>
<source>Dir/item</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/syncthingdownloadmodel.cpp" line="72"/>
<source>Progress</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>Data::Utils</name>
<message>
<location filename="../data/utils.cpp" line="16"/>
<source>%1 ago</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../data/utils.cpp" line="18"/>
<source>right now</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QtGui::AppearanceOptionPage</name>
<message>
@ -790,82 +404,82 @@
<context>
<name>QtGui::TrayIcon</name>
<message>
<location filename="../gui/trayicon.cpp" line="35"/>
<location filename="../gui/trayicon.cpp" line="36"/>
<source>Web UI</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="36"/>
<location filename="../gui/trayicon.cpp" line="37"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="37"/>
<location filename="../gui/trayicon.cpp" line="38"/>
<source>Rescan all</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="39"/>
<location filename="../gui/trayicon.cpp" line="40"/>
<source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="41"/>
<location filename="../gui/trayicon.cpp" line="42"/>
<source>Close</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="86"/>
<location filename="../gui/trayicon.cpp" line="87"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="93"/>
<location filename="../gui/trayicon.cpp" line="94"/>
<source>Syncthing notification - click to dismiss</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="102"/>
<location filename="../gui/trayicon.cpp" line="103"/>
<source>Not connected to Syncthing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="104"/>
<location filename="../gui/trayicon.cpp" line="105"/>
<source>Disconnected from Syncthing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="109"/>
<location filename="../gui/trayicon.cpp" line="110"/>
<source>Reconnecting ...</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="113"/>
<location filename="../gui/trayicon.cpp" line="114"/>
<source>Syncthing is idling</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="117"/>
<location filename="../gui/trayicon.cpp" line="118"/>
<source>Syncthing is scanning</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="121"/>
<location filename="../gui/trayicon.cpp" line="122"/>
<source>Notifications available</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="125"/>
<location filename="../gui/trayicon.cpp" line="126"/>
<source>At least one device is paused</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="129"/>
<location filename="../gui/trayicon.cpp" line="130"/>
<source>Synchronization is ongoing</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/trayicon.cpp" line="139"/>
<location filename="../gui/trayicon.cpp" line="140"/>
<source>Synchronization complete</source>
<translation type="unfinished"></translation>
</message>
@ -879,7 +493,7 @@
</message>
<message>
<location filename="../gui/traywidget.ui" line="107"/>
<location filename="../gui/traywidget.cpp" line="264"/>
<location filename="../gui/traywidget.cpp" line="267"/>
<source>Connect</source>
<translation type="unfinished"></translation>
</message>
@ -917,7 +531,7 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<message>
<location filename="../gui/traywidget.ui" line="230"/>
<location filename="../gui/traywidget.ui" line="250"/>
<location filename="../gui/traywidget.cpp" line="403"/>
<location filename="../gui/traywidget.cpp" line="406"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
@ -994,42 +608,42 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
</message>
<message>
<location filename="../gui/traywidget.ui" line="276"/>
<location filename="../gui/traywidget.cpp" line="235"/>
<location filename="../gui/traywidget.cpp" line="238"/>
<source>New notifications</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="265"/>
<location filename="../gui/traywidget.cpp" line="268"/>
<source>Not connected to Syncthing, click to connect</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="277"/>
<location filename="../gui/traywidget.cpp" line="280"/>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="278"/>
<location filename="../gui/traywidget.cpp" line="281"/>
<source>Syncthing is running, click to pause all devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="284"/>
<location filename="../gui/traywidget.cpp" line="287"/>
<source>At least one device is paused, click to resume</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="351"/>
<location filename="../gui/traywidget.cpp" line="354"/>
<source>The directory &lt;i&gt;%1&lt;/i&gt; does not exist on the local machine.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="360"/>
<location filename="../gui/traywidget.cpp" line="363"/>
<source>The file &lt;i&gt;%1&lt;/i&gt; does not exist on the local machine.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="283"/>
<location filename="../gui/traywidget.cpp" line="286"/>
<source>Continue</source>
<translation type="unfinished"></translation>
</message>
@ -1039,7 +653,7 @@ For &lt;i&gt;all&lt;/i&gt; notifications, checkout the log</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/traywidget.cpp" line="221"/>
<location filename="../gui/traywidget.cpp" line="224"/>
<source>Log</source>
<translation type="unfinished"></translation>
</message>