Add separate preference for max downloading torrents and max seeding torrents
This commit is contained in:
parent
b645417689
commit
6da46bc546
1
TODO
1
TODO
|
@ -1,4 +1,3 @@
|
||||||
for 0.5.7
|
for 0.5.7
|
||||||
* remap filenames
|
* remap filenames
|
||||||
* decide what to do about the progress bar patch
|
* decide what to do about the progress bar patch
|
||||||
* distinguish between total seeding torrents and total active torrents
|
|
||||||
|
|
|
@ -245,12 +245,16 @@
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="tooltip" translatable="yes">The number of active torrents that Deluge will run. Set to -1 for unlimited.</property>
|
<property name="tooltip" translatable="yes">The number of active torrents that Deluge will run. Set to -1 for unlimited.</property>
|
||||||
<property name="xalign">0</property>
|
<property name="xalign">0</property>
|
||||||
<property name="label" translatable="yes">Maximum simultaneous active torrents:</property>
|
<property name="label" translatable="yes">Maximum simultaneous downloading torrents:</property>
|
||||||
</widget>
|
</widget>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
<child>
|
||||||
|
<widget class="GtkAlignment" id="alignment35">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
<child>
|
<child>
|
||||||
<widget class="GtkSpinButton" id="spin_torrents">
|
<widget class="GtkSpinButton" id="spin_torrents">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
@ -263,6 +267,8 @@
|
||||||
<property name="snap_to_ticks">True</property>
|
<property name="snap_to_ticks">True</property>
|
||||||
<property name="update_policy">GTK_UPDATE_IF_VALID</property>
|
<property name="update_policy">GTK_UPDATE_IF_VALID</property>
|
||||||
</widget>
|
</widget>
|
||||||
|
</child>
|
||||||
|
</widget>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
<property name="padding">2</property>
|
<property name="padding">2</property>
|
||||||
|
@ -271,6 +277,51 @@
|
||||||
</child>
|
</child>
|
||||||
</widget>
|
</widget>
|
||||||
</child>
|
</child>
|
||||||
|
<child>
|
||||||
|
<widget class="GtkHBox" id="hbox11">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="spacing">10</property>
|
||||||
|
<child>
|
||||||
|
<widget class="GtkLabel" id="label56">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="tooltip" translatable="yes">The number of active torrents that Deluge will run. Set to -1 for unlimited.</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
|
<property name="label" translatable="yes">Maximum simultaneous seeding torrents:</property>
|
||||||
|
</widget>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<widget class="GtkAlignment" id="alignment35">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
|
<property name="left_padding">32</property>
|
||||||
|
<child>
|
||||||
|
<widget class="GtkSpinButton" id="spin_seed">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
|
<property name="tooltip" translatable="yes">The number of active torrents that Deluge will run. Set to -1 for unlimited.</property>
|
||||||
|
<property name="xalign">1</property>
|
||||||
|
<property name="adjustment">-1 -1 1000 1 10 10</property>
|
||||||
|
<property name="climb_rate">1</property>
|
||||||
|
<property name="snap_to_ticks">True</property>
|
||||||
|
<property name="update_policy">GTK_UPDATE_IF_VALID</property>
|
||||||
|
</widget>
|
||||||
|
</child>
|
||||||
|
</widget>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="padding">2</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</widget>
|
||||||
|
<packing>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<widget class="GtkCheckButton" id="chk_enable_files_dialog">
|
<widget class="GtkCheckButton" id="chk_enable_files_dialog">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
@ -283,7 +334,7 @@
|
||||||
</widget>
|
</widget>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
<property name="position">1</property>
|
<property name="position">2</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -298,7 +349,7 @@
|
||||||
</widget>
|
</widget>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="expand">False</property>
|
<property name="expand">False</property>
|
||||||
<property name="position">2</property>
|
<property name="position">3</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</widget>
|
</widget>
|
||||||
|
@ -877,6 +928,11 @@ Forced</property>
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
<child>
|
||||||
|
<widget class="GtkAlignment" id="alignment37">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||||
|
<property name="left_padding">7</property>
|
||||||
<child>
|
<child>
|
||||||
<widget class="GtkComboBox" id="combo_enclevel">
|
<widget class="GtkComboBox" id="combo_enclevel">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
@ -884,6 +940,8 @@ Forced</property>
|
||||||
Full Stream
|
Full Stream
|
||||||
Either</property>
|
Either</property>
|
||||||
</widget>
|
</widget>
|
||||||
|
</child>
|
||||||
|
</widget>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="padding">6</property>
|
<property name="padding">6</property>
|
||||||
<property name="position">2</property>
|
<property name="position">2</property>
|
||||||
|
@ -1252,6 +1310,7 @@ Either</property>
|
||||||
<property name="xalign">1</property>
|
<property name="xalign">1</property>
|
||||||
<property name="adjustment">0 -1 9000 1 10 10</property>
|
<property name="adjustment">0 -1 9000 1 10 10</property>
|
||||||
<property name="climb_rate">1</property>
|
<property name="climb_rate">1</property>
|
||||||
|
<property name="digits">1</property>
|
||||||
</widget>
|
</widget>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">1</property>
|
<property name="left_attach">1</property>
|
||||||
|
@ -1269,6 +1328,7 @@ Either</property>
|
||||||
<property name="xalign">1</property>
|
<property name="xalign">1</property>
|
||||||
<property name="adjustment">0 -1 9000 1 10 10</property>
|
<property name="adjustment">0 -1 9000 1 10 10</property>
|
||||||
<property name="climb_rate">1</property>
|
<property name="climb_rate">1</property>
|
||||||
|
<property name="digits">1</property>
|
||||||
</widget>
|
</widget>
|
||||||
<packing>
|
<packing>
|
||||||
<property name="left_attach">1</property>
|
<property name="left_attach">1</property>
|
||||||
|
|
21
src/core.py
21
src/core.py
|
@ -505,6 +505,7 @@ class Manager:
|
||||||
# but having self.is_user_paused(unique_ID) == False is
|
# but having self.is_user_paused(unique_ID) == False is
|
||||||
# also considered active.
|
# also considered active.
|
||||||
active_torrent_cnt = 0
|
active_torrent_cnt = 0
|
||||||
|
seed_torrent_cnt = 0
|
||||||
|
|
||||||
# Pause and resume torrents
|
# Pause and resume torrents
|
||||||
for torrent in self.state.queue:
|
for torrent in self.state.queue:
|
||||||
|
@ -516,17 +517,22 @@ class Manager:
|
||||||
|
|
||||||
if not torrent_state['is_paused'] or \
|
if not torrent_state['is_paused'] or \
|
||||||
(torrent_state['is_paused'] and not \
|
(torrent_state['is_paused'] and not \
|
||||||
self.is_user_paused(unique_ID)):
|
self.is_user_paused(unique_ID)) and not torrent_state['is_seed']:
|
||||||
active_torrent_cnt += 1
|
active_torrent_cnt += 1
|
||||||
|
|
||||||
|
if torrent_state['is_seed'] and not self.is_user_paused(unique_ID):
|
||||||
|
seed_torrent_cnt += 1
|
||||||
|
|
||||||
|
if (seed_torrent_cnt <= self.get_pref('max_seeding_torrents')) or (self.get_pref('max_seeding_torrents') == -1):
|
||||||
|
self.resume(unique_ID)
|
||||||
|
|
||||||
|
if (seed_torrent_cnt > self.get_pref('max_seeding_torrents')) and (self.get_pref('max_seeding_torrents') != -1):
|
||||||
|
self.pause(unique_ID)
|
||||||
|
|
||||||
if (active_torrent_cnt <= self.get_pref('max_active_torrents') or \
|
if (active_torrent_cnt <= self.get_pref('max_active_torrents') or \
|
||||||
self.get_pref('max_active_torrents') == -1) and \
|
self.get_pref('max_active_torrents') == -1) and \
|
||||||
torrent_state['is_paused'] and not \
|
torrent_state['is_paused'] and not \
|
||||||
self.is_user_paused(unique_ID):
|
self.is_user_paused(unique_ID) and not torrent_state['is_seed']:
|
||||||
# This torrent is a seed so skip all the free space checking
|
|
||||||
if torrent_state['is_seed']:
|
|
||||||
self.resume(unique_ID)
|
|
||||||
continue
|
|
||||||
|
|
||||||
# Before we resume, we should check if the torrent is using Full Allocation
|
# Before we resume, we should check if the torrent is using Full Allocation
|
||||||
# and if there is enough space on to finish this file.
|
# and if there is enough space on to finish this file.
|
||||||
|
@ -547,10 +553,11 @@ of HD space! Oops!\nWe had to pause at least one torrent"))
|
||||||
print "Not enough free space to resume this torrent!"
|
print "Not enough free space to resume this torrent!"
|
||||||
else: #We're using compact allocation so lets just resume
|
else: #We're using compact allocation so lets just resume
|
||||||
self.resume(unique_ID)
|
self.resume(unique_ID)
|
||||||
|
|
||||||
elif not torrent_state['is_paused'] and \
|
elif not torrent_state['is_paused'] and \
|
||||||
((active_torrent_cnt > self.get_pref('max_active_torrents') and \
|
((active_torrent_cnt > self.get_pref('max_active_torrents') and \
|
||||||
self.get_pref('max_active_torrents') != -1) or \
|
self.get_pref('max_active_torrents') != -1) or \
|
||||||
self.is_user_paused(unique_ID)):
|
self.is_user_paused(unique_ID)) and not torrent_state['is_seed']:
|
||||||
self.pause(unique_ID)
|
self.pause(unique_ID)
|
||||||
|
|
||||||
# Handle autoseeding - downqueue as needed
|
# Handle autoseeding - downqueue as needed
|
||||||
|
|
|
@ -144,6 +144,7 @@ class PreferencesDlg:
|
||||||
self.glade.get_widget("spin_web_proxy_port").set_value(self.preferences.get("web_proxy_port"))
|
self.glade.get_widget("spin_web_proxy_port").set_value(self.preferences.get("web_proxy_port"))
|
||||||
self.glade.get_widget("spin_max_half_open").set_value(float(self.preferences.get("max_half_open")))
|
self.glade.get_widget("spin_max_half_open").set_value(float(self.preferences.get("max_half_open")))
|
||||||
self.glade.get_widget("spin_torrents").set_value(float(self.preferences.get("max_active_torrents")))
|
self.glade.get_widget("spin_torrents").set_value(float(self.preferences.get("max_active_torrents")))
|
||||||
|
self.glade.get_widget("spin_seed").set_value(float(self.preferences.get("max_seeding_torrents")))
|
||||||
self.glade.get_widget("chk_seedbottom").set_active(self.preferences.get("queue_seeds_to_bottom"))
|
self.glade.get_widget("chk_seedbottom").set_active(self.preferences.get("queue_seeds_to_bottom"))
|
||||||
self.glade.get_widget("chk_queue_above_completed").set_sensitive(self.preferences.get("queue_seeds_to_bottom"))
|
self.glade.get_widget("chk_queue_above_completed").set_sensitive(self.preferences.get("queue_seeds_to_bottom"))
|
||||||
self.glade.get_widget("chk_queue_above_completed").set_active(self.preferences.get("queue_above_completed"))
|
self.glade.get_widget("chk_queue_above_completed").set_active(self.preferences.get("queue_above_completed"))
|
||||||
|
@ -264,6 +265,7 @@ class PreferencesDlg:
|
||||||
self.preferences.set("max_connections_per_torrent", int(self.glade.get_widget("spin_max_connections_per_torrent").get_value()))
|
self.preferences.set("max_connections_per_torrent", int(self.glade.get_widget("spin_max_connections_per_torrent").get_value()))
|
||||||
self.preferences.set("max_half_open", int(self.glade.get_widget("spin_max_half_open").get_value()))
|
self.preferences.set("max_half_open", int(self.glade.get_widget("spin_max_half_open").get_value()))
|
||||||
self.preferences.set("max_active_torrents", int(self.glade.get_widget("spin_torrents").get_value()))
|
self.preferences.set("max_active_torrents", int(self.glade.get_widget("spin_torrents").get_value()))
|
||||||
|
self.preferences.set("max_seeding_torrents", int(self.glade.get_widget("spin_seed").get_value()))
|
||||||
self.preferences.set("queue_seeds_to_bottom", self.glade.get_widget("chk_seedbottom").get_active())
|
self.preferences.set("queue_seeds_to_bottom", self.glade.get_widget("chk_seedbottom").get_active())
|
||||||
self.preferences.set("enable_dht", self.glade.get_widget("chk_dht").get_active())
|
self.preferences.set("enable_dht", self.glade.get_widget("chk_dht").get_active())
|
||||||
self.preferences.set("gui_update_interval", self.glade.get_widget("spin_gui").get_value())
|
self.preferences.set("gui_update_interval", self.glade.get_widget("spin_gui").get_value())
|
||||||
|
|
|
@ -70,6 +70,7 @@ if common.windows_check():
|
||||||
"lock_tray" : False,
|
"lock_tray" : False,
|
||||||
"max_half_open" : 8,
|
"max_half_open" : 8,
|
||||||
"max_active_torrents" : 8,
|
"max_active_torrents" : 8,
|
||||||
|
"max_seeding_torrents" : 8,
|
||||||
"max_connections_global" : 200,
|
"max_connections_global" : 200,
|
||||||
"max_connections_per_torrent" : -1,
|
"max_connections_per_torrent" : -1,
|
||||||
"max_download_speed" : -1,
|
"max_download_speed" : -1,
|
||||||
|
@ -179,6 +180,7 @@ else:
|
||||||
"lock_tray" : False,
|
"lock_tray" : False,
|
||||||
"max_half_open" : 8,
|
"max_half_open" : 8,
|
||||||
"max_active_torrents" : 8,
|
"max_active_torrents" : 8,
|
||||||
|
"max_seeding_torrents" : 8,
|
||||||
"max_connections_global" : 200,
|
"max_connections_global" : 200,
|
||||||
"max_connections_per_torrent" : -1,
|
"max_connections_per_torrent" : -1,
|
||||||
"max_download_speed" : -1,
|
"max_download_speed" : -1,
|
||||||
|
|
Loading…
Reference in New Issue