1
0
Fork 0
mirror of https://github.com/transmission/transmission synced 2025-02-23 06:30:38 +00:00
transmission/qt
Mike Gelfand 2b917de65b Refactor RPC requests code for proper queueing (patch by intelfx @ GH-10)
This refactoring is driven by the need to be able to do true queued RPC calls
(where each successive call uses the result of the previous).

Currently, such queueing of requests is done by assigning them special "magic"
tag numbers, which are then intercepted in one big switch() statement and acted
upon. This (aside from making code greatly unclear) effectively makes each such
queue a singleton, because state passing is restricted to global variables.

We refactor RpcClient to assign an unique tag to each remote call, and then
abstract all the call<->response matching with Qt's future/promise mechanism.

Finally, we introduce a "RPC request queue" class (RpcQueue) which is built on
top of QFutureWatcher and C++11's <functional> library. This class maintains
a queue of functions, where each function receives an RPC response, does
necessary processing, performs another call and finally returns its future.
2016-04-19 20:41:59 +00:00
..
icons
translations Sync translations with Transifex 2016-02-27 23:27:26 +00:00
AboutDialog.cc Remove context help button from dialogs on Windows 2015-09-01 20:19:26 +00:00
AboutDialog.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
AboutDialog.ui Use PascalCase for Qt client filenames 2015-06-10 21:27:11 +00:00
AddData.cc Refactor RPC requests code for proper queueing (patch by intelfx @ GH-10) 2016-04-19 20:41:59 +00:00
AddData.h Refactor RPC requests code for proper queueing (patch by intelfx @ GH-10) 2016-04-19 20:41:59 +00:00
Application.cc Add ActiveQt-based COM interop helper 2015-12-16 20:01:03 +00:00
Application.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
application.qrc
BaseDialog.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
CMakeLists.txt Refactor RPC requests code for proper queueing (patch by intelfx @ GH-10) 2016-04-19 20:41:59 +00:00
ColumnResizer.cc Use PascalCase for Qt client filenames 2015-06-10 21:27:11 +00:00
ColumnResizer.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
ComInteropHelper.cc Add ActiveQt-based COM interop helper 2015-12-16 20:01:03 +00:00
ComInteropHelper.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
config.pri.in
CustomVariantType.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
DBusInteropHelper.cc Fix existing Qt client instance detection and torrents delegation 2016-02-29 14:16:55 +00:00
DBusInteropHelper.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
DetailsDialog.cc fix -Wfloat-equal warning 2015-12-06 21:07:37 +00:00
DetailsDialog.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
DetailsDialog.ui #5608: Enter file renaming mode with keyboard only, not on mouse double-click (Qt client) 2015-08-10 19:40:58 +00:00
FaviconCache.cc Use PascalCase for Qt client filenames 2015-06-10 21:27:11 +00:00
FaviconCache.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
FileTreeDelegate.cc (trivial) silence a few -Wold-style-cast warnings 2015-12-06 17:39:18 +00:00
FileTreeDelegate.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
FileTreeItem.cc (trivial) silence a few -Wold-style-cast warnings 2015-12-06 17:39:18 +00:00
FileTreeItem.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
FileTreeModel.cc (trivial) silence a few -Wold-style-cast warnings 2015-12-06 17:39:18 +00:00
FileTreeModel.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
FileTreeView.cc Simplify and speed up actions connected to file tree popup menu 2015-08-16 22:07:09 +00:00
FileTreeView.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
FilterBar.cc Only grow filter input up to 250px width, then stick to the right 2016-03-15 21:25:46 +00:00
FilterBar.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
FilterBarComboBox.cc Use PascalCase for Qt client filenames 2015-06-10 21:27:11 +00:00
FilterBarComboBox.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
FilterBarComboBoxDelegate.cc Use PascalCase for Qt client filenames 2015-06-10 21:27:11 +00:00
FilterBarComboBoxDelegate.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
FilterBarLineEdit.cc Use PascalCase for Qt client filenames 2015-06-10 21:27:11 +00:00
FilterBarLineEdit.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
Filters.cc Use PascalCase for Qt client filenames 2015-06-10 21:27:11 +00:00
Filters.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
Formatter.cc Remove some unused includes/macros; fix build (re. QPointer) 2015-07-30 06:55:28 +00:00
Formatter.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
FreeSpaceLabel.cc Refactor RPC requests code for proper queueing (patch by intelfx @ GH-10) 2016-04-19 20:41:59 +00:00
FreeSpaceLabel.h Refactor RPC requests code for proper queueing (patch by intelfx @ GH-10) 2016-04-19 20:41:59 +00:00
IconToolButton.cc Some look-and-feel improvements for Mac and GTK+ styles (Qt client) 2015-06-28 14:18:06 +00:00
IconToolButton.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
InteropHelper.cc Add ActiveQt-based COM interop helper 2015-12-16 20:01:03 +00:00
InteropHelper.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
InteropObject.cc Refactor DBus IPC to allow for further extensibility 2015-12-16 17:57:05 +00:00
InteropObject.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
LicenseDialog.cc Remove context help button from dialogs on Windows 2015-09-01 20:19:26 +00:00
LicenseDialog.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
LicenseDialog.ui Update user-facing copyright years 2016-02-27 23:18:02 +00:00
MainWindow.cc Refactor RPC requests code for proper queueing (patch by intelfx @ GH-10) 2016-04-19 20:41:59 +00:00
MainWindow.h Refactor RPC requests code for proper queueing (patch by intelfx @ GH-10) 2016-04-19 20:41:59 +00:00
MainWindow.ui Show notice on top of filtered torrents list 2015-10-19 20:30:26 +00:00
MakeDialog.cc Remove context help button from dialogs on Windows 2015-09-01 20:19:26 +00:00
MakeDialog.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
MakeDialog.ui Use PascalCase for Qt client filenames 2015-06-10 21:27:11 +00:00
MakeProgressDialog.ui Use PascalCase for Qt client filenames 2015-06-10 21:27:11 +00:00
my-valgrind.sh
OptionsDialog.cc Explicitly compare result of str(n)cmp/memcmp to signify that it's not boolean 2016-03-13 22:11:01 +00:00
OptionsDialog.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
OptionsDialog.ui Use PascalCase for Qt client filenames 2015-06-10 21:27:11 +00:00
PathButton.cc Use PascalCase for Qt client filenames 2015-06-10 21:27:11 +00:00
PathButton.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
Prefs.cc Remove some unused includes/macros; fix build (re. QPointer) 2015-07-30 06:55:28 +00:00
Prefs.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
PrefsDialog.cc (trivial) remove namespace trailing semicolon 2015-12-06 17:27:21 +00:00
PrefsDialog.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
PrefsDialog.ui Use PascalCase for Qt client filenames 2015-06-10 21:27:11 +00:00
qtr.ico
qtr.pro Refactor RPC requests code for proper queueing (patch by intelfx @ GH-10) 2016-04-19 20:41:59 +00:00
qtr.rc
README.txt
RelocateDialog.cc Remove context help button from dialogs on Windows 2015-09-01 20:19:26 +00:00
RelocateDialog.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
RelocateDialog.ui Use PascalCase for Qt client filenames 2015-06-10 21:27:11 +00:00
RpcClient.cc Refactor RPC requests code for proper queueing (patch by intelfx @ GH-10) 2016-04-19 20:41:59 +00:00
RpcClient.h Refactor RPC requests code for proper queueing (patch by intelfx @ GH-10) 2016-04-19 20:41:59 +00:00
RpcQueue.cc Refactor RPC requests code for proper queueing (patch by intelfx @ GH-10) 2016-04-19 20:41:59 +00:00
RpcQueue.h Refactor RPC requests code for proper queueing (patch by intelfx @ GH-10) 2016-04-19 20:41:59 +00:00
Session.cc Refactor RPC requests code for proper queueing (patch by intelfx @ GH-10) 2016-04-19 20:41:59 +00:00
Session.h Refactor RPC requests code for proper queueing (patch by intelfx @ GH-10) 2016-04-19 20:41:59 +00:00
SessionDialog.cc Fix session dialog not showing up after first close 2015-09-01 20:39:34 +00:00
SessionDialog.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
SessionDialog.ui Fix session dialog not showing up after first close 2015-09-01 20:39:34 +00:00
Speed.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
SqueezeLabel.cc Use PascalCase for Qt client filenames 2015-06-10 21:27:11 +00:00
SqueezeLabel.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
StatsDialog.cc Fix session dialog not showing up after first close 2015-09-01 20:39:34 +00:00
StatsDialog.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
StatsDialog.ui Create dialogs on demand, don't keep them ready all the time 2015-07-30 06:18:02 +00:00
Torrent.cc in Torrent::setDouble(), don't compare doubles directly as a bool 2015-12-06 18:02:37 +00:00
Torrent.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
TorrentDelegate.cc Use CMake-provided C/C++ standard selection capabilities; fix build (qtr.pro) 2015-08-01 16:05:02 +00:00
TorrentDelegate.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
TorrentDelegateMin.cc Remove some unused includes/macros; fix build (re. QPointer) 2015-07-30 06:55:28 +00:00
TorrentDelegateMin.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
TorrentFilter.cc Remove some unused includes/macros; fix build (re. QPointer) 2015-07-30 06:55:28 +00:00
TorrentFilter.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
TorrentModel.cc Remove some unused includes/macros; fix build (re. QPointer) 2015-07-30 06:55:28 +00:00
TorrentModel.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
TorrentView.cc Clear filter upon double clicking on filtered torrent list notice 2015-10-24 20:56:45 +00:00
TorrentView.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
TrackerDelegate.cc Ongoing refactoring (use size_t instead of int) 2015-12-25 10:19:50 +00:00
TrackerDelegate.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
TrackerModel.cc Refactor action groups initialization/handling and trackers merging a bit 2015-08-06 20:28:44 +00:00
TrackerModel.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
TrackerModelFilter.cc Use PascalCase for Qt client filenames 2015-06-10 21:27:11 +00:00
TrackerModelFilter.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
transmission-qt.1
transmission-qt.desktop
transmission-qt.idl Add ActiveQt-based COM interop helper 2015-12-16 20:01:03 +00:00
transmission-qt.tlb.rc Add ActiveQt-based COM interop helper 2015-12-16 20:01:03 +00:00
transmission_en.qm
Utils.cc #6001: Calculate header item size properly 2015-09-27 20:23:03 +00:00
Utils.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00
WatchDir.cc Use PascalCase for Qt client filenames 2015-06-10 21:27:11 +00:00
WatchDir.h use '#pragma once' instead of #ifndef..#define..#endif guards 2016-03-29 16:37:21 +00:00

VOLUNTEERS WANTED

   - Qt developers and translators are needed
   - If you find a bug, please report it at http://trac.transmissionbt.com/

ABOUT TRANSMISSION-QT

   Transmission-qt is a GUI for Transmission loosely based on the GTK+ client.

   This is the only Transmission client that can act as its own self-contained
   session (as the GTK+ and Mac clients do), and can also connect to a remote
   session (as the web client and transmission-remote terminal client do).

   Use Case 1: If you like to run BitTorrent for awhile from your desktop,
   then the Mac, GTK+, and Qt clients are a good match.

   Use Case 2: If you like to leave BitTorrent running nonstop on your
   computer or router, and want to control it from your desktop or
   from a remote site, then transmission-remote and the web and Qt clients
   are a good match.

   To use the Qt client as a remote, in the menu go to Edit > Change Session

   The Qt client is also the most likely to wind up running on Windows,
   though that's not a high priority at the moment...

BUILDING ON WINDOWS

   rb07 has a writeup of this on the Transmission wiki:
   https://trac.transmissionbt.com/wiki/BuildingTransmissionQtWindows

BUILDING ON OS X

   nnc has a writeup of this on the Transmission wiki:
   https://trac.transmissionbt.com/wiki/BuildingTransmissionQtMac

BUILDING ON UNIX

   1. Prerequisites: Qt >= 4.6 and its development packages
   2. Build Transmission as normal
   3. In the qt/ directory, type "qmake qtr.pro" (or "qmake-qt4 qtr.pro", or "qmake-qt5 qtr.pro")
   4. In the qt/ directory, type "make"
   5. In the qt/ directory, as root, type "INSTALL_ROOT=/usr make install"
      (Feel free to replace /usr with /usr/local or /opt or whatever)