syncthingtray/README.md

222 lines
11 KiB
Markdown
Raw Normal View History

2016-08-25 00:45:32 +02:00
# Syncthing Tray
Qt 5-based tray application for [Syncthing](https://github.com/syncthing/syncthing)
2016-09-12 21:54:25 +02:00
## Supported platforms
* Designed to work under any desktop environment supported by Qt 5 with tray icon
2016-12-26 19:06:54 +01:00
support
2016-09-12 21:54:25 +02:00
* No desktop environment specific libraries required
2016-12-26 19:06:54 +01:00
* Tested under \*
* Plasma 5
* Openbox/qt5ct/Tint2
* Awesome/qt5ct
* Cinnamon
* Windows 10
* Can be shown as regular window if tray icon support is not available
2016-09-12 21:54:25 +02:00
2016-12-26 19:06:54 +01:00
\* If you can confirm it works under other desktop environments, please add it
to the list. Maybe someone could check whether it works under Mac OS X.
2016-09-12 21:54:25 +02:00
## Features
2016-08-25 00:45:32 +02:00
* Provides quick access to most frequently used features but does not intend to replace the official web UI
* Check state of directories and devices
* Check current traffic statistics
* Display further details about directories and devices, like last file, last
scan, items out of sync, ...
* Display ongoing downloads
* Display Syncthing log
* Trigger re-scan of a specific directory or all directories at once
* Open a directory with the default file browser
* Pause/resume a specific device or all devices at once
* Pause/resume a specific directory
2016-08-25 00:45:32 +02:00
* Shows Syncthing notifications
2017-03-29 23:32:48 +02:00
* Can read the local Syncthing configuration file for quick setup when just connecting to local instance
2017-03-15 22:12:21 +01:00
* Can show the status of the Syncthing systemd unit and allows to start and stop it (see section *Use of systemd*)
2016-09-03 19:39:43 +02:00
* Provides an option to conveniently add the tray to the applications launched when the desktop environment starts
2017-03-17 00:42:36 +01:00
* Can launch Syncthing and syncthing-inotify automatically when started and display stdout/stderr (useful under
Windows)
2016-08-25 00:45:32 +02:00
* Provides quick access to the official web UI
* 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)
2016-09-03 20:14:52 +02:00
* Allows quickly switching between multiple Syncthing instances
2016-12-12 23:43:06 +01:00
* Shows notifications via Qt or uses D-Bus notification daemon directly
2017-10-03 17:03:03 +02:00
* Also features a simple command line utility `syncthingctl`
* Check Syncthing status
* Trigger rescan/pause/resume/restart
* Wait for idle
* Supports Bash completion, even for directory and device names
2017-02-25 18:28:35 +01:00
* Also bundles a KIO plugin which shows the status of a Syncthing directory
and allows to trigger Syncthing actions in Dolphin file manager
* Rescan selected items
* Rescan entire Syncthing directory
* Pause/resume Syncthing directory
* See also screenshots section
2017-10-03 16:57:25 +02:00
* Also has an (experimental) implementation as Plasmoid for Plasma 5 desktop
* English and German localization
2016-09-12 21:54:25 +02:00
## Planned features
The tray is still under development; the following features are planned:
2016-09-12 21:54:25 +02:00
* Show recently processed items
2017-10-03 16:57:25 +02:00
* Make some notifications configurable on folder level
* Optionally notify for single file updates (https://github.com/Martchus/syncthingtray/issues/7)
* ~~Provide built-in support for file system watches~~ (canceled because this will be implemented in
2017-10-03 17:03:03 +02:00
Syncthing itself)
2016-08-25 00:45:32 +02:00
## Screenshots
2016-09-12 21:54:25 +02:00
2016-08-26 16:43:53 +02:00
### Under Openbox/Tint2
![Openbox/Tint2](/tray/resources/screenshots/tint2.png?raw=true)
2016-08-26 16:43:53 +02:00
2016-10-30 18:20:00 +01:00
### Under Plasma 5
![Plasma 5](/tray/resources/screenshots/plasma.png?raw=true)
2016-12-12 23:43:06 +01:00
![Plasma 5 (directory error)](/tray/resources/screenshots/plasma-2.png?raw=true)
2016-10-30 18:20:00 +01:00
![Plasma 5 (dark)](/tray/resources/screenshots/plasma-dark.png?raw=true)
2016-08-26 16:43:53 +02:00
2016-10-30 18:20:00 +01:00
### Settings dialog
![Settings dialog](/tray/resources/screenshots/settings.png?raw=true)
2016-08-26 16:43:53 +02:00
2016-10-30 18:20:00 +01:00
### Web view
![Web view](/tray/resources/screenshots/webview.png?raw=true)
2016-10-30 18:20:00 +01:00
![Web view (dark)](/tray/resources/screenshots/webview-dark.png?raw=true)
2016-08-25 00:45:32 +02:00
2017-02-25 18:28:35 +01:00
### Syncthing actions for Dolphin
![Rescan/pause/status](/fileitemactionplugin/resources/screenshots/dolphin.png?raw=true)
2016-12-12 23:58:06 +01:00
## Hotkeys
To create hotkeys, you can use the same approach as for any other
application. Just make it invoke the `syncthingctl` application with
the arguments for the desired action.
### Hotkey for web UI
Just add `--webui` to the `syncthingtray` arguments to trigger the web UI.
Syncthing Tray ensures that no second instance will be spawned if it is already
2016-12-12 23:58:06 +01:00
running and just trigger the web UI.
2017-03-15 22:12:21 +01:00
## Use of systemd
Use of systemd can be explicitely enabled/disabled by adding
`-DSYSTEMD_SUPPORT=ON/OFF` to the CMake arguments. There will be no hard
dependency to systemd in any case.
With systemd support the tray can start and stop the systemd unit of Syncthing.
It will also take the unit status into account when connecting to the local
instance. So connection attempts can be prevented when Syncthing isn't running
anyways. However, those features are optional. To use them they must be enabled
in the settings dialog first.
Note that this only works when starting Syncthing as user service. This is
described in the [Arch Wiki](https://wiki.archlinux.org/index.php/Systemd/User).
2016-11-26 12:49:40 +01:00
## Download
### Source
See the release section on GitHub.
### Packages and binaries
* Arch Linux
2017-07-31 23:51:26 +02:00
* for PKGBUILDs checkout [my GitHub repository](https://github.com/Martchus/PKGBUILDs) or
[the AUR](https://aur.archlinux.org/packages?SeB=m&K=Martchus)
* for binary repository checkout [my website](http://martchus.no-ip.biz/website/page.php?name=programming)
2016-11-26 12:49:40 +01:00
* Tumbleweed
2017-07-31 23:51:26 +02:00
* for RPM \*.spec files and binary repository checkout
[openSUSE Build Servide](https://build.opensuse.org/project/show/home:mkittler)
* packages are available for x86_64, aarch64 and armv7l
* since GCC provided by Leap is too old, only Tumbleweed packages are up-to-date
2016-11-26 12:49:40 +01:00
* Windows
2017-07-31 23:51:26 +02:00
* for mingw-w64 PKGBUILDs checkout [my GitHub repository](https://github.com/Martchus/PKGBUILDs)
* for binaries checkout [my website](http://martchus.no-ip.biz/website/page.php?name=programming) and the
release section on GitHub
2016-08-25 00:45:32 +02:00
## 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). For building this straight, see the next section.
2016-08-25 00:45:32 +02:00
2017-10-05 00:31:51 +02:00
The following Qt 5 modules are requried (version 5.7 or newer): core network dbus gui widgets svg webenginewidgets/webkitwidgets
2016-08-25 00:45:32 +02:00
2017-02-26 19:15:21 +01:00
The built-in web view is optional (see section "Select Qt module for WebView").
To build the plugin for Dolphin integration KIO is also requried. To skip building
2017-10-05 00:31:51 +02:00
the plugin, add `-DNO_FILE_ITEM_ACTION_PLUGIN:BOOL=ON` to the CMake arguments.
2017-02-26 19:15:21 +01:00
2017-10-05 00:31:51 +02:00
To build the Plasmoid for the Plasma 5 desktop, the Qt 5 module QML and the KF5 module
Plasma are required as well. Additionally, the Plasmoid requires Qt 5.8 or newer. To skip
building the Plasmoid, add `-DNO_PLASMOID:BOOL=ON` to the CMake arguments.
It is also possible to build only the CLI (syncthingctl) by adding `-DNO_MODEL:BOOL=ON` and
`-DNO_FILE_ITEM_ACTION_PLUGIN:BOOL=ON` to the CMake arguments. Then only the Qt modules core,
network and dbus are required.
To get rid of systemd support, add `-DENABLE_SYSTEMD_SUPPORT_BY_DEFAULT` to the CMake arguments.
In this case the Qt module D-Bus is not required anymore. Note that there is no hard dependency
to systemd in any case.
2017-02-26 19:15:21 +01:00
#### 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
2017-07-19 23:53:36 +02:00
git clone https://github.com/Martchus/cpp-utilities.git c++utilities
git clone https://github.com/Martchus/qtutilities.git
2017-02-20 14:22:58 +01:00
git clone 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)
```
2016-09-25 20:54:09 +02:00
#### Select Qt module for WebView
2016-08-25 00:45:32 +02:00
* 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.
2017-02-12 19:58:53 +01:00
* To use Qt WebKit revived/ng, set the web view provider to `webkit`. It works already without any (known) issues.
2016-09-01 16:34:30 +02:00
2016-09-25 20:54:09 +02:00
#### 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
2016-09-01 16:34:30 +02:00
* Qt WebEngine can not be built with mingw-w64.
2016-11-16 20:40:54 +01:00
* QWebEngineView seems to eat `keyPressEvent`.
2016-09-01 16:34:30 +02:00
* 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. Any external links will be opened in the
regular web browser anyways.
2017-02-12 19:58:53 +01:00
* It will be replaced by the compatible Qt WebKit revived/ng soon and hence no longer be deprecated.
2017-10-06 17:07:45 +02:00
## Contributing
### Adding translations
Currently translations for English and German are available. Further translations
can be added quite easily:
1. Append a new translation file for the desired locale to the `TS_FILES` list
in `connector/CMakeLists.txt`, `model/CMakeLists.txt` and `tray/CMakeLists.txt`.
2. Trigger a new build, eg. follow steps under *Building this straight*.
3. New translation files should have been created by the build system under
`connector/translations`, `model/translations` and `tray/translations`.
4. Open the files with Qt Linguist to add translations. Qt Linguist is part of
the [Qt Tools repository](http://code.qt.io/cgit/qt/qttools.git/) and its usage
is [well documented](http://doc.qt.io/qt-5/linguist-translators.html).
2017-05-22 00:26:51 +02:00
2017-10-06 17:07:45 +02:00
### Using backend libraries
Note that the contained backend libraries (which provide connecting to Syncthing, data models and more) are written for internal
use whithin the components contained by this repository.
Hence those libraries do *not* provide a stable ABI/API. If you like to
use them to develop Syncthing integration or tooling with Qt and C++, it makes most sense to contribute it as an additional component
directly to this repository. Then I will be able to take it into account when changeing the API.
2017-05-22 00:26:51 +02:00
## Known bugs
The following bugs are caused by dependencies and hence tracked externally. For bugs of Syncthing Tray itself, checkout the issues
on GitHub.
* Any self-signed certificate is accepted when using Qt WebEngine due to
Qt bug https://bugreports.qt.io/browse/QTBUG-51176
2017-07-31 23:51:26 +02:00
* Pausing/resuming folders and devices doesn't work when using scan-intervalls with a lot of zeros
2017-05-22 00:26:51 +02:00
because of Syncthing bug https://github.com/syncthing/syncthing/issues/4001.
2017-07-31 23:51:26 +02:00
This has already been fixed on the Qt-side with https://codereview.qt-project.org/#/c/187069/. However, the fix is only
available in Qt 5.9 and above.
2017-05-22 00:26:51 +02:00
* The tray disconnects from the local instance when the network connection goes down.
The network connection must be restored or the tray restarted to be able to connect to local
Syncthing again. This is caused by Qt bug https://bugreports.qt.io/browse/QTBUG-60949.