Commit Graph

9072 Commits

Author SHA1 Message Date
Calum Lind 7660e2e5ca
Add deluge.pot to repo for new translation app
Attempting to move to weblate but need deluge.pot in the repo
2024-07-15 08:39:31 +01:00
Calum Lind 7f3f7f69ee
[GtkUI] Reword preferences to prefer dark theme
The GTK option for dark theme only provides a preference to use the dark
theme, there is not a similar option for light theme so the settings
should only refer to 'prefer dark theme' and whether it's on or off.
2024-02-19 17:50:37 +00:00
Calum Lind 5dd7aa5321
[WebUI] Refactor changing theme
Simplify searching for themes and ensure theme is ordered last.

Ideally themes would be set client-side but seems to be quite tricky to
accomplish with ExtJS.
2024-02-19 17:50:32 +00:00
DjLegolas ee97864086
[GtkUI] Add a way to change themes
Currently, the only way to change the themes is by manually set a value
in the command line or set it as env variable.

Closes: https://dev.deluge-torrent.org/ticket/3536
Closes: https://github.com/deluge-torrent/deluge/pull/392
2024-02-19 17:49:04 +00:00
DjLegolas 848d668af9
[WebUI] Add a way to change themes
Currently, the only way to change the themes is by manually set a value
in the `web.conf` file itself.

Closes: https://dev.deluge-torrent.org/ticket/3536
2024-02-19 15:54:57 +00:00
Chris Ross d9ef65d745
[WebUI] Fix tracker icon to fit within tracker column rows
For me at least, Safari on Mac OS X, the tracker icon significantly
overflows in the Tracker column of the torrent list. (It does show the
correct size in the Trackers filter, though. Different CSS.)

This change causes it to constrain down to the height of the column and
display correctly.

Closes: https://github.com/deluge-torrent/deluge/pull/440
2024-01-21 15:20:24 +00:00
freddy2659 7f70d6c6ff
[WebUI] Fix progress divide by 0 error with empty dir
If a dir exists with no contents then the following error occurred:

```
Traceback (most recent call last):
  ...
  File "/usr/lib/python3.10/site-packages/deluge/ui/web/json_api.py", line 608, in _on_got_files
    dirinfo['progress'] = sum(progresses) / dirinfo['size'] * 100
builtins.ZeroDivisionError: float division by zero
```

Closes: https://github.com/deluge-torrent/deluge/pull/439
2024-01-21 15:18:29 +00:00
Calum Lind b7450b5082
[Docs] Bump sphinx version requirements
There are still warnings that need to be resolved but the build is
passing.
2024-01-21 15:10:47 +00:00
Calum Lind 7046824115
[Alerts] Fix alert handler segfault on lt.pop_alerts
We cannot handle an alert after calling lt.pop_alerts for a subsequent
time since the alert objects are invalidated and with cause a segfault.

To resolve this issue add a timeout to the handler calls and wait in the
alert thread for either the handlers to be called or eventually be
cancelled before getting more alerts.

This is still not an ideal solution and might leave to backlog of alerts
but this is better than crashing the application. Perhaps the timeout
could be tweaked to be shorter for certain alert types such as stats.

Related: https://github.com/arvidn/libtorrent/issues/6437
2024-01-21 14:16:22 +00:00
Calum Lind fa8d19335e
[GTK3] Fix changing torrent ownership
The change ownership menu item was broken due to Gtk deprecation
changes in commit #bcaaeac.

Fixed by correctly setting the RadioMenuItem group

Refactored to simplify the code
Removed dead or unneeded code

Fixes: https://dev.deluge-torrent.org/ticket/3610
2023-12-02 21:20:22 +00:00
Calum Lind 0c1a02dcb5
[Core] Remove usage of deprecated torrent status.paused
Noticed mismatch with current lt docs and found usage of deprecated
status.paused.

The actual check here is not required we should just attempt to pause
the torrent.

Issue: https://dev.deluge-torrent.org/ticket/3499
2023-12-02 21:20:11 +00:00
Calum Lind 810751d72a
[Tests] Refactor parse_human_size test 2023-11-30 19:03:40 +00:00
Calum Lind 7199805c89
[Common] Fix order of size_units for parse_human_size
The previous commit changed the order of the size
2023-11-27 16:52:03 +00:00
Arkadiusz Bulski 29cf72577f
[Common] Add extra size units suffixes for user input
Minor updates to docstrings

Closes: https://github.com/deluge-torrent/deluge/pull/437
2023-11-27 15:58:19 +00:00
Calum Lind 42accef295
[Tests] Fix unhandled ProcessTerminated trying to kill daemon in clean
The GitHub CI tests on Linux were failing due to ProcessTerminated

>       await daemon.kill()
E       twisted.internet.error.ProcessTerminated: A process has ended with a probable error condition: process ended by signal 6.

Added a try..except in daemon as a quick solution but might need to
investigate the ProcessOutputHandler.kill method.
2023-11-27 15:48:24 +00:00
Calum Lind 54d6f50231
[Core] Refactor Alertmanager to retry unhandled alerts
We are currently creating a copy of each alert to avoid segfaults when
the next pop_alerts invalidates the lt alert objects we are holding
for handler callbacks.

However these alert copies are not deep enough since need to also
resolve the alert object methods e.g. message() therefore it is still
possible to result in lt segfaults.

The workaround is to check for any handlers not called, give them some
more time and eventually discard if still not handled.

Ref: https://github.com/arvidn/libtorrent/issues/6437
2023-11-27 15:17:44 +00:00
DjLegolas b5f8c5af2d
[Core] Call wait_for_alert in a thread
This spawns a thread in alertmanager to call wait_for_alert in a thread.
This reduces latency to deluge responding to events.
And removes all `hasattr` checks in Component

Closes: https://github.com/deluge-torrent/deluge/pull/221
2023-11-27 15:00:56 +00:00
Calum Lind c7dc60571e
[CI] Fix windows packaging build
With recent update to pyinstaller 6.0 the libraries are now placed in an
`_internal` folder within the bundle. This has resulted in the failure
to create copies of libssl.

However after examining the new _internal dir it appears that the x64
lib are now created so this step is no longer required.
2023-11-24 20:50:15 +00:00
DjLegolas 1989d0de73
[UI][Common] Add daemon version check
For new UI features to be added, one should make sure the backend daemon
is supported and add fallback in case it doesn't.
Here we add the ability to get the daemon version from the `Client`
class and also check the version against a desired version.

Closes: https://github.com/deluge-torrent/deluge/pull/427
2023-11-20 12:36:52 +00:00
Radu Carpa 1751d62df9
[Core] Support creating v2 torrents
Add support for v2 torrents in create_torrent, but keep the old
default of only adding the v1 metadata.

Unify the single-file and directory cases to avoid code
duplication.

V2 torrents require files to be piece-aligned. The same for
hybrid v1/v2 ones. To handle both cases of piece-aligned and
non-aligned files, always read the files in piece-aligned
chunks. Re-slice the buffer if needed (for v1-only multi-file
torrents).

Also, had to adapt to progress event. It now depends on the
number of bytes hashed rather than the number of pieces. To
avoid sending and excessive amount of event when handling a
directory with many small files, add a mechanism to limit
event period at 1 per piece_length.

Closes: https://github.com/deluge-torrent/deluge/pull/430
2023-11-20 10:05:39 +00:00
Radu Carpa 4088e13905
[Core] Make create_torrent return a deferred
This allows to create a torrent file on the remote server
and get its content in one call.
2023-11-20 10:05:33 +00:00
Radu Carpa b63699c6de
[Core] Don't always write create_torrent metafile to disk
If target=None and add_to_session is True, the torrent will be
directly added to the session without writing the torrent file
to disk. This will allow to programmatically control deluge via
RPC without creating .torrent files all over the place.

Also, make most create_torrent parameters optional.
2023-11-20 10:05:33 +00:00
Calum Lind 8dba0efa85
[Lint] Fixup files 2023-11-19 23:14:44 +00:00
Calum Lind b2005ecd78
[Tests] Fix console tests stalling by pinning pytest to 7.4.2
Tests were stalling in deluge_ui_entry with pytest 7.4.3 likely due to
changes in the way it handles stderr but it is not clean the extact
issue.

For now we will pin the pytest version and look to fix the issue later.

Reference: https://docs.pytest.org/en/stable/changelog.html#pytest-7-4-3-2023-10-24
2023-11-19 23:14:44 +00:00
Calum Lind 39b99182ba
[UI] Further compress Deluge icons 2023-11-19 19:15:29 +00:00
Calum Lind 66eaea0059
[Scripts] Replace icon bash script with python version
Preferable to be working with Python scripts for easier development.

This is direct port of the original bash script with the slight
modification to also use pngquant to reduce file size further.
2023-11-19 19:15:29 +00:00
Calum Lind 5aa4d07816
[Stats] Fix creating test artifacts in tmp not pwd 2023-11-19 19:15:28 +00:00
Calum Lind f3d7b1ffe8
[UI] Minor improvements to create_deluge_pngs
Change the default compression tool to oxipng since it produces smaller
files faster than zopfli.

Add the ECT tool as an option to get maximum compression but is quite
slow to complete.
2023-11-19 19:15:28 +00:00
Anthony Ryan d8f9fe4acf
[UI] Losslessly compress PNG images
Using Efficient-Compression-Tool, we managed to reduge image sizes by
Saved 9.45KB out of 241.88KB (3.9065%) without changing visual appearence.

It's a small improvement, but we get something for nothing and that's nice.

    ect -keep --allfilters-b --pal_sort=120 -30060 -recurse --mt-file ./

Closes: https://github.com/deluge-torrent/deluge/pull/405
2023-11-19 19:15:17 +00:00
Calum Lind f43b605b80
[i18n] Update translations from launchpad 2023-11-13 12:10:39 +00:00
Sébastien Luttringer 1dbb18b80a
Fix tweaking logging levels
When you set a config directory path (-c) on the command line, and only when,
a file named logging.conf is read to set fine grained log levels.
This allows to have per module/plugin log levels.

A simple logging.conf could be:
-<8 -------------------
deluge:info
deluge.plugin.foo:debug
-----------------------

The file is parsed and the log levels are set in the deluge.log.tweak_logging_levels.
This function set the appropriate logger to the desired level.
Despite the log level is changed, log levels less than ERROR are still not
logged.

The reason is that the log level check is done twice, in the logging.Logger class
and in the logging.Handler class.

The fix is to not set the logging level in the Handler in deluge.log.setup_logger
and let only the logging.Logger check the level.

Closes: https://github.com/deluge-torrent/deluge/pull/428
2023-09-18 20:04:14 +01:00
Myrmecophaga tridactyla 21470799d0
i18n: Fix language word
Closes: https://github.com/deluge-torrent/deluge/pull/429
2023-09-18 20:02:39 +01:00
Calum Lind e24081a17e
[CI] Bump Pyinstaller version for Windows packaging
Pyinstaller was pinned due to problems with v5 but these should now be
resolved with latest version.

Bump Twisted to latest minor version

Closes: https://github.com/deluge-torrent/deluge/pull/435
2023-09-18 19:56:31 +01:00
Calum Lind 6c9b058d81
[CI/CD] Fix Pillow packaging build errors
Pillow have dropped 32-bit wheels from v10 onwards so force install of
older v9 wheels since we don't want to build from src.

Refs: https://github.com/python-pillow/Pillow/issues/6941#issuecomment-1604058002
2023-09-18 14:55:53 +01:00
Calum Lind 18dca70084
[GTKUI] Fix cairo crashes by not storing current context
Windows users have reported Deluge crashes when resizing the window with
Piecesbar or Stats plugins enabled:

    Expression: CAIRO_REFERENCE_COUNT_HAS_REFERENCE(&surface->ref_count)

This is similar to issues fixed in GNU Radio which is a problem due to
storing the current cairo context which is then being destroyed and
recreated within GTK causing a reference count error

Fixes: https://dev.deluge-torrent.org/ticket/3339
Refs: https://github.com/gnuradio/gnuradio/pull/6352
Closes: https://github.com/deluge-torrent/deluge/pull/431
2023-09-18 14:55:38 +01:00
Calum Lind ed1366d5ce
[Docs] Fix readthedocs builds
Requires using updated configuration with git unshallow so that version
can be identified from git tags.

Closes: https://github.com/deluge-torrent/deluge/pull/434
2023-09-18 13:00:59 +01:00
Calum Lind 7082d9cec4
[CI] Fix packaging errors with Python 3.7
The latest Pillow 10 does not support Py3.7 therefore wheels are no
longer available and we need to specify previous major version.

Older versions of setuptools do not correctly determine the Twisted
requirement for zope.interface>5 on Python 3.7 so ensure latest
installed. For the CD builds we don't want any surprises so keep the
setuptools version pinned.

Refs: https://pillow.readthedocs.io/en/stable/installation.html
Closes: https://github.com/deluge-torrent/deluge/pull/433
2023-09-18 13:00:43 +01:00
Calum Lind 015b0660be
[CI] Remove chardet version constraint
The version was pinned due to issues with Python 3.10.5 in CI but with
latest versions of Python 3.10 this no longer seems to be an issue.
2023-09-18 11:37:04 +01:00
DjLegolas a459e78268
[UI][Common] Add support for BitTorrent V2 file tree
In BEP52, a new tiles structure was introduce, a `file tree`.
This change added support for this structure in the `TorrentInfo` class.

Ref: https://www.bittorrent.org/beps/bep_0052.html
Closes: https://github.com/deluge-torrent/deluge/pull/404
2023-08-27 11:35:43 +01:00
doadin 8001110625
[Packaging] Fix NSIS Uninstaller Not Removing File\Folder
CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Website.lnk" "$INSTDIR\homepage.url"

gets made in the installer but the uninstaller was looking for

 Delete "$SMPROGRAMS\$StartMenuFolder\Deluge Website.lnk"

therefore this file was being left behind and since the folder was not empty

$StartMenuFolder\Deluge

was being left behinde as well.

Closes: https://github.com/deluge-torrent/deluge/pull/426
2023-05-30 19:50:23 +01:00
Calum Lind d8b586e6ba
[CI] Bump image and action versions
Updated the core dump storage to be enabled only when needed.
Fixed missing catchsegv on Ubuntu 22.04 by installing glibc-tools
2023-05-30 19:45:57 +01:00
Calum Lind 905a7dc3bc
[Tests] Only pin libtorrent for tests
Bump versions for Windows packaging
2023-05-30 17:11:13 +01:00
bendikro 89b79e4b7f
[Core] Fix bug when emiting event in EventManager
In some cases, when emiting events with EventManager.emit_event(), the underlying
dictionary of interested sessions can change during iteration, causing:
RuntimeError: dictionary changed size during iteration

Fix by iterating over a copy of the dictionary.

Closes: https://dev.deluge-torrent.org/ticket/3351
Closes: https://github.com/deluge-torrent/deluge/pull/425
2023-05-29 13:57:02 +01:00
bendikro e70e43e631
[GTKUI] Add torrent dialog incorrectly removes dir
When adding a torrent in the add torrents dialog, containing only
a single directory with a single file inside, the directory is not
included as a prefix to the filename.
The prefix is added only if there are multiple files inside the directory.

Fix by adding the prefix also when there is only one file inside a dir.

Closes: https://dev.deluge-torrent.org/ticket/3602
Closes: https://github.com/deluge-torrent/deluge/pull/424
2023-05-29 13:15:43 +01:00
Calum Lind b24a5d2465
[Tests] Ignore pytest temp dir 2023-05-29 12:10:47 +01:00
Calum Lind 701f68d70b
[Tests] Pin libtorrent version to 2.0.7
With latest libtorrent 2.0.9 testing are erroring out so pin
to older working version.

Ref: https://dev.deluge-torrent.org/ticket/3603
2023-05-29 12:10:00 +01:00
Calum Lind de570ae536
[Tests] Fix waiting for lt alert state change
Tests are fragile when waiting for lt alert so allow incrementally
waiting for status change, along with a timeout.
2023-05-29 12:08:39 +01:00
Calum Lind 40a66278a3
[Common] Replace pkg_resources with importlib for resource path finding
With an existing Deluge package installed on the system errors were
occuring trying to start a development instance in virtualenv.

Fixed by replacing usage of deprecated pkg_resource for finding
non-python data files. Includes fallback for Python 3.7/3.8 but drops
Python 3.6 support.

The plugins are still using pkg_resources since they are distributed as
eggs and importlib extracts those data files differently to
pkg_resources so requires a different solution, either as a file stream
or manually cached when plugins are installed.

Closes: https://github.com/deluge-torrent/deluge/pull/403

Co-authored-by: DjLegolas <djlegolas@protonmail.com>
2023-05-29 12:08:34 +01:00
Unit 193 366cded7be
[GTKUI] Enable appindicator support by default
On GNOME, I don't believe any tray icon or indicator support is enabled
by default, but one can easily install an extension for indicators
whereas I'm not sure about tray icons, but the 'top icons' extension I
believe has had a flaky history. I'm not entirely sure how KDE handles
things, but out of the box it too has indicator support and I believe
that is preferred with the move to Wayland. In Xfce, the tray icon area
is called "Status tray" and has support for both tray icons and
indicators.

Closes: https://github.com/deluge-torrent/deluge/pull/318
2023-04-23 18:15:52 +01:00
Calum Lind dbedf7f639
[GTK3] Fix missing AppIndicator option in Preferences
Issue with legacy tray icon being used despite AyatanaAppIndicator3
installed. The problem is due to option to use AppIndicator not being
shown in Preferences.

Fixes: https://dev.deluge-torrent.org/ticket/3598
2023-04-23 18:15:52 +01:00