Updates to the ConnectionManager stuff. This is a work in progress.
Renamed functions.py to client.py.
This commit is contained in:
parent
bf6a709340
commit
c852cfd7c1
|
@ -88,7 +88,7 @@ class Core(
|
|||
# Setup the xmlrpc server
|
||||
try:
|
||||
SimpleXMLRPCServer.SimpleXMLRPCServer.__init__(
|
||||
self, ("localhost", 6666), logRequests=False, allow_none=True)
|
||||
self, ("localhost", 58846), logRequests=False, allow_none=True)
|
||||
except:
|
||||
log.info("Daemon already running or port not available..")
|
||||
sys.exit(0)
|
||||
|
@ -200,6 +200,10 @@ class Core(
|
|||
self.loop.quit()
|
||||
|
||||
# Exported Methods
|
||||
def export_ping(self):
|
||||
"""A method to see if the core is running"""
|
||||
return True
|
||||
|
||||
def export_shutdown(self):
|
||||
"""Shutdown the core"""
|
||||
# Make shutdown an async call
|
||||
|
@ -209,6 +213,10 @@ class Core(
|
|||
"""Registers a client with the signal manager so that signals are
|
||||
sent to it."""
|
||||
self.signals.register_client(uri)
|
||||
|
||||
def export_deregister_client(self, uri):
|
||||
"""De-registers a client with the signal manager."""
|
||||
self.signals.deregister_client(uri)
|
||||
|
||||
def export_add_torrent_file(self, filename, save_path, filedump):
|
||||
"""Adds a torrent file to the libtorrent session
|
||||
|
|
|
@ -39,6 +39,11 @@ class SignalManager:
|
|||
def __init__(self):
|
||||
self.clients = []
|
||||
|
||||
def deregister_client(self, uri):
|
||||
"""Deregisters a client"""
|
||||
log.debug("Deregistering %s as a signal reciever..", uri)
|
||||
self.clients.remove(self.clients.index(uri))
|
||||
|
||||
def register_client(self, uri):
|
||||
"""Registers a client to emit signals to."""
|
||||
log.debug("Registering %s as a signal reciever..", uri)
|
||||
|
|
|
@ -45,12 +45,27 @@ from deluge.log import LOG as log
|
|||
|
||||
class CoreProxy:
|
||||
def __init__(self):
|
||||
self._uri = None
|
||||
self._core = None
|
||||
self._on_new_core_callbacks = []
|
||||
|
||||
def connect_on_new_core(self, callback):
|
||||
"""Connect a callback to be called when a new core is connected to."""
|
||||
self._on_new_core_callbacks.append(callback)
|
||||
|
||||
def set_core_uri(self, uri):
|
||||
log.info("Setting core uri as %s", uri)
|
||||
self._uri = uri
|
||||
# Get a new core
|
||||
self.get_core()
|
||||
|
||||
def get_core(self):
|
||||
if self._core is None:
|
||||
if self._core is None and self._uri is not None:
|
||||
log.debug("Creating ServerProxy..")
|
||||
self._core = xmlrpclib.ServerProxy("http://localhost:6666")
|
||||
self._core = xmlrpclib.ServerProxy(self._uri)
|
||||
# Call any callbacks registered
|
||||
for callback in self._on_new_core_callbacks:
|
||||
callback()
|
||||
|
||||
return self._core
|
||||
|
||||
|
@ -69,6 +84,14 @@ def get_core_plugin(plugin):
|
|||
core = dbus.Interface(proxy, "org.deluge_torrent.Deluge." + plugin)
|
||||
return core
|
||||
|
||||
def connect_on_new_core(callback):
|
||||
"""Connect a callback whenever a new core is connected to."""
|
||||
return _core.connect_on_new_core(callback)
|
||||
|
||||
def set_core_uri(uri):
|
||||
"""Sets the core uri"""
|
||||
return _core.set_core_uri(uri)
|
||||
|
||||
def shutdown():
|
||||
"""Shutdown the core daemon"""
|
||||
get_core().shutdown()
|
||||
|
@ -156,6 +179,15 @@ def get_available_plugins():
|
|||
def get_enabled_plugins():
|
||||
return get_core().get_enabled_plugins()
|
||||
|
||||
def get_download_rate():
|
||||
return get_core().get_download_rate()
|
||||
|
||||
def get_upload_rate():
|
||||
return get_core().get_upload_rate()
|
||||
|
||||
def get_num_connections():
|
||||
return get_core().get_num_connections()
|
||||
|
||||
def open_url_in_browser(url):
|
||||
"""Opens link in the desktop's default browser"""
|
||||
def start_browser():
|
|
@ -37,13 +37,13 @@ import gtk
|
|||
import pkg_resources
|
||||
|
||||
import deluge.common
|
||||
import deluge.ui.functions as functions
|
||||
import deluge.ui.client as client
|
||||
|
||||
class AboutDialog:
|
||||
def __init__(self):
|
||||
# Get the glade file for the about dialog
|
||||
def url_hook(dialog, url):
|
||||
functions.open_url_in_browser(url)
|
||||
client.open_url_in_browser(url)
|
||||
gtk.about_dialog_set_url_hook(url_hook)
|
||||
self.about = gtk.glade.XML(pkg_resources.resource_filename(\
|
||||
"deluge.ui.gtkui", "glade/aboutdialog.glade")).get_widget(\
|
||||
|
|
|
@ -31,6 +31,169 @@
|
|||
# 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 gtk, gtk.glade
|
||||
import pkg_resources
|
||||
import gobject
|
||||
import socket
|
||||
|
||||
import deluge.xmlrpclib as xmlrpclib
|
||||
import deluge.common
|
||||
import deluge.ui.client as client
|
||||
from deluge.configmanager import ConfigManager
|
||||
from deluge.log import LOG as log
|
||||
|
||||
DEFAULT_CONFIG = {
|
||||
"hosts": ["localhost:58846"]
|
||||
}
|
||||
|
||||
class ConnectionManager:
|
||||
def __init__(self):
|
||||
def __init__(self, window):
|
||||
# Get the glade file for the connection manager
|
||||
self.glade = gtk.glade.XML(
|
||||
pkg_resources.resource_filename("deluge.ui.gtkui",
|
||||
"glade/connection_manager.glade"))
|
||||
|
||||
self.window = window
|
||||
self.config = ConfigManager("hostlist.conf", DEFAULT_CONFIG)
|
||||
self.connection_manager = self.glade.get_widget("connection_manager")
|
||||
self.hostlist = self.glade.get_widget("hostlist")
|
||||
self.connection_manager.set_icon(deluge.common.get_logo(16))
|
||||
|
||||
self.glade.get_widget("image1").set_from_pixbuf(
|
||||
deluge.common.get_logo(32))
|
||||
|
||||
self.liststore = gtk.ListStore(gtk.gdk.Pixbuf, str)
|
||||
|
||||
# Fill in hosts from config file
|
||||
for host in self.config["hosts"]:
|
||||
row = self.liststore.append()
|
||||
self.liststore.set_value(row, 1, host)
|
||||
|
||||
# Setup host list treeview
|
||||
self.hostlist.set_model(self.liststore)
|
||||
render = gtk.CellRendererPixbuf()
|
||||
column = gtk.TreeViewColumn("Status", render, pixbuf=0)
|
||||
self.hostlist.append_column(column)
|
||||
render = gtk.CellRendererText()
|
||||
column = gtk.TreeViewColumn("Host", render, text=1)
|
||||
self.hostlist.append_column(column)
|
||||
|
||||
self.glade.signal_autoconnect({
|
||||
"on_button_addhost_clicked": self.on_button_addhost_clicked,
|
||||
"on_button_removehost_clicked": self.on_button_removehost_clicked,
|
||||
"on_button_startdaemon_clicked": \
|
||||
self.on_button_startdaemon_clicked,
|
||||
"on_button_cancel_clicked": self.on_button_cancel_clicked,
|
||||
"on_button_connect_clicked": self.on_button_connect_clicked,
|
||||
})
|
||||
|
||||
self.connection_manager.connect("delete-event", self.on_delete_event)
|
||||
|
||||
def show(self):
|
||||
self.update_timer = gobject.timeout_add(5000, self.update)
|
||||
self.update()
|
||||
self.connection_manager.show_all()
|
||||
|
||||
def hide(self):
|
||||
self.connection_manager.hide()
|
||||
gobject.source_remove(self.update_timer)
|
||||
|
||||
def update(self):
|
||||
"""Updates the host status"""
|
||||
def update_row(model=None, path=None, row=None, columns=None):
|
||||
uri = model.get_value(row, 1)
|
||||
uri = "http://" + uri
|
||||
online = True
|
||||
host = None
|
||||
try:
|
||||
host = xmlrpclib.ServerProxy(uri)
|
||||
host.ping()
|
||||
except socket.error:
|
||||
print "socket.error!"
|
||||
online = False
|
||||
|
||||
print "online: ", online
|
||||
del host
|
||||
|
||||
if online:
|
||||
image = gtk.STOCK_YES
|
||||
else:
|
||||
image = gtk.STOCK_NO
|
||||
|
||||
pixbuf = self.connection_manager.render_icon(
|
||||
image, gtk.ICON_SIZE_MENU)
|
||||
|
||||
model.set_value(row, 0, pixbuf)
|
||||
|
||||
self.liststore.foreach(update_row)
|
||||
return True
|
||||
|
||||
def save(self):
|
||||
"""Save the current host list to file"""
|
||||
def append_row(model=None, path=None, row=None, columns=None):
|
||||
hostlist.append(model.get_value(row, 1))
|
||||
|
||||
hostlist = []
|
||||
self.liststore.foreach(append_row, hostlist)
|
||||
self.config["hosts"] = hostlist
|
||||
self.config.save()
|
||||
|
||||
## Callbacks
|
||||
def on_delete_event(self, widget, event):
|
||||
self.hide()
|
||||
return True
|
||||
|
||||
def on_button_addhost_clicked(self, widget):
|
||||
log.debug("on_button_addhost_clicked")
|
||||
dialog = self.glade.get_widget("addhost_dialog")
|
||||
dialog.set_icon(deluge.common.get_logo(16))
|
||||
hostname_entry = self.glade.get_widget("entry_hostname")
|
||||
port_spinbutton = self.glade.get_widget("spinbutton_port")
|
||||
response = dialog.run()
|
||||
if response == 1:
|
||||
# We add the host
|
||||
hostname = hostname_entry.get_text()
|
||||
if hostname.startswith("http://"):
|
||||
hostname = hostname[7:]
|
||||
|
||||
# Check to make sure the hostname is at least 1 character long
|
||||
if len(hostname) < 1:
|
||||
dialog.hide()
|
||||
return
|
||||
|
||||
# Get the port and concatenate the hostname string
|
||||
port = port_spinbutton.get_value_as_int()
|
||||
hostname = hostname + ":" + str(port)
|
||||
row = self.liststore.append()
|
||||
self.liststore.set_value(row, 1, hostname)
|
||||
# Save the host list to file
|
||||
self.save()
|
||||
|
||||
dialog.hide()
|
||||
|
||||
def on_button_removehost_clicked(self, widget):
|
||||
log.debug("on_button_removehost_clicked")
|
||||
# Get the selected rows
|
||||
paths = self.hostlist.get_selection().get_selected_rows()[1]
|
||||
for path in paths:
|
||||
self.liststore.remove(self.liststore.get_iter(path))
|
||||
|
||||
# Save the host list
|
||||
self.save()
|
||||
|
||||
def on_button_startdaemon_clicked(self, widget):
|
||||
log.debug("on_button_startdaemon_clicked")
|
||||
|
||||
def on_button_cancel_clicked(self, widget):
|
||||
log.debug("on_button_cancel_clicked")
|
||||
self.hide()
|
||||
|
||||
def on_button_connect_clicked(self, widget):
|
||||
log.debug("on_button_connect_clicked")
|
||||
paths = self.hostlist.get_selection().get_selected_rows()[1]
|
||||
row = self.liststore.get_iter(paths[0])
|
||||
uri = self.liststore.get_value(row, 1)
|
||||
uri = "http://" + uri
|
||||
client.set_core_uri(uri)
|
||||
self.window.start()
|
||||
self.hide()
|
||||
|
|
|
@ -1,14 +1,23 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
|
||||
<!--Generated with glade3 3.2.0 on Mon Oct 15 00:29:12 2007 by andrew@delicious-->
|
||||
<!--Generated with glade3 3.2.2 on Tue Oct 16 23:05:06 2007 by andrew@fragment-->
|
||||
<glade-interface>
|
||||
<widget class="GtkWindow" id="window1">
|
||||
<widget class="GtkDialog" id="connection_manager">
|
||||
<property name="has_focus">True</property>
|
||||
<property name="is_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="title" translatable="yes">Deluge Connection Manager</property>
|
||||
<child>
|
||||
<widget class="GtkVBox" id="vbox1">
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Connection Manager</property>
|
||||
<property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
|
||||
<property name="default_width">350</property>
|
||||
<property name="default_height">300</property>
|
||||
<property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
|
||||
<property name="has_separator">False</property>
|
||||
<child internal-child="vbox">
|
||||
<widget class="GtkVBox" id="dialog-vbox2">
|
||||
<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="spacing">2</property>
|
||||
<child>
|
||||
<widget class="GtkHBox" id="hbox1">
|
||||
<property name="visible">True</property>
|
||||
|
@ -29,7 +38,7 @@
|
|||
<widget class="GtkLabel" id="label1">
|
||||
<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="label" translatable="yes"><big><b>Deluge Connection Manager</b></big></property>
|
||||
<property name="label" translatable="yes"><big><b>Connection Manager</b></big></property>
|
||||
<property name="use_markup">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
|
@ -41,12 +50,14 @@
|
|||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="padding">5</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkHBox" id="hbox2">
|
||||
<widget class="GtkVBox" id="vbox3">
|
||||
<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="spacing">5</property>
|
||||
<child>
|
||||
<widget class="GtkViewport" id="viewport1">
|
||||
<property name="visible">True</property>
|
||||
|
@ -60,7 +71,7 @@
|
|||
<property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
||||
<property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
||||
<child>
|
||||
<widget class="GtkTreeView" id="treeview1">
|
||||
<widget class="GtkTreeView" id="hostlist">
|
||||
<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>
|
||||
|
@ -72,25 +83,41 @@
|
|||
</widget>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkVButtonBox" id="vbuttonbox1">
|
||||
<widget class="GtkHBox" id="hbox3">
|
||||
<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="layout_style">GTK_BUTTONBOX_SPREAD</property>
|
||||
<child>
|
||||
<widget class="GtkButton" id="button3">
|
||||
<widget class="GtkHButtonBox" id="hbuttonbox2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">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="layout_style">GTK_BUTTONBOX_START</property>
|
||||
<child>
|
||||
<widget class="GtkImage" id="image2">
|
||||
<widget class="GtkButton" id="button_addhost">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">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="stock">gtk-add</property>
|
||||
<property name="label" translatable="yes">gtk-add</property>
|
||||
<property name="use_stock">True</property>
|
||||
<property name="response_id">0</property>
|
||||
<signal name="clicked" handler="on_button_addhost_clicked"/>
|
||||
</widget>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkButton" id="button_removehost">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">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">gtk-remove</property>
|
||||
<property name="use_stock">True</property>
|
||||
<property name="response_id">0</property>
|
||||
<signal name="clicked" handler="on_button_removehost_clicked"/>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
@ -98,61 +125,123 @@
|
|||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkButton" id="button4">
|
||||
<widget class="GtkButton" id="button_startdaemon">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">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="response_id">0</property>
|
||||
<signal name="clicked" handler="on_button_startdaemon_clicked"/>
|
||||
<child>
|
||||
<widget class="GtkImage" id="image3">
|
||||
<widget class="GtkHBox" id="hbox4">
|
||||
<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="stock">gtk-remove</property>
|
||||
<property name="spacing">2</property>
|
||||
<child>
|
||||
<widget class="GtkImage" id="image2">
|
||||
<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="stock">gtk-execute</property>
|
||||
</widget>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label5">
|
||||
<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="label" translatable="yes">_Start local daemon</property>
|
||||
<property name="use_underline">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="pack_type">GTK_PACK_END</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
<property name="padding">10</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkHButtonBox" id="hbuttonbox1">
|
||||
<widget class="GtkExpander" id="expander1">
|
||||
<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>
|
||||
<child>
|
||||
<widget class="GtkVBox" id="vbox2">
|
||||
<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>
|
||||
<widget class="GtkCheckButton" id="checkbutton1">
|
||||
<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">checkbutton</property>
|
||||
<property name="response_id">0</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label2">
|
||||
<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="label" translatable="yes">Options</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="type">label_item</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child internal-child="action_area">
|
||||
<widget class="GtkHButtonBox" id="dialog-action_area2">
|
||||
<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="layout_style">GTK_BUTTONBOX_EDGE</property>
|
||||
<property name="layout_style">GTK_BUTTONBOX_END</property>
|
||||
<child>
|
||||
<widget class="GtkButton" id="button1">
|
||||
<widget class="GtkButton" id="button_cancel">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">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">gtk-cancel</property>
|
||||
<property name="use_stock">True</property>
|
||||
<property name="response_id">0</property>
|
||||
<signal name="clicked" handler="on_button_cancel_clicked"/>
|
||||
</widget>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkButton" id="button2">
|
||||
<widget class="GtkButton" id="button_connect">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">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">gtk-connect</property>
|
||||
<property name="use_stock">True</property>
|
||||
<property name="response_id">0</property>
|
||||
<signal name="clicked" handler="on_button_connect_clicked"/>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
|
@ -161,7 +250,123 @@
|
|||
</widget>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="position">2</property>
|
||||
<property name="pack_type">GTK_PACK_END</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
<widget class="GtkDialog" id="addhost_dialog">
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Add Host</property>
|
||||
<property name="window_position">GTK_WIN_POS_CENTER</property>
|
||||
<property name="destroy_with_parent">True</property>
|
||||
<property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
|
||||
<property name="has_separator">False</property>
|
||||
<child internal-child="vbox">
|
||||
<widget class="GtkVBox" id="dialog-vbox3">
|
||||
<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="spacing">2</property>
|
||||
<child>
|
||||
<widget class="GtkHBox" id="hbox2">
|
||||
<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="spacing">5</property>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label3">
|
||||
<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="label" translatable="yes">Hostname:</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkEntry" id="entry_hostname">
|
||||
<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>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label4">
|
||||
<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="label" translatable="yes">Port:</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkSpinButton" id="spinbutton_port">
|
||||
<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="max_length">5</property>
|
||||
<property name="width_chars">5</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="adjustment">58846 1 65535 1 10 10</property>
|
||||
<property name="numeric">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child internal-child="action_area">
|
||||
<widget class="GtkHButtonBox" id="dialog-action_area3">
|
||||
<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="layout_style">GTK_BUTTONBOX_END</property>
|
||||
<child>
|
||||
<widget class="GtkButton" id="button_addhost_cancel">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">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">gtk-cancel</property>
|
||||
<property name="use_stock">True</property>
|
||||
<property name="response_id">0</property>
|
||||
</widget>
|
||||
</child>
|
||||
<child>
|
||||
<widget class="GtkButton" id="button_addhost_add">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="can_default">True</property>
|
||||
<property name="has_default">True</property>
|
||||
<property name="receives_default">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">gtk-add</property>
|
||||
<property name="use_stock">True</property>
|
||||
<property name="response_id">1</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="pack_type">GTK_PACK_END</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -93,13 +93,13 @@ class GtkUI:
|
|||
self.mainwindow = MainWindow()
|
||||
|
||||
# Start the signal receiver
|
||||
self.signal_receiver = Signals(self)
|
||||
#self.signal_receiver = Signals(self)
|
||||
|
||||
# Initalize the plugins
|
||||
self.plugins = PluginManager(self)
|
||||
|
||||
# Start the mainwindow and show it
|
||||
self.mainwindow.start()
|
||||
#self.mainwindow.start()
|
||||
|
||||
# Start the gtk main loop
|
||||
gtk.gdk.threads_init()
|
||||
|
@ -113,6 +113,6 @@ class GtkUI:
|
|||
|
||||
# Clean-up
|
||||
del self.mainwindow
|
||||
#del self.signal_receiver
|
||||
# del self.signal_receiver
|
||||
del self.plugins
|
||||
del deluge.configmanager
|
||||
|
|
|
@ -37,6 +37,7 @@ import gtk, gtk.glade
|
|||
import gobject
|
||||
import pkg_resources
|
||||
|
||||
import deluge.ui.client as client
|
||||
from deluge.configmanager import ConfigManager
|
||||
from menubar import MenuBar
|
||||
from toolbar import ToolBar
|
||||
|
@ -45,6 +46,7 @@ from torrentdetails import TorrentDetails
|
|||
from preferences import Preferences
|
||||
from systemtray import SystemTray
|
||||
from statusbar import StatusBar
|
||||
from connectionmanager import ConnectionManager
|
||||
import deluge.common
|
||||
|
||||
from deluge.log import LOG as log
|
||||
|
@ -81,15 +83,19 @@ class MainWindow:
|
|||
self.preferences = Preferences(self)
|
||||
self.systemtray = SystemTray(self)
|
||||
self.statusbar = StatusBar(self)
|
||||
|
||||
def start(self):
|
||||
"""Start the update thread and show the window"""
|
||||
self.update_timer = gobject.timeout_add(1000, self.update)
|
||||
self.connectionmanager = ConnectionManager(self)
|
||||
client.connect_on_new_core(self.start)
|
||||
if not(self.config["start_in_tray"] and \
|
||||
self.config["enable_system_tray"]) and not \
|
||||
self.window.get_property("visible"):
|
||||
log.debug("Showing window")
|
||||
self.show()
|
||||
self.connectionmanager.show()
|
||||
|
||||
def start(self):
|
||||
"""Start the update thread and show the window"""
|
||||
self.torrentview.start()
|
||||
self.update_timer = gobject.timeout_add(1000, self.update)
|
||||
|
||||
def update(self):
|
||||
# Don't update the UI if the the window is minimized.
|
||||
|
@ -121,7 +127,10 @@ class MainWindow:
|
|||
|
||||
def quit(self):
|
||||
# Stop the update timer from running
|
||||
gobject.source_remove(self.update_timer)
|
||||
try:
|
||||
gobject.source_remove(self.update_timer)
|
||||
except:
|
||||
pass
|
||||
del self.systemtray
|
||||
del self.menubar
|
||||
del self.toolbar
|
||||
|
|
|
@ -36,7 +36,7 @@ pygtk.require('2.0')
|
|||
import gtk, gtk.glade
|
||||
import pkg_resources
|
||||
|
||||
import deluge.ui.functions as functions
|
||||
import deluge.ui.client as client
|
||||
|
||||
from deluge.log import LOG as log
|
||||
|
||||
|
@ -70,6 +70,8 @@ class MenuBar:
|
|||
## Edit Menu
|
||||
"on_menuitem_preferences_activate": \
|
||||
self.on_menuitem_preferences_activate,
|
||||
"on_menuitem_connectionmanager_activate": \
|
||||
self.on_menuitem_connectionmanager_activate,
|
||||
|
||||
## View Menu
|
||||
"on_menuitem_toolbar_toggled": self.on_menuitem_toolbar_toggled,
|
||||
|
@ -97,14 +99,14 @@ class MenuBar:
|
|||
def on_menuitem_addtorrent_activate(self, data=None):
|
||||
log.debug("on_menuitem_addtorrent_activate")
|
||||
from addtorrentdialog import AddTorrentDialog
|
||||
functions.add_torrent_file(AddTorrentDialog().run())
|
||||
client.add_torrent_file(AddTorrentDialog().run())
|
||||
|
||||
def on_menuitem_addurl_activate(self, data=None):
|
||||
log.debug("on_menuitem_addurl_activate")
|
||||
from addtorrenturl import AddTorrentUrl
|
||||
result = AddTorrentUrl().run()
|
||||
if result is not None:
|
||||
functions.add_torrent_url(result)
|
||||
client.add_torrent_url(result)
|
||||
|
||||
def on_menuitem_clear_activate(self, data=None):
|
||||
log.debug("on_menuitem_clear_activate")
|
||||
|
@ -113,7 +115,7 @@ class MenuBar:
|
|||
log.debug("on_menuitem_quitdaemon_activate")
|
||||
# Tell the core to shutdown
|
||||
self.window.quit()
|
||||
functions.shutdown()
|
||||
client.shutdown()
|
||||
|
||||
def on_menuitem_quit_activate(self, data=None):
|
||||
log.debug("on_menuitem_quit_activate")
|
||||
|
@ -124,20 +126,24 @@ class MenuBar:
|
|||
log.debug("on_menuitem_preferences_activate")
|
||||
self.window.preferences.show()
|
||||
|
||||
def on_menuitem_connectionmanager_activate(self, data=None):
|
||||
log.debug("on_menuitem_connectionmanager_activate")
|
||||
self.window.connectionmanager.show()
|
||||
|
||||
## Torrent Menu ##
|
||||
def on_menuitem_pause_activate(self, data=None):
|
||||
log.debug("on_menuitem_pause_activate")
|
||||
functions.pause_torrent(
|
||||
client.pause_torrent(
|
||||
self.window.torrentview.get_selected_torrents())
|
||||
|
||||
def on_menuitem_resume_activate(self, data=None):
|
||||
log.debug("on_menuitem_resume_activate")
|
||||
functions.resume_torrent(
|
||||
client.resume_torrent(
|
||||
self.window.torrentview.get_selected_torrents())
|
||||
|
||||
def on_menuitem_updatetracker_activate(self, data=None):
|
||||
log.debug("on_menuitem_updatetracker_activate")
|
||||
functions.force_reannounce(
|
||||
client.force_reannounce(
|
||||
self.window.torrentview.get_selected_torrents())
|
||||
|
||||
def on_menuitem_edittrackers_activate(self, data=None):
|
||||
|
@ -145,7 +151,7 @@ class MenuBar:
|
|||
|
||||
def on_menuitem_remove_activate(self, data=None):
|
||||
log.debug("on_menuitem_remove_activate")
|
||||
functions.remove_torrent(
|
||||
client.remove_torrent(
|
||||
self.window.torrentview.get_selected_torrents())
|
||||
|
||||
## View Menu ##
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
# statement from all source files in the program, then also delete it here.
|
||||
|
||||
import deluge.pluginmanagerbase
|
||||
import deluge.ui.functions as functions
|
||||
import deluge.ui.client as client
|
||||
from deluge.configmanager import ConfigManager
|
||||
from deluge.log import LOG as log
|
||||
|
||||
|
@ -41,16 +41,21 @@ class PluginManager(deluge.pluginmanagerbase.PluginManagerBase):
|
|||
|
||||
self.config = ConfigManager("gtkui.conf")
|
||||
self._gtkui = gtkui
|
||||
|
||||
|
||||
# Register a callback with the client
|
||||
client.connect_on_new_core(self.start)
|
||||
|
||||
def start(self):
|
||||
"""Start the plugin manager"""
|
||||
# Update the enabled_plugins from the core
|
||||
enabled_plugins = functions.get_enabled_plugins()
|
||||
enabled_plugins = client.get_enabled_plugins()
|
||||
enabled_plugins += self.config["enabled_plugins"]
|
||||
enabled_plugins = list(set(enabled_plugins))
|
||||
self.config["enabled_plugins"] = enabled_plugins
|
||||
|
||||
deluge.pluginmanagerbase.PluginManagerBase.__init__(
|
||||
self, "gtkui.conf", "deluge.plugin.ui.gtk")
|
||||
|
||||
|
||||
def get_torrentview(self):
|
||||
"""Returns a reference to the torrentview component"""
|
||||
return self._gtkui.mainwindow.torrentview
|
||||
|
|
|
@ -37,7 +37,7 @@ import gtk, gtk.glade
|
|||
import pkg_resources
|
||||
|
||||
from deluge.log import LOG as log
|
||||
import deluge.ui.functions as functions
|
||||
import deluge.ui.client as client
|
||||
import deluge.common
|
||||
from deluge.configmanager import ConfigManager
|
||||
|
||||
|
@ -51,7 +51,6 @@ class Preferences:
|
|||
self.pref_dialog.set_icon(deluge.common.get_logo(32))
|
||||
self.treeview = self.glade.get_widget("treeview")
|
||||
self.notebook = self.glade.get_widget("notebook")
|
||||
self.core = functions.get_core()
|
||||
self.gtkui_config = ConfigManager("gtkui.conf")
|
||||
# Setup the liststore for the categories (tab pages)
|
||||
self.liststore = gtk.ListStore(int, str)
|
||||
|
@ -104,7 +103,7 @@ class Preferences:
|
|||
self.liststore.append([index, name])
|
||||
|
||||
def show(self):
|
||||
self.core_config = functions.get_config()
|
||||
self.core_config = client.get_config()
|
||||
# Update the preferences dialog to reflect current config settings
|
||||
|
||||
## Downloads tab ##
|
||||
|
@ -134,7 +133,7 @@ class Preferences:
|
|||
self.glade.get_widget("spin_port_max").set_value(
|
||||
self.core_config["listen_ports"][1])
|
||||
self.glade.get_widget("active_port_label").set_text(
|
||||
str(functions.get_listen_port()))
|
||||
str(client.get_listen_port()))
|
||||
self.glade.get_widget("chk_random_port").set_active(
|
||||
self.core_config["random_port"])
|
||||
self.glade.get_widget("chk_dht").set_active(
|
||||
|
@ -193,8 +192,8 @@ class Preferences:
|
|||
self.gtkui_config["send_info"])
|
||||
|
||||
## Plugins tab ##
|
||||
all_plugins = functions.get_available_plugins()
|
||||
enabled_plugins = functions.get_enabled_plugins()
|
||||
all_plugins = client.get_available_plugins()
|
||||
enabled_plugins = client.get_enabled_plugins()
|
||||
# Clear the existing list so we don't duplicate entries.
|
||||
self.plugin_liststore.clear()
|
||||
# Iterate through the lists and add them to the liststore
|
||||
|
@ -310,7 +309,7 @@ class Preferences:
|
|||
config_to_set[key] = new_core_config[key]
|
||||
|
||||
# Set each changed config value in the core
|
||||
functions.set_config(config_to_set)
|
||||
client.set_config(config_to_set)
|
||||
|
||||
# Update the configuration
|
||||
self.core_config.update(config_to_set)
|
||||
|
@ -387,8 +386,8 @@ class Preferences:
|
|||
def on_test_port_clicked(self, data):
|
||||
log.debug("on_test_port_clicked")
|
||||
url = "http://deluge-torrent.org/test-port.php?port=%s" % \
|
||||
functions.get_listen_port()
|
||||
functions.open_url_in_browser(url)
|
||||
client.get_listen_port()
|
||||
client.open_url_in_browser(url)
|
||||
|
||||
def on_plugin_toggled(self, renderer, path):
|
||||
log.debug("on_plugin_toggled")
|
||||
|
|
|
@ -37,7 +37,7 @@ from deluge.log import LOG as log
|
|||
class Signals:
|
||||
def __init__(self, ui):
|
||||
self.ui = ui
|
||||
self.receiver = SignalReceiver(6667, "http://localhost:6666")
|
||||
self.receiver = SignalReceiver(6667, "http://localhost:56684")
|
||||
self.receiver.start()
|
||||
self.receiver.connect_to_signal("torrent_added",
|
||||
self.torrent_added_signal)
|
||||
|
@ -49,7 +49,7 @@ class Signals:
|
|||
self.torrent_all_paused)
|
||||
self.receiver.connect_to_signal("torrent_all_resumed",
|
||||
self.torrent_all_resumed)
|
||||
|
||||
|
||||
def torrent_added_signal(self, torrent_id):
|
||||
log.debug("torrent_added signal received..")
|
||||
log.debug("torrent id: %s", torrent_id)
|
||||
|
|
|
@ -34,13 +34,12 @@
|
|||
import gtk
|
||||
|
||||
import deluge.common
|
||||
import deluge.ui.functions as functions
|
||||
import deluge.ui.client as client
|
||||
|
||||
class StatusBar:
|
||||
def __init__(self, window):
|
||||
self.window = window
|
||||
self.statusbar = self.window.main_glade.get_widget("statusbar")
|
||||
self.core = functions.get_core()
|
||||
|
||||
# Add a HBox to the statusbar after removing the initial label widget
|
||||
self.hbox = gtk.HBox()
|
||||
|
@ -69,36 +68,36 @@ class StatusBar:
|
|||
expand=False, fill=False)
|
||||
|
||||
# Update once before showing
|
||||
self.update()
|
||||
# self.update()
|
||||
self.statusbar.show_all()
|
||||
|
||||
def update(self):
|
||||
# Set the max connections label
|
||||
max_connections = functions.get_config_value("max_connections_global")
|
||||
max_connections = client.get_config_value("max_connections_global")
|
||||
if max_connections < 0:
|
||||
max_connections = _("Unlimited")
|
||||
|
||||
self.label_connections.set_text("%s (%s)" % (
|
||||
self.core.get_num_connections(), max_connections))
|
||||
client.get_num_connections(), max_connections))
|
||||
|
||||
# Set the download speed label
|
||||
max_download_speed = functions.get_config_value("max_download_speed")
|
||||
max_download_speed = client.get_config_value("max_download_speed")
|
||||
if max_download_speed < 0:
|
||||
max_download_speed = _("Unlimited")
|
||||
else:
|
||||
max_download_speed = "%s %s" % (max_download_speed, _("KiB/s"))
|
||||
|
||||
self.label_download_speed.set_text("%s/s (%s)" % (
|
||||
deluge.common.fsize(self.core.get_download_rate()),
|
||||
deluge.common.fsize(client.get_download_rate()),
|
||||
max_download_speed))
|
||||
|
||||
# Set the upload speed label
|
||||
max_upload_speed = functions.get_config_value("max_upload_speed")
|
||||
max_upload_speed = client.get_config_value("max_upload_speed")
|
||||
if max_upload_speed < 0:
|
||||
max_upload_speed = _("Unlimited")
|
||||
else:
|
||||
max_upload_speed = "%s %s" % (max_upload_speed, _("KiB/s"))
|
||||
|
||||
self.label_upload_speed.set_text("%s/s (%s)" % (
|
||||
deluge.common.fsize(self.core.get_upload_rate()),
|
||||
deluge.common.fsize(client.get_upload_rate()),
|
||||
max_upload_speed))
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
import gtk
|
||||
import pkg_resources
|
||||
|
||||
import deluge.ui.functions as functions
|
||||
import deluge.ui.client as client
|
||||
import deluge.common
|
||||
from deluge.configmanager import ConfigManager
|
||||
from deluge.log import LOG as log
|
||||
|
@ -49,7 +49,6 @@ class SystemTray:
|
|||
def enable(self):
|
||||
"""Enables the system tray icon."""
|
||||
log.debug("Enabling the system tray icon..")
|
||||
self.core = functions.get_core()
|
||||
self.tray = gtk.status_icon_new_from_icon_name('deluge')
|
||||
self.tray.connect("activate", self.on_tray_clicked)
|
||||
self.tray.connect("popup-menu", self.on_tray_popup)
|
||||
|
@ -79,6 +78,7 @@ class SystemTray:
|
|||
self.tray_glade.get_widget("upload-limit-image").set_from_file(
|
||||
deluge.common.get_pixmap("seeding16.png"))
|
||||
|
||||
def start(self):
|
||||
# Build the bandwidth speed limit menus
|
||||
self.build_tray_bwsetsubmenu()
|
||||
|
||||
|
@ -86,13 +86,13 @@ class SystemTray:
|
|||
# Create the Download speed list sub-menu
|
||||
submenu_bwdownset = self.build_menu_radio_list(
|
||||
self.config["tray_download_speed_list"], self.tray_setbwdown,
|
||||
functions.get_config_value("max_download_speed"),
|
||||
client.get_config_value("max_download_speed"),
|
||||
_("KiB/s"), show_notset=True, show_other=True)
|
||||
|
||||
# Create the Upload speed list sub-menu
|
||||
submenu_bwupset = self.build_menu_radio_list(
|
||||
self.config["tray_upload_speed_list"], self.tray_setbwup,
|
||||
functions.get_config_value("max_upload_speed"),
|
||||
client.get_config_value("max_upload_speed"),
|
||||
_("KiB/s"), show_notset=True, show_other=True)
|
||||
|
||||
# Add the sub-menus to the tray menu
|
||||
|
@ -160,7 +160,7 @@ class SystemTray:
|
|||
def on_menuitem_add_torrent_activate(self, menuitem):
|
||||
log.debug("on_menuitem_add_torrent_activate")
|
||||
from addtorrentdialog import AddTorrentDialog
|
||||
functions.add_torrent_file(AddTorrentDialog().run())
|
||||
client.add_torrent_file(AddTorrentDialog().run())
|
||||
|
||||
def on_menuitem_pause_all_activate(self, menuitem):
|
||||
log.debug("on_menuitem_pause_all_activate")
|
||||
|
@ -184,13 +184,13 @@ class SystemTray:
|
|||
log.debug("on_menuitem_quitdaemon_activate")
|
||||
if self.window.visible():
|
||||
self.window.quit()
|
||||
functions.shutdown()
|
||||
client.shutdown()
|
||||
else:
|
||||
if self.config["lock_tray"] == True:
|
||||
self.unlock_tray("quitdaemon")
|
||||
else:
|
||||
self.window.quit()
|
||||
functions.shutdown()
|
||||
client.shutdown()
|
||||
|
||||
def build_menu_radio_list(self, value_list, callback, pref_value=None,
|
||||
suffix=None, show_notset=False, notset_label=None, notset_lessthan=0,
|
||||
|
@ -281,7 +281,7 @@ class SystemTray:
|
|||
spin_title.set_text(_("%s Speed (KiB/s):" % string))
|
||||
spin_speed = dialog_glade.get_widget("spin_speed")
|
||||
spin_speed.set_value(
|
||||
functions.get_config_value(core_key))
|
||||
client.get_config_value(core_key))
|
||||
spin_speed.select_region(0, -1)
|
||||
response = speed_dialog.run()
|
||||
if response == 1: # OK Response
|
||||
|
@ -294,7 +294,7 @@ class SystemTray:
|
|||
# Set the config in the core
|
||||
value = float(value)
|
||||
config_to_set = {core_key: value}
|
||||
functions.set_config(config_to_set)
|
||||
client.set_config(config_to_set)
|
||||
|
||||
# Update the tray speed limit list
|
||||
if value not in self.config[ui_key] and value >= 0:
|
||||
|
@ -338,7 +338,7 @@ window, please enter your password"))
|
|||
log.debug("Showing main window via tray")
|
||||
self.window.show()
|
||||
elif comingnext == "quitdaemon":
|
||||
functions.shutdown()
|
||||
client.shutdown()
|
||||
self.window.hide()
|
||||
self.window.quit()
|
||||
elif comingnext == "quitui":
|
||||
|
|
|
@ -38,7 +38,7 @@ pygtk.require('2.0')
|
|||
import gtk, gtk.glade
|
||||
import gettext
|
||||
|
||||
import deluge.ui.functions as functions
|
||||
import deluge.ui.client as client
|
||||
import deluge.common
|
||||
from deluge.log import LOG as log
|
||||
|
||||
|
@ -93,7 +93,7 @@ class TorrentDetails:
|
|||
"upload_payload_rate", "num_peers", "num_seeds", "total_peers",
|
||||
"total_seeds", "eta", "ratio", "tracker", "next_announce",
|
||||
"tracker_status", "save_path"]
|
||||
status = functions.get_torrent_status(selected, status_keys)
|
||||
status = client.get_torrent_status(selected, status_keys)
|
||||
|
||||
# Check to see if we got valid data from the core
|
||||
if status is None:
|
||||
|
|
|
@ -40,7 +40,7 @@ import gettext
|
|||
import gobject
|
||||
|
||||
import deluge.common
|
||||
import deluge.ui.functions as functions
|
||||
import deluge.ui.client as client
|
||||
from deluge.log import LOG as log
|
||||
import deluge.ui.gtkui.listview as listview
|
||||
|
||||
|
@ -163,12 +163,14 @@ class TorrentView(listview.ListView):
|
|||
self.treeview.get_selection().connect("changed",
|
||||
self.on_selection_changed)
|
||||
|
||||
def start(self):
|
||||
"""Start the torrentview"""
|
||||
# We need to get the core session state to know which torrents are in
|
||||
# the session so we can add them to our list.
|
||||
session_state = functions.get_session_state()
|
||||
session_state = client.get_session_state()
|
||||
for torrent_id in session_state:
|
||||
self.add_row(torrent_id)
|
||||
|
||||
|
||||
def update(self, columns=None):
|
||||
"""Update the view. If columns is not None, it will attempt to only
|
||||
update those columns selected.
|
||||
|
@ -212,7 +214,7 @@ class TorrentView(listview.ListView):
|
|||
|
||||
# Remove duplicates from status_key list
|
||||
status_keys = list(set(status_keys))
|
||||
status = functions.get_torrent_status(torrent_id,
|
||||
status = client.get_torrent_status(torrent_id,
|
||||
status_keys)
|
||||
|
||||
# Set values for each column in the row
|
||||
|
|
|
@ -48,6 +48,8 @@ class SignalReceiver(
|
|||
log.debug("SignalReceiver init..")
|
||||
threading.Thread.__init__(self)
|
||||
|
||||
self.port = port
|
||||
|
||||
# Daemonize the thread so it exits when the main program does
|
||||
self.setDaemon(True)
|
||||
|
||||
|
@ -68,7 +70,11 @@ class SignalReceiver(
|
|||
# FIXME: send actual URI not localhost
|
||||
core = xmlrpclib.ServerProxy(core_uri)
|
||||
core.register_client("http://localhost:" + str(port))
|
||||
|
||||
|
||||
def __del__(self):
|
||||
core.deregister_client("http://localhost:" + str(self.port))
|
||||
|
||||
def run(self):
|
||||
"""This gets called when we start the thread"""
|
||||
t = threading.Thread(target=self.serve_forever)
|
||||
|
|
Loading…
Reference in New Issue