Compare commits

...

272 Commits

Author SHA1 Message Date
b950442d2e Update translations 2009-04-26 00:01:11 +00:00
7e4b6abb77 Tag 1.1.7 release 2009-04-25 23:29:00 +00:00
a2359738bf Prep for release 2009-04-25 23:11:16 +00:00
5fb06630f2 Add workaround for 'address_v4 from unsigned long' bug 2009-04-25 22:14:19 +00:00
9bf27f1249 Catch get_peer_info exception to prevent deluge from crashing.. 2009-04-25 20:49:22 +00:00
127b58c36d Fix free space check in Windows 2009-04-25 07:24:58 +00:00
587d9a7e5f Change titlebar update interval to 2 seconds 2009-04-24 17:58:11 +00:00
653097a985 Fix creating torrents in Windows
Fix displaying improper progress when creating torrent
2009-04-23 20:21:01 +00:00
bf1a0f9aad Fix freezing in create torrent dialog in Windows 2009-04-23 20:18:17 +00:00
c20226c187 Fix typo 2009-04-23 18:16:38 +00:00
fbb5cd94e8 Fix loading improperly created torrents with mismatched encodings 2009-04-21 17:16:19 +00:00
abc5bcf389 Fix typo 2009-04-21 16:32:53 +00:00
d6eeb13fed Add missing files 2009-04-20 22:01:52 +00:00
d3ad2e9900 Clean-up some of the code in the torrentmanager alert handlers to
prevent uncaught exceptions during shutdown
2009-04-20 02:28:06 +00:00
d14062f724 Fix issue where cannot resume torrent after doing a 'Pause All' 2009-04-20 00:02:36 +00:00
f77d678788 Update to asio 1.4.1 2009-04-19 21:40:09 +00:00
4280a3220e Remove unused variable 2009-04-18 18:53:16 +00:00
7130735697 Use proper LICENSE file for Windows installer (NSIS script works with LF line endings) 2009-04-17 19:30:04 +00:00
31780d2633 Added bbfreeze and NSIS scripts for Windows version 2009-04-17 00:03:53 +00:00
4a22de279b Fix starting the daemon in OS X 2009-04-14 20:40:29 +00:00
d742f394f0 Fix displaying IPv6 peers in the Peers tab 2009-04-13 18:02:49 +00:00
1693bc7373 Fix for adding torrents with invalid filename encodings 2009-04-10 17:34:55 +00:00
2023fac5c5 Fix #883 segfault if locale is not using UTF-8 encoding 2009-04-09 16:40:52 +00:00
c3e7a78a70 Update LICENSE and ChangeLog 2009-04-06 21:16:55 +00:00
100c6c0dcc Prep for release 2009-04-06 21:09:17 +00:00
acf872f4a1 Update translations 2009-04-06 21:08:46 +00:00
d4d9cb8e75 Add OpenSSL exception to copyright headers 2009-04-06 20:24:02 +00:00
dcc6654b46 Add missing import 2009-04-06 18:40:11 +00:00
52f8d7cacf Another fix for loading torrents on Windows 2009-04-05 23:28:31 +00:00
f3f5aa661e Fix loading torrent files in Windows when the path is non-ascii 2009-04-05 23:10:41 +00:00
e8d9c43b48 Fix displaying torrents with non-utf8 encodings in add torrent dialog 2009-04-05 18:31:43 +00:00
8d8e1ef5c3 Fix #870 use proper config location for loading ssl cert 2009-03-31 18:42:10 +00:00
1da46653e6 Fix #862 deluged crash when access http://localhost:58846 2009-03-31 18:26:40 +00:00
ea4ed3c880 Fix typo 2009-03-28 04:03:17 +00:00
5644646427 Fix #855 force a resume on a torrent if a 'Force Recheck' is initiated 2009-03-21 18:45:47 +00:00
fe04c46252 Fix udp trackers being classified as DHT source 2009-03-21 18:07:19 +00:00
99374972b0 Update man pages 2009-03-16 17:56:26 +00:00
e219cce7a5 Prep for release 2009-03-16 17:55:51 +00:00
28eed5d7e5 Update translations 2009-03-16 17:46:40 +00:00
17ac7ce733 Fix #841 maximum upload slots tooltip 2009-03-15 18:38:08 +00:00
97fec6ce1a Add 'Comments' field to the Details tab 2009-03-15 01:35:20 +00:00
027dd7bcef Don't always log to file in Windows 2009-03-14 23:34:49 +00:00
ec72ac57d7 Use binary mode on all config files for Windows compat 2009-03-12 21:43:17 +00:00
ad322aabd1 Fix loading config files on Windows 2009-03-12 21:33:43 +00:00
cb524c3590 Do not return when unable to make a backup of the config file 2009-03-09 16:43:28 +00:00
874c5dc106 Prep for release 2009-03-08 21:08:42 +00:00
375c62223d Update About dialog 2009-03-08 21:06:17 +00:00
c2de5ed93f Make sure config files, resume data and state are fsync'd when saved. This should help prevent data
losses on crashes/improper shutdowns.
2009-03-08 20:27:58 +00:00
fdf78bc7fd Fix #790 tracker hosts not correct for some .uk trackers 2009-03-08 20:19:19 +00:00
5ce82498ac Label: Fix setting 'Move on completed' folder when connected to a remote daemon 2009-03-08 20:14:42 +00:00
9da61bd1c7 Use 127.0.0.1 instead of localhost 2009-03-08 20:11:38 +00:00
0d633b388e Revert signalreceiver changes since this seems to cause issues with running dialogs 2009-03-08 19:58:46 +00:00
b52e1155c5 Translations update 2009-03-07 23:45:18 +00:00
8535e8e22c improve the error reporting when a ui fails to load 2009-03-07 17:27:04 +00:00
6ba55ce2f4 Fix up error message when unable to import a UI 2009-03-07 16:55:45 +00:00
f2a3ebf486 apply Ghents patch to allow for specifying your deluge config dir whilst
creating a plugin
2009-03-06 17:18:48 +00:00
ffcb1643b9 Remove ssl exception from license header when creating plugins from the
script
2009-03-05 23:57:48 +00:00
2e4bc65834 Do not inherit the ThreadingMixIn class in SignalReceiver since it's no
longer needed
2009-03-05 03:12:34 +00:00
8001d5e165 Change SignalReceiver to use non-blocking socket 2009-03-05 00:28:34 +00:00
9728d1d831 Fix showing Preferences dialog in Windows 2009-03-02 01:46:22 +00:00
364078079b Update ChangeLogs 2009-02-28 22:22:49 +00:00
342063599f Only emit the TorrentFinished event when the torrent hasn't been previously finished.. e.g. after a force recheck 2009-02-28 22:07:49 +00:00
4baf7b167a Catch exception when removing a checking torrent 2009-02-28 21:05:49 +00:00
c6c861885e Do not attempt to pause/remove a checking torrent due to stop at share ratio rules 2009-02-28 21:01:28 +00:00
2831e10a24 Fixed empty substitutions not being recognised
Removed redundant call of autodetect in section
Renamed gtk+ defines to gtk
2009-02-28 09:30:49 +00:00
9b4e4e8d48 Added macro to create detect functions
Renamed autodetect_python to detect_python
Added detect_gtk
2009-02-28 09:23:46 +00:00
f598101ee8 Fix #817 email notifications fail to substitute format strings 2009-02-28 02:18:12 +00:00
4965a903ac Fix #655 issue where default torrent options wouldn't be set for new
torrents added to the addtorrentdialog
2009-02-28 01:48:41 +00:00
5414276a16 Fix displaying file errors when the torrent isn't paused 2009-02-27 21:38:30 +00:00
4c479749f9 ReadRegStr needs an output variable 2009-02-25 12:11:34 +00:00
270bb4ae1b Moved functions to bottom so that they could include defines
Installer now automatically selects python if not installed
2009-02-25 12:09:31 +00:00
16c8769ab9 Second attempt at autodetect install 2009-02-25 11:27:09 +00:00
2efc6161f2 First attempt at auto-detect install type 2009-02-25 11:05:03 +00:00
538643b5ba Moved setting python dir to its own function 2009-02-25 08:05:12 +00:00
c7a67f5c53 Auto-detect if python is installed on startup 2009-02-25 07:58:50 +00:00
29c98e374c Renamed get_url to create_url 2009-02-24 13:01:42 +00:00
8247048ff8 Fixed up uninstaller's sections 2009-02-24 06:10:28 +00:00
96520084c6 Added sections to uninstaller 2009-02-24 05:59:37 +00:00
8afa4441d1 Renamed SubSections to SectionGroups 2009-02-24 05:43:55 +00:00
04178043d8 Fix pygobject url and uninstaller 2009-02-24 05:07:27 +00:00
a16a083913 Fixed missing $ 2009-02-24 04:46:08 +00:00
0362c1438b Put macros before defines 2009-02-24 04:43:15 +00:00
300fc96d48 Use macro to create URLs for installers 2009-02-24 04:36:25 +00:00
1ad3713000 Added rest of dependencies 2009-02-24 04:04:30 +00:00
1c1ab77a70 Define versions to dynamically create installers' URLs 2009-02-24 02:55:54 +00:00
dd3b75d140 Use deluge version define in deluge msi's url 2009-02-24 02:06:29 +00:00
b2085ae49e Remove dll registration 2009-02-24 01:31:54 +00:00
4a8c73f9d0 Rearranged subsections 2009-02-24 01:27:51 +00:00
45a6e42356 Fix building plugins when python isn't in the PATH 2009-02-23 11:25:07 +00:00
d0c369fb58 Catch exceptions while loading the geoip db 2009-02-23 10:22:55 +00:00
108a22f1b9 Removed autoclose from uninstaller 2009-02-23 06:30:51 +00:00
5b6a6eedfa Remove rogue hardtabs 2009-02-23 06:19:25 +00:00
2a6072b87f Fixed writing uninstaller 2009-02-23 05:50:56 +00:00
7ddfd544a7 Fixed PyXdg URL 2009-02-23 05:35:00 +00:00
5be7005357 Added debug info to download macro 2009-02-23 05:27:35 +00:00
1d8e6b25c9 Fixed typos in installer URLs 2009-02-23 05:13:53 +00:00
a5dfee77e2 fix downloading installers 2009-02-23 05:08:13 +00:00
8378b33c46 fixed typo 2009-02-23 04:56:17 +00:00
23825cf297 Added error handling to download macro 2009-02-23 04:54:06 +00:00
0e989c0d42 Added install macros + register dll 2009-02-21 16:13:41 +00:00
1c2e21bd09 Added install macros 2009-02-21 16:02:23 +00:00
4102ba9f31 Added version numbers
Made description area smaller
2009-02-21 12:22:29 +00:00
857651789f move header image to the right 2009-02-21 11:57:51 +00:00
1684ffa612 macros need to appear before they are used 2009-02-21 11:55:42 +00:00
6a6f2998ed Organised layout and added images 2009-02-21 11:49:08 +00:00
f7d001e7b8 Fix the allocate mode not being preserved when selecting different
torrents in addtorrentdialog
2009-02-21 10:42:59 +00:00
a1ac27d628 Add new installer bmps 2009-02-21 10:11:04 +00:00
2772cd49df Fix ExecWait 2009-02-21 07:50:53 +00:00
a017613c30 Really fixed downloading and put in exec command 2009-02-21 07:36:46 +00:00
49a21be719 Fixed downloading 2009-02-21 07:27:05 +00:00
c4dd6a99dd Start dependency sections 2009-02-21 07:20:38 +00:00
0a51fc0c15 Fix error reporting when there is a problem starting a UI 2009-02-21 05:24:41 +00:00
be5cfd06e4 fixed relative path 2009-02-21 01:00:47 +00:00
c5cf385614 prototype now actually installs something 2009-02-21 00:58:35 +00:00
eb8dcfe243 removed old intaller 2009-02-21 00:50:28 +00:00
785d922a77 renamed installer script and fixed typo 2009-02-21 00:48:04 +00:00
6fe82e9104 Added NSIS installer stub 2009-02-21 00:39:11 +00:00
52e39d4fe9 Fix some deprecation warnings and imports 2009-02-20 14:32:28 +00:00
7abd8efd81 Wikified Changelog 2009-02-20 11:28:44 +00:00
1e8e3558ed tidy up including python bindings 2009-02-19 11:23:37 +00:00
d5e090f85a fix svn:externals properties 2009-02-19 11:17:20 +00:00
94a21723ea tidy up libtorrent linking to only what we require and also include asio again 2009-02-19 11:03:45 +00:00
de901dadd2 remove LT
add svn:externals to LTs svn
2009-02-19 10:35:31 +00:00
4da8274875 Fix saving file priorities when switching torrents in the
addtorrentdialog
2009-02-19 06:05:11 +00:00
7fde2aff36 sys not imported which throws exception before quitting gracefully 2009-02-18 17:36:16 +00:00
d0545b6898 lt sync 3273 2009-02-18 06:15:15 +00:00
2294c35e3f Fix hiding bottom pane when no tabs are enabled upon restart 2009-02-16 02:40:50 +00:00
51f18d3f54 Prep for release 2009-02-15 22:03:00 +00:00
0b528b2f61 lt sync 3259 2009-02-13 17:41:09 +00:00
74e58c920c lt sync 3253 - fix ssl trackers 2009-02-11 15:27:19 +00:00
28396db4a2 lang sync 2009-02-10 00:17:52 +00:00
2bfcb1ecab lang template update 2009-02-09 23:28:00 +00:00
4d37538a3a Update changelog 2009-02-09 23:24:19 +00:00
93bc82f6d1 lt sync 3243 2009-02-09 23:23:26 +00:00
b49c2ddda3 lt sync 3240 + patch 2009-02-09 00:46:23 +00:00
fd3cdba0a1 lt sync 3236 2009-02-08 00:08:15 +00:00
233b67db75 lt sync 3232 and patch segfault on start 2009-02-07 00:59:56 +00:00
4f4d5dfae3 Fix #790 tracker hosts not correct for some 3rd-level domain names 2009-02-06 09:01:11 +00:00
79e6ecfbac Fix displaying errors when a torrent is Checking 2009-02-06 07:13:56 +00:00
76f56957ce update setuptools info and up version to one that actually works 2009-02-06 00:25:56 +00:00
f14e5b08f4 Update license on metafile.py to GPL3 2009-02-05 04:46:38 +00:00
3fbf904bd3 lt sync 3228 2009-02-03 21:58:29 +00:00
a29118c6c3 Fix logging exceptions in the daemon 2009-02-02 02:08:59 +00:00
df1fbb27d8 Update and fix-up the man pages 2009-02-02 00:20:25 +00:00
ffc5f65a7a Fix issue when initializing gettext that would prevent deluge from starting 2009-02-01 22:18:39 +00:00
0cc4efc455 version bump 2009-01-31 21:27:50 +00:00
c5e5a3d4e7 lang sync for release 2009-01-31 21:14:26 +00:00
8a5aa3a150 release prep 2009-01-31 20:58:29 +00:00
b0f9117a3d lt sync 3225 2009-01-28 16:19:36 +00:00
040b4938e1 Fix license headers
Remove ui/webui/ssl from package_data since it doesn't exist
2009-01-28 00:36:33 +00:00
bc34d864ff Remove pythonize module since it's no longer used 2009-01-27 23:44:26 +00:00
4a07a33503 Update copyright years in aboutdialog 2009-01-27 23:34:03 +00:00
933228a82a Fix saving files/peers tab state when no column is sorted 2009-01-27 21:45:44 +00:00
a777233a7a Fix typo 2009-01-27 21:41:48 +00:00
79fb4b260d Fix #761 use proper theme colours in sidebar 2009-01-27 21:21:15 +00:00
3f414f4bdf lt sync 3219 2009-01-27 19:24:07 +00:00
04bebad82f lt sync 3218 2009-01-27 17:27:23 +00:00
0808bdaa0f Fix up some copyright headers 2009-01-27 00:21:53 +00:00
fc5d436021 Remove 'state_upgrade.py' script since this functionality is included in Deluge now. 2009-01-27 00:17:43 +00:00
eca8ced2c8 lang sync 2009-01-25 03:21:54 +00:00
6847db1304 ltsync 3211 2009-01-25 02:51:01 +00:00
e8d75cffe3 lt sync 3209 2009-01-25 02:10:39 +00:00
2de48097c0 Prep for release 2009-01-25 00:33:49 +00:00
7bc8c9fa36 Update python bindings from libtorrent svn 2009-01-24 05:31:45 +00:00
d268ed4955 Fix setting outgoing ports 2009-01-24 05:25:37 +00:00
7376a1e125 lt sync 3205 2009-01-24 04:12:32 +00:00
df92d3c468 Fix when sorting # column, downloads should be on top 2009-01-23 05:25:31 +00:00
190854dc2f Fix setting file priorities when adding a torrent 2009-01-22 08:22:50 +00:00
6e778aadf5 Fix being able to select/deselect files in the add torrent dialog 2009-01-22 06:01:34 +00:00
8249ad86ea Fix setting Peer TOS byte 2009-01-21 14:03:26 +00:00
631768f01b Fix torrents not displaying properly after disconnecting and
reconnecting to the daemon
2009-01-20 11:45:43 +00:00
b7f9fec075 Default to ERROR logging level if the supplied logging level is invalid 2009-01-18 06:24:49 +00:00
5672db086a lt sync 3187 2009-01-17 22:03:36 +00:00
adbe77647a Fix translating speed units in status tab when a per-torrent limit is
set
2009-01-17 22:02:38 +00:00
d44a479177 Fix crashing in AddTorrentDialog when removing torrents from the list
Do not allow duplicate torrents in the AddTorrentDialog
2009-01-17 21:58:02 +00:00
09f9c042e4 Fix being able to connect to a local daemon from another user account 2009-01-16 20:11:05 +00:00
cfa479ba3e add tooltip to popup about windows 2009-01-16 04:47:44 +00:00
4fe3780528 add sensitivity to changelog 2009-01-16 03:57:58 +00:00
f96fb69fda make popup insensitive on windows 2009-01-16 03:41:13 +00:00
675aed2094 Add support for more tracker icons 2009-01-16 03:31:21 +00:00
e31eab5303 Fix #729 tracker icons not being saved in the correct location 2009-01-16 03:18:43 +00:00
1bf7422904 Fix saving Files tab and Peers tab state 2009-01-16 03:13:37 +00:00
740506343f Fix remembering sorted column in the torrent list 2009-01-16 03:01:41 +00:00
91dfbffd69 Fix opening links from Help menu and others 2009-01-16 02:45:36 +00:00
bc0df7b6a7 Fix the -l, --logfile option 2009-01-16 00:35:07 +00:00
8bd576f636 Fix [4491] which broke the oldstateupgrade 2009-01-14 02:45:11 +00:00
7a645486ab Fix bdecoding some torrent files 2009-01-14 01:15:00 +00:00
14006f83b5 windows updates to switch to boost 1.37 and python 2.6 2009-01-12 23:30:33 +00:00
f83a180de8 Update bencode.py from BitTorrent-5.2.2. This changes the license to
Python Software Foundation License Version 2.3.
2009-01-12 22:44:27 +00:00
535ad73c04 Append a new line to the localclient entry 2009-01-12 19:55:57 +00:00
4390e14485 add changelog line on auto-complete fix (ConsuleUI) 2009-01-11 23:56:33 +00:00
eb568a8cba Add codename to release 2009-01-11 22:59:09 +00:00
2b80b801b1 merged r4524 from trunk to branches/1.1.0_RC 2009-01-11 00:14:30 +00:00
107079fbab lt sync 3143 2009-01-10 21:25:43 +00:00
57c1950d40 lang sync 2009-01-10 18:50:44 +00:00
40e700cf86 prep release 2009-01-10 18:20:15 +00:00
f1f50dc447 update credits for 1.x 2009-01-10 07:37:53 +00:00
2f3edc0352 Merge copyright info from trunk 2009-01-10 00:05:31 +00:00
959f6e550f fix debian bug #510948 missing dep 2009-01-09 20:00:17 +00:00
748a82a23b Set 'max_half_open_connections' default to 50 on non-Windows systems 2009-01-09 04:21:26 +00:00
009b34bccb Tell the user which UI was tried when unable to start 2009-01-08 22:25:46 +00:00
6cd794fa18 Fix missing status key in notification get_status 2009-01-08 21:31:04 +00:00
b258a9c340 Added '-s', '--set-default-ui' option to deluge 2009-01-08 20:27:24 +00:00
d8447aea72 Update credits and author list 2009-01-08 03:35:22 +00:00
d5c12a47c2 Fix installing 2009-01-08 02:31:01 +00:00
0d7cf1af81 add mime icons to the white theme
couple of stubs in the add window
2009-01-07 21:12:05 +00:00
64d94eb95f update changelog 2009-01-07 21:05:33 +00:00
28eda6caa0 improve the files table in the add torrent window
add some mimetype support in

improve the merge_changes.py script
2009-01-07 20:42:57 +00:00
150c803d19 Allow torrents to be removed from the add torrent window 2009-01-07 19:06:28 +00:00
d88fe0e894 more improvements to the options tab 2009-01-07 18:13:05 +00:00
225afdec1f template update 2009-01-07 03:55:21 +00:00
4175289690 fix gtk-cancel translation setting in remove dialog 2009-01-07 03:41:52 +00:00
d669e6e864 add stub for filepicker to trunk
start implementing the options dialog
add another not implemented alert to edit trackers
update changelog
2009-01-07 01:28:19 +00:00
1a70007697 fixes ticket #684 2009-01-07 01:00:56 +00:00
0208e59ad6 fix bug when used from ipod 2009-01-07 00:31:08 +00:00
1bf2fb47b7 add a couple of alerts to inform users of parts that aren't implemented yet 2009-01-07 00:04:42 +00:00
8deee64007 Fix issue in get_tracker_host when the torrent has no tracker 2009-01-06 12:50:49 +00:00
42cceabd8e fix crash on trying to convert *very* old 0.5 config files 2009-01-06 02:42:08 +00:00
6eb413dd1e fix notification bug on startup for already finished torrents 2009-01-06 02:27:27 +00:00
81b895bd1d Fix the display of the tracker host when it's an IP address and not a
hostname
2009-01-05 10:14:12 +00:00
2edf1fc692 Update ChangeLog 2009-01-05 05:49:19 +00:00
8c489e86d2 version up 2009-01-05 05:46:07 +00:00
530fcf255b lang sync for release 2009-01-05 05:45:17 +00:00
af1b3a6d3a Update ChangeLog 2009-01-05 05:14:07 +00:00
04d344a133 Show the Trackers sidebar filter by default 2009-01-04 08:53:06 +00:00
7226cbb53d lt sync 3129 2009-01-04 08:48:46 +00:00
f168f7e18e Fix seeding torrents from moving around when sorting the '#' column 2009-01-04 08:47:26 +00:00
923cfaab5c Fix typo 2009-01-02 21:27:43 +00:00
b3aa588650 Fix applying proxy settings 2009-01-02 21:25:26 +00:00
08b92148ca Label: Fix move on completed 2009-01-02 03:25:39 +00:00
914ae20e74 Fix folder renaming to display the change properly 2009-01-02 00:56:44 +00:00
c562024407 Hide the initial test port image 2008-12-30 23:32:39 +00:00
6aa405187f Fix exception in test open port 2008-12-30 23:28:30 +00:00
ad0b335648 Add PeerGuardian Text (Gzip) reader 2008-12-30 03:52:18 +00:00
83690d5aaf Apply blocklist prefs when the buttons are pressed. 2008-12-30 03:51:13 +00:00
df30d4b5c9 Do not continue to show 'Importing 0' progress bar if blocklist fails to
import.
2008-12-30 02:57:21 +00:00
0296f6c6e9 Fix gtkwarning regarding column width 2008-12-29 17:10:11 +00:00
7bdabc207d lt sync 3106 2008-12-29 16:58:56 +00:00
5e0d3bedef Update ChangeLog 2008-12-29 16:51:29 +00:00
e23a4c5da7 update changelog for rc2 2008-12-29 06:56:39 +00:00
d25b41f1de version prep for release 2008-12-29 06:50:51 +00:00
07126decab going back to vs71 2008-12-29 03:43:50 +00:00
5ee25515c1 De-santafy icons 2008-12-28 23:36:59 +00:00
f86b5dd0ad Change default blocklist url to nipfilter instead of pipfilter 2008-12-28 23:15:01 +00:00
d8a187a8f6 Fix issue that prevented torrents from being added 2008-12-28 15:38:28 +00:00
1f52a3fc20 Fix exception in metafile 2008-12-28 04:29:54 +00:00
c58e2481b9 Do not use the stored config_location value because it should only be used if the --config option is
set.
2008-12-27 21:24:50 +00:00
7b99298203 Fix exception in label plugin when saving preferences 2008-12-27 21:06:53 +00:00
2ff6b85771 Make new release checking much more robust 2008-12-27 00:13:59 +00:00
5c4b64d656 lt sync 3090 2008-12-26 22:47:24 +00:00
36539cdd1d Fix never-ending import in Blocklist on Windows 2008-12-26 22:45:43 +00:00
afb12d7403 Fix tooltip for 'Show session speed in titlebar' option 2008-12-26 08:21:13 +00:00
f31ac4bdc8 Remove Stats plugin since it wasn't intended to be in this release 2008-12-26 08:06:39 +00:00
69a0dbca4d Fix new version check 2008-12-26 08:04:31 +00:00
eced7ab068 change from vs71 to vs90 2008-12-26 04:55:20 +00:00
d73a1abbe4 vs2008sp1 fix - hydri 2008-12-26 04:52:44 +00:00
ac5b5fdefb lt sync 3081 2008-12-24 06:01:18 +00:00
1f1a0168e7 Prep for release 2008-12-24 00:56:02 +00:00
86f9184320 Fix #661 show proper tracker host when ending in .co.uk, .com.au, etc.. 2008-12-22 10:07:39 +00:00
9b1ea3d8de Santify the icons 2008-12-22 06:33:41 +00:00
e7aad6a345 update translator credits 2008-12-22 02:44:57 +00:00
aa8d18c081 Yet another typo fix 2008-12-20 23:19:24 +00:00
6bc4caa4e6 Fix more issues with TorrentOptions 2008-12-20 23:14:06 +00:00
68df5a389d Fix some typos 2008-12-20 23:06:53 +00:00
21c57e935e Clean up has_key method in TorrentOptions 2008-12-20 06:28:44 +00:00
9cd3e7cf56 Fix up to __getitem__ in TorrentOptions 2008-12-20 05:49:03 +00:00
489d805cb4 Fix some typos 2008-12-20 05:20:21 +00:00
b974f91da8 Ignore _* when doing new version check 2008-12-18 07:06:06 +00:00
4b1eecf026 Do not fork in osx 2008-12-18 06:14:49 +00:00
01bda41ba8 lang sync 2008-12-18 04:05:21 +00:00
0e60a4903e update pots 2008-12-18 03:46:55 +00:00
926d71c8a1 Branch 1.1.0, trunk is now 1.2.0-dev 2008-12-18 02:52:24 +00:00
504 changed files with 57465 additions and 109680 deletions

423
ChangeLog
View File

@ -1,10 +1,163 @@
Deluge 1.1.0 - "" (In Development)
Core:
=== Deluge 1.1.7 - (25 April 2009) ===
==== Core ====
* Fix issue where cannot resume torrent after doing a 'Pause All'
* Add workaround for 'address_v4 from unsigned long' bug experienced by users
with 64-bit machines. This bug is fixed in libtorrent 0.14.3.
==== GtkUI ====
* Fix #883 segfault if locale is not using UTF-8 encoding
* Fix for adding torrents with invalid filename encodings
* Fix displaying IPv6 peers in the Peers tab
* Fix starting the daemon in OS X
* Fix loading improperly created torrents with mismatched encodings
* Fix displaying improper progress when creating torrent
==== Windows ====
* Fix freezing in create torrent dialog
* Fix creating torrents in Windows
* Fix free space check
=== Deluge 1.1.6 - (06 April 2009) ===
==== Core ====
* Fix udp trackers being classified as DHT source
* Fix #855 force a resume on a torrent if a 'Force Recheck' is initiated
* Fix #862 deluged crash when access http://localhost:58846
==== GtkUI ====
* Fix displaying torrents with non-utf8 encodings in add torrent dialog
==== WebUI ====
* Fix #870 use proper config location for loading ssl cert
==== Misc ====
* Add OpenSSL exception to license
=== Deluge 1.1.5 - (16 March 2009) ===
==== Core ====
* Fix config file saving when no current config file exists
==== GtkUI ====
* Add 'Comments' field to the Details tab
* Fix #841 maximum upload slots tooltip
=== Deluge 1.1.4 - (08 March 2009) ===
==== Core ====
* Fix displaying file errors when the torrent isn't paused
* Fix issue where torrents being check would get removed due to "stop at ratio" rules
* Fix #790 tracker hosts not correct for some .uk trackers
* Make sure config files, resume data and state are fsync'd when saved. This should help prevent data losses on crashes/improper shutdowns.
==== GtkUI ====
* Fix hiding bottom pane when no tabs are enabled upon restart
* Fix saving file priorities when switching torrents in the addtorrentdialog
* Fix the allocate mode not being preserved when selecting different torrents in addtorrentdialog
* Fix #655 issue where default torrent options wouldn't be set for new torrents added to the addtorrentdialog
* Fix #817 email notifications fail to substitute format strings
==== Plugins ====
* Label: Fix setting 'Move on completed' folder when connected to a remote daemon
=== Deluge 1.1.3 - (15 February 2009) ===
==== Core ====
* Fix issue where checking queue would stop
* Fix announcing to SSL trackers
==== Misc ====
* Fix issue when initializing gettext that would prevent deluge from starting
* Fix logging exceptions when starting the daemon
* Fix displaying errors when a torrent is Checking
* Fix #790 tracker hosts not correct for some 3rd-level domain names
=== Deluge 1.1.2 - (31 January 2009) ===
==== Core ====
* Fix issue where torrents get stuck Checking
==== GtkUI ====
* Fix #761 use proper theme colours in sidebar
* Fix saving files/peers tab state when no column is sorted
=== Deluge 1.1.1 - (24 January 2009) ===
==== Core ====
* Fix oldstateupgrader for those upgrading from 0.5.x
* Fix setting Peer TOS byte
* Fix setting outgoing ports
==== GtkUI ====
* Fix opening links from Help menu and others
* Fix remembering sorted column in the torrent list
* Fix saving Files tab and Peers tab state
* Disable popup notification in preferences on Windows
* Fix crashing in Add Torrent Dialog when removing torrents from the list
* Do not allow duplicate torrents in the Add Torrent Dialog
* Fix translating speed units in status tab when a per-torrent limit is set
* Fix torrents not displaying properly after disconnecting and reconnecting to the daemon
* Fix when sorting # column, downloads should be on top
==== Misc ====
* Fix bdecoding some torrent files
* Fix the -l, --logfile option
* Fix #729 tracker icons not being saved in the correct location
* Add support for more tracker icons
* Fix being able to connect to a local daemon from another user account
=== Deluge 1.1.0 - "Time gas!" (10 January 2009) ===
==== Core ====
* Fix issue in get_tracker_host when the torrent has no tracker
* Fix crash while trying to convert very old 0.5 config files
==== GtkUI ====
* Fix translation setting in remove torrent dialog
* Fix notification bug on startup for already finished torrents
==== AjaxUI ====
* Fix loading on iPods.
* Fix sorting on the name column.
* Add "Not Implemented" alerts to some functions.
* Improve the options tab on the Add Torrent dialog
==== ConsoleUI ====
* Fix auto-complete feature for torrents.
==== Misc ====
* Added '-s', '--set-default-ui' option to deluge
=== Deluge 1.1.0_RC3 (05 January 2009) ===
==== Core ====
* Fix applying proxy settings
* Fix the display of the tracker host when it's an IP address and not a hostname
==== GtkUI ====
* Fix folder renaming to display the change properly
* Fix seeding torrents from moving around when sorting the '#' column
==== Plugins ====
* Label: Fix move on completed
* Add 'Peer Guardian Text (GZip)' reader to the Blocklist plugin
* Apply Blocklist preferences when clicking on the buttons
=== Deluge 1.1.0_RC2 (29 December 2008) ===
==== Core ====
* Fix new version check
* Fix issue that prevented torrents from being added
==== GtkUI ====
* Fix tooltip for 'Show session speed in titlebar' option
==== Plugins ====
* Remove Stats plugin since it wasn't intended to be in this release
* Fix never-ending import in Blocklist on Windows
==== Windows ====
* Fix double-click association on Windows
* Fix Pidgin icon interference
=== Deluge 1.1.0_RC1 (23 December 2008) ===
==== Core ====
* Implement #79 ability to change outgoing port range
* Implement #296 ability to change peer TOS byte
* Add per-torrent move on completed settings
* Implement #414 use async save_resume_data method
* FilterManager with torrent filtering in get_torrents_status , for sidebar and plugins.
* Filter Manager with torrent filtering in get_torrents_status , for sidebar and plugins.
* Implement #368 add torrents by infohash/magnet uri (trackerless torrents)
* Remove remaining gtk functions in common
* Tracker icons.
@ -12,15 +165,16 @@ Deluge 1.1.0 - "" (In Development)
* Fix #47 the state and config files are no longer invalidated when there is no diskspace
* Fix #619 return "" instead of "Infinity" if seconds == 0 in ftime
* Add -P, --pidfile option to deluged
* Basic authentication for remote access to daemon, see: http://dev.deluge-torrent.org/wiki/Authentication
GtkUI:
==== GtkUI ====
* Add peer progress to the peers tab
* Add ability to manually add peers
* Sorting # column will place downloaders above seeds
* Remove dependency on libtorrent for add torrent dialog
* Allow adding multiple trackers at once in the edit tracker dialog
* Implement #28 Create Torrent Dialog
* Redesiged sidebar with filters for Active and Tracker (see FilterManager)
* Redesiged sidebar with filters for Active and Tracker (see Filter Manager)
* Implement #428 the ability to rename files and directories
* Implement #229 add date added column
* Implement #596 show speeds in title
@ -33,7 +187,7 @@ Deluge 1.1.0 - "" (In Development)
* Add "Install Plugin" and "Rescan Plugins" buttons to the Plugins preferences
* Make active port test use internal graphic instead of launching browser
WebUi:
==== Web UI ====
* Lots of smaller tweaks.
* All details tabs have the same features as in gtk-ui 1.0.x
* Persistent sessions #486
@ -43,18 +197,267 @@ Deluge 1.1.0 - "" (In Development)
* Easier apache mod_proxy use.
* Redesigned sidebar
AjaxUI:
==== AjaxUI ====
* Hosted in a webui template.
ConsoleUI:
==== ConsoleUI ====
* New ConsoleUI written by Idoa01
* Callable from command-line for scripts.
Plugins:
==== Plugins ====
* Stats plugin for graphs.
* Label plugin for grouping torrents and per torrent settings.
Misc:
==== Misc ====
* Implement #478 display UI options in usage help
* Fix #547 add description to name field per HIG entry 2.1.1.1
* Fix #531 set default log level to ERROR and add 2 command-line options, "-L, --loglevel" and "-q, --quiet".
=== Deluge 1.0.7 (10 December 2008) ===
==== GtkUI ====
* Fix #636 not setting the daemon's config directory when using --config= with the UI in classic mode.
* Fix some minor bugs in Connection Manager
==== Debian ====
* Fix #571 notification-daemon-xfce dependency circle
==== Misc ====
* Fix #547 add description to name field per HIG entry 2.1.1.1
* libtorrent updates
==== Plugins ====
* Point default blocklist url to our server and up interval to 4 days
=== Deluge 1.0.6 (01 December 2008) ===
==== Core ====
* Fix #475 catch unicode decoding errors
* Add an option to not include IP overhead in rate limiting (this is equivalent
to how 0.5.x behaves)
* Have default blocklist url point to our server
==== GtkUI ====
* Display the proper downloaded value in the statistics tab
==== Windows ====
* Fix broken graphic in new release dialog
=== Deluge 1.0.5 (09 November 2008) ===
==== GtkUI ====
* Increase the per-torrent stop share ratio max to 99999.0
* Fix #528 make sure gtkui config file is written before exiting
* Fix UDP tracker support
==== Web UI ====
* Javascript auto refresh for both templates.
==== Windows ====
* Fix #577 adding torrents by drag n' drop
* Fix association in Vista
* Fix WebUI launch
==== Debian ====
* SID packages now requires Boost 1.36
==== Ubuntu ====
* Jaunty packages are now provided
=== Deluge 1.0.4 (31 October 2008) ===
==== Core ====
* Fix #560 force an int value for global max connections
* Fix #545 use proper values in ratio calculation
* Fix UPnP again..
==== GtkUI ====
* Fix #565 wait for the deluged process to start to prevent defunct processes
==== OS X ====
* Fix issues with gettext
==== Windows ====
* Fix starting on non-English versions of Windows
=== Deluge 1.0.3 (18 October 2008) ===
==== Core ====
* Fix upnp - it should work on more routers now too
* Fix issue where Deluge would send improper stats to the tracker after a
pause/resume.
* Fix issue where fastresume files would be rejected when using FAT32. This
would cause the torrent to be rechecked on every startup.
* Fix ip filtering
==== GtkUI ====
* Re-add the "Max Connections Per Second" option with a default setting of 20
==== WebUI ====
* Fix White template for Opera
==== Misc ====
* Deluge will now use a system libtorrent library if available.
* The build system will no longer build libtorrent if a system library is
detected.
=== Deluge 1.0.2 (10 October 2008) ===
==== Core ====
* Fix issue where torrents will not be properly added to the session
=== Deluge 1.0.1 (10 October 2008) ===
==== Core ====
* Change the default max global upload slots to 4 instead of -1 since libtorrent
will automatically open more slots to meet the upload speed limit.
* Fix display of tracker error messages
* Fix add_torrent_url() to download the torrent file in a thread to prevent
the main thread from blocking and causing the daemon to freeze.
* Removed the 'Maximum Connections Per Second' setting and replaced it with a
default setting of 20. This should alleviate speed issues some are experiencing.
* Changed max half-open connections default limit to 8 on XP/2000 and 4 on Vista
* Prevent being able to set file priorities for compactly allocated torrents as
it is not intended to work.
* Fix freezing on start-up issues on systems that do not have a properly
configured localhost entry.
* Change max connections default setting to 200
* Fix issue with invalid bencoding from some trackers
* Plenty of libtorrent updates that should improve core stability
==== GtkUI ====
* Improve performance of files tab by only updating when values change
==== Misc ====
* Fix #187 set a 5 second timer to save the config file after a config value
has been changed.
* Fix #503 change the boost lib detection logic to first look for -mt and
if not available, fall back to regular boost lib (non-multithreaded)
==== WebUI ====
* Add enable "Auto Add" checkbox
=== Deluge 1.0.0 - "Sharks Are Bulletproof" (21 September 2008) ===
==== Core ====
* Include GeoIP database for country look-ups
* Fix upgrading from 0.5.x state where torrents would have no trackers
=== Deluge 0.9.09 - "1.0.0_RC9" (15 September 2008) ===
==== Core ====
* Bug fixes in libtorrent including a crash when the tracker doesn't
have 'announce' in it's url.
* Fix fastresume issue causing loss of data by deleting the fastresume file
before writing a new one
* Fix #475 the use of unicode paths when adding torrents
==== GtkUI ====
* Fix add torrent dialog closing preventing another dialog from being shown
* Fix various issues when not using English
* Fix setting file priorities on folders
=== Deluge 0.9.08 - "1.0.0_RC8" (27 August 2008) ===
==== Core ====
* Attempt to automatically upgrade a 0.5.x state file to new format
* Tracker errors now change the tracker status
==== Plugins ====
* Fix bug in Blocklist that prevented downloading a new file every X days
==== GtkUI ====
* Sort filenames alphabetically in add torrent dialog
* Fix setting file priorities on folders
* Fix #453 allow showing of text in the toolbar buttons
=== Deluge 0.9.07 - "1.0.0_RC7" (18 August 2008) ===
==== Core ====
* Fix loading torrents from state when fastresume file is missing
* Fix UPnP
* Fix to prevent Deluge from segfaulting when trying to autoadd an incomplete torrent file
* Fix #407 possible negative ETA
==== GtkUI ====
* Add 'edit' to edit trackers dialog
* Improve performance of initial torrent list load
* Fix hiding the bottom pane when disabling all the tabs
* Fix not showing new torrents if you don't use the All label first
* Fix size units to be more accurate
* Fix torrentview sorting to be persistent
* Fix not displaying file list when state changes
* Expand root folder in files tab by default
==== Null ====
* Fix #415 crash when using 'config-set' with no parameters
==== Windows ====
* Fix Vista slowness issue
* Fix properly shutting Deluge down when system shuts down
* Fix opening folders/files
=== Deluge 0.9.06 - "1.0.0_RC6" (13 August 2008) ===
==== Core ====
* Fix CPU spikes
==== GtkUI ====
* Fix move storage dialog when connected to a remote daemon
=== Deluge 0.9.05 - "1.0.0_RC5" (04 August 2008) ===
==== Core ====
* Fix deluged running with ssh X forwarding by removing the Gnome lib import
* Save resume data periodically to help prevent data loss
* Fix queue order shuffling on restart
==== GtkUI ====
* Handle shutting down more cleanly
* Add translators to credits
==== Plugins ====
* Improve the Blocklist plugin preferences page.
==== Windows ====
* Fix drag n' drop support
=== Deluge 0.9.04 - "1.0.0_RC4" (29 July 2008) ===
==== Core ====
* Fix building with gcc 4.3
* Fix do not create torrentfiles folder unless 'copy_torrent_file' is True
==== GtkUI ====
* Add drag n' drop support for adding .torrent files
* Double-clicking on host in Connection Manager now will connect to that host
* Fix selecting torrents when right-clicking on them in torrentview and filestab
* Fix new release check
* Display 'total_wanted' instead of 'total_size' in Size column
* Fix displaying of torrents when language is not English
* Fix the view options to be persistent between sessions
* Fix signalreceiver when switching between daemons
=== Deluge 0.9.03 - "1.0.0_RC3" (21 July 2008) ===
==== Core ====
* File progress fixes from libtorrent
* Fix building on FreeBSD
* Fix #350 stop seeds when stop ratio is reached
* Fix #358 properly emit torrent_removed signal when remove_at_ratio happens
==== UI ====
* Default to gtkui when running 'deluge' instead of defaulting to last used.
==== GtkUI ====
* Fix open folder
* Fix #349 tab ordering when hiding/showing
==== Windows ====
* Fix torrent file association and adding files from command line
==== Plugins ====
* Blocklist plugin has been rewritten
==== Misc ====
* Some changes for python 2.6 compatibility
=== Deluge 0.9.02 - "1.0.0_RC2" (15 July 2008) ===
==== Core ====
* Fix displaying of file progress
* Fix files to have proper read/write permissions
==== WebUI ====
* Include missing 'classic' template
* Update options tab to include queue settings
==== Windows ====
* Fix displaying of tray icon
* Fix scrolling of tray menu
* Fix hiding of tray icon when shutting down
* Fix tray icon tool tip length to show properly

14
LICENSE
View File

@ -1,3 +1,17 @@
Deluge is licensed under the GNU General Public License version 3 with the
addition of the following special exception:
In addition, as a special exception, the copyright holders give
permission to link the code of portions of this program with the OpenSSL
library.
You must obey the GNU General Public License in all respects for all of
the code used other than OpenSSL. If you modify file(s) with this
exception, you may extend this exception to your version of the file(s),
but you are not obligated to do so. If you do not wish to do so, delete
this exception statement from your version. If you delete this exception
statement from all source files in the program, then also delete it here.
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007

6
debian/changelog vendored
View File

@ -1,5 +1,5 @@
deluge-torrent (0.9.08-1) unstable; urgency=low
deluge-torrent (1.1.2-1) unstable; urgency=low
* R8 release
* 1.1.2 final
-- Andrew Resch (andar) <andrewresch@gmail.com> Tue, 26 Aug 2008 16:31:14 -0800
-- Andrew Resch (andar) <andrewresch@gmail.com> Sat, 31 Jan 2008 16:31:14 -0800

2
debian/control vendored
View File

@ -7,7 +7,7 @@ Standards-Version: 3.7.2
Package: deluge-torrent
Architecture: any
Depends: ${shlibs:Depends}, ${python:Depends}, python-gtk2, python-glade2, python-xdg, python-notify, notification-daemon | notification-daemon-xfce, python-dbus, librsvg2-common, python-pyopenssl, python-setuptools
Depends: ${shlibs:Depends}, ${python:Depends}, python-gtk2, python-glade2, python-xdg, python-notify, notification-daemon | notification-daemon-xfce, python-dbus, librsvg2-common, python-pyopenssl, python-setuptools, python-pkg-resources
Conflicts: deluge-torrent-common
Replaces: deluge-torrent-common
Description: A Bittorrent client written in Python/PyGTK

View File

@ -1,7 +1,7 @@
# The contents of this file are subject to the BitTorrent Open Source License
# Version 1.1 (the License). You may not copy or use this file, in either
# source code or executable form, except in compliance with the License. You
# may obtain a copy of the License at http://www.bittorrent.com/license/.
# The contents of this file are subject to the Python Software Foundation
# License Version 2.3 (the License). You may not copy or use this file, in
# either source code or executable form, except in compliance with the License.
# You may obtain a copy of the License at http://www.python.org/license.
#
# Software distributed under the License is distributed on an AS IS basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
@ -10,6 +10,8 @@
# Written by Petru Paler
# Minor modifications made by Andrew Resch to replace the BTFailure errors with Exceptions
def decode_int(x, f):
f += 1
newf = x.index('e', f)
@ -63,8 +65,7 @@ def bdecode(x):
r, l = decode_func[x[0]](x, 0)
except (IndexError, KeyError, ValueError):
raise Exception("not a valid bencoded string")
if l != len(x):
raise Exception("invalid bencoded value (data after valid prefix)")
return r
from types import StringType, IntType, LongType, DictType, ListType, TupleType

View File

@ -19,7 +19,19 @@
# along with deluge. If not, write to:
# The Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor
# Boston, MA 02110-1301, USA.
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the OpenSSL
# library.
# You must obey the GNU General Public License in all respects for all of
# the code used other than OpenSSL. If you modify file(s) with this
# exception, you may extend this exception to your version of the file(s),
# but you are not obligated to do so. If you do not wish to do so, delete
# this exception statement from your version. If you delete this exception
# statement from all source files in the program, then also delete it here.
#
#
@ -79,7 +91,7 @@ def get_version():
:rtype: string
"""
return pkg_resources.require("Deluge")[0].version.split("r")[0]
return pkg_resources.require("Deluge")[0].version
def get_revision():
"""
@ -188,17 +200,15 @@ def open_url_in_browser(url):
:param url: the url to open
"""
def start_browser():
import threading
import webbrowser
class BrowserThread(threading.Thread):
def __init__(self, url):
threading.Thread.__init__(self)
self.url = url
def run(self):
webbrowser.open(self.url)
BrowserThread(url).start()
return False
import threading
import webbrowser
class BrowserThread(threading.Thread):
def __init__(self, url):
threading.Thread.__init__(self)
self.url = url
def run(self):
webbrowser.open(self.url)
BrowserThread(url).start()
## Formatting text functions
@ -442,10 +452,9 @@ def free_space(path):
"""
if windows_check():
import win32api
drive = path.split(":")[0]
free = win32api.GetDiskFreeSpaceEx(drive)[0]
return free
import win32file
sectors, bytes, free, total = map(long, win32file.GetDiskFreeSpace(path))
return (free * sectors * bytes)
else:
disk_data = os.statvfs(path)
block_size = disk_data.f_bsize

View File

@ -19,7 +19,19 @@
# along with deluge. If not, write to:
# The Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor
# Boston, MA 02110-1301, USA.
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the OpenSSL
# library.
# You must obey the GNU General Public License in all respects for all of
# the code used other than OpenSSL. If you modify file(s) with this
# exception, you may extend this exception to your version of the file(s),
# but you are not obligated to do so. If you do not wish to do so, delete
# this exception statement from your version. If you delete this exception
# statement from all source files in the program, then also delete it here.
#
#

View File

@ -19,7 +19,19 @@
# along with deluge. If not, write to:
# The Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor
# Boston, MA 02110-1301, USA.
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the OpenSSL
# library.
# You must obey the GNU General Public License in all respects for all of
# the code used other than OpenSSL. If you modify file(s) with this
# exception, you may extend this exception to your version of the file(s),
# but you are not obligated to do so. If you do not wish to do so, delete
# this exception statement from your version. If you delete this exception
# statement from all source files in the program, then also delete it here.
#
#
@ -59,7 +71,6 @@ class Config(object):
"""
def __init__(self, filename, defaults=None, config_dir=None):
self.__config = {}
self.__previous_config = {}
self.__set_functions = {}
self.__change_callback = None
# This will get set with a gobject.timeout_add whenever a config option
@ -123,8 +134,6 @@ class Config(object):
log.debug("Setting '%s' to %s of %s", key, value, type(value))
# Make a copy of the current config prior to changing it
self.__previous_config.update(self.__config)
self.__config[key] = value
# Run the set_function for this key if any
try:
@ -264,13 +273,25 @@ class Config(object):
self.__save_timer = None
# Save the new config and make sure it's written to disk
try:
log.debug("Saving new config file %s", filename + ".new")
pickle.dump(self.__config, open(filename + ".new", "wb"))
f = open(filename + ".new", "wb")
pickle.dump(self.__config, f)
f.flush()
os.fsync(f.fileno())
f.close()
except Exception, e:
log.error("Error writing new config file: %s", e)
return
# Make a backup of the old config
try:
log.debug("Backing up old config file to %s~", filename)
shutil.move(filename, filename + "~")
except Exception, e:
log.error("Error backing up old config..")
# The new config file has been written successfully, so let's move it over
# the existing one.
try:

View File

@ -19,7 +19,19 @@
# along with deluge. If not, write to:
# The Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor
# Boston, MA 02110-1301, USA.
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the OpenSSL
# library.
# You must obey the GNU General Public License in all respects for all of
# the code used other than OpenSSL. If you modify file(s) with this
# exception, you may extend this exception to your version of the file(s),
# but you are not obligated to do so. If you do not wish to do so, delete
# this exception statement from your version. If you delete this exception
# statement from all source files in the program, then also delete it here.
#
#

View File

@ -19,7 +19,19 @@
# along with deluge. If not, write to:
# The Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor
# Boston, MA 02110-1301, USA.
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the OpenSSL
# library.
# You must obey the GNU General Public License in all respects for all of
# the code used other than OpenSSL. If you modify file(s) with this
# exception, you may extend this exception to your version of the file(s),
# but you are not obligated to do so. If you do not wish to do so, delete
# this exception statement from your version. If you delete this exception
# statement from all source files in the program, then also delete it here.
#
#

View File

@ -19,7 +19,19 @@
# along with deluge. If not, write to:
# The Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor
# Boston, MA 02110-1301, USA.
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the OpenSSL
# library.
# You must obey the GNU General Public License in all respects for all of
# the code used other than OpenSSL. If you modify file(s) with this
# exception, you may extend this exception to your version of the file(s),
# but you are not obligated to do so. If you do not wish to do so, delete
# this exception statement from your version. If you delete this exception
# statement from all source files in the program, then also delete it here.
#
#
import os.path
@ -74,7 +86,7 @@ class AuthManager(component.Component):
from hashlib import sha1 as sha_hash
except ImportError:
from sha import new as sha_hash
open(auth_file, "w").write("localclient:" + sha_hash(str(random.random())).hexdigest())
open(auth_file, "w").write("localclient:" + sha_hash(str(random.random())).hexdigest() + "\n")
# Change the permissions on the file so only this user can read/write it
os.chmod(auth_file, stat.S_IREAD | stat.S_IWRITE)

View File

@ -19,7 +19,19 @@
# along with deluge. If not, write to:
# The Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor
# Boston, MA 02110-1301, USA.
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the OpenSSL
# library.
# You must obey the GNU General Public License in all respects for all of
# the code used other than OpenSSL. If you modify file(s) with this
# exception, you may extend this exception to your version of the file(s),
# but you are not obligated to do so. If you do not wish to do so, delete
# this exception statement from your version. If you delete this exception
# statement from all source files in the program, then also delete it here.
#
#

View File

@ -19,7 +19,19 @@
# along with deluge. If not, write to:
# The Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor
# Boston, MA 02110-1301, USA.
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the OpenSSL
# library.
# You must obey the GNU General Public License in all respects for all of
# the code used other than OpenSSL. If you modify file(s) with this
# exception, you may extend this exception to your version of the file(s),
# but you are not obligated to do so. If you do not wish to do so, delete
# this exception statement from your version. If you delete this exception
# statement from all source files in the program, then also delete it here.
#
#
@ -173,7 +185,11 @@ class Core(
# Load the GeoIP DB for country look-ups if available
geoip_db = pkg_resources.resource_filename("deluge", os.path.join("data", "GeoIP.dat"))
if os.path.exists(geoip_db):
self.session.load_country_db(geoip_db)
try:
self.session.load_country_db(geoip_db)
except Exception, e:
log.error("Unable to load geoip database!")
log.exception(e)
# Set the user agent
self.settings = lt.session_settings()
@ -317,7 +333,36 @@ class Core(
def check_new_release(self):
if self.new_release:
log.debug("new_release: %s", self.new_release)
if self.new_release > deluge.common.get_version():
class VersionSplit(object):
def __init__(self, ver):
ver = ver.lower()
vs = ver.split("_") if "_" in ver else ver.split("-")
self.version = vs[0]
self.suffix = None
if len(vs) > 1:
for s in ("rc", "alpha", "beta", "dev"):
if s in vs[1][:len(s)]:
self.suffix = vs[1]
def __cmp__(self, ver):
if self.version > ver.version or (self.suffix and self.suffix[:3] == "dev"):
return 1
if self.version < ver.version:
return -1
if self.version == ver.version:
if self.suffix == ver.suffix:
return 0
if self.suffix is None:
return 1
if ver.suffix is None:
return -1
if self.suffix < ver.suffix:
return -1
if self.suffix > ver.suffix:
return 1
if VersionSplit(self.new_release) > VersionSplit(deluge.common.get_version()):
self.signals.emit("new_version_available", self.new_release)
return self.new_release
return False
@ -474,11 +519,13 @@ class Core(
def export_pause_all_torrents(self):
"""Pause all torrents in the session"""
self.session.pause()
for torrent in self.torrentmanager.torrents.values():
torrent.pause()
def export_resume_all_torrents(self):
"""Resume all torrents in the session"""
self.session.resume()
for torrent in self.torrentmanager.torrents.values():
torrent.resume()
self.signals.emit("torrent_all_resumed")
def export_resume_torrent(self, torrent_ids):

View File

@ -19,7 +19,19 @@
# along with deluge. If not, write to:
# The Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor
# Boston, MA 02110-1301, USA.
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the OpenSSL
# library.
# You must obey the GNU General Public License in all respects for all of
# the code used other than OpenSSL. If you modify file(s) with this
# exception, you may extend this exception to your version of the file(s),
# but you are not obligated to do so. If you do not wish to do so, delete
# this exception statement from your version. If you delete this exception
# statement from all source files in the program, then also delete it here.
#
#

View File

@ -19,7 +19,19 @@
# along with deluge. If not, write to:
# The Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor
# Boston, MA 02110-1301, USA.
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the OpenSSL
# library.
# You must obey the GNU General Public License in all respects for all of
# the code used other than OpenSSL. If you modify file(s) with this
# exception, you may extend this exception to your version of the file(s),
# but you are not obligated to do so. If you do not wish to do so, delete
# this exception statement from your version. If you delete this exception
# statement from all source files in the program, then also delete it here.
#
#

View File

@ -19,7 +19,19 @@
# along with deluge. If not, write to:
# The Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor
# Boston, MA 02110-1301, USA.
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the OpenSSL
# library.
# You must obey the GNU General Public License in all respects for all of
# the code used other than OpenSSL. If you modify file(s) with this
# exception, you may extend this exception to your version of the file(s),
# but you are not obligated to do so. If you do not wish to do so, delete
# this exception statement from your version. If you delete this exception
# statement from all source files in the program, then also delete it here.
#
#
@ -76,6 +88,11 @@ class OldStateUpgrader:
log.debug("Unable to open 0.5 state file: %s", e)
return
# Check to see if we can upgrade this file
if type(state).__name__ == 'list':
log.warning("0.5 state file is too old to upgrade")
return
new_state = deluge.core.torrentmanager.TorrentManagerState()
for ti, uid in state.torrents.items():
torrent_path = os.path.join(self.config["config_location"], "torrentfiles", ti.filename)

View File

@ -19,7 +19,19 @@
# along with deluge. If not, write to:
# The Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor
# Boston, MA 02110-1301, USA.
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the OpenSSL
# library.
# You must obey the GNU General Public License in all respects for all of
# the code used other than OpenSSL. If you modify file(s) with this
# exception, you may extend this exception to your version of the file(s),
# but you are not obligated to do so. If you do not wish to do so, delete
# this exception statement from your version. If you delete this exception
# statement from all source files in the program, then also delete it here.
#
#

View File

@ -19,7 +19,19 @@
# along with deluge. If not, write to:
# The Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor
# Boston, MA 02110-1301, USA.
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the OpenSSL
# library.
# You must obey the GNU General Public License in all respects for all of
# the code used other than OpenSSL. If you modify file(s) with this
# exception, you may extend this exception to your version of the file(s),
# but you are not obligated to do so. If you do not wish to do so, delete
# this exception statement from your version. If you delete this exception
# statement from all source files in the program, then also delete it here.
#
#
@ -68,7 +80,7 @@ DEFAULT_PREFS = {
"max_download_speed": -1.0,
"max_upload_slots_global": 4,
"max_half_open_connections": (lambda: deluge.common.windows_check() and
(lambda: deluge.common.vista_check() and 4 or 8)() or -1)(),
(lambda: deluge.common.vista_check() and 4 or 8)() or 50)(),
"max_connections_per_second": 20,
"ignore_limits_on_local_network": True,
"max_connections_per_torrent": -1,
@ -256,7 +268,8 @@ class PreferencesManager(component.Component):
def _on_set_outgoing_ports(self, key, value):
if not self.config["random_outgoing_ports"]:
log.debug("outgoing port range set to %s-%s", value[0], value[1])
self.session.outgoing_ports(value[0], value[1])
self.settings.outgoing_ports = value[0], value[1]
self.session.set_settings(self.settings)
def _on_set_random_outgoing_ports(self, key, value):
if value:
@ -265,7 +278,7 @@ class PreferencesManager(component.Component):
def _on_set_peer_tos(self, key, value):
log.debug("setting peer_tos to: %s", value)
try:
self.settings.peer_tos = str(int(value, 16))
self.settings.peer_tos = chr(int(value, 16))
except ValueError, e:
log.debug("Invalid tos byte: %s", e)
return
@ -461,7 +474,7 @@ class PreferencesManager(component.Component):
for k, v in value.items():
if v["type"]:
proxy_settings = lt.proxy_settings()
proxy_settings.proxy_type = lt.proxy_type(v["type"])
proxy_settings.type = lt.proxy_type(v["type"])
proxy_settings.username = v["username"]
proxy_settings.password = v["password"]
proxy_settings.hostname = v["hostname"]

View File

@ -19,7 +19,19 @@
# along with deluge. If not, write to:
# The Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor
# Boston, MA 02110-1301, USA.
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the OpenSSL
# library.
# You must obey the GNU General Public License in all respects for all of
# the code used other than OpenSSL. If you modify file(s) with this
# exception, you may extend this exception to your version of the file(s),
# but you are not obligated to do so. If you do not wish to do so, delete
# this exception statement from your version. If you delete this exception
# statement from all source files in the program, then also delete it here.
#
#

View File

@ -19,7 +19,19 @@
# along with deluge. If not, write to:
# The Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor
# Boston, MA 02110-1301, USA.
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the OpenSSL
# library.
# You must obey the GNU General Public License in all respects for all of
# the code used other than OpenSSL. If you modify file(s) with this
# exception, you may extend this exception to your version of the file(s),
# but you are not obligated to do so. If you do not wish to do so, delete
# this exception statement from your version. If you delete this exception
# statement from all source files in the program, then also delete it here.
#
#

View File

@ -19,7 +19,19 @@
# along with deluge. If not, write to:
# The Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor
# Boston, MA 02110-1301, USA.
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the OpenSSL
# library.
# You must obey the GNU General Public License in all respects for all of
# the code used other than OpenSSL. If you modify file(s) with this
# exception, you may extend this exception to your version of the file(s),
# but you are not obligated to do so. If you do not wish to do so, delete
# this exception statement from your version. If you delete this exception
# statement from all source files in the program, then also delete it here.
#
#
@ -82,14 +94,10 @@ class TorrentOptions(dict):
return k
def iteritems(self):
return self.items().itermitems()
return self.items().iteritems()
def has_key(self, key):
if super(TorrentOptions, self).has_key(key):
return True
elif self.default_keys.has_key(key):
return True
return False
return super(TorrentOptions, self).has_key(key) or key in self.default_keys
def __setitem__(self, key, value):
super(TorrentOptions, self).__setitem__(key, value)
@ -97,11 +105,14 @@ class TorrentOptions(dict):
def __getitem__(self, key):
if super(TorrentOptions, self).has_key(key):
return super(TorrentOptions, self).__getitem__(key)
else:
if self.default_keys[key]:
elif key in self.default_keys:
if self.default_keys[key] and self.default_keys[key] in self.config.config:
return self.config[self.default_keys[key]]
else:
return self.default_keys[key]
else:
raise KeyError
class Torrent:
"""Torrent holds information about torrents added to the libtorrent session.
@ -184,7 +195,14 @@ class Torrent:
self.trackers.append(tracker)
# Various torrent options
self.handle.resolve_countries(True)
# XXX: Disable resolve_countries if using a 64-bit long and on lt 0.14.2 or lower.
# This is a workaround for a bug in lt.
import sys
if sys.maxint > 0xFFFFFFFF and lt.version < "0.14.3.0":
self.handle.resolve_countries(False)
else:
self.handle.resolve_countries(True)
self.set_options(self.options)
# Status message holds error info about the torrent
@ -355,6 +373,17 @@ class Torrent:
log.debug("set_state_based_on_ltstate: %s", deluge.common.LT_TORRENT_STATE[ltstate])
log.debug("session.is_paused: %s", component.get("Core").session.is_paused())
# First we check for an error from libtorrent, and set the state to that
# if any occurred.
if len(self.handle.status().error) > 0:
# This is an error'd torrent
self.state = "Error"
self.set_status_message(self.handle.status().error)
if self.handle.is_paused():
self.handle.auto_managed(False)
return
if ltstate == LTSTATE["Queued"] or ltstate == LTSTATE["Checking"]:
self.state = "Checking"
return
@ -365,12 +394,7 @@ class Torrent:
elif ltstate == LTSTATE["Allocating"]:
self.state = "Allocating"
if self.handle.is_paused() and len(self.handle.status().error) > 0:
# This is an error'd torrent
self.state = "Error"
self.set_status_message(self.handle.status().error)
self.handle.auto_managed(False)
elif self.handle.is_paused() and self.handle.is_auto_managed() and not component.get("Core").session.is_paused():
if self.handle.is_paused() and self.handle.is_auto_managed() and not component.get("Core").session.is_paused():
self.state = "Queued"
elif component.get("Core").session.is_paused() or (self.handle.is_paused() and not self.handle.is_auto_managed()):
self.state = "Paused"
@ -456,7 +480,11 @@ class Torrent:
def get_peers(self):
"""Returns a list of peers and various information about them"""
ret = []
peers = self.handle.get_peer_info()
try:
peers = self.handle.get_peer_info()
except IndexError, e:
log.error("There was an error getting peer info! This may be a bug in libtorrent. Please upgrade to libtorrent >= 0.14.3.")
return ret
for peer in peers:
# We do not want to report peers that are half-connected
@ -517,12 +545,25 @@ class Torrent:
tracker = self.trackers[0]["url"]
if tracker:
url = urlparse(tracker)
url = urlparse(tracker.replace("udp://", "http://"))
if hasattr(url, "hostname"):
host = (url.hostname or 'DHT')
# Check if hostname is an IP address and just return it if that's the case
import socket
try:
socket.inet_aton(host)
except socket.error:
pass
else:
# This is an IP address because an exception wasn't raised
return url.hostname
parts = host.split(".")
if len(parts) > 2:
host = ".".join(parts[-2:])
if parts[-2] in ("co", "com", "net", "org") or parts[-1] in ("uk"):
host = ".".join(parts[-3:])
else:
host = ".".join(parts[-2:])
return host
return ""
@ -586,6 +627,14 @@ class Torrent:
"time_added": self.time_added
}
def ti_comment():
if self.handle.has_metadata():
try:
return self.torrent_info.comment().decode("utf8", "ignore")
except UnicodeDecodeError:
return self.torrent_info.comment()
return ""
def ti_name():
if self.handle.has_metadata():
try:
@ -616,6 +665,7 @@ class Torrent:
return 0
fns = {
"comment": ti_comment,
"name": ti_name,
"private": ti_priv,
"total_size": ti_total_size,
@ -654,7 +704,13 @@ class Torrent:
self.handle.set_upload_limit(int(self.max_upload_speed * 1024))
self.handle.set_download_limit(int(self.max_download_speed * 1024))
self.handle.prioritize_files(self.file_priorities)
self.handle.resolve_countries(True)
# XXX: Disable resolve_countries if using a 64-bit long and on lt 0.14.2 or lower.
# This is a workaround for a bug in lt.
import sys
if sys.maxint > 0xFFFFFFFF and lt.version < "0.14.3.0":
self.handle.resolve_countries(False)
else:
self.handle.resolve_countries(True)
def pause(self):
"""Pause this torrent"""
@ -744,6 +800,8 @@ class Torrent:
log.debug("Saving fastresume file: %s", path)
fastresume = open(path, "wb")
fastresume.write(resume_data)
fastresume.flush()
os.fsync(fastresume.fileno())
fastresume.close()
except IOError:
log.warning("Error trying to save fastresume file")
@ -812,6 +870,7 @@ class Torrent:
"""Forces a recheck of the torrents pieces"""
try:
self.handle.force_recheck()
self.handle.resume()
except Exception, e:
log.debug("Unable to force recheck: %s", e)
return False

View File

@ -19,7 +19,19 @@
# along with deluge. If not, write to:
# The Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor
# Boston, MA 02110-1301, USA.
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the OpenSSL
# library.
# You must obey the GNU General Public License in all respects for all of
# the code used other than OpenSSL. If you modify file(s) with this
# exception, you may extend this exception to your version of the file(s),
# but you are not obligated to do so. If you do not wish to do so, delete
# this exception statement from your version. If you delete this exception
# statement from all source files in the program, then also delete it here.
#
#
@ -165,6 +177,8 @@ class TorrentManager(component.Component):
self.on_alert_file_renamed)
self.alerts.register_handler("metadata_received_alert",
self.on_alert_metadata_received)
self.alerts.register_handler("file_error_alert",
self.on_alert_file_error)
def start(self):
# Get the pluginmanager reference
@ -210,7 +224,7 @@ class TorrentManager(component.Component):
def update(self):
for torrent_id, torrent in self.torrents.items():
if self.config["stop_seed_at_ratio"] or torrent.options["stop_at_ratio"]:
if self.config["stop_seed_at_ratio"] or torrent.options["stop_at_ratio"] and torrent.state not in ("Checking", "Allocating"):
stop_ratio = self.config["stop_seed_ratio"]
if torrent.options["stop_at_ratio"]:
stop_ratio = torrent.options["stop_ratio"]
@ -538,6 +552,8 @@ class TorrentManager(component.Component):
os.path.join(self.config["state_location"], "torrents.state.new"),
"wb")
cPickle.dump(state, state_file)
state_file.flush()
os.fsync(state_file.fileno())
state_file.close()
except IOError:
log.warning("Unable to save state file.")
@ -618,8 +634,11 @@ class TorrentManager(component.Component):
def on_alert_torrent_finished(self, alert):
log.debug("on_alert_torrent_finished")
# Get the torrent_id
try:
torrent = self.torrents[str(alert.handle.info_hash())]
except:
return
torrent_id = str(alert.handle.info_hash())
torrent = self.torrents[torrent_id]
log.debug("%s is finished..", torrent_id)
# Move completed download to completed folder if needed
if not torrent.is_finished:
@ -631,22 +650,26 @@ class TorrentManager(component.Component):
if move_path:
if torrent.options["download_location"] != move_path:
torrent.move_storage(move_path)
torrent.is_finished = True
component.get("SignalManager").emit("torrent_finished", torrent_id)
torrent.is_finished = True
torrent.update_state()
torrent.save_resume_data()
component.get("SignalManager").emit("torrent_finished", torrent_id)
def on_alert_torrent_paused(self, alert):
log.debug("on_alert_torrent_paused")
try:
torrent = self.torrents[str(alert.handle.info_hash())]
except:
return
# Get the torrent_id
torrent_id = str(alert.handle.info_hash())
# Set the torrent state
self.torrents[torrent_id].update_state()
torrent.update_state()
component.get("SignalManager").emit("torrent_paused", torrent_id)
# Write the fastresume file
self.torrents[torrent_id].save_resume_data()
torrent.save_resume_data()
if torrent_id in self.shutdown_torrent_pause_list:
self.shutdown_torrent_pause_list.remove(torrent_id)
@ -654,20 +677,23 @@ class TorrentManager(component.Component):
def on_alert_torrent_checked(self, alert):
log.debug("on_alert_torrent_checked")
# Get the torrent_id
torrent_id = str(alert.handle.info_hash())
try:
torrent = self.torrents[str(alert.handle.info_hash())]
except:
return
# Set the torrent state
self.torrents[torrent_id].update_state()
torrent.update_state()
def on_alert_tracker_reply(self, alert):
log.debug("on_alert_tracker_reply: %s", alert.message())
# Get the torrent_id
torrent_id = str(alert.handle.info_hash())
# Set the tracker status for the torrent
try:
if alert.message() != "Got peers from DHT":
self.torrents[torrent_id].set_tracker_status(_("Announce OK"))
except KeyError:
log.debug("torrent_id doesn't exist.")
torrent = self.torrents[str(alert.handle.info_hash())]
except:
return
# Set the tracker status for the torrent
if alert.message() != "Got peers from DHT":
torrent.set_tracker_status(_("Announce OK"))
# Check to see if we got any peer information from the tracker
if alert.handle.status().num_complete == -1 or \
@ -679,87 +705,98 @@ class TorrentManager(component.Component):
log.debug("on_alert_tracker_announce")
# Get the torrent_id
try:
torrent_id = str(alert.handle.info_hash())
except RuntimeError:
log.debug("Invalid torrent handle.")
torrent = self.torrents[str(alert.handle.info_hash())]
except:
return
# Set the tracker status for the torrent
try:
self.torrents[torrent_id].set_tracker_status(_("Announce Sent"))
except KeyError:
log.debug("torrent_id doesn't exist.")
torrent.set_tracker_status(_("Announce Sent"))
def on_alert_tracker(self, alert):
log.debug("on_alert_tracker")
# Get the torrent_id
torrent_id = str(alert.handle.info_hash())
try:
torrent = self.torrents[str(alert.handle.info_hash())]
except:
return
tracker_status = "%s: %s" % \
(_("Alert"), str(alert.message()).strip('"')[8:])
# Set the tracker status for the torrent
try:
self.torrents[torrent_id].set_tracker_status(tracker_status)
except KeyError:
log.debug("torrent_id doesn't exist.")
torrent.set_tracker_status(tracker_status)
def on_alert_tracker_warning(self, alert):
log.debug("on_alert_tracker_warning")
# Get the torrent_id
torrent_id = str(alert.handle.info_hash())
try:
torrent = self.torrents[str(alert.handle.info_hash())]
except:
return
tracker_status = '%s: %s' % (_("Warning"), str(alert.message()))
# Set the tracker status for the torrent
try:
self.torrents[torrent_id].set_tracker_status(tracker_status)
except KeyError:
log.debug("torrent_id doesn't exist.")
torrent.set_tracker_status(tracker_status)
def on_alert_tracker_error(self, alert):
log.debug("on_alert_tracker_error")
torrent = self.torrents[str(alert.handle.info_hash())]
tracker_status = "%s: %s" % (_("Error"), alert.msg)
try:
torrent.set_tracker_status(tracker_status)
except KeyError:
log.debug("torrent_id doesn't exist.")
torrent = self.torrents[str(alert.handle.info_hash())]
except:
return
tracker_status = "%s: %s" % (_("Error"), alert.msg)
torrent.set_tracker_status(tracker_status)
def on_alert_storage_moved(self, alert):
log.debug("on_alert_storage_moved")
log.debug("save_path: %s", alert.handle.save_path())
# Get the torrent_id
torrent_id = str(alert.handle.info_hash())
try:
log.debug("save_path2: %s", self.torrents[torrent_id].handle.save_path())
self.torrents[torrent_id].set_save_path(alert.handle.save_path())
except KeyError:
log.debug("torrent_id doesn't exist.")
torrent = self.torrents[str(alert.handle.info_hash())]
except:
return
torrent.set_save_path(alert.handle.save_path())
def on_alert_torrent_resumed(self, alert):
log.debug("on_alert_torrent_resumed")
torrent = self.torrents[str(alert.handle.info_hash())]
try:
torrent = self.torrents[str(alert.handle.info_hash())]
except:
return
torrent.is_finished = torrent.handle.is_seed()
torrent.update_state()
def on_alert_state_changed(self, alert):
log.debug("on_alert_state_changed")
try:
torrent = self.torrents[str(alert.handle.info_hash())]
except:
return
torrent_id = str(alert.handle.info_hash())
self.torrents[torrent_id].update_state()
torrent.update_state()
component.get("SignalManager").emit("torrent_state_changed", torrent_id)
def on_alert_save_resume_data(self, alert):
log.debug("on_alert_save_resume_data")
torrent = self.torrents[str(alert.handle.info_hash())]
try:
torrent = self.torrents[str(alert.handle.info_hash())]
except:
return
torrent.write_resume_data(alert.resume_data)
def on_alert_save_resume_data_failed(self, alert):
log.debug("on_alert_save_resume_data_failed: %s", alert.message())
torrent = self.torrents[str(alert.handle.info_hash())]
try:
torrent = self.torrents[str(alert.handle.info_hash())]
except:
return
torrent.waiting_on_resume_data = False
def on_alert_file_renamed(self, alert):
log.debug("on_alert_file_renamed")
log.debug("index: %s name: %s", alert.index, alert.name)
try:
torrent = self.torrents[str(alert.handle.info_hash())]
except:
return
torrent_id = str(alert.handle.info_hash())
torrent = self.torrents[torrent_id]
torrent.files[alert.index]["path"] = alert.name
# We need to see if this file index is in a waiting_on_folder list
@ -782,5 +819,16 @@ class TorrentManager(component.Component):
def on_alert_metadata_received(self, alert):
log.debug("on_alert_metadata_received")
torrent = self.torrents[str(alert.handle.info_hash())]
try:
torrent = self.torrents[str(alert.handle.info_hash())]
except:
return
torrent.write_torrentfile()
def on_alert_file_error(self, alert):
log.debug("on_alert_file_error: %s", alert.message())
try:
torrent = self.torrents[str(alert.handle.info_hash())]
except:
return
torrent.update_state()

View File

View File

@ -1,4 +1,4 @@
.TH DELUGE 1 "November 2008" "1.0.6"
.TH DELUGE 1 "April 2009" "1.1.7"
.SH NAME
deluge - a bittorrent client
@ -38,15 +38,17 @@ Output to designated logfile instead of stdout
Set the log level (default is error): none, info, warning, error, critical, debug
.TP
.I -q --quiet
Sets the log level to 'none', this is the same as `-L none`
Sets the log level to 'none', this is the same as `\-L none`
.TP
.I -s DEFAULT_UI, --set-default-ui=DEFAULT_UI
Sets the default UI to be run when no UI is specified
.SH SEE ALSO
.B Homepage:
http://www.deluge-torrent.org/
.SH AUTHOR
This manual page was written by Andrew Resch <andrew.resch@gmail.com>.
This manual page was written by Andrew Resch <andrewresch@gmail.com>.
.br
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License, Version 3 or any later version published by the Free Software Foundation
.br

View File

@ -1,4 +1,4 @@
.TH DELUGED 1 "November 2008" "1.0.6"
.TH DELUGED 1 "April 2009" "1.1.7"
.SH NAME
deluged - a bittorrent client daemon
@ -41,7 +41,7 @@ Use pidfile to store process id
Set the log level (default is error): none, info, warning, error, critical, debug
.TP
.I -q --quiet
Sets the log level to 'none', this is the same as `-L none`
Sets the log level to 'none', this is the same as `\-L none`
.SH SEE ALSO
.B Homepage:

View File

@ -19,7 +19,19 @@
# along with deluge. If not, write to:
# The Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor
# Boston, MA 02110-1301, USA.
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the OpenSSL
# library.
# You must obey the GNU General Public License in all respects for all of
# the code used other than OpenSSL. If you modify file(s) with this
# exception, you may extend this exception to your version of the file(s),
# but you are not obligated to do so. If you do not wish to do so, delete
# this exception statement from your version. If you delete this exception
# statement from all source files in the program, then also delete it here.
#
#

View File

@ -1,14 +1,5 @@
deluge/plugins/label/label/data/label_pref.glade
deluge/plugins/label/label/data/label_options.glade
deluge/plugins/label/build/lib/label/data/label_pref.glade
deluge/plugins/label/build/lib/label/data/label_options.glade
deluge/plugins/graph/build/lib/graph/data/config.glade
deluge/plugins/blocklist/build/lib/blocklist/data/blocklist_pref.glade
deluge/plugins/blocklist/blocklist/data/blocklist_pref.glade
deluge/plugins/stats/build/lib/stats/data/config.glade
deluge/plugins/stats/build/lib/stats/data/tabs.glade
deluge/plugins/stats/stats/data/config.glade
deluge/plugins/stats/stats/data/tabs.glade
deluge/ui/gtkui/glade/add_torrent_dialog.glade
deluge/ui/gtkui/glade/filtertree_menu.glade
deluge/ui/gtkui/glade/torrent_menu.glade
@ -18,7 +9,6 @@ deluge/ui/gtkui/glade/edit_trackers.glade
deluge/ui/gtkui/glade/queuedtorrents.glade
deluge/ui/gtkui/glade/move_storage_dialog.glade
deluge/ui/gtkui/glade/connection_manager.glade
deluge/ui/gtkui/glade/wizard.glade
deluge/ui/gtkui/glade/create_torrent_dialog.glade
deluge/ui/gtkui/glade/dgtkpopups.glade
deluge/ui/gtkui/glade/tray_menu.glade
@ -65,14 +55,6 @@ deluge/plugins/blocklist/blocklist/core.py
deluge/plugins/coreclient.py
deluge/plugins/__init__.py
deluge/plugins/webuipluginbase.py
deluge/plugins/stats/setup.py
deluge/plugins/stats/stats/webui.py
deluge/plugins/stats/stats/gtkui.py
deluge/plugins/stats/stats/test.py
deluge/plugins/stats/stats/graph.py
deluge/plugins/stats/stats/test_total.py
deluge/plugins/stats/stats/__init__.py
deluge/plugins/stats/stats/core.py
deluge/configmanager.py
deluge/ui/tracker_icons.py
deluge/ui/client.py
@ -96,7 +78,7 @@ deluge/ui/console/__init__.py
deluge/ui/gtkui/listview.py
deluge/ui/gtkui/options_tab.py
deluge/ui/gtkui/statusbar.py
deluge/ui/gtkui/statistics_tab.py
deluge/ui/gtkui/status_tab.py
deluge/ui/gtkui/addtorrentdialog.py
deluge/ui/gtkui/coreconfig.py
deluge/ui/gtkui/sidebar.py
@ -156,7 +138,6 @@ deluge/ui/webui/lib/webpy022/webapi.py
deluge/ui/webui/lib/webpy022/form.py
deluge/ui/webui/lib/json.py
deluge/ui/webui/lib/newforms_plus.py
deluge/ui/webui/lib/pythonize.py
deluge/ui/webui/lib/egg_render.py
deluge/ui/webui/lib/static_handler.py
deluge/ui/webui/lib/__init__.py
@ -193,8 +174,6 @@ deluge/ui/webui/scripts/template_strings.py
deluge/ui/webui/scripts/extract_ajax_strings.py
deluge/ui/webui/scripts/copy_icons.py
deluge/ui/webui/scripts/extract_template_strings.py
deluge/ui/null/deluge_shell.py
deluge/ui/null/__init__.py
deluge/common.py
deluge/component.py
deluge/main.py
@ -211,4 +190,3 @@ deluge/xmlrpclib.py
deluge/scripts/deluge_remote.py
deluge/scripts/wiki_docgen.py
deluge/scripts/create_plugin.py
deluge/scripts/state_upgrade.py

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

3046
deluge/i18n/be.po Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

3046
deluge/i18n/bn.po Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

3046
deluge/i18n/jv.po Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

3052
deluge/i18n/nn.po Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -19,7 +19,19 @@
# along with deluge. If not, write to:
# The Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor
# Boston, MA 02110-1301, USA.
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the OpenSSL
# library.
# You must obey the GNU General Public License in all respects for all of
# the code used other than OpenSSL. If you modify file(s) with this
# exception, you may extend this exception to your version of the file(s),
# but you are not obligated to do so. If you do not wish to do so, delete
# this exception statement from your version. If you delete this exception
# statement from all source files in the program, then also delete it here.
#
#
@ -27,12 +39,32 @@
import logging
# Setup the logger
logging.basicConfig(
level=logging.ERROR,
format="[%(levelname)-8s] %(asctime)s %(module)s:%(lineno)d %(message)s",
datefmt="%H:%M:%S"
)
levels = {
"info": logging.INFO,
"warning": logging.WARNING,
"error": logging.ERROR,
"none": logging.CRITICAL,
"debug": logging.DEBUG
}
def setupLogger(level="error", filename=None):
"""
Sets up the basic logger and if `:param:filename` is set, then it will log
to that file instead of stdout.
:param level: str, the level to log
:param filename: str, the file to log to
"""
if not level or level not in levels:
level = "error"
logging.basicConfig(
level=levels[level],
format="[%(levelname)-8s] %(asctime)s %(module)s:%(lineno)d %(message)s",
datefmt="%H:%M:%S",
filename=filename,
filemode="w"
)
def setLoggerLevel(level):
"""
@ -41,14 +73,6 @@ def setLoggerLevel(level):
:param level: str, a string representing the desired level
"""
levels = {
"info": logging.INFO,
"warning": logging.WARNING,
"error": logging.ERROR,
"none": logging.CRITICAL,
"debug": logging.DEBUG
}
if level not in levels:
return

View File

@ -19,7 +19,19 @@
# along with deluge. If not, write to:
# The Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor
# Boston, MA 02110-1301, USA.
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the OpenSSL
# library.
# You must obey the GNU General Public License in all respects for all of
# the code used other than OpenSSL. If you modify file(s) with this
# exception, you may extend this exception to your version of the file(s),
# but you are not obligated to do so. If you do not wish to do so, delete
# this exception statement from your version. If you delete this exception
# statement from all source files in the program, then also delete it here.
#
#
@ -33,7 +45,9 @@ import os.path
import sys
from optparse import OptionParser
import deluge.log
import deluge.common
import deluge.configmanager
def start_ui():
"""Entry point for ui script"""
@ -58,10 +72,22 @@ def start_ui():
help="Set the log level: none, info, warning, error, critical, debug", action="store", type="str")
parser.add_option("-q", "--quiet", dest="quiet",
help="Sets the log level to 'none', this is the same as `-L none`", action="store_true", default=False)
parser.add_option("-s", "--set-default-ui", dest="default_ui",
help="Sets the default UI to be run when no UI is specified", action="store", type="str")
# Get the options and args from the OptionParser
(options, args) = parser.parse_args()
if options.default_ui:
if options.config:
deluge.configmanager.set_config_dir(options.config)
config = deluge.configmanager.ConfigManager("ui.conf")
config["default_ui"] = options.default_ui
config.save()
print "The default UI has been changed to", options.default_ui
sys.exit(0)
if options.quiet:
options.loglevel = "none"
@ -76,30 +102,18 @@ def start_ui():
if not os.path.exists(deluge.common.get_default_config_dir()):
os.makedirs(deluge.common.get_default_config_dir())
# Always log to a file in Windows
if deluge.common.windows_check() and not options.logfile:
options.logfile = "deluge.log"
# Setup the logger
deluge.log.setupLogger(level=options.loglevel, filename=options.logfile)
if options.logfile:
if options.config:
logfile = os.path.join(options.config, options.logfile)
else:
config_dir = deluge.common.get_default_config_dir()
logfile = os.path.join(config_dir, options.logfile)
sys.stdout = open(logfile, "wb")
sys.stderr = sys.stdout
sys.stdout = None
sys.stderr = None
sys.stdin = None
from deluge.log import LOG as log
# Set the log level if necessary
if options.loglevel:
import deluge.log
deluge.log.setLoggerLevel(options.loglevel)
version = deluge.common.get_version()
if deluge.common.get_revision() != "":
version = version + "r" + deluge.common.get_revision()
from deluge.log import LOG as log
log.info("Deluge ui %s", version)
log.debug("options: %s", options)
log.debug("args: %s", args)
@ -148,23 +162,14 @@ def start_daemon():
if not os.path.exists(deluge.common.get_default_config_dir()):
os.makedirs(deluge.common.get_default_config_dir())
# Opens a log file and redirects stdout to it
# Sets the options.logfile to point to the default location
def open_logfile():
path = None
if options.logfile:
path = options.logfile
else:
if not options.logfile:
if options.config:
path = os.path.join(options.config, "deluged.log")
options.logfile = os.path.join(options.config, "deluged.log")
else:
config_dir = deluge.common.get_default_config_dir()
path = os.path.join(config_dir, "deluged.log")
# Open a logfile
if path:
sys.stdout = open(path, "wb")
sys.stderr = sys.stdout
sys.stdin = None
options.logfile = os.path.join(config_dir, "deluged.log")
# Writes out a pidfile if necessary
def write_pidfile():
@ -174,7 +179,7 @@ def start_daemon():
# If the donot daemonize is set, then we just skip the forking
if not options.donot:
# Windows check, we log to the config folder by default
if deluge.common.windows_check():
if deluge.common.windows_check() or deluge.common.osx_check():
open_logfile()
write_pidfile()
else:
@ -191,10 +196,12 @@ def start_daemon():
# Do not daemonize
write_pidfile()
# Set the log level if necessary
if options.loglevel:
import deluge.log
deluge.log.setLoggerLevel(options.loglevel)
# Setup the logger
deluge.log.setupLogger(level=options.loglevel, filename=options.logfile)
from deluge.core.daemon import Daemon
Daemon(options, args)
try:
from deluge.core.daemon import Daemon
Daemon(options, args)
except Exception, e:
from deluge.log import LOG as log
log.exception(e)

View File

@ -1,14 +1,20 @@
# The contents of this file are subject to the BitTorrent Open Source License
# Version 1.1 (the License). You may not copy or use this file, in either
# source code or executable form, except in compliance with the License. You
# may obtain a copy of the License at http://www.bittorrent.com/license/.
# Taken from http://download.bittorrent.com/dl/BitTorrent-5.3-GPL.tar.gz
#
# Software distributed under the License is distributed on an AS IS basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
# for the specific language governing rights and limitations under the
# License.
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Written by Bram Cohen
# Modifications for use in Deluge by Andrew Resch 2008
import os
import os.path
@ -33,30 +39,7 @@ def gmtime():
return time.mktime(time.gmtime())
def get_filesystem_encoding():
default_encoding = 'utf8'
if os.path.supports_unicode_filenames:
encoding = None
else:
try:
encoding = sys.getfilesystemencoding()
except AttributeError:
log.debug("This version of Python cannot detect filesystem encoding.")
if encoding is None:
encoding = default_encoding
log.debug("Python failed to detect filesystem encoding. "
"Assuming '%s' instead.", default_encoding)
else:
try:
'a1'.decode(encoding)
except:
log.debug("Filesystem encoding '%s' is not supported. Using '%s' instead.",
encoding, default_encoding)
encoding = default_encoding
return encoding
return sys.getfilesystemencoding()
def decode_from_filesystem(path):
encoding = get_filesystem_encoding()
@ -125,11 +108,10 @@ def makeinfo(path, piece_length, progress, name = None,
try:
u = decode_from_filesystem(name)
except Exception, e:
s = str_exc(e)
raise Exception('Could not convert file/directory name %r to '
'Unicode (%s). Either the assumed filesystem '
'Unicode. Either the assumed filesystem '
'encoding "%s" is wrong or the filename contains '
'illegal bytes.') % (name, s, get_filesystem_encoding())
'illegal bytes.' % (name, get_filesystem_encoding()))
if u.translate(noncharacter_translate) != u:
raise Exception('File/directory name "%s" contains reserved '
@ -150,7 +132,8 @@ def makeinfo(path, piece_length, progress, name = None,
for p, f in subs:
totalsize += os.path.getsize(f)
if totalsize >= piece_length:
num_pieces = totalsize / piece_length
import math
num_pieces = math.ceil(float(totalsize) / float(piece_length))
else:
num_pieces = 1
@ -167,13 +150,13 @@ def makeinfo(path, piece_length, progress, name = None,
while pos < size:
a = min(size - pos, piece_length - done)
sh.update(h.read(a))
piece_count += 1
done += a
pos += a
totalhashed += a
if done == piece_length:
pieces.append(sh.digest())
piece_count += 1
done = 0
sh = sha()
progress(piece_count, num_pieces)

Some files were not shown because too many files have changed in this diff Show More