Cleaner fix for #1874, code clean up and reusability.

Translations are now setup on `deluge.common`. Where they used to be setup, a call to `setup_translations(setup_pygtk=False)` is now made.
Every call to `pkg_resources.resource_filename()` is now made through `deluge.common.resource_filename` to make sure that we're loading data from the right deluge install.
This commit is contained in:
Pedro Algarvio 2011-06-04 18:06:45 +01:00
commit df3214168c
23 changed files with 100 additions and 171 deletions

View file

@ -207,7 +207,7 @@ def get_pixmap(fname):
""" """
return resource_filename("deluge", os.path.join("ui", "data", "pixmaps", fname)) return resource_filename("deluge", os.path.join("ui", "data", "pixmaps", fname))
def resource_filename(package, path): def resource_filename(module, path):
# While developing, if there's a second deluge package, installed globally # While developing, if there's a second deluge package, installed globally
# and another in develop mode somewhere else, while pkg_resources.require("Deluge") # and another in develop mode somewhere else, while pkg_resources.require("Deluge")
# returns the proper deluge instance, pkg_resources.resource_filename does # returns the proper deluge instance, pkg_resources.resource_filename does
@ -215,8 +215,7 @@ def resource_filename(package, path):
# enough. # enough.
# This is a work-around that. # This is a work-around that.
return pkg_resources.require("Deluge>=%s" % get_version())[0].get_resource_filename( return pkg_resources.require("Deluge>=%s" % get_version())[0].get_resource_filename(
pkg_resources.resource_filename.im_self, pkg_resources._manager, os.path.join(*(module.split('.')+[path]))
os.path.join(package, path)
) )
def open_file(path): def open_file(path):
@ -682,17 +681,22 @@ def create_localclient_account(append=False):
# Initialize gettext # Initialize gettext
try: def setup_translations(setup_pygtk=False):
if hasattr(locale, "bindtextdomain"): try:
locale.bindtextdomain("deluge", resource_filename("deluge", "i18n")) if hasattr(locale, "bindtextdomain"):
if hasattr(locale, "textdomain"): locale.bindtextdomain("deluge", resource_filename("deluge", "i18n"))
locale.textdomain("deluge") if hasattr(locale, "textdomain"):
gettext.bindtextdomain("deluge", resource_filename("deluge", "i18n")) locale.textdomain("deluge")
gettext.textdomain("deluge") gettext.bindtextdomain("deluge", resource_filename("deluge", "i18n"))
gettext.install("deluge", resource_filename("deluge", "i18n")) gettext.textdomain("deluge")
except Exception, e: gettext.install("deluge", resource_filename("deluge", "i18n"))
raise if setup_pygtk:
log.error("Unable to initialize gettext/locale!") import gtk
log.exception(e) import gtk.glade
import __builtin__ gtk.glade.bindtextdomain("deluge", resource_filename("deluge", "i18n"))
__builtin__.__dict__["_"] = lambda x: x gtk.glade.textdomain("deluge")
except Exception, e:
log.error("Unable to initialize gettext/locale!")
log.exception(e)
import __builtin__
__builtin__.__dict__["_"] = lambda x: x

View file

@ -33,10 +33,7 @@
# #
import os import os
import gettext
import locale
import logging import logging
import pkg_resources
from twisted.internet import reactor from twisted.internet import reactor
import twisted.internet.error import twisted.internet.error
@ -101,19 +98,7 @@ class Daemon(object):
) )
# Initialize gettext # Initialize gettext
try: deluge.common.setup_translations()
locale.setlocale(locale.LC_ALL, '')
if hasattr(locale, "bindtextdomain"):
locale.bindtextdomain("deluge", pkg_resources.resource_filename("deluge", "i18n"))
if hasattr(locale, "textdomain"):
locale.textdomain("deluge")
gettext.bindtextdomain("deluge", pkg_resources.resource_filename("deluge", "i18n"))
gettext.textdomain("deluge")
gettext.install("deluge", pkg_resources.resource_filename("deluge", "i18n"))
except Exception, e:
log.error("Unable to initialize gettext/locale: %s", e)
import __builtin__
__builtin__.__dict__["_"] = lambda x: x
# Twisted catches signals to terminate, so just have it call the shutdown # Twisted catches signals to terminate, so just have it call the shutdown
# method. # method.

View file

@ -37,7 +37,6 @@
import os import os
import logging import logging
import threading import threading
import pkg_resources
from twisted.internet.task import LoopingCall from twisted.internet.task import LoopingCall
from deluge._libtorrent import lt from deluge._libtorrent import lt
@ -450,10 +449,8 @@ class PreferencesManager(component.Component):
geoip_db = "" geoip_db = ""
if os.path.exists(value): if os.path.exists(value):
geoip_db = value geoip_db = value
elif os.path.exists( elif os.path.exists(deluge.common.resource_filename("deluge", os.path.join("data", "GeoIP.dat"))):
pkg_resources.resource_filename("deluge", geoip_db = deluge.common.resource_filename(
os.path.join("data", "GeoIP.dat"))):
geoip_db = pkg_resources.resource_filename(
"deluge", os.path.join("data", "GeoIP.dat") "deluge", os.path.join("data", "GeoIP.dat")
) )
else: else:

View file

@ -89,6 +89,7 @@ def start_ui():
# Setup the logger # Setup the logger
deluge.log.setupLogger(level=options.loglevel, filename=options.logfile, deluge.log.setupLogger(level=options.loglevel, filename=options.logfile,
filemode=logfile_mode) filemode=logfile_mode)
deluge.common.setup_translations()
if options.config: if options.config:
if not os.path.exists(options.config): if not os.path.exists(options.config):
@ -184,6 +185,7 @@ this should be an IP address", metavar="IFACE",
# Setup the logger # Setup the logger
deluge.log.setupLogger(level=options.loglevel, filename=options.logfile, deluge.log.setupLogger(level=options.loglevel, filename=options.logfile,
filemode=logfile_mode) filemode=logfile_mode)
deluge.common.setup_translations()
import deluge.configmanager import deluge.configmanager
if options.config: if options.config:

View file

@ -4,6 +4,7 @@ import time
import tempfile import tempfile
from subprocess import Popen, PIPE from subprocess import Popen, PIPE
import deluge.common
import deluge.configmanager import deluge.configmanager
import deluge.log import deluge.log
@ -22,17 +23,7 @@ import locale
import pkg_resources import pkg_resources
# Initialize gettext # Initialize gettext
try: deluge.common.setup_translations()
locale.setlocale(locale.LC_ALL, '')
if hasattr(locale, "bindtextdomain"):
locale.bindtextdomain("deluge", pkg_resources.resource_filename("deluge", "i18n"))
if hasattr(locale, "textdomain"):
locale.textdomain("deluge")
gettext.bindtextdomain("deluge", pkg_resources.resource_filename("deluge", "i18n"))
gettext.textdomain("deluge")
gettext.install("deluge", pkg_resources.resource_filename("deluge", "i18n"))
except Exception, e:
print e
def start_core(): def start_core():
CWD = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) CWD = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))

View file

@ -37,7 +37,6 @@
import pygtk import pygtk
pygtk.require('2.0') pygtk.require('2.0')
import gtk import gtk
import pkg_resources
from deluge.ui.client import client from deluge.ui.client import client
import deluge.common import deluge.common
@ -286,10 +285,10 @@ class AboutDialog:
if not client.is_classicmode(): if not client.is_classicmode():
self.about.set_comments( self.about.set_comments(
self.about.get_comments() + "Server Version: %coreversion%\n") self.about.get_comments() + "Server Version: %coreversion%\n")
self.about.set_comments( self.about.set_comments(
self.about.get_comments() + "Libtorrent Version: %ltversion%\n") self.about.get_comments() + "Libtorrent Version: %ltversion%\n")
def on_lt_version(result): def on_lt_version(result):
c = self.about.get_comments() c = self.about.get_comments()
c = c.replace("%ltversion%", result) c = c.replace("%ltversion%", result)

View file

@ -45,8 +45,6 @@ import logging
import os import os
from urlparse import urljoin from urlparse import urljoin
import pkg_resources
import twisted.web.client import twisted.web.client
import twisted.web.error import twisted.web.error
from deluge.ui.client import client from deluge.ui.client import client
@ -64,9 +62,9 @@ log = logging.getLogger(__name__)
class AddTorrentDialog(component.Component): class AddTorrentDialog(component.Component):
def __init__(self): def __init__(self):
component.Component.__init__(self, "AddTorrentDialog") component.Component.__init__(self, "AddTorrentDialog")
self.glade = gtk.glade.XML( self.glade = gtk.glade.XML(deluge.common.resource_filename(
pkg_resources.resource_filename( "deluge.ui.gtkui", os.path.join("glade", "add_torrent_dialog.glade"))
"deluge.ui.gtkui", "glade/add_torrent_dialog.glade")) )
self.dialog = self.glade.get_widget("dialog_add_torrent") self.dialog = self.glade.get_widget("dialog_add_torrent")

View file

@ -42,7 +42,6 @@ pygtk.require('2.0')
import gtk import gtk
import gtk.glade import gtk.glade
import logging import logging
import pkg_resources
from deluge.ui.client import client from deluge.ui.client import client
import deluge.component as component import deluge.component as component
@ -152,9 +151,9 @@ def show_other_dialog(header, type_str, image_stockid=None, image_filename=None,
if type(default) != int and type(default) != float: if type(default) != int and type(default) != float:
raise TypeError("default value needs to be an int or float") raise TypeError("default value needs to be an int or float")
glade = gtk.glade.XML( glade = gtk.glade.XML(deluge.common.resource_filename(
pkg_resources.resource_filename("deluge.ui.gtkui", "deluge.ui.gtkui", os.path.join("glade", "dgtkpopups.glade"))
"glade/dgtkpopups.glade")) )
dialog = glade.get_widget("other_dialog") dialog = glade.get_widget("other_dialog")
dialog.set_transient_for(component.get("MainWindow").window) dialog.set_transient_for(component.get("MainWindow").window)
dialog.set_title("") dialog.set_title("")

View file

@ -35,12 +35,12 @@
import os import os
import gtk import gtk
import pkg_resources
import time import time
import hashlib import hashlib
import logging import logging
from twisted.internet import reactor from twisted.internet import reactor
import deluge.common
import deluge.component as component import deluge.component as component
import common import common
import deluge.configmanager import deluge.configmanager
@ -136,9 +136,9 @@ class ConnectionManager(component.Component):
""" """
self.config = self.__load_config() self.config = self.__load_config()
# Get the glade file for the connection manager # Get the glade file for the connection manager
self.glade = gtk.glade.XML( self.glade = gtk.glade.XML(deluge.common.resource_filename(
pkg_resources.resource_filename("deluge.ui.gtkui", "deluge.ui.gtkui", os.path.join("glade", "connection_manager.glade"))
"glade/connection_manager.glade")) )
self.window = component.get("MainWindow") self.window = component.get("MainWindow")
# Setup the ConnectionManager dialog # Setup the ConnectionManager dialog

View file

@ -36,7 +36,6 @@
import gtk import gtk
import sys import sys
import pkg_resources
import os.path import os.path
import gobject import gobject
import base64 import base64
@ -55,9 +54,9 @@ log = logging.getLogger(__name__)
class CreateTorrentDialog: class CreateTorrentDialog:
def show(self): def show(self):
self.glade = gtk.glade.XML( self.glade = gtk.glade.XML(
pkg_resources.resource_filename( deluge.common.resource_filename(
"deluge.ui.gtkui", "deluge.ui.gtkui",
"glade/create_torrent_dialog.glade")) os.path.join("glade", "create_torrent_dialog.glade")))
self.config = ConfigManager("gtkui.conf") self.config = ConfigManager("gtkui.conf")
@ -396,9 +395,9 @@ class CreateTorrentDialog:
def _on_button_add_clicked(self, widget): def _on_button_add_clicked(self, widget):
log.debug("_on_button_add_clicked") log.debug("_on_button_add_clicked")
glade = gtk.glade.XML( glade = gtk.glade.XML(
pkg_resources.resource_filename( deluge.common.resource_filename(
"deluge.ui.gtkui", "deluge.ui.gtkui",
"glade/edit_trackers.glade")) os.path.join("glade", "edit_trackers.glade")))
dialog = glade.get_widget("add_tracker_dialog") dialog = glade.get_widget("add_tracker_dialog")
dialog.set_transient_for(self.dialog) dialog.set_transient_for(self.dialog)
textview = glade.get_widget("textview_trackers") textview = glade.get_widget("textview_trackers")

View file

@ -33,11 +33,10 @@
# #
# #
import os.path
import gtk import gtk
import gtk.glade import gtk.glade
import logging import logging
import pkg_resources
from twisted.internet import defer from twisted.internet import defer
import deluge.common import deluge.common
@ -50,10 +49,9 @@ log = logging.getLogger(__name__)
class EditTrackersDialog: class EditTrackersDialog:
def __init__(self, torrent_id, parent=None): def __init__(self, torrent_id, parent=None):
self.torrent_id = torrent_id self.torrent_id = torrent_id
self.glade = gtk.glade.XML( self.glade = gtk.glade.XML(deluge.common.resource_filename(
pkg_resources.resource_filename("deluge.ui.gtkui", "deluge.ui.gtkui", os.path.join("glade", "edit_trackers.glade"))
"glade/edit_trackers.glade")) )
self.dialog = self.glade.get_widget("edit_trackers_dialog") self.dialog = self.glade.get_widget("edit_trackers_dialog")
self.treeview = self.glade.get_widget("tracker_treeview") self.treeview = self.glade.get_widget("tracker_treeview")
self.add_tracker_dialog = self.glade.get_widget("add_tracker_dialog") self.add_tracker_dialog = self.glade.get_widget("add_tracker_dialog")

View file

@ -34,11 +34,10 @@
# #
# #
import os
import gtk import gtk
import gtk.glade import gtk.glade
import logging import logging
import pkg_resources
import glib import glib
import warnings import warnings
@ -112,8 +111,8 @@ class FilterTreeView(component.Component):
self.sidebar.notebook.connect("hide", self._on_hide) self.sidebar.notebook.connect("hide", self._on_hide)
#menu #menu
glade_menu = gtk.glade.XML(pkg_resources.resource_filename("deluge.ui.gtkui", glade_menu = gtk.glade.XML(deluge.common.resource_filename("deluge.ui.gtkui",
"glade/filtertree_menu.glade")) os.path.join("glade", "filtertree_menu.glade")))
self.menu = glade_menu.get_widget("filtertree_menu") self.menu = glade_menu.get_widget("filtertree_menu")
glade_menu.signal_autoconnect({ glade_menu.signal_autoconnect({
"select_all": self.on_select_all, "select_all": self.on_select_all,

View file

@ -40,34 +40,12 @@ gobject.set_prgname("deluge")
from twisted.internet import gtk2reactor from twisted.internet import gtk2reactor
reactor = gtk2reactor.install() reactor = gtk2reactor.install()
import gettext
import locale
import pkg_resources
import gtk import gtk
import gtk.glade
import sys import sys
import logging import logging
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
# Initialize gettext
try:
locale.setlocale(locale.LC_ALL, '')
if hasattr(locale, "bindtextdomain"):
locale.bindtextdomain("deluge", pkg_resources.resource_filename("deluge", "i18n"))
if hasattr(locale, "textdomain"):
locale.textdomain("deluge")
gettext.bindtextdomain("deluge", pkg_resources.resource_filename("deluge", "i18n"))
gettext.textdomain("deluge")
gettext.install("deluge", pkg_resources.resource_filename("deluge", "i18n"))
gtk.glade.bindtextdomain("deluge", pkg_resources.resource_filename("deluge", "i18n"))
gtk.glade.textdomain("deluge")
except Exception, e:
log.error("Unable to initialize gettext/locale!")
log.exception(e)
import __builtin__
__builtin__.__dict__["_"] = lambda x: x
import deluge.component as component import deluge.component as component
from deluge.ui.client import client from deluge.ui.client import client
from mainwindow import MainWindow from mainwindow import MainWindow
@ -105,7 +83,7 @@ class Gtk(_UI):
def start(self): def start(self):
super(Gtk, self).start() super(Gtk, self).start()
deluge.common.setup_translations(setup_pygtk=True)
GtkUI(self.args) GtkUI(self.args)
def start(): def start():

View file

@ -34,12 +34,12 @@
# #
import os.path
import pygtk import pygtk
pygtk.require('2.0') pygtk.require('2.0')
import gtk import gtk
import gtk.glade import gtk.glade
import logging import logging
import pkg_resources
from urlparse import urlparse from urlparse import urlparse
import urllib import urllib
@ -59,9 +59,9 @@ class MainWindow(component.Component):
component.Component.__init__(self, "MainWindow", interval=2) component.Component.__init__(self, "MainWindow", interval=2)
self.config = ConfigManager("gtkui.conf") self.config = ConfigManager("gtkui.conf")
# Get the glade file for the main window # Get the glade file for the main window
self.main_glade = gtk.glade.XML( self.main_glade = gtk.glade.XML(deluge.common.resource_filename(
pkg_resources.resource_filename("deluge.ui.gtkui", "deluge.ui.gtkui", os.path.join("glade", "main_window.glade"))
"glade/main_window.glade")) )
self.window = self.main_glade.get_widget("main_window") self.window = self.main_glade.get_widget("main_window")

View file

@ -34,13 +34,12 @@
# #
# #
import os.path
import pygtk import pygtk
pygtk.require('2.0') pygtk.require('2.0')
import gtk import gtk
import gtk.glade import gtk.glade
import logging import logging
import pkg_resources
import deluge.error import deluge.error
import deluge.component as component import deluge.component as component
@ -60,9 +59,9 @@ class MenuBar(component.Component):
self.config = ConfigManager("gtkui.conf") self.config = ConfigManager("gtkui.conf")
# Get the torrent menu from the glade file # Get the torrent menu from the glade file
self.torrentmenu_glade = gtk.glade.XML( self.torrentmenu_glade = gtk.glade.XML(deluge.common.resource_filename(
pkg_resources.resource_filename("deluge.ui.gtkui", "deluge.ui.gtkui", os.path.join("glade", "torrent_menu.glade"))
"glade/torrent_menu.glade")) )
self.torrentmenu_glade.get_widget("menuitem_queue").set_submenu( self.torrentmenu_glade.get_widget("menuitem_queue").set_submenu(
self.torrentmenu_glade.get_widget("queue_torrent_menu")) self.torrentmenu_glade.get_widget("queue_torrent_menu"))
@ -355,8 +354,8 @@ class MenuBar(component.Component):
def show_move_storage_dialog(self, status): def show_move_storage_dialog(self, status):
log.debug("show_move_storage_dialog") log.debug("show_move_storage_dialog")
glade = gtk.glade.XML(pkg_resources.resource_filename( glade = gtk.glade.XML(deluge.common.resource_filename(
"deluge.ui.gtkui", "glade/move_storage_dialog.glade" "deluge.ui.gtkui", os.path.join("glade", "move_storage_dialog.glade")
)) ))
# Keep it referenced: # Keep it referenced:
# https://bugzilla.gnome.org/show_bug.cgi?id=546802 # https://bugzilla.gnome.org/show_bug.cgi?id=546802

View file

@ -34,12 +34,12 @@
# #
import os
import gtk import gtk
import gtk.glade import gtk.glade
import logging import logging
import os.path import os.path
import cPickle import cPickle
import pkg_resources
from itertools import izip from itertools import izip
from deluge.ui.client import client from deluge.ui.client import client
@ -271,7 +271,7 @@ class PeersTab(Tab):
# We haven't created a pixbuf for this country yet # We haven't created a pixbuf for this country yet
try: try:
self.cached_flag_pixbufs[country] = gtk.gdk.pixbuf_new_from_file( self.cached_flag_pixbufs[country] = gtk.gdk.pixbuf_new_from_file(
pkg_resources.resource_filename( deluge.common.resource_filename(
"deluge", "deluge",
os.path.join("ui", "data", "pixmaps", "flags", country.lower() + ".png"))) os.path.join("ui", "data", "pixmaps", "flags", country.lower() + ".png")))
except Exception, e: except Exception, e:
@ -378,9 +378,9 @@ class PeersTab(Tab):
def _on_menuitem_add_peer_activate(self, menuitem): def _on_menuitem_add_peer_activate(self, menuitem):
"""This is a callback for manually adding a peer""" """This is a callback for manually adding a peer"""
log.debug("on_menuitem_add_peer") log.debug("on_menuitem_add_peer")
dialog_glade = gtk.glade.XML( dialog_glade = gtk.glade.XML(deluge.common.resource_filename(
pkg_resources.resource_filename("deluge.ui.gtkui", "deluge.ui.gtkui", os.path.join("glade", "dgtkpopups.glade"))
"glade/dgtkpopups.glade")) )
peer_dialog = dialog_glade.get_widget("connect_peer_dialog") peer_dialog = dialog_glade.get_widget("connect_peer_dialog")
txt_ip = dialog_glade.get_widget("txt_ip") txt_ip = dialog_glade.get_widget("txt_ip")
response = peer_dialog.run() response = peer_dialog.run()

View file

@ -34,13 +34,12 @@
# #
# #
import os
import pygtk import pygtk
pygtk.require('2.0') pygtk.require('2.0')
import gtk import gtk
import gtk.glade import gtk.glade
import logging import logging
import pkg_resources
import deluge.component as component import deluge.component as component
from deluge.ui.client import client from deluge.ui.client import client
@ -66,8 +65,8 @@ class Preferences(component.Component):
def __init__(self): def __init__(self):
component.Component.__init__(self, "Preferences") component.Component.__init__(self, "Preferences")
self.window = component.get("MainWindow") self.window = component.get("MainWindow")
self.glade = gtk.glade.XML(pkg_resources.resource_filename( self.glade = gtk.glade.XML(deluge.common.resource_filename(
"deluge.ui.gtkui", "glade/preferences_dialog.glade" "deluge.ui.gtkui", os.path.join("glade", "preferences_dialog.glade")
)) ))
self.pref_dialog = self.glade.get_widget("pref_dialog") self.pref_dialog = self.glade.get_widget("pref_dialog")
self.pref_dialog.set_icon(common.get_deluge_icon()) self.pref_dialog.set_icon(common.get_deluge_icon())

View file

@ -40,7 +40,6 @@ import gtk
import gtk.glade import gtk.glade
import logging import logging
import gobject import gobject
import pkg_resources
import deluge.component as component import deluge.component as component
from deluge.ui.client import client from deluge.ui.client import client
@ -57,9 +56,9 @@ class QueuedTorrents(component.Component):
self.status_item = None self.status_item = None
self.config = ConfigManager("gtkui.conf") self.config = ConfigManager("gtkui.conf")
self.glade = gtk.glade.XML( self.glade = gtk.glade.XML(deluge.common.resource_filename(
pkg_resources.resource_filename("deluge.ui.gtkui", "deluge.ui.gtkui", os.path.join("glade", "queuedtorrents.glade"))
"glade/queuedtorrents.glade")) )
self.glade.get_widget("chk_autoadd").set_active( self.glade.get_widget("chk_autoadd").set_active(
self.config["autoadd_queued"]) self.config["autoadd_queued"])
self.dialog = self.glade.get_widget("queued_torrents_dialog") self.dialog = self.glade.get_widget("queued_torrents_dialog")

View file

@ -33,12 +33,13 @@
# #
# #
import os
import gtk import gtk
import gtk.glade import gtk.glade
import logging import logging
import pkg_resources
from deluge.ui.client import client from deluge.ui.client import client
import deluge.common
import deluge.component as component import deluge.component as component
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -63,9 +64,9 @@ class RemoveTorrentDialog(object):
self.__torrent_ids = torrent_ids self.__torrent_ids = torrent_ids
glade = gtk.glade.XML( glade = gtk.glade.XML(deluge.common.resource_filename(
pkg_resources.resource_filename("deluge.ui.gtkui", "deluge.ui.gtkui", os.path.join("glade", "remove_torrent_dialog.glade"))
"glade/remove_torrent_dialog.glade")) )
self.__dialog = glade.get_widget("remove_torrent_dialog") self.__dialog = glade.get_widget("remove_torrent_dialog")
self.__dialog.set_transient_for(component.get("MainWindow").window) self.__dialog.set_transient_for(component.get("MainWindow").window)

View file

@ -38,9 +38,9 @@ try:
except ImportError: except ImportError:
appindicator = None appindicator = None
import os
import gtk import gtk
import logging import logging
import pkg_resources
import deluge.component as component import deluge.component as component
from deluge.ui.client import client from deluge.ui.client import client
@ -87,9 +87,9 @@ class SystemTray(component.Component):
def enable(self): def enable(self):
"""Enables the system tray icon.""" """Enables the system tray icon."""
self.tray_glade = gtk.glade.XML( self.tray_glade = gtk.glade.XML(deluge.common.resource_filename(
pkg_resources.resource_filename("deluge.ui.gtkui", "deluge.ui.gtkui", os.path.join("glade", "tray_menu.glade"))
"glade/tray_menu.glade")) )
self.tray_glade.signal_autoconnect({ self.tray_glade.signal_autoconnect({
"on_menuitem_show_deluge_activate": \ "on_menuitem_show_deluge_activate": \

View file

@ -33,12 +33,12 @@
# #
# #
import sys
import logging import logging
from optparse import OptionParser, OptionGroup from optparse import OptionParser, OptionGroup
import deluge.common import deluge.common
import deluge.configmanager import deluge.configmanager
import deluge.log import deluge.log
import os
DEFAULT_PREFS = { DEFAULT_PREFS = {
"default_ui": "gtk" "default_ui": "gtk"
@ -53,8 +53,6 @@ class _UI(object):
def __init__(self, name="gtk"): def __init__(self, name="gtk"):
self.__name = name self.__name = name
usage="%prog [options] [actions]",
self.__parser = OptionParser(version=deluge.common.get_version()) self.__parser = OptionParser(version=deluge.common.get_version())
group = OptionGroup(self.__parser, "Common Options") group = OptionGroup(self.__parser, "Common Options")
@ -102,6 +100,8 @@ class _UI(object):
filename=self.__options.logfile, filename=self.__options.logfile,
filemode=logfile_mode) filemode=logfile_mode)
deluge.common.setup_translations()
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
if self.__options.config: if self.__options.config:

View file

@ -35,16 +35,13 @@
import os import os
import time import time
import locale
import shutil import shutil
import urllib import urllib
import fnmatch import fnmatch
import gettext
import hashlib import hashlib
import logging import logging
import tempfile import tempfile
import mimetypes import mimetypes
import pkg_resources
from twisted.application import service, internet from twisted.application import service, internet
from twisted.internet import reactor, defer, error from twisted.internet import reactor, defer, error
@ -62,23 +59,6 @@ from deluge.ui.web.pluginmanager import PluginManager
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
# Initialize gettext
try:
locale.setlocale(locale.LC_ALL, "")
if hasattr(locale, "bindtextdomain"):
locale.bindtextdomain("deluge", pkg_resources.resource_filename("deluge", "i18n"))
if hasattr(locale, "textdomain"):
locale.textdomain("deluge")
gettext.bindtextdomain("deluge", pkg_resources.resource_filename("deluge", "i18n"))
gettext.textdomain("deluge")
gettext.install("deluge", pkg_resources.resource_filename("deluge", "i18n"))
except Exception, e:
log.error("Unable to initialize gettext/locale: %s", e)
_ = gettext.gettext
current_dir = os.path.dirname(__file__)
CONFIG_DEFAULTS = { CONFIG_DEFAULTS = {
# Misc Settings # Misc Settings
"enabled_plugins": [], "enabled_plugins": [],
@ -121,7 +101,7 @@ def rpath(*paths):
"""Convert a relative path into an absolute path relative to the location """Convert a relative path into an absolute path relative to the location
of this script. of this script.
""" """
return os.path.join(current_dir, *paths) return common.resource_filename(__name__, os.path.join(*paths))
class GetText(resource.Resource): class GetText(resource.Resource):
def render(self, request): def render(self, request):
@ -226,8 +206,7 @@ class Flag(resource.Resource):
def render(self, request): def render(self, request):
headers = {} headers = {}
path = ("data", "pixmaps", "flags", request.country.lower() + ".png") path = ("data", "pixmaps", "flags", request.country.lower() + ".png")
filename = pkg_resources.resource_filename("deluge", filename = common.resource_filename("deluge", os.path.join(*path))
os.path.join(*path))
if os.path.exists(filename): if os.path.exists(filename):
request.setHeader("cache-control", request.setHeader("cache-control",
"public, must-revalidate, max-age=86400") "public, must-revalidate, max-age=86400")

View file

@ -41,6 +41,9 @@ from optparse import OptionGroup
class WebUI(UI): class WebUI(UI):
def __init__(self, args): def __init__(self, args):
# Setup translations
deluge.common.setup_translations()
import server import server
deluge_web = server.DelugeWeb() deluge_web = server.DelugeWeb()
deluge_web.start() deluge_web.start()
@ -48,11 +51,11 @@ class WebUI(UI):
class Web(_UI): class Web(_UI):
help = """Starts the Deluge web interface""" help = """Starts the Deluge web interface"""
def __init__(self): def __init__(self):
super(Web, self).__init__("web") super(Web, self).__init__("web")
self.__server = None self.__server = None
group = OptionGroup(self.parser, "Web Options") group = OptionGroup(self.parser, "Web Options")
group.add_option("-b", "--base", dest="base", group.add_option("-b", "--base", dest="base",
help="Set the base path that the ui is running on (proxying)", help="Set the base path that the ui is running on (proxying)",
@ -87,14 +90,14 @@ class Web(_UI):
group.add_option("--ssl", dest="ssl", action="store_true", group.add_option("--ssl", dest="ssl", action="store_true",
help="Forces the webserver to use ssl", default=False) help="Forces the webserver to use ssl", default=False)
self.parser.add_option_group(group) self.parser.add_option_group(group)
@property @property
def server(self): def server(self):
return self.__server return self.__server
def start(self): def start(self):
super(Web, self).start() super(Web, self).start()
# Steps taken from http://www.faqs.org/faqs/unix-faq/programmer/faq/ # Steps taken from http://www.faqs.org/faqs/unix-faq/programmer/faq/
# Section 1.7 # Section 1.7
if self.options.fork: if self.options.fork:
@ -102,14 +105,14 @@ class Web(_UI):
# or shell invoking the program. # or shell invoking the program.
if os.fork(): if os.fork():
os._exit(0) os._exit(0)
# setsid() to become a process group and session group leader. # setsid() to become a process group and session group leader.
os.setsid() os.setsid()
# fork() again so the parent, (the session group leader), can exit. # fork() again so the parent, (the session group leader), can exit.
if os.fork(): if os.fork():
os._exit(0) os._exit(0)
# chdir() to esnure that our process doesn't keep any directory in # chdir() to esnure that our process doesn't keep any directory in
# use that may prevent a filesystem unmount. # use that may prevent a filesystem unmount.
import deluge.configmanager import deluge.configmanager
@ -134,10 +137,10 @@ class Web(_UI):
if self.options.base: if self.options.base:
self.server.base = self.options.base self.server.base = self.options.base
if self.options.port: if self.options.port:
self.server.port = self.options.port self.server.port = self.options.port
if self.options.ssl: if self.options.ssl:
self.server.https = self.options.ssl self.server.https = self.options.ssl