Deluge BitTorrent client - Git mirror, PRs only

Deluge BitTorrent Client

build-status docs-status

Deluge is a BitTorrent client that utilizes a daemon/client model. It has various user interfaces available such as the GTK-UI, Web-UI and a Console-UI. It uses libtorrent at it's core to handle the BitTorrent protocol.

Install

From PyPi:

pip install deluge

From source code:

python setup.py build
python setup.py install

See DEPENDS and Installing/Source for dependency details.

Usage

The various user-interfaces and Deluge daemon can be started with the following commands.

Use the --help option for further command options.

Gtk UI

deluge or deluge-gtk

Console UI

deluge-console

Web UI

deluge-web

Open http://localhost:8112 with default password deluge.

Daemon

deluged

See the Thinclient guide to connect to the daemon from another computer.

Contact

Owner
Deluge team
The development team maintaining the Deluge BitTorrent client
Deluge team
Comments
  • Update Windows Packaging

    Update Windows Packaging

    • [x] Check that deluge-console works.

    • [x] Plugins Execute & Extractor Won't start:

    09:58:44.350 [ERROR   ][deluge.pluginmanagerbase          :78  ] Unable to instantiate plugin 'Execute' from 'e:\\program files\\deluge\\deluge\\plugins\\execute-1.3-py3.10.egg'!
    09:58:44.350 [ERROR   ][deluge.pluginmanagerbase          :78  ] No module named 'twisted.internet.utils'
    Traceback (most recent call last):
      File "deluge\pluginmanagerbase.py", line 147, in enable_plugin
      File "e:\program files\deluge\deluge\plugins\execute\deluge_execute\__init__.py", line 14, in __init__
        from .core import Core as _pluginCls
      File "e:\program files\deluge\deluge\plugins\execute\deluge_execute\core.py", line 14, in <module>
        from twisted.internet.utils import getProcessOutputAndValue
    ModuleNotFoundError: No module named 'twisted.internet.utils'
    

    Answer: https://github.com/deluge-torrent/deluge/pull/331/commits/3aec79f30f39d76d3afefa8e64895f331784b133

    • [x] Check for compatibility with newer python versions.
    • [x] Twisted error: https://github.com/twisted/twisted/pull/1679 Answer: https://github.com/deluge-torrent/deluge/pull/331/commits/e8874aab8fa0ab526845d424bdf69fe1ab398889
    • [x] Edit path for openssl? Why? Answer: libtorrent + pyinstaller requires a lib(ssl/crypto)-1_1.dll and lib(ssl/crypto)-1_1-x64.dll odd quirk but solveable by just having two copies. Maybe later compiling our own libtorrent.
    • [x] vc-redist check Answer: Not needed libtorrent isn't build static and pyinstaller grabs the redist files.
    • [x] With UI/Plugin files copied to data, do not need the deluge folder. Answer: Not needed but comes from collect_all('deluge'):hiddenimports which is needed.
  • Feature GTK3UI

    Feature GTK3UI

    To prevent confusion I think it will be best to create a new module for GTK3, it will make development a bit harder with duplicate code but should help with moving users to GTK3. Also, it can be independent of GTK2 and released as it becomes ready and hopefully make it easier for plugin authors to add support.

    This branch does display the main windows with torrents (even under Python 3) but there are a lot of errors still needing to be fixed.

    • [x] Split gtk3 code into a separate module
    • [x] Update plugin GTK3 code
    • [x] Remove deprecated from UI files with a script.
    • [x] Document the migration process to aid plugin authors.
    • [x] Bump plugin versions.
    • [x] Review and fix all FIXME comments.
    • ~Move from GtkBox to GtkGrid for future-proofing: https://developer.gnome.org/gtk3/3.10/gtk-migrating-GtkGrid.html~

    More fixes from hugo merging PR:

    • [x] Remove interface-naming-policy project-wide
    • [x] Add Generated with
    • [x] Add alternative to purged props (align, padding)
    • [x] Fix icon-size
    • ~Add test for windowing~

    Found a useful porting guide:

    https://github.com/sugarlabs/sugar-docs/blob/master/src/gtk3-porting-guide.md

  • [3499][Core] Stopped using deprecated functions

    [3499][Core] Stopped using deprecated functions

    As we intend to support LT 2.0, we should stop using the deprecated methods and functions. We should not remove the usage of them, as we still need to support older versions of LT, but when using the latest version of LT, we should use the latest API.

    Closes: https://dev.deluge-torrent.org/ticket/3499

    Issues that still needs to be fixed:

    • [x] the url member is deprecated - usage of url in add_torrent_params is deprecated
    • [x] resume_data is deprecated - fix in alertmanager.py:128
    • [x] has_metadata() is deprecated - fix in torrent.py:871
    • [x] name() is deprecated - fix in torrent.py:963
  • [Core] Test mixing in async/await syntax

    [Core] Test mixing in async/await syntax

    This is maybe a bit more ambitious alternative to #351

    Instead of using inlineCallbacks we could switch over to the await syntax. In order to make it the most nice, we'd have to start at the top of the call chain and convert over to async/await as we go down, to not have to mix in a lot of ensureDeferred calls. We could also make a decorator for ensureDeferred that works more like inlineCallbacks, which would make the transition easier, but would remove some of the nicer benefits of await syntax like the improved tracebacks (I think?)

  • Initial Appveyor Support

    Initial Appveyor Support

    Goal was same tests as travis.ci. Outcome here is that while most tests run with this setup only flake8 runs 100% as it should(produces same output as travis).

    However while the other tests run the tests need to be adjusted/modified to be windows compatible. For example in one test the ui.console gets tested which uses python curses... python curses doesn't exist so the test runs but fails. In "wintrial" (skips=1, failures=7, errors=41, successes=115).

    Currently even on travis.ci "docs" is failing and the only addition fail comes from the curses issue which that "test" should probably just be ignored/skiped on windows since it will never work.

  • [#2478] [Blocklist] Add WebUI plugin page

    [#2478] [Blocklist] Add WebUI plugin page

    Icons are missing and whitelist not working due to bug in core as I mentioned in the PM. Everything else is done, progress bar, info, etc. Please let me know if everything is ok.

  • #3171 Add Option To Specify Outgoing Connection Interface

    #3171 Add Option To Specify Outgoing Connection Interface

    Currently if you specify -i only the libtorrent listen_interfaces is set.

    I believe one of two options should be used:

    -i sets listen_interfaces and outgoing_interfaces.

    or

    -i sets listen_interface and a new -o sets outgoing_interfaces.

    Im sure for some reason or another someone would want to use two interfaces so the second option is probably best.

  • [Core] Return plugin keys with get_torrents_status

    [Core] Return plugin keys with get_torrents_status

    When requesting all keys, get_torrents_status was missing plugin added keys This commit brings the behavior in line with get_torrent_status, and deluge 1.3

    Closes: 3357

    Re-created from #344 because I accidentally pushed to the wrong remote.

  • Add maybe_coroutine decorator to easily mix in async/await syntax

    Add maybe_coroutine decorator to easily mix in async/await syntax

    Continuation of #351 and #352. Started fresh again, this time with some tests.

    Goals:

    • Clean up callback hell by making more code inline
    • Use async/await syntax as it has more modern niceties than inlineCallbacks
      • Also gets us closer if we want to transition to asyncio in the future
      • await is usable in places that yield is not. e.g. return await thething func(await thething, 'otherparam')
      • IDEs know async semantics of async/await syntax to help more than with inlineCallbacks
    • maybe_coroutine decorator has nice property (over ensureDeferred) that when used in a chain of other coroutines, they won't be wrapped in deferreds on each level, and so traceback will show each await call leading to the error.
    • All async functions wrapped in maybe_coroutine are 100% backwards compatible with a regular Deferred returning function. Whether called from a coroutine or not.
  • [Packaging] Pinned Pyinstaller to v4.10 and readme update

    [Packaging] Pinned Pyinstaller to v4.10 and readme update

    Pin Pyinstaller to latest v4.x until issue of aborting upon missing typelibs for various unbuilt gst-modules can be properly investigated and resolved. Specific error for one of the modules being:

    36738 INFO: Loading module hook 'hook-gi.repository.Gst.py' from 'C:\\hostedtoolcache\\windows\\Python\\3.9.13\\x64\\lib\\site-packages\\PyInstaller\\hooks'...
    Traceback (most recent call last):
      File "<string>", line 7, in <module>
    gi.repository.GLib.GError: g-irepository-error-quark: Typelib file for namespace 'Gst', version '1.0' not found (0)
    36870 ERROR: gi repository 'GIRepository 2.0' not found. Please make sure corresponding package is installed.
    Traceback (most recent call last):
      File "<string>", line 4, in <module>
      File "C:\hostedtoolcache\windows\Python\3.9.13\x64\lib\site-packages\gi\__init__.py", line 139, in require_version
        raise ValueError('Namespace %s not available' % namespace)
    ValueError: Namespace Gst not available
    
  • Modify the transfer protocol in a couple ways.

    Modify the transfer protocol in a couple ways.

    Replace the 'D' header with an unsigned byte that indicates the protocol version. This will allow easier changes to protocol in the future. Replace the signed integer used for message length with an unsigned 32-bit integer. There is no need for a signed value here as a message length must always be positive. This also doubles the max message length.

  • [Stats] Integrated TotalTraffic plugin

    [Stats] Integrated TotalTraffic plugin

    Used the PR from the original repo of the stats plugin. In addition, fixed some basic bugs.

    According to the ticket, still need to add a WebUI... Therefor: Closes partially: https://dev.deluge-torrent.org/ticket/2812

    In addition, while testing, I have found that in case I was on the Stats tab, and maximized the Deluge's window, the entire GTK would crash in Windows. When it happened, I got the following error message:

    01:01:16.904 [DEBUG   ][deluge.config                     :203 ] Setting key "window_maximized" to: True (of type: <class 'bool'>)
    01:01:16.955 [DEBUG   ][deluge.config                     :203 ] Setting key "tabsbar_position" to: 1008 (of type: <class 'int'>)
    A s s e r t i o n   f a i l e d :   C A I R O _ R E F E R E N C E _ C O U N T _ H A S _ R E F E R E N C E   ( & s u r f a c e - > r e f _ c o u n t ) ,   f i l e   c a i r o - s u r f a c e . c ,   l i n e   9 5 5 
     
    Process finished with exit code -1073740791 (0xC0000409)
    

    Still no fix for this crash.

  • Enable mypy

    Enable mypy

    This isn't an actual pull request proposal yet, this was just playing around with getting mypy working, and I wanted a specific place to discuss mypy rather than in the other type hint ticket. This is on top of the current typing and maybe_coroutine PR branches, so diff has got more than just mypy fixes atm.

    • What's the plan for python 3.6 support? I was thinking about the nicest way we could start doing type hinting, and I think my plan revolves around dropping that. If we drop it, we can enable from __future__ import annotations to make all the annotations just strings, so they don't have to actually run. If we do that, then we can run mypy on python 3.9+, where builtin types got type hinting support (dict vs typing.Dict) or even 3.10, where we got the pipe operator for union (str | int vs typing.Union[str, int]) I think both of those would go a long way towards readability, especially if we start using them to generate the autodocs for the api. I'm fairly certain that the invalid syntax of the type hints on python 3.7 and 3.8 won't matter as long as we do the docs generation and mypy on 3.10+ EDIT: After fixing up my other PRs, I realized we can achieve the same thing by just quotes around any syntaxes that aren't supported in older pythons.
  • [GTKUI] Enable indicator support by default.

    [GTKUI] Enable indicator support by default.

    Howdy,

    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.

    I think at this point it might be preferred to default to indicators, since (I believe) those are more supported in GNOME and KDE.

    Thanks!

  • [#3415][#3417]multi-homing: manage coma separated list of incoming interfaces

    [#3415][#3417]multi-homing: manage coma separated list of incoming interfaces

    I developed this change to address some multi-homing needs I have with deluge. The GTK and Web UI will now allow a list of IP addresses or network interface names, instead of a single IP address. This list, appended with ports, will be passed to libtorrent.

    I tested on debian sid. With port 23456, The following input works as expected: lo,10.3.14.15, 2000:abcd:1234:5678::15

    Then deluge(d) binds only:

    127.0.0.1:23456 
    [::1]:23456
    10.3.14.15:23456
    [2000:abcd:1234:5678::15]:23456
    

    One should note that lib torrent expects ipv6 addresses to be passed between square brackets. But on the python side, brackets are not valid according to ipaddress:IPV6Address constructor. Therefore I added some extra IPV6 logic to add the surrounding brackets, prior to passing the listen_interfaces to lib torrent. From the Deluge UI, the end user should provide IPV6 addresses without square brackets.

    1st commit: fix binding for multiple incoming/outgoing interfaces 2nd commit: fix geoip for ipv6 (don't make sense without the first commit since ipv6 won't work)

  • rm -c flag conflicts with --config shortcut

    rm -c flag conflicts with --config shortcut

    cf. https://github.com/deluge-torrent/deluge/blob/master/deluge/argparserbase.py#L191

    This bug triggers "Password does not match" errors when "rm -c" is used

ZeroNet - Decentralized websites using Bitcoin crypto and BitTorrent network
ZeroNet - Decentralized websites using Bitcoin crypto and BitTorrent network

ZeroNet Decentralized websites using Bitcoin crypto and the BitTorrent network - https://zeronet.io / onion Why? We believe in open, free, and uncenso

Jun 29, 2022
Bittorrent software for cats

NyaaV2 Setting up for development This project uses Python 3.7. There are features used that do not exist in 3.6, so make sure to use Python 3.7. This

Jun 28, 2022
Tiny Git is a simplified version of Git with only the basic functionalities to gain better understanding of git internals.

Tiny Git is a simplified version of Git with only the basic functionalities to gain better understanding of git internals. Implemented Functi

Oct 15, 2021
Privacy enhanced BitTorrent client with P2P content discovery

Tribler Towards making Bittorrent anonymous and impossible to shut down. We use our own dedicated Tor-like network for anonymous torrent downloading.

Jun 29, 2022
A prometheus exporter for torrent downloader like qbittorrent/transmission/deluge
A prometheus exporter for torrent downloader like qbittorrent/transmission/deluge

downloader-exporter A prometheus exporter for qBitorrent/Transmission/Deluge. Get metrics from multiple servers and offers them in a prometheus format

May 30, 2022
A Web app to Cross-Seed torrents in Deluge/qBittorrent/Transmission
A Web app to Cross-Seed torrents in Deluge/qBittorrent/Transmission

SeedCross A Web app to Cross-Seed torrents in Deluge/qBittorrent/Transmission based on CrossSeedAutoDL Require Jackett Deluge/qBittorrent/Transmission

Jul 5, 2022
A python package for your Kali Linux distro that find the fastest mirror and configure your apt to use that mirror

Kali Mirror Finder Using Single Python File A python package for your Kali Linux distro that find the fastest mirror and configure your apt to use tha

Feb 13, 2022
Bagas Mirror&Leech Bot is a multipurpose Telegram Bot written in Python for mirroring files on the Internet to our beloved Google Drive. Based on python-aria-mirror-bot
Bagas Mirror&Leech Bot is a multipurpose Telegram Bot written in Python for mirroring files on the Internet to our beloved Google Drive. Based on python-aria-mirror-bot

- [ MAYBE UPDATE & ADD MORE MODULE ] Bagas Mirror&Leech Bot Bagas Mirror&Leech Bot is a multipurpose Telegram Bot written in Python for mirroring file

Nov 23, 2021
ZeroNet - Decentralized websites using Bitcoin crypto and BitTorrent network
ZeroNet - Decentralized websites using Bitcoin crypto and BitTorrent network

ZeroNet Decentralized websites using Bitcoin crypto and the BitTorrent network - https://zeronet.io / onion Why? We believe in open, free, and uncenso

Jun 29, 2022
Bittorrent software for cats

NyaaV2 Setting up for development This project uses Python 3.7. There are features used that do not exist in 3.6, so make sure to use Python 3.7. This

Jun 28, 2022
Explorer is a Autonomous (self-hosted) Bittorrent Network Search Engine.
Explorer is a Autonomous (self-hosted) Bittorrent Network Search Engine.

Explorer Explorer is a Autonomous (self-hosted) Bittorrent Network Search Engine. About The Project Screenshots Supported features Number Feature 1 DH

Jun 14, 2022
Send GitHub Issues, PRs or Discussions Updates to Wechat
Send GitHub Issues, PRs or Discussions Updates to Wechat

Send GitHub Issues, PRs or Discussions Updates to Wechat

Nov 30, 2021
Fetch PRs from GitHub and analyze which ones are unmergeable

Set up token Generate a personal access token on GitHub. Add repo permissions. export GH_TOKEN="abcdefg" Pull PR data make Usually, GitHub doesn't h

Nov 5, 2021
Auto updating website that tracks closed & open issues/PRs on scikit-learn/scikit-learn.

Repository Status for Scikit-learn Live webpage Auto updating website that tracks closed & open issues/PRs on scikit-learn/scikit-learn. Running local

Apr 4, 2022
Read-only mirror of https://gitlab.gnome.org/GNOME/pybliographer

Pybliographer Pybliographer provides a framework for working with bibliographic databases. This software is licensed under the GPLv2. For more informa

May 7, 2022
Read-only mirror of https://gitlab.gnome.org/GNOME/meld

About Meld Meld is a visual diff and merge tool targeted at developers. Meld helps you compare files, directories, and version controlled projects. It

Jun 19, 2022
Read-only mirror of https://gitlab.gnome.org/GNOME/ocrfeeder

================================= OCRFeeder - A Complete OCR Suite ================================= OCRFeeder is a complete Optical Character Recogn

May 29, 2022
A PyPI mirror client according to PEP 381 http://www.python.org/dev/peps/pep-0381/

This is a PyPI mirror client according to PEP 381 + PEP 503 http://www.python.org/dev/peps/pep-0381/. bandersnatch >=4.0 supports Linux, MacOSX + Wind

Jun 25, 2022
A PyPI mirror client according to PEP 381 http://www.python.org/dev/peps/pep-0381/

This is a PyPI mirror client according to PEP 381 + PEP 503 http://www.python.org/dev/peps/pep-0381/. bandersnatch >=4.0 supports Linux, MacOSX + Wind

Jun 25, 2022
Git Plan - a better workflow for git
Git Plan - a better workflow for git

git plan A better workflow for git. Git plan inverts the git workflow so that you can write your commit message first, before you start writing code.

May 29, 2022