Preferences dialog now sets core configuration options.
This commit is contained in:
parent
a46610a04a
commit
4691dcbaa2
|
@ -114,6 +114,10 @@ class Config:
|
|||
log.warning("Key does not exist, returning None")
|
||||
return None
|
||||
|
||||
def get_config(self):
|
||||
"""Returns the entire configuration as a dictionary."""
|
||||
return self.config
|
||||
|
||||
def __getitem__(self, key):
|
||||
return self.config[key]
|
||||
|
||||
|
|
|
@ -52,7 +52,23 @@ DEFAULT_PREFS = {
|
|||
"download_location": deluge.common.get_default_download_dir(),
|
||||
"listen_ports": [6881, 6891],
|
||||
"torrentfiles_location": deluge.common.get_default_torrent_dir(),
|
||||
"plugins_location": deluge.common.get_default_plugin_dir()
|
||||
"plugins_location": deluge.common.get_default_plugin_dir(),
|
||||
"prioritize_first_last_pieces": False,
|
||||
"random_port": False,
|
||||
"dht": False,
|
||||
"upnp": False,
|
||||
"natpmp": False,
|
||||
"utpex": False,
|
||||
"enc_in_policy": 1,
|
||||
"enc_out_policy": 1,
|
||||
"enc_level": 1,
|
||||
"enc_prefer_rc4": True,
|
||||
"max_connections_global": -1,
|
||||
"max_upload_speed": -1.0,
|
||||
"max_download_speed": -1.0,
|
||||
"max_upload_slots_global": -1,
|
||||
"max_connections_per_torrent": -1,
|
||||
"max_upload_slots_per_torrent": -1
|
||||
}
|
||||
|
||||
class Core(dbus.service.Object):
|
||||
|
@ -188,6 +204,32 @@ class Core(dbus.service.Object):
|
|||
"""Save the current session state to file."""
|
||||
# Have the TorrentManager save it's state
|
||||
self.torrents.save_state()
|
||||
|
||||
@dbus.service.method(dbus_interface="org.deluge_torrent.Deluge",
|
||||
in_signature="",
|
||||
out_signature="ay")
|
||||
def get_config(self):
|
||||
"""Get all the preferences as a dictionary"""
|
||||
config = self.config.get_config()
|
||||
config = pickle.dumps(config)
|
||||
return config
|
||||
|
||||
@dbus.service.method(dbus_interface="org.deluge_torrent.Deluge",
|
||||
in_signature="ay")
|
||||
def set_config(self, config):
|
||||
"""Set the config with values from dictionary"""
|
||||
# Convert the byte array into the dictionary
|
||||
config = "".join(chr(b) for b in config)
|
||||
config = pickle.loads(config)
|
||||
# Load all the values into the configuration
|
||||
for key in config.keys():
|
||||
self.config[key] = config[key]
|
||||
|
||||
@dbus.service.method(dbus_interface="org.deluge_torrent.Deluge",
|
||||
out_signature="i")
|
||||
def get_listen_port(self):
|
||||
"""Returns the active listen port"""
|
||||
return self.session.listen_port()
|
||||
|
||||
# Signals
|
||||
@dbus.service.signal(dbus_interface="org.deluge_torrent.Deluge",
|
||||
|
|
|
@ -38,7 +38,7 @@ import logging
|
|||
# Setup the logger
|
||||
logging.basicConfig(
|
||||
level=logging.DEBUG,
|
||||
format="[%(levelname)-8s] %(name)s:%(module)s:%(lineno)d %(message)s"
|
||||
format="[%(levelname)-8s] %(module)s:%(lineno)d %(message)s"
|
||||
)
|
||||
|
||||
# Get the logger
|
||||
|
|
|
@ -129,3 +129,25 @@ def get_session_state(core=None):
|
|||
# De-serialize the object
|
||||
state = pickle.loads(state)
|
||||
return state
|
||||
|
||||
def get_config(core=None):
|
||||
if core is None:
|
||||
core = get_core()
|
||||
config = core.get_config()
|
||||
config = "".join(chr(b) for b in config)
|
||||
config = pickle.loads(config)
|
||||
return config
|
||||
|
||||
def set_config(config, core=None):
|
||||
if config == {}:
|
||||
return
|
||||
if core is None:
|
||||
core = get_core()
|
||||
config = pickle.dumps(config)
|
||||
core.set_config(config)
|
||||
|
||||
def get_listen_port(core=None):
|
||||
if core is None:
|
||||
core = get_core()
|
||||
return int(core.get_listen_port())
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
|
||||
<!--Generated with glade3 3.2.2 on Wed Sep 12 05:11:04 2007 by andrew@fragment-->
|
||||
<!--Generated with glade3 3.2.2 on Fri Sep 14 02:19:37 2007 by andrew@fragment-->
|
||||
<glade-interface>
|
||||
<widget class="GtkDialog" id="pref_dialog">
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||
|
@ -24,11 +24,17 @@
|
|||
<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>
|
||||
<child>
|
||||
<widget class="GtkTreeView" id="treeview">
|
||||
<widget class="GtkViewport" id="viewport6">
|
||||
<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="headers_clickable">True</property>
|
||||
<property name="resize_mode">GTK_RESIZE_QUEUE</property>
|
||||
<child>
|
||||
<widget class="GtkTreeView" id="treeview">
|
||||
<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>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="resize">False</property>
|
||||
|
@ -120,6 +126,8 @@
|
|||
<property name="response_id">0</property>
|
||||
<property name="active">True</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<property name="group">radio_ask_save</property>
|
||||
<signal name="toggled" handler="on_radio_save_all_to_toggled"/>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -206,6 +214,7 @@
|
|||
<property name="label" translatable="yes">Use Compact Allocation</property>
|
||||
<property name="response_id">0</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<property name="group">radio_full_allocation</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -385,9 +394,12 @@
|
|||
<widget class="GtkSpinButton" id="spin_port_min">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="max_length">5</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="adjustment">0 0 65535 1 10 10</property>
|
||||
<property name="climb_rate">1</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -411,9 +423,12 @@
|
|||
<widget class="GtkSpinButton" id="spin_port_max">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="max_length">5</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="adjustment">0 0 65535 1 10 10</property>
|
||||
<property name="climb_rate">1</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -756,7 +771,7 @@ Full Stream</property>
|
|||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkCheckButton" id="chk_pref_rc">
|
||||
<widget class="GtkCheckButton" id="chk_pref_rc4">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes">Prefer to encrypt the entire stream</property>
|
||||
|
@ -866,54 +881,60 @@ Full Stream</property>
|
|||
<property name="n_columns">2</property>
|
||||
<property name="column_spacing">15</property>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label16">
|
||||
<widget class="GtkSpinButton" id="spin_max_upload_slots_global">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">The maximum upload speed for all torrents. Set -1 for unlimited.</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Maximum Upload Speed (KiB/s):</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label15">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">The maximum number of connections allowed. Set -1 for unlimited.</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Maximum Connections:</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label14">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">The maximum upload speed for all torrents. Set -1 for unlimited.</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Maximum Upload Slots:</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="tooltip" translatable="yes">The maximum upload slots for all torrents. Set -1 for unlimited.</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="adjustment">-1 -1 9000 1 10 10</property>
|
||||
<property name="climb_rate">1</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkSpinButton" id="spin_max_connections_global">
|
||||
<widget class="GtkSpinButton" id="spin_max_upload">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="tooltip" translatable="yes">The maximum number of connections allowed. Set -1 for unlimited.</property>
|
||||
<property name="tooltip" translatable="yes">The maximum upload speed for all torrents. Set -1 for unlimited.</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="adjustment">-1 -1 1000 1 10 10</property>
|
||||
<property name="adjustment">-1 -1 9000 1 10 10</property>
|
||||
<property name="climb_rate">1</property>
|
||||
<property name="digits">1</property>
|
||||
<property name="numeric">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkSpinButton" id="spin_max_download">
|
||||
<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 maximum download speed for all torrents. Set -1 for unlimited.</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="adjustment">-1 -1 9000 1 10 10</property>
|
||||
<property name="climb_rate">1</property>
|
||||
<property name="digits">1</property>
|
||||
<property name="numeric">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
@ -931,57 +952,61 @@ Full Stream</property>
|
|||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkSpinButton" id="spin_max_download">
|
||||
<widget class="GtkSpinButton" id="spin_max_connections_global">
|
||||
<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 maximum download speed for all torrents. Set -1 for unlimited.</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="adjustment">0 -1 9000 1 10 10</property>
|
||||
<property name="climb_rate">1</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkSpinButton" id="spin_max_upload">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="tooltip" translatable="yes">The maximum upload speed for all torrents. Set -1 for unlimited.</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="adjustment">0 -1 9000 1 10 10</property>
|
||||
<property name="climb_rate">1</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkSpinButton" id="spin_max_upload_slots_global">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="tooltip" translatable="yes">The maximum upload slots for all torrents. Set -1 for unlimited.</property>
|
||||
<property name="tooltip" translatable="yes">The maximum number of connections allowed. Set -1 for unlimited.</property>
|
||||
<property name="max_length">4</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="adjustment">-1 -1 9000 1 10 10</property>
|
||||
<property name="climb_rate">1</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
<property name="update_policy">GTK_UPDATE_IF_VALID</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label14">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">The maximum upload speed for all torrents. Set -1 for unlimited.</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Maximum Upload Slots:</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="top_attach">3</property>
|
||||
<property name="bottom_attach">4</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label15">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">The maximum number of connections allowed. Set -1 for unlimited.</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Maximum Connections:</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label16">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">The maximum upload speed for all torrents. Set -1 for unlimited.</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Maximum Upload Speed (KiB/s):</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="top_attach">2</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
|
@ -1025,18 +1050,40 @@ Full Stream</property>
|
|||
<property name="n_columns">2</property>
|
||||
<property name="column_spacing">15</property>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label18">
|
||||
<widget class="GtkSpinButton" id="spin_max_upload_slots_per_torrent">
|
||||
<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="xalign">0</property>
|
||||
<property name="label" translatable="yes">Maximum Upload Slots:</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="tooltip" translatable="yes">The maximum upload slots per torrent. Set -1 for unlimited.</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="adjustment">-1 -1 9000 1 10 10</property>
|
||||
<property name="climb_rate">1</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkSpinButton" id="spin_max_connections_per_torrent">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="tooltip" translatable="yes">The maximum number of connections per torrent. Set -1 for unlimited.</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="adjustment">-1 -1 9000 1 10 10</property>
|
||||
<property name="snap_to_ticks">True</property>
|
||||
<property name="numeric">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label17">
|
||||
<property name="visible">True</property>
|
||||
|
@ -1049,31 +1096,13 @@ Full Stream</property>
|
|||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkSpinButton" id="spin_max_connections_per_torrent">
|
||||
<widget class="GtkLabel" id="label18">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="tooltip" translatable="yes">The maximum number of connections per torrent. Set -1 for unlimited.</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="adjustment">-1 -1 1000 1 10 10</property>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="label" translatable="yes">Maximum Upload Slots:</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkSpinButton" id="spin_max_upload_slots_per_torrent">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="tooltip" translatable="yes">The maximum upload slots per torrent. Set -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>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
|
@ -1322,14 +1351,31 @@ Full Stream</property>
|
|||
<property name="n_columns">2</property>
|
||||
<property name="column_spacing">10</property>
|
||||
<child>
|
||||
<widget class="GtkEntry" id="txt_open_folder_location">
|
||||
<widget class="GtkRadioButton" id="radio_open_folder_stock">
|
||||
<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="label" translatable="yes">Open folder with:</property>
|
||||
<property name="response_id">0</property>
|
||||
<property name="active">True</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkRadioButton" id="radio_open_folder_custom">
|
||||
<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="label" translatable="yes">Custom:</property>
|
||||
<property name="response_id">0</property>
|
||||
<property name="active">True</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<property name="group">radio_open_folder_stock</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
|
@ -1359,35 +1405,19 @@ Thunar</property>
|
|||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkRadioButton" id="radio_open_folder_custom">
|
||||
<widget class="GtkEntry" id="txt_open_folder_location">
|
||||
<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="label" translatable="yes">Custom:</property>
|
||||
<property name="response_id">0</property>
|
||||
<property name="active">True</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkRadioButton" id="radio_open_folder_stock">
|
||||
<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="label" translatable="yes">Open folder with:</property>
|
||||
<property name="response_id">0</property>
|
||||
<property name="active">True</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="x_options">GTK_FILL</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
|
@ -1485,7 +1515,7 @@ Thunar</property>
|
|||
<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="xalign">0</property>
|
||||
<property name="label" translatable="yes">Help us improve Deluge by sending us your Python and PyGTK versions, OS and processor types. Absolutely no other information is sent.</property>
|
||||
<property name="label" translatable="yes">Help us improve Deluge by sending us your Python version, PyGTK version, OS and processor types. Absolutely no other information is sent.</property>
|
||||
<property name="wrap">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
|
|
|
@ -70,7 +70,6 @@ class MenuBar:
|
|||
## Edit Menu
|
||||
"on_menuitem_preferences_activate": \
|
||||
self.on_menuitem_preferences_activate,
|
||||
"on_menuitem_plugins_activate": self.on_menuitem_plugins_activate,
|
||||
|
||||
## View Menu
|
||||
"on_menuitem_toolbar_toggled": self.on_menuitem_toolbar_toggled,
|
||||
|
@ -120,9 +119,6 @@ class MenuBar:
|
|||
def on_menuitem_preferences_activate(self, data=None):
|
||||
log.debug("on_menuitem_preferences_activate")
|
||||
self.window.preferences.show()
|
||||
|
||||
def on_menuitem_plugins_activate(self, data=None):
|
||||
log.debug("on_menuitem_plugins_activate")
|
||||
|
||||
## Torrent Menu ##
|
||||
def on_menuitem_pause_activate(self, data=None):
|
||||
|
|
|
@ -37,16 +37,18 @@ import gtk, gtk.glade
|
|||
import pkg_resources
|
||||
|
||||
from deluge.log import LOG as log
|
||||
import deluge.ui.functions as functions
|
||||
|
||||
class Preferences:
|
||||
def __init__(self, window):
|
||||
self.window = window
|
||||
self.pref_glade = gtk.glade.XML(
|
||||
self.glade = gtk.glade.XML(
|
||||
pkg_resources.resource_filename("deluge.ui.gtkui",
|
||||
"glade/preferences_dialog.glade"))
|
||||
self.pref_dialog = self.pref_glade.get_widget("pref_dialog")
|
||||
self.treeview = self.pref_glade.get_widget("treeview")
|
||||
self.notebook = self.pref_glade.get_widget("notebook")
|
||||
self.pref_dialog = self.glade.get_widget("pref_dialog")
|
||||
self.treeview = self.glade.get_widget("treeview")
|
||||
self.notebook = self.glade.get_widget("notebook")
|
||||
self.core = functions.get_core()
|
||||
# Setup the liststore for the categories (tab pages)
|
||||
self.liststore = gtk.ListStore(int, str)
|
||||
self.treeview.set_model(self.liststore)
|
||||
|
@ -54,26 +56,166 @@ class Preferences:
|
|||
column = gtk.TreeViewColumn("Categories", render, text=1)
|
||||
self.treeview.append_column(column)
|
||||
# Add the default categories
|
||||
self.liststore.append([0, "Downloads"])
|
||||
self.liststore.append([1, "Network"])
|
||||
self.liststore.append([2, "Bandwidth"])
|
||||
self.liststore.append([3, "Other"])
|
||||
self.liststore.append([4, "Plugins"])
|
||||
|
||||
i = 0
|
||||
for category in ["Downloads", "Network", "Bandwidth", "Other",
|
||||
"Plugins"]:
|
||||
self.liststore.append([i, category])
|
||||
i += 1
|
||||
|
||||
# Connect to the 'changed' event of TreeViewSelection to get selection
|
||||
# changes.
|
||||
self.treeview.get_selection().connect("changed",
|
||||
self.on_selection_changed)
|
||||
|
||||
self.pref_glade.signal_autoconnect({
|
||||
self.glade.signal_autoconnect({
|
||||
"on_pref_dialog_delete_event": self.on_pref_dialog_delete_event,
|
||||
"on_button_ok_clicked": self.on_button_ok_clicked,
|
||||
"on_button_apply_clicked": self.on_button_apply_clicked,
|
||||
"on_button_cancel_clicked": self.on_button_cancel_clicked
|
||||
"on_button_cancel_clicked": self.on_button_cancel_clicked,
|
||||
"on_radio_save_all_to_toggled": self.on_toggle
|
||||
})
|
||||
|
||||
def add_page(self, name, widget):
|
||||
"""Add a another page to the notebook"""
|
||||
index = self.notebook.append_page(widget)
|
||||
self.liststore.append([index, name])
|
||||
|
||||
def get_config(self):
|
||||
"""Get the configuration from the core."""
|
||||
# Get the config dictionary from the core
|
||||
self.config = functions.get_config(self.core)
|
||||
|
||||
def show(self):
|
||||
self.get_config()
|
||||
# Update the preferences dialog to reflect current config settings
|
||||
|
||||
## Downloads tab ##
|
||||
# FIXME: Add GtkUI specific prefs here
|
||||
# Core specific options for Downloads tab
|
||||
|
||||
# This one will need to be re-evaluated if the core is running on a
|
||||
# different machine.. We won't be able to use the local file browser to
|
||||
# choose a download location.. It will be specific to the machine core
|
||||
# is running on.
|
||||
self.glade.get_widget("download_path_button").set_filename(
|
||||
self.config["download_location"])
|
||||
self.glade.get_widget("radio_compact_allocation").set_active(
|
||||
self.config["compact_allocation"])
|
||||
self.glade.get_widget("radio_full_allocation").set_active(
|
||||
not self.config["compact_allocation"])
|
||||
self.glade.get_widget("chk_prioritize_first_last_pieces").set_active(
|
||||
self.config["prioritize_first_last_pieces"])
|
||||
|
||||
## Network tab ##
|
||||
self.glade.get_widget("spin_port_min").set_value(
|
||||
self.config["listen_ports"][0])
|
||||
self.glade.get_widget("spin_port_max").set_value(
|
||||
self.config["listen_ports"][1])
|
||||
self.glade.get_widget("active_port_label").set_text(
|
||||
str(functions.get_listen_port(self.core)))
|
||||
self.glade.get_widget("chk_random_port").set_active(
|
||||
self.config["random_port"])
|
||||
self.glade.get_widget("chk_dht").set_active(
|
||||
self.config["dht"])
|
||||
self.glade.get_widget("chk_upnp").set_active(
|
||||
self.config["upnp"])
|
||||
self.glade.get_widget("chk_natpmp").set_active(
|
||||
self.config["natpmp"])
|
||||
self.glade.get_widget("chk_utpex").set_active(
|
||||
self.config["utpex"])
|
||||
self.glade.get_widget("combo_encin").set_active(
|
||||
self.config["enc_in_policy"])
|
||||
self.glade.get_widget("combo_encout").set_active(
|
||||
self.config["enc_out_policy"])
|
||||
self.glade.get_widget("combo_enclevel").set_active(
|
||||
self.config["enc_level"])
|
||||
self.glade.get_widget("chk_pref_rc4").set_active(
|
||||
self.config["enc_prefer_rc4"])
|
||||
|
||||
## Bandwidth tab ##
|
||||
self.glade.get_widget("spin_max_connections_global").set_value(
|
||||
self.config["max_connections_global"])
|
||||
self.glade.get_widget("spin_max_download").set_value(
|
||||
self.config["max_download_speed"])
|
||||
self.glade.get_widget("spin_max_upload").set_value(
|
||||
self.config["max_upload_speed"])
|
||||
self.glade.get_widget("spin_max_upload_slots_global").set_value(
|
||||
self.config["max_upload_slots_global"])
|
||||
self.glade.get_widget("spin_max_connections_per_torrent").set_value(
|
||||
self.config["max_connections_per_torrent"])
|
||||
self.glade.get_widget("spin_max_upload_slots_per_torrent").set_value(
|
||||
self.config["max_upload_slots_per_torrent"])
|
||||
|
||||
## Other tab ##
|
||||
# All of it is UI only.
|
||||
|
||||
# Now show the dialog
|
||||
self.pref_dialog.show()
|
||||
|
||||
def set_config(self):
|
||||
"""Sets all altered config values in the core"""
|
||||
# Get the values from the dialog
|
||||
new_config = {}
|
||||
## Downloads tab ##
|
||||
new_config["download_location"] = \
|
||||
self.glade.get_widget("download_path_button").get_filename()
|
||||
new_config["compact_allocation"] = \
|
||||
self.glade.get_widget("radio_compact_allocation").get_active()
|
||||
new_config["prioritize_first_last_pieces"] = \
|
||||
self.glade.get_widget(
|
||||
"chk_prioritize_first_last_pieces").get_active()
|
||||
|
||||
## Network tab ##
|
||||
listen_ports = []
|
||||
listen_ports.append(
|
||||
self.glade.get_widget("spin_port_min").get_value_as_int())
|
||||
listen_ports.append(
|
||||
self.glade.get_widget("spin_port_max").get_value_as_int())
|
||||
new_config["listen_ports"] = listen_ports
|
||||
new_config["random_port"] = \
|
||||
self.glade.get_widget("chk_random_port").get_active()
|
||||
new_config["dht"] = self.glade.get_widget("chk_dht").get_active()
|
||||
new_config["upnp"] = self.glade.get_widget("chk_upnp").get_active()
|
||||
new_config["natpmp"] = self.glade.get_widget("chk_natpmp").get_active()
|
||||
new_config["utpex"] = self.glade.get_widget("chk_utpex").get_active()
|
||||
new_config["enc_in_policy"] = \
|
||||
self.glade.get_widget("combo_encin").get_active()
|
||||
new_config["enc_out_policy"] = \
|
||||
self.glade.get_widget("combo_encout").get_active()
|
||||
new_config["enc_level"] = \
|
||||
self.glade.get_widget("combo_enclevel").get_active()
|
||||
new_config["enc_prefer_rc4"] = \
|
||||
self.glade.get_widget("chk_pref_rc4").get_active()
|
||||
|
||||
## Bandwidth tab ##
|
||||
new_config["max_connections_global"] = \
|
||||
self.glade.get_widget(
|
||||
"spin_max_connections_global").get_value_as_int()
|
||||
new_config["max_download_speed"] = \
|
||||
self.glade.get_widget("spin_max_download").get_value()
|
||||
new_config["max_upload_speed"] = \
|
||||
self.glade.get_widget("spin_max_upload").get_value()
|
||||
new_config["max_upload_slots_global"] = \
|
||||
self.glade.get_widget(
|
||||
"spin_max_upload_slots_global").get_value_as_int()
|
||||
new_config["max_connections_per_torrent"] = \
|
||||
self.glade.get_widget(
|
||||
"spin_max_connections_per_torrent").get_value_as_int()
|
||||
new_config["max_upload_slots_per_torrent"] = \
|
||||
self.glade.get_widget(
|
||||
"spin_max_upload_slots_per_torrent").get_value_as_int()
|
||||
|
||||
config_to_set = {}
|
||||
for key in new_config.keys():
|
||||
# The values do not match so this needs to be updated
|
||||
if self.config[key] != new_config[key]:
|
||||
config_to_set[key] = new_config[key]
|
||||
|
||||
# Set each changed config value in the core
|
||||
functions.set_config(config_to_set, self.core)
|
||||
|
||||
# Update the configuration
|
||||
self.config.update(config_to_set)
|
||||
|
||||
def hide(self):
|
||||
self.pref_dialog.hide()
|
||||
|
@ -82,14 +224,26 @@ class Preferences:
|
|||
self.hide()
|
||||
return True
|
||||
|
||||
def on_toggle(self, widget):
|
||||
"""Handles widget sensitivity based on radio/check button values."""
|
||||
value = widget.get_active()
|
||||
if widget == self.glade.get_widget('radio_save_all_to'):
|
||||
self.glade.get_widget('download_path_button').set_sensitive(value)
|
||||
|
||||
def on_button_ok_clicked(self, data):
|
||||
log.debug("on_button_ok_clicked")
|
||||
self.set_config()
|
||||
self.hide()
|
||||
return True
|
||||
|
||||
def on_button_apply_clicked(self, data):
|
||||
log.debug("on_button_apply_clicked")
|
||||
self.set_config()
|
||||
|
||||
def on_button_cancel_clicked(self, data):
|
||||
log.debug("on_button_cancel_clicked")
|
||||
self.hide()
|
||||
return True
|
||||
|
||||
def on_selection_changed(self, treeselection):
|
||||
# Show the correct notebook page based on what row is selected.
|
||||
|
|
Loading…
Reference in New Issue