From 7119e0d95f094cedb40f27d32fa382b8f793eab3 Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Thu, 27 Sep 2012 23:44:38 +0100 Subject: [PATCH 01/58] Fix #2100 : Add option not to bring main window to front when adding torrents through ipcinterface --- deluge/ui/gtkui/glade/preferences_dialog.ui | 15 ++++++++++++++- deluge/ui/gtkui/gtkui.py | 1 + deluge/ui/gtkui/ipcinterface.py | 3 ++- deluge/ui/gtkui/preferences.py | 4 ++++ 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/deluge/ui/gtkui/glade/preferences_dialog.ui b/deluge/ui/gtkui/glade/preferences_dialog.ui index e9f526d38..09a6ea5de 100644 --- a/deluge/ui/gtkui/glade/preferences_dialog.ui +++ b/deluge/ui/gtkui/glade/preferences_dialog.ui @@ -2465,6 +2465,19 @@ used sparingly. 0 + + + Focus window when adding torrent + True + True + False + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + + + 1 + + True @@ -2491,7 +2504,7 @@ status tab (<b>EXPERIMENTAL!!!</b>) True True - 1 + 2 diff --git a/deluge/ui/gtkui/gtkui.py b/deluge/ui/gtkui/gtkui.py index 53072e2ac..e48472d99 100644 --- a/deluge/ui/gtkui/gtkui.py +++ b/deluge/ui/gtkui/gtkui.py @@ -149,6 +149,7 @@ DEFAULT_PREFS = { "pieces_color_waiting": [4874, 56494, 0], "pieces_color_downloading": [65535, 55255, 0], "pieces_color_completed": [4883, 26985, 56540], + "focus_main_window_on_add": True, } class GtkUI(object): diff --git a/deluge/ui/gtkui/ipcinterface.py b/deluge/ui/gtkui/ipcinterface.py index cb7259cc5..d061a7a8d 100644 --- a/deluge/ui/gtkui/ipcinterface.py +++ b/deluge/ui/gtkui/ipcinterface.py @@ -60,7 +60,8 @@ log = logging.getLogger(__name__) class IPCProtocolServer(Protocol): def dataReceived(self, data): data = rencode.loads(data) - component.get("MainWindow").present() + if not data or config["focus_main_window_on_add"]: + component.get("MainWindow").present() process_args(data) class IPCProtocolClient(Protocol): diff --git a/deluge/ui/gtkui/preferences.py b/deluge/ui/gtkui/preferences.py index 34f8da6f0..eeb264c69 100644 --- a/deluge/ui/gtkui/preferences.py +++ b/deluge/ui/gtkui/preferences.py @@ -552,6 +552,8 @@ class Preferences(component.Component): self.gtkui_config["classic_mode"]) self.builder.get_object("chk_show_rate_in_title").set_active( self.gtkui_config["show_rate_in_title"]) + self.builder.get_object("chk_focus_main_window_on_add").set_active( + self.gtkui_config["focus_main_window_on_add"]) self.builder.get_object("piecesbar_toggle").set_active( self.gtkui_config["show_piecesbar"] ) @@ -739,6 +741,8 @@ class Preferences(component.Component): new_gtkui_config["show_rate_in_title"] = \ self.builder.get_object("chk_show_rate_in_title").get_active() + new_gtkui_config["focus_main_window_on_add"] = \ + self.builder.get_object("chk_focus_main_window_on_add").get_active() ## Other tab ## new_gtkui_config["show_new_releases"] = \ From f016160c622aadff0fcebd20f9a583d77f98daa6 Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Fri, 23 Nov 2012 00:34:54 +0000 Subject: [PATCH 02/58] Removing unneeded webui files --- deluge/ui/web/TODO | 4 ---- deluge/ui/web/icons/readme.txt | 2 -- deluge/ui/web/images/debugerror.png | Bin 9489 -> 0 bytes deluge/ui/web/images/deluge-icon.png | Bin 722 -> 0 bytes deluge/ui/web/images/deluge16.png | Bin 722 -> 0 bytes deluge/ui/web/images/deluge32.png | Bin 1888 -> 0 bytes deluge/ui/web/images/deluge_icon.gif | Bin 588 -> 0 bytes .../images/vista/basic-dialog/bg-center.gif | Bin 865 -> 0 bytes .../images/vista/basic-dialog/bg-left.gif | Bin 1039 -> 0 bytes .../images/vista/basic-dialog/bg-right.gif | Bin 1039 -> 0 bytes .../themes/images/vista/basic-dialog/close.gif | Bin 350 -> 0 bytes .../images/vista/basic-dialog/collapse.gif | Bin 333 -> 0 bytes .../themes/images/vista/basic-dialog/dlg-bg.gif | Bin 27857 -> 0 bytes .../images/vista/basic-dialog/e-handle.gif | Bin 995 -> 0 bytes .../themes/images/vista/basic-dialog/expand.gif | Bin 351 -> 0 bytes .../images/vista/basic-dialog/hd-sprite.gif | Bin 462 -> 0 bytes .../images/vista/basic-dialog/s-handle.gif | Bin 992 -> 0 bytes .../images/vista/basic-dialog/se-handle.gif | Bin 833 -> 0 bytes .../images/vista/basic-dialog/w-handle.gif | Bin 817 -> 0 bytes .../ui/web/themes/images/vista/gradient-bg.gif | Bin 1472 -> 0 bytes .../web/themes/images/vista/grid/grid-split.gif | Bin 817 -> 0 bytes .../themes/images/vista/grid/grid-vista-hd.gif | Bin 829 -> 0 bytes .../web/themes/images/vista/layout/collapse.gif | Bin 842 -> 0 bytes .../web/themes/images/vista/layout/expand.gif | Bin 842 -> 0 bytes .../themes/images/vista/layout/gradient-bg.gif | Bin 1202 -> 0 bytes .../themes/images/vista/layout/ns-collapse.gif | Bin 842 -> 0 bytes .../themes/images/vista/layout/ns-expand.gif | Bin 843 -> 0 bytes .../themes/images/vista/layout/panel-close.gif | Bin 829 -> 0 bytes .../images/vista/layout/panel-title-bg.gif | Bin 888 -> 0 bytes .../vista/layout/panel-title-light-bg.gif | Bin 846 -> 0 bytes .../ui/web/themes/images/vista/layout/stick.gif | Bin 872 -> 0 bytes .../themes/images/vista/layout/tab-close-on.gif | Bin 880 -> 0 bytes .../themes/images/vista/layout/tab-close.gif | Bin 844 -> 0 bytes deluge/ui/web/themes/images/vista/qtip/bg.gif | Bin 1024 -> 0 bytes .../web/themes/images/vista/qtip/tip-sprite.gif | Bin 4183 -> 0 bytes deluge/ui/web/themes/images/vista/s.gif | Bin 43 -> 0 bytes .../themes/images/vista/sizer/e-handle-dark.gif | Bin 1062 -> 0 bytes .../web/themes/images/vista/sizer/e-handle.gif | Bin 1586 -> 0 bytes .../images/vista/sizer/ne-handle-dark.gif | Bin 839 -> 0 bytes .../web/themes/images/vista/sizer/ne-handle.gif | Bin 854 -> 0 bytes .../images/vista/sizer/nw-handle-dark.gif | Bin 839 -> 0 bytes .../web/themes/images/vista/sizer/nw-handle.gif | Bin 853 -> 0 bytes .../themes/images/vista/sizer/s-handle-dark.gif | Bin 1060 -> 0 bytes .../web/themes/images/vista/sizer/s-handle.gif | Bin 1318 -> 0 bytes .../images/vista/sizer/se-handle-dark.gif | Bin 838 -> 0 bytes .../web/themes/images/vista/sizer/se-handle.gif | Bin 853 -> 0 bytes .../images/vista/sizer/sw-handle-dark.gif | Bin 839 -> 0 bytes .../web/themes/images/vista/sizer/sw-handle.gif | Bin 855 -> 0 bytes .../vista/tabs/tab-btm-inactive-left-bg.gif | Bin 879 -> 0 bytes .../vista/tabs/tab-btm-inactive-right-bg.gif | Bin 1609 -> 0 bytes .../images/vista/tabs/tab-btm-left-bg.gif | Bin 895 -> 0 bytes .../images/vista/tabs/tab-btm-right-bg.gif | Bin 1608 -> 0 bytes .../web/themes/images/vista/tabs/tab-sprite.gif | Bin 3150 -> 0 bytes .../web/themes/images/vista/toolbar/gray-bg.gif | Bin 839 -> 0 bytes .../images/vista/toolbar/tb-btn-sprite.gif | Bin 1110 -> 0 bytes .../ui/web/themes/images/yourtheme/README.txt | 2 -- .../images/yourtheme/box/corners-blue.gif | Bin 1010 -> 0 bytes .../web/themes/images/yourtheme/box/corners.gif | Bin 1005 -> 0 bytes .../web/themes/images/yourtheme/box/l-blue.gif | Bin 810 -> 0 bytes deluge/ui/web/themes/images/yourtheme/box/l.gif | Bin 810 -> 0 bytes .../web/themes/images/yourtheme/box/r-blue.gif | Bin 810 -> 0 bytes deluge/ui/web/themes/images/yourtheme/box/r.gif | Bin 810 -> 0 bytes .../web/themes/images/yourtheme/box/tb-blue.gif | Bin 851 -> 0 bytes .../ui/web/themes/images/yourtheme/box/tb.gif | Bin 839 -> 0 bytes .../themes/images/yourtheme/button/arrow.gif | Bin 828 -> 0 bytes .../web/themes/images/yourtheme/button/btn.gif | Bin 4298 -> 0 bytes .../themes/images/yourtheme/button/group-cs.gif | Bin 2459 -> 0 bytes .../themes/images/yourtheme/button/group-lr.gif | Bin 861 -> 0 bytes .../themes/images/yourtheme/button/group-tb.gif | Bin 846 -> 0 bytes .../yourtheme/button/s-arrow-b-noline.gif | Bin 898 -> 0 bytes .../images/yourtheme/button/s-arrow-b.gif | Bin 937 -> 0 bytes .../images/yourtheme/button/s-arrow-bo.gif | Bin 139 -> 0 bytes .../images/yourtheme/button/s-arrow-noline.gif | Bin 863 -> 0 bytes .../images/yourtheme/button/s-arrow-o.gif | Bin 937 -> 0 bytes .../themes/images/yourtheme/button/s-arrow.gif | Bin 937 -> 0 bytes .../web/themes/images/yourtheme/dd/drop-add.gif | Bin 1001 -> 0 bytes .../web/themes/images/yourtheme/dd/drop-no.gif | Bin 949 -> 0 bytes .../web/themes/images/yourtheme/dd/drop-yes.gif | Bin 1016 -> 0 bytes .../images/yourtheme/editor/tb-sprite.gif | Bin 2072 -> 0 bytes .../themes/images/yourtheme/form/checkbox.gif | Bin 2061 -> 0 bytes .../images/yourtheme/form/clear-trigger.gif | Bin 1988 -> 0 bytes .../images/yourtheme/form/clear-trigger.psd | Bin 11804 -> 0 bytes .../images/yourtheme/form/date-trigger.gif | Bin 1603 -> 0 bytes .../images/yourtheme/form/date-trigger.psd | Bin 12377 -> 0 bytes .../images/yourtheme/form/error-tip-corners.gif | Bin 4183 -> 0 bytes .../images/yourtheme/form/exclamation.gif | Bin 996 -> 0 bytes .../web/themes/images/yourtheme/form/radio.gif | Bin 1746 -> 0 bytes .../images/yourtheme/form/search-trigger.gif | Bin 2182 -> 0 bytes .../images/yourtheme/form/search-trigger.psd | Bin 15601 -> 0 bytes .../themes/images/yourtheme/form/text-bg.gif | Bin 819 -> 0 bytes .../images/yourtheme/form/trigger-square.gif | Bin 1810 -> 0 bytes .../images/yourtheme/form/trigger-square.psd | Bin 36542 -> 0 bytes .../images/yourtheme/form/trigger-tpl.gif | Bin 1487 -> 0 bytes .../themes/images/yourtheme/form/trigger.gif | Bin 1816 -> 0 bytes .../themes/images/yourtheme/form/trigger.psd | Bin 37599 -> 0 bytes .../web/themes/images/yourtheme/gradient-bg.gif | Bin 1472 -> 0 bytes .../images/yourtheme/grid/arrow-left-white.gif | Bin 825 -> 0 bytes .../images/yourtheme/grid/arrow-right-white.gif | Bin 825 -> 0 bytes .../images/yourtheme/grid/col-move-bottom.gif | Bin 868 -> 0 bytes .../images/yourtheme/grid/col-move-top.gif | Bin 869 -> 0 bytes .../themes/images/yourtheme/grid/columns.gif | Bin 962 -> 0 bytes .../web/themes/images/yourtheme/grid/dirty.gif | Bin 832 -> 0 bytes .../web/themes/images/yourtheme/grid/done.gif | Bin 133 -> 0 bytes .../themes/images/yourtheme/grid/drop-no.gif | Bin 947 -> 0 bytes .../themes/images/yourtheme/grid/drop-yes.gif | Bin 860 -> 0 bytes .../themes/images/yourtheme/grid/footer-bg.gif | Bin 834 -> 0 bytes .../images/yourtheme/grid/grid-blue-hd.gif | Bin 829 -> 0 bytes .../images/yourtheme/grid/grid-blue-split.gif | Bin 817 -> 0 bytes .../themes/images/yourtheme/grid/grid-hrow.gif | Bin 855 -> 0 bytes .../images/yourtheme/grid/grid-loading.gif | Bin 701 -> 0 bytes .../themes/images/yourtheme/grid/grid-split.gif | Bin 817 -> 0 bytes .../images/yourtheme/grid/grid-vista-hd.gif | Bin 829 -> 0 bytes .../images/yourtheme/grid/grid3-hd-btn.gif | Bin 1229 -> 0 bytes .../images/yourtheme/grid/grid3-hrow-over.gif | Bin 823 -> 0 bytes .../themes/images/yourtheme/grid/grid3-hrow.gif | Bin 836 -> 0 bytes .../yourtheme/grid/grid3-special-col-bg.gif | Bin 837 -> 0 bytes .../yourtheme/grid/grid3-special-col-sel-bg.gif | Bin 843 -> 0 bytes .../themes/images/yourtheme/grid/group-by.gif | Bin 917 -> 0 bytes .../images/yourtheme/grid/group-collapse.gif | Bin 881 -> 0 bytes .../yourtheme/grid/group-expand-sprite.gif | Bin 955 -> 0 bytes .../images/yourtheme/grid/group-expand.gif | Bin 884 -> 0 bytes .../web/themes/images/yourtheme/grid/hd-pop.gif | Bin 839 -> 0 bytes .../themes/images/yourtheme/grid/hmenu-asc.gif | Bin 931 -> 0 bytes .../themes/images/yourtheme/grid/hmenu-desc.gif | Bin 930 -> 0 bytes .../themes/images/yourtheme/grid/hmenu-lock.gif | Bin 955 -> 0 bytes .../themes/images/yourtheme/grid/hmenu-lock.png | Bin 648 -> 0 bytes .../images/yourtheme/grid/hmenu-unlock.gif | Bin 971 -> 0 bytes .../images/yourtheme/grid/hmenu-unlock.png | Bin 697 -> 0 bytes .../images/yourtheme/grid/invalid_line.gif | Bin 815 -> 0 bytes .../themes/images/yourtheme/grid/loading.gif | Bin 771 -> 0 bytes .../web/themes/images/yourtheme/grid/mso-hd.gif | Bin 875 -> 0 bytes .../web/themes/images/yourtheme/grid/nowait.gif | Bin 884 -> 0 bytes .../yourtheme/grid/page-first-disabled.gif | Bin 925 -> 0 bytes .../themes/images/yourtheme/grid/page-first.gif | Bin 925 -> 0 bytes .../yourtheme/grid/page-last-disabled.gif | Bin 923 -> 0 bytes .../themes/images/yourtheme/grid/page-last.gif | Bin 923 -> 0 bytes .../yourtheme/grid/page-next-disabled.gif | Bin 875 -> 0 bytes .../themes/images/yourtheme/grid/page-next.gif | Bin 875 -> 0 bytes .../yourtheme/grid/page-prev-disabled.gif | Bin 879 -> 0 bytes .../themes/images/yourtheme/grid/page-prev.gif | Bin 879 -> 0 bytes .../images/yourtheme/grid/pick-button.gif | Bin 1036 -> 0 bytes .../themes/images/yourtheme/grid/refresh.gif | Bin 977 -> 0 bytes .../images/yourtheme/grid/row-check-sprite.gif | Bin 1083 -> 0 bytes .../images/yourtheme/grid/row-expand-sprite.gif | Bin 955 -> 0 bytes .../themes/images/yourtheme/grid/row-over.gif | Bin 823 -> 0 bytes .../themes/images/yourtheme/grid/row-sel.gif | Bin 823 -> 0 bytes .../themes/images/yourtheme/grid/sort-hd.gif | Bin 1473 -> 0 bytes .../themes/images/yourtheme/grid/sort_asc.gif | Bin 830 -> 0 bytes .../themes/images/yourtheme/grid/sort_desc.gif | Bin 833 -> 0 bytes .../web/themes/images/yourtheme/grid/wait.gif | Bin 1100 -> 0 bytes .../themes/images/yourtheme/layout/collapse.gif | Bin 842 -> 0 bytes .../themes/images/yourtheme/layout/expand.gif | Bin 842 -> 0 bytes .../images/yourtheme/layout/gradient-bg.gif | Bin 1472 -> 0 bytes .../images/yourtheme/layout/mini-bottom.gif | Bin 856 -> 0 bytes .../images/yourtheme/layout/mini-left.gif | Bin 871 -> 0 bytes .../images/yourtheme/layout/mini-right.gif | Bin 872 -> 0 bytes .../themes/images/yourtheme/layout/mini-top.gif | Bin 856 -> 0 bytes .../images/yourtheme/layout/ns-collapse.gif | Bin 842 -> 0 bytes .../images/yourtheme/layout/ns-expand.gif | Bin 843 -> 0 bytes .../images/yourtheme/layout/panel-close.gif | Bin 829 -> 0 bytes .../images/yourtheme/layout/panel-title-bg.gif | Bin 838 -> 0 bytes .../yourtheme/layout/panel-title-light-bg.gif | Bin 835 -> 0 bytes .../themes/images/yourtheme/layout/stick.gif | Bin 874 -> 0 bytes .../themes/images/yourtheme/layout/stuck.gif | Bin 92 -> 0 bytes .../images/yourtheme/layout/tab-close-on.gif | Bin 880 -> 0 bytes .../images/yourtheme/layout/tab-close.gif | Bin 859 -> 0 bytes .../themes/images/yourtheme/menu/checked.gif | Bin 959 -> 0 bytes .../images/yourtheme/menu/group-checked.gif | Bin 891 -> 0 bytes .../themes/images/yourtheme/menu/item-over.gif | Bin 820 -> 0 bytes .../images/yourtheme/menu/menu-parent.gif | Bin 854 -> 0 bytes .../web/themes/images/yourtheme/menu/menu.gif | Bin 834 -> 0 bytes .../themes/images/yourtheme/menu/unchecked.gif | Bin 941 -> 0 bytes .../images/yourtheme/panel/corners-sprite.gif | Bin 1418 -> 0 bytes .../images/yourtheme/panel/left-right.gif | Bin 815 -> 0 bytes .../themes/images/yourtheme/panel/light-hd.gif | Bin 827 -> 0 bytes .../images/yourtheme/panel/tool-sprite-tpl.gif | Bin 971 -> 0 bytes .../images/yourtheme/panel/tool-sprites.gif | Bin 4392 -> 0 bytes .../yourtheme/panel/tools-sprites-trans.gif | Bin 2843 -> 0 bytes .../images/yourtheme/panel/top-bottom.gif | Bin 875 -> 0 bytes .../images/yourtheme/panel/top-bottom.png | Bin 218 -> 0 bytes .../yourtheme/panel/white-corners-sprite.gif | Bin 1366 -> 0 bytes .../images/yourtheme/panel/white-left-right.gif | Bin 815 -> 0 bytes .../images/yourtheme/panel/white-top-bottom.gif | Bin 872 -> 0 bytes .../images/yourtheme/progress/progress-bg.gif | Bin 834 -> 0 bytes .../ui/web/themes/images/yourtheme/qtip/bg.gif | Bin 1091 -> 0 bytes .../web/themes/images/yourtheme/qtip/close.gif | Bin 972 -> 0 bytes .../images/yourtheme/qtip/tip-anchor-sprite.gif | Bin 951 -> 0 bytes .../themes/images/yourtheme/qtip/tip-sprite.gif | Bin 4271 -> 0 bytes deluge/ui/web/themes/images/yourtheme/s.gif | Bin 43 -> 0 bytes .../ui/web/themes/images/yourtheme/shadow-c.png | Bin 118 -> 0 bytes .../web/themes/images/yourtheme/shadow-lr.png | Bin 135 -> 0 bytes .../ui/web/themes/images/yourtheme/shadow.png | Bin 311 -> 0 bytes .../images/yourtheme/shared/blue-loading.gif | Bin 3236 -> 0 bytes .../themes/images/yourtheme/shared/calendar.gif | Bin 979 -> 0 bytes .../themes/images/yourtheme/shared/glass-bg.gif | Bin 873 -> 0 bytes .../images/yourtheme/shared/hd-sprite.gif | Bin 1099 -> 0 bytes .../images/yourtheme/shared/large-loading.gif | Bin 3236 -> 0 bytes .../themes/images/yourtheme/shared/left-btn.gif | Bin 870 -> 0 bytes .../images/yourtheme/shared/loading-balls.gif | Bin 2118 -> 0 bytes .../images/yourtheme/shared/right-btn.gif | Bin 871 -> 0 bytes .../themes/images/yourtheme/shared/warning.gif | Bin 960 -> 0 bytes .../images/yourtheme/sizer/e-handle-dark.gif | Bin 1062 -> 0 bytes .../themes/images/yourtheme/sizer/e-handle.gif | Bin 1586 -> 0 bytes .../images/yourtheme/sizer/ne-handle-dark.gif | Bin 839 -> 0 bytes .../themes/images/yourtheme/sizer/ne-handle.gif | Bin 854 -> 0 bytes .../images/yourtheme/sizer/nw-handle-dark.gif | Bin 839 -> 0 bytes .../themes/images/yourtheme/sizer/nw-handle.gif | Bin 853 -> 0 bytes .../images/yourtheme/sizer/s-handle-dark.gif | Bin 1060 -> 0 bytes .../themes/images/yourtheme/sizer/s-handle.gif | Bin 1318 -> 0 bytes .../images/yourtheme/sizer/se-handle-dark.gif | Bin 838 -> 0 bytes .../themes/images/yourtheme/sizer/se-handle.gif | Bin 853 -> 0 bytes .../themes/images/yourtheme/sizer/square.gif | Bin 864 -> 0 bytes .../images/yourtheme/sizer/sw-handle-dark.gif | Bin 839 -> 0 bytes .../themes/images/yourtheme/sizer/sw-handle.gif | Bin 855 -> 0 bytes .../images/yourtheme/slider/slider-bg.png | Bin 300 -> 0 bytes .../images/yourtheme/slider/slider-thumb.png | Bin 933 -> 0 bytes .../images/yourtheme/slider/slider-v-bg.png | Bin 288 -> 0 bytes .../images/yourtheme/slider/slider-v-thumb.png | Bin 883 -> 0 bytes .../images/yourtheme/tabs/scroll-left.gif | Bin 1295 -> 0 bytes .../images/yourtheme/tabs/scroll-right.gif | Bin 1300 -> 0 bytes .../images/yourtheme/tabs/scroller-bg.gif | Bin 1100 -> 0 bytes .../yourtheme/tabs/tab-btm-inactive-left-bg.gif | Bin 886 -> 0 bytes .../tabs/tab-btm-inactive-right-bg.gif | Bin 1386 -> 0 bytes .../images/yourtheme/tabs/tab-btm-left-bg.gif | Bin 1402 -> 0 bytes .../yourtheme/tabs/tab-btm-over-left-bg.gif | Bin 191 -> 0 bytes .../yourtheme/tabs/tab-btm-over-right-bg.gif | Bin 638 -> 0 bytes .../images/yourtheme/tabs/tab-btm-right-bg.gif | Bin 863 -> 0 bytes .../themes/images/yourtheme/tabs/tab-close.gif | Bin 896 -> 0 bytes .../images/yourtheme/tabs/tab-strip-bg.gif | Bin 835 -> 0 bytes .../images/yourtheme/tabs/tab-strip-bg.png | Bin 259 -> 0 bytes .../images/yourtheme/tabs/tab-strip-btm-bg.gif | Bin 826 -> 0 bytes .../images/yourtheme/tabs/tabs-sprite.gif | Bin 2120 -> 0 bytes .../web/themes/images/yourtheme/toolbar/bg.gif | Bin 904 -> 0 bytes .../yourtheme/toolbar/btn-arrow-light.gif | Bin 916 -> 0 bytes .../images/yourtheme/toolbar/btn-arrow.gif | Bin 919 -> 0 bytes .../images/yourtheme/toolbar/btn-over-bg.gif | Bin 837 -> 0 bytes .../themes/images/yourtheme/toolbar/gray-bg.gif | Bin 832 -> 0 bytes .../themes/images/yourtheme/toolbar/more.gif | Bin 845 -> 0 bytes .../themes/images/yourtheme/toolbar/tb-bg.gif | Bin 862 -> 0 bytes .../images/yourtheme/toolbar/tb-btn-sprite.gif | Bin 1127 -> 0 bytes .../yourtheme/toolbar/tb-xl-btn-sprite.gif | Bin 1663 -> 0 bytes .../images/yourtheme/toolbar/tb-xl-sep.gif | Bin 810 -> 0 bytes .../web/themes/images/yourtheme/tree/arrows.gif | Bin 617 -> 0 bytes .../themes/images/yourtheme/tree/drop-add.gif | Bin 1001 -> 0 bytes .../images/yourtheme/tree/drop-between.gif | Bin 907 -> 0 bytes .../themes/images/yourtheme/tree/drop-no.gif | Bin 949 -> 0 bytes .../themes/images/yourtheme/tree/drop-over.gif | Bin 911 -> 0 bytes .../themes/images/yourtheme/tree/drop-under.gif | Bin 911 -> 0 bytes .../themes/images/yourtheme/tree/drop-yes.gif | Bin 1016 -> 0 bytes .../yourtheme/tree/elbow-end-minus-nl.gif | Bin 898 -> 0 bytes .../images/yourtheme/tree/elbow-end-minus.gif | Bin 905 -> 0 bytes .../images/yourtheme/tree/elbow-end-plus-nl.gif | Bin 900 -> 0 bytes .../images/yourtheme/tree/elbow-end-plus.gif | Bin 907 -> 0 bytes .../themes/images/yourtheme/tree/elbow-end.gif | Bin 844 -> 0 bytes .../themes/images/yourtheme/tree/elbow-line.gif | Bin 846 -> 0 bytes .../images/yourtheme/tree/elbow-minus-nl.gif | Bin 898 -> 0 bytes .../images/yourtheme/tree/elbow-minus.gif | Bin 908 -> 0 bytes .../images/yourtheme/tree/elbow-plus-nl.gif | Bin 900 -> 0 bytes .../themes/images/yourtheme/tree/elbow-plus.gif | Bin 910 -> 0 bytes .../web/themes/images/yourtheme/tree/elbow.gif | Bin 850 -> 0 bytes .../images/yourtheme/tree/folder-open.gif | Bin 956 -> 0 bytes .../web/themes/images/yourtheme/tree/folder.gif | Bin 952 -> 0 bytes .../web/themes/images/yourtheme/tree/leaf.gif | Bin 945 -> 0 bytes .../themes/images/yourtheme/tree/loading.gif | Bin 771 -> 0 bytes .../ui/web/themes/images/yourtheme/tree/s.gif | Bin 43 -> 0 bytes .../images/yourtheme/window/icon-error.gif | Bin 1669 -> 0 bytes .../images/yourtheme/window/icon-info.gif | Bin 1586 -> 0 bytes .../images/yourtheme/window/icon-question.gif | Bin 1607 -> 0 bytes .../images/yourtheme/window/icon-warning.gif | Bin 1483 -> 0 bytes .../images/yourtheme/window/left-corners.png | Bin 200 -> 0 bytes .../images/yourtheme/window/left-corners.psd | Bin 15576 -> 0 bytes .../images/yourtheme/window/left-right.png | Bin 152 -> 0 bytes .../images/yourtheme/window/left-right.psd | Bin 24046 -> 0 bytes .../images/yourtheme/window/right-corners.png | Bin 256 -> 0 bytes .../images/yourtheme/window/right-corners.psd | Bin 15530 -> 0 bytes .../images/yourtheme/window/top-bottom.png | Bin 180 -> 0 bytes .../images/yourtheme/window/top-bottom.psd | Bin 32128 -> 0 bytes 277 files changed, 8 deletions(-) delete mode 100644 deluge/ui/web/TODO delete mode 100644 deluge/ui/web/icons/readme.txt delete mode 100644 deluge/ui/web/images/debugerror.png delete mode 100644 deluge/ui/web/images/deluge-icon.png delete mode 100644 deluge/ui/web/images/deluge16.png delete mode 100644 deluge/ui/web/images/deluge32.png delete mode 100644 deluge/ui/web/images/deluge_icon.gif delete mode 100644 deluge/ui/web/themes/images/vista/basic-dialog/bg-center.gif delete mode 100644 deluge/ui/web/themes/images/vista/basic-dialog/bg-left.gif delete mode 100644 deluge/ui/web/themes/images/vista/basic-dialog/bg-right.gif delete mode 100644 deluge/ui/web/themes/images/vista/basic-dialog/close.gif delete mode 100644 deluge/ui/web/themes/images/vista/basic-dialog/collapse.gif delete mode 100644 deluge/ui/web/themes/images/vista/basic-dialog/dlg-bg.gif delete mode 100644 deluge/ui/web/themes/images/vista/basic-dialog/e-handle.gif delete mode 100644 deluge/ui/web/themes/images/vista/basic-dialog/expand.gif delete mode 100644 deluge/ui/web/themes/images/vista/basic-dialog/hd-sprite.gif delete mode 100644 deluge/ui/web/themes/images/vista/basic-dialog/s-handle.gif delete mode 100644 deluge/ui/web/themes/images/vista/basic-dialog/se-handle.gif delete mode 100644 deluge/ui/web/themes/images/vista/basic-dialog/w-handle.gif delete mode 100644 deluge/ui/web/themes/images/vista/gradient-bg.gif delete mode 100644 deluge/ui/web/themes/images/vista/grid/grid-split.gif delete mode 100644 deluge/ui/web/themes/images/vista/grid/grid-vista-hd.gif delete mode 100644 deluge/ui/web/themes/images/vista/layout/collapse.gif delete mode 100644 deluge/ui/web/themes/images/vista/layout/expand.gif delete mode 100644 deluge/ui/web/themes/images/vista/layout/gradient-bg.gif delete mode 100644 deluge/ui/web/themes/images/vista/layout/ns-collapse.gif delete mode 100644 deluge/ui/web/themes/images/vista/layout/ns-expand.gif delete mode 100644 deluge/ui/web/themes/images/vista/layout/panel-close.gif delete mode 100644 deluge/ui/web/themes/images/vista/layout/panel-title-bg.gif delete mode 100644 deluge/ui/web/themes/images/vista/layout/panel-title-light-bg.gif delete mode 100644 deluge/ui/web/themes/images/vista/layout/stick.gif delete mode 100644 deluge/ui/web/themes/images/vista/layout/tab-close-on.gif delete mode 100644 deluge/ui/web/themes/images/vista/layout/tab-close.gif delete mode 100644 deluge/ui/web/themes/images/vista/qtip/bg.gif delete mode 100644 deluge/ui/web/themes/images/vista/qtip/tip-sprite.gif delete mode 100644 deluge/ui/web/themes/images/vista/s.gif delete mode 100644 deluge/ui/web/themes/images/vista/sizer/e-handle-dark.gif delete mode 100644 deluge/ui/web/themes/images/vista/sizer/e-handle.gif delete mode 100644 deluge/ui/web/themes/images/vista/sizer/ne-handle-dark.gif delete mode 100644 deluge/ui/web/themes/images/vista/sizer/ne-handle.gif delete mode 100644 deluge/ui/web/themes/images/vista/sizer/nw-handle-dark.gif delete mode 100644 deluge/ui/web/themes/images/vista/sizer/nw-handle.gif delete mode 100644 deluge/ui/web/themes/images/vista/sizer/s-handle-dark.gif delete mode 100644 deluge/ui/web/themes/images/vista/sizer/s-handle.gif delete mode 100644 deluge/ui/web/themes/images/vista/sizer/se-handle-dark.gif delete mode 100644 deluge/ui/web/themes/images/vista/sizer/se-handle.gif delete mode 100644 deluge/ui/web/themes/images/vista/sizer/sw-handle-dark.gif delete mode 100644 deluge/ui/web/themes/images/vista/sizer/sw-handle.gif delete mode 100644 deluge/ui/web/themes/images/vista/tabs/tab-btm-inactive-left-bg.gif delete mode 100644 deluge/ui/web/themes/images/vista/tabs/tab-btm-inactive-right-bg.gif delete mode 100644 deluge/ui/web/themes/images/vista/tabs/tab-btm-left-bg.gif delete mode 100644 deluge/ui/web/themes/images/vista/tabs/tab-btm-right-bg.gif delete mode 100644 deluge/ui/web/themes/images/vista/tabs/tab-sprite.gif delete mode 100644 deluge/ui/web/themes/images/vista/toolbar/gray-bg.gif delete mode 100644 deluge/ui/web/themes/images/vista/toolbar/tb-btn-sprite.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/README.txt delete mode 100644 deluge/ui/web/themes/images/yourtheme/box/corners-blue.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/box/corners.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/box/l-blue.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/box/l.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/box/r-blue.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/box/r.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/box/tb-blue.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/box/tb.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/button/arrow.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/button/btn.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/button/group-cs.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/button/group-lr.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/button/group-tb.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/button/s-arrow-b-noline.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/button/s-arrow-b.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/button/s-arrow-bo.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/button/s-arrow-noline.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/button/s-arrow-o.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/button/s-arrow.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/dd/drop-add.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/dd/drop-no.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/dd/drop-yes.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/editor/tb-sprite.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/form/checkbox.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/form/clear-trigger.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/form/clear-trigger.psd delete mode 100644 deluge/ui/web/themes/images/yourtheme/form/date-trigger.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/form/date-trigger.psd delete mode 100644 deluge/ui/web/themes/images/yourtheme/form/error-tip-corners.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/form/exclamation.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/form/radio.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/form/search-trigger.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/form/search-trigger.psd delete mode 100644 deluge/ui/web/themes/images/yourtheme/form/text-bg.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/form/trigger-square.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/form/trigger-square.psd delete mode 100644 deluge/ui/web/themes/images/yourtheme/form/trigger-tpl.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/form/trigger.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/form/trigger.psd delete mode 100644 deluge/ui/web/themes/images/yourtheme/gradient-bg.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/arrow-left-white.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/arrow-right-white.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/col-move-bottom.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/col-move-top.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/columns.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/dirty.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/done.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/drop-no.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/drop-yes.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/footer-bg.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/grid-blue-hd.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/grid-blue-split.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/grid-hrow.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/grid-loading.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/grid-split.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/grid-vista-hd.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/grid3-hd-btn.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/grid3-hrow-over.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/grid3-hrow.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/grid3-special-col-bg.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/grid3-special-col-sel-bg.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/group-by.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/group-collapse.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/group-expand-sprite.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/group-expand.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/hd-pop.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/hmenu-asc.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/hmenu-desc.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/hmenu-lock.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/hmenu-lock.png delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/hmenu-unlock.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/hmenu-unlock.png delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/invalid_line.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/loading.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/mso-hd.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/nowait.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/page-first-disabled.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/page-first.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/page-last-disabled.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/page-last.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/page-next-disabled.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/page-next.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/page-prev-disabled.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/page-prev.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/pick-button.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/refresh.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/row-check-sprite.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/row-expand-sprite.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/row-over.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/row-sel.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/sort-hd.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/sort_asc.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/sort_desc.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/grid/wait.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/layout/collapse.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/layout/expand.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/layout/gradient-bg.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/layout/mini-bottom.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/layout/mini-left.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/layout/mini-right.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/layout/mini-top.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/layout/ns-collapse.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/layout/ns-expand.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/layout/panel-close.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/layout/panel-title-bg.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/layout/panel-title-light-bg.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/layout/stick.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/layout/stuck.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/layout/tab-close-on.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/layout/tab-close.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/menu/checked.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/menu/group-checked.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/menu/item-over.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/menu/menu-parent.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/menu/menu.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/menu/unchecked.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/panel/corners-sprite.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/panel/left-right.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/panel/light-hd.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/panel/tool-sprite-tpl.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/panel/tool-sprites.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/panel/tools-sprites-trans.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/panel/top-bottom.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/panel/top-bottom.png delete mode 100644 deluge/ui/web/themes/images/yourtheme/panel/white-corners-sprite.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/panel/white-left-right.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/panel/white-top-bottom.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/progress/progress-bg.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/qtip/bg.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/qtip/close.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/qtip/tip-anchor-sprite.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/qtip/tip-sprite.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/s.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/shadow-c.png delete mode 100644 deluge/ui/web/themes/images/yourtheme/shadow-lr.png delete mode 100644 deluge/ui/web/themes/images/yourtheme/shadow.png delete mode 100644 deluge/ui/web/themes/images/yourtheme/shared/blue-loading.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/shared/calendar.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/shared/glass-bg.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/shared/hd-sprite.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/shared/large-loading.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/shared/left-btn.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/shared/loading-balls.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/shared/right-btn.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/shared/warning.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/sizer/e-handle-dark.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/sizer/e-handle.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/sizer/ne-handle-dark.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/sizer/ne-handle.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/sizer/nw-handle-dark.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/sizer/nw-handle.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/sizer/s-handle-dark.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/sizer/s-handle.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/sizer/se-handle-dark.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/sizer/se-handle.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/sizer/square.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/sizer/sw-handle-dark.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/sizer/sw-handle.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/slider/slider-bg.png delete mode 100644 deluge/ui/web/themes/images/yourtheme/slider/slider-thumb.png delete mode 100644 deluge/ui/web/themes/images/yourtheme/slider/slider-v-bg.png delete mode 100644 deluge/ui/web/themes/images/yourtheme/slider/slider-v-thumb.png delete mode 100644 deluge/ui/web/themes/images/yourtheme/tabs/scroll-left.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tabs/scroll-right.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tabs/scroller-bg.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tabs/tab-btm-inactive-left-bg.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tabs/tab-btm-inactive-right-bg.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tabs/tab-btm-left-bg.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tabs/tab-btm-over-left-bg.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tabs/tab-btm-over-right-bg.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tabs/tab-btm-right-bg.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tabs/tab-close.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tabs/tab-strip-bg.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tabs/tab-strip-bg.png delete mode 100644 deluge/ui/web/themes/images/yourtheme/tabs/tab-strip-btm-bg.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tabs/tabs-sprite.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/toolbar/bg.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/toolbar/btn-arrow-light.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/toolbar/btn-arrow.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/toolbar/btn-over-bg.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/toolbar/gray-bg.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/toolbar/more.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/toolbar/tb-bg.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/toolbar/tb-btn-sprite.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/toolbar/tb-xl-btn-sprite.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/toolbar/tb-xl-sep.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tree/arrows.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tree/drop-add.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tree/drop-between.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tree/drop-no.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tree/drop-over.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tree/drop-under.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tree/drop-yes.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tree/elbow-end-minus-nl.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tree/elbow-end-minus.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tree/elbow-end-plus-nl.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tree/elbow-end-plus.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tree/elbow-end.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tree/elbow-line.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tree/elbow-minus-nl.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tree/elbow-minus.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tree/elbow-plus-nl.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tree/elbow-plus.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tree/elbow.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tree/folder-open.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tree/folder.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tree/leaf.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tree/loading.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/tree/s.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/window/icon-error.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/window/icon-info.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/window/icon-question.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/window/icon-warning.gif delete mode 100644 deluge/ui/web/themes/images/yourtheme/window/left-corners.png delete mode 100644 deluge/ui/web/themes/images/yourtheme/window/left-corners.psd delete mode 100644 deluge/ui/web/themes/images/yourtheme/window/left-right.png delete mode 100644 deluge/ui/web/themes/images/yourtheme/window/left-right.psd delete mode 100644 deluge/ui/web/themes/images/yourtheme/window/right-corners.png delete mode 100644 deluge/ui/web/themes/images/yourtheme/window/right-corners.psd delete mode 100644 deluge/ui/web/themes/images/yourtheme/window/top-bottom.png delete mode 100644 deluge/ui/web/themes/images/yourtheme/window/top-bottom.psd diff --git a/deluge/ui/web/TODO b/deluge/ui/web/TODO deleted file mode 100644 index 6861a65f1..000000000 --- a/deluge/ui/web/TODO +++ /dev/null @@ -1,4 +0,0 @@ -* Add Window torrent options - - Add an options manager -* Preferences window options - - Add an options manager diff --git a/deluge/ui/web/icons/readme.txt b/deluge/ui/web/icons/readme.txt deleted file mode 100644 index 66049b810..000000000 --- a/deluge/ui/web/icons/readme.txt +++ /dev/null @@ -1,2 +0,0 @@ -images from the fruge icon set. -See LICENSE for a list of icons not taken from fruge. diff --git a/deluge/ui/web/images/debugerror.png b/deluge/ui/web/images/debugerror.png deleted file mode 100644 index fedb1a72467685aa73a85dbfccc5ab2ad89aae0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9489 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 diff --git a/deluge/ui/web/images/deluge-icon.png b/deluge/ui/web/images/deluge-icon.png deleted file mode 100644 index e39cd0c7eebdf68688339b82aebdeecfe9f5fc9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 722 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 diff --git a/deluge/ui/web/themes/images/vista/basic-dialog/dlg-bg.gif b/deluge/ui/web/themes/images/vista/basic-dialog/dlg-bg.gif deleted file mode 100644 index 1a466633d70ca1475db2c11061d37911e3b7205c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27857 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 diff --git a/deluge/ui/web/themes/images/vista/basic-dialog/e-handle.gif b/deluge/ui/web/themes/images/vista/basic-dialog/e-handle.gif deleted file mode 100644 index 48877e748d8fd70185e08c4847b16c932d653664..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 995 zcmZ?wbhEHbWM#O(-p&95YgWws|NlRjIZBL%z{m;##h)z9ARp_12vDA2;5fj*$RXpg zVZp&>4q>gB6B`yDZWmDYn&Yu?(a~-Rdwi{%g@huXy%gj+Op!}VvosMv8T4Iyu3VMvDaL$t*frCj@X=a z_te(a*ViW;?uwOCIB;MS6C0OD_J%h%8FCoc*uDr;h}v4nd5yIo{K1`#4b0qfK07u% yJlr9y9d~BO#>dAeD0|QI*}3WI=^4h^_s;Cx{QUd^=WaRQU0YsWp32O`U=09jY;5ZQ diff --git a/deluge/ui/web/themes/images/vista/basic-dialog/expand.gif b/deluge/ui/web/themes/images/vista/basic-dialog/expand.gif deleted file mode 100644 index 5b4b0d1e950e34f602f5227eb7e0fa9d707953b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 351 zcmZ?wbhEHbC>mi#>VpU^3c%G z*x1;Lii(nwlE}!&va+)3>gr#=ekCO(J$drP-Q7JuKR-S`-rnB6y}iAusj0rczPPy9 z$jInF5HK)UTU#^G5-9#;VPs&CXV3vz0`e0BTg?IgbPpXN`vvW3Cv&po6fUT3Tp6|Y zipKGWFRS+Q`I!WK2soF)wMd{tPORgo!@ddCV(l6WnpXVyFDfL;P$eNJ(a|ZvAKEV*;nZpmDaDF-IY IJ2F@U0DGff6aWAK diff --git a/deluge/ui/web/themes/images/vista/basic-dialog/hd-sprite.gif b/deluge/ui/web/themes/images/vista/basic-dialog/hd-sprite.gif deleted file mode 100644 index 3c2dd632dd60f2fbd55ca74969053abcb40a0b89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 462 zcmZ?wbhEHbWM-&lxT?fpXlNc46>n&0rmn87t*x)GZ=$BAZDeGTpI@S_ZJ?^EnV6WC zk&zP{o0OH6UsO~c78b3ksjH@@rK@XXVq%q&l9`)ZWNKLk$fb0|QfU z?*KhLV=XN`V`EDrBlG|N|1;1ADE?$&WMEKY&;c0_@)HBw>jMEEEhk&#`URK-H$^z{ zxpy4o2-RA6ROw1a3sa*2i_oi*Q_oMUx-4vQSWy0_K!A&}VS=ctgMQ1axHDb z!irK--MyTgiYzRO^72!s3koVqOV63d%&f@9rYIz&$i?McCMn_W>Fw(u7#tcN866v+ zn4GacD<`j@NU@|$v7)M`u0gS>{bFa|l?jukOq-!NYyRDZi#*yhe_i^SKbLiK1vBI ZAG7-kT6NwL$YRiBUaqntNPvaG8UP8Kc8&l5 diff --git a/deluge/ui/web/themes/images/vista/basic-dialog/s-handle.gif b/deluge/ui/web/themes/images/vista/basic-dialog/s-handle.gif deleted file mode 100644 index c13c9cdc0561773f3684528ca64dc6286eeda5b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 992 zcmZ?wbhEHbyui-N(9Qq?YgWws|NlRjIZBL%z{m;##h)z9ARp_12vDA2;MmK+$RXpg zVZp&>4q>gB6B`yDZWmDYn&Yu?(a~-Rdwi{%g@huXy%gj+Op!}VvosMv8PJX8yJ}8yR~vTWL;hzu{rDR zsjaK8uTMDKCF{Ly&CSgjmsiD}{=Bkb72~~Kt-q(Oy}P^O^Q*h3x39myzk!)s&S%Gl v#Fh~h2?h>6 U21X7E0S5)gW>$7K4h{xu0Q^P?w*UYD diff --git a/deluge/ui/web/themes/images/vista/gradient-bg.gif b/deluge/ui/web/themes/images/vista/gradient-bg.gif deleted file mode 100644 index 8134e4994f2a36da074990b94a5f17aefd378600..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1472 zcmeIx`%jZs7{KwDTLnZd*hMh7R3%&{VK|xh5d@TrMjeTpnq?_&b8`}Bh(kowLJ^R= zwLrP_Mz6F*N-1{`N?)K@6i}uD1>V*|OIv8)A|*;9JN<2c#7;i>=A7rpCpmEmrw$)U zc7mcXc@UIVGnG~gOy34*)9Li-becMyuD$~>)ERVj219+9F_Xbm-(}8ZvefrjGxzFd z?gQ+Z2W-&U2kcoQXO_sF&Em{uap$rD-W-Vsija6n4j*~Q*W?J0hYp%tpk9;bpv@I( z@`Tz)B2B(fn=b+vZGl)@(4Z|8YYQ8+MGfzZp1v;z8bNg>jk*$vu2iBclgyVj>B^es z9|O{PvUGvmyzs<9PmwK9WcqTTMPJ^kuV~R%wCXE?Ha*qBP}OFjwi~K|4nuYOVl`;T zVhzx_SPOK48f&|ZG@#o^cQDa=jErs*qsPQ}W@7f3n4r(hETGq1*K1~j_Lq?Dr%LqcFxvPW zut}by5*6B{LZvEO(+Ju$Vv_!sOuZvAc4ePkK}Mg^X|R8{wv3g3jV&Qm0~*o(w;!4zGtP^}q4TE3f=4jcq2s zNTj41IT7{z(FAgK^iIzZ@_2j+Ir8!+!Q#r@%9(ju7k_5|Ghf7eqx2?7%YoH4jP!wx7HA*Q43) zwFOW=pP6ly3pn=?dHpWVl+z~h4aA7q3Dbmfk>A9h*D=1j0=ZkaJtNDl4|Dy58=OQ4 zb=w|rEX#G|6q4dPk_gFV6VcYbmUmazi7x6i6Xb&As-j$U2PJ(S9-JDYvw05^=DZ2M z-q(%65iC7!Sf=Hfs~2MFb#cc_ASYbPO$Z9ewDx-)GFuhcxKI?v{g{Fd`2H?N2mNoG a(II?Zs7)DAnPM9b=8J95L)rdV=-9sjoxm#q diff --git a/deluge/ui/web/themes/images/vista/grid/grid-split.gif b/deluge/ui/web/themes/images/vista/grid/grid-split.gif deleted file mode 100644 index c76a16e95997a487ee9cd1675ecdd99bd2f37c17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 817 zcmZ?wbhEHbWMbfDXlGzpvts7||Nj|A!DtAK$PiHc$pZBEe+C_p??HKjfrF2Mkww6x PV8OvA4t_Qc4hCxg>zoX) diff --git a/deluge/ui/web/themes/images/vista/grid/grid-vista-hd.gif b/deluge/ui/web/themes/images/vista/grid/grid-vista-hd.gif deleted file mode 100644 index d0972638e8305d32d4a2419b3dd317f3c8fd3fe2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 829 zcmZ?wbhEHbWMmL!XlGzJe){5xGZ#;uy>#l_<(QpFT5;g3%Bd$|0cmlLhGf{|q`H nPk{0S1BVoYrq2Wc#zV~Pyb=r?3JDC2Ol*7#9t#p29T=`0w!X<41;3Fd70QG6WQVvM_@@t^*=Kd4hpMoq>@<#$&^R ngUt*~JRuPV49@Mm@`0w!X<41;3Fd70QG6WQVvM_=?t^*=Kd4hpMoq>@<#$&^R ngH4QVY9mEVcn)kx zWMC9f}-qT zS9f*_H=dvG(9GpJVZn-vi#;Z5#qJ7eyu3VMvDaL$tyx!CBQ|H0F7?R<|;&Gp{C?(S~>Pfj;ZZ(o0Ze*-hOoKHkS%i#`T?J%8%8y_E^ zpzJ-*Vdti&r)L;v-#fF@xb^%3`)~>0U0YsWUJ<-nEqCG8*Vi{BpPuI{{jK%(j{M{s zXLoOZfB!%;x4fTC^T)?0CTqv9Te$P{^9u{}XZY>i_4W0Q&DrN4;om+G9EN?s6{N`;4ypg zpjp68V_}PONXElfi8Ko)PMNY758D;mB$7B)re!?p)L6FSQJ2oTj6>Z9$21;unq13x y+-tsQ!Q(!gZ!aGAJFsa!nc%`V^Uy^1RSTX>(pvN2$>abx&8JgB!X#527_0%M<4zp_ diff --git a/deluge/ui/web/themes/images/vista/layout/ns-collapse.gif b/deluge/ui/web/themes/images/vista/layout/ns-collapse.gif deleted file mode 100644 index f2ad235dad390e71a096e2e943ade1f22c1de113..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 842 zcmZ?wbhEHb`0w!X<41;3Fd70QG6WQVvM_@@t^*=Kd4hpMoq>@<#$&?* n$7V)8E}jD)5)QYqC^Aiu2z=<$#VoJZv*Y8Uqy4PRObpfl%OVxB diff --git a/deluge/ui/web/themes/images/vista/layout/ns-expand.gif b/deluge/ui/web/themes/images/vista/layout/ns-expand.gif deleted file mode 100644 index 0817ec66fd410022c495adacc4855a4cc548ce0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 843 zcmZ?wbhEHb`0w!X<41;3Fd70QG6WQVvM_=?t^*=Kd4hpMgMpDl#$&^R ogN=+#3Lzc_iVW>+!bUb08y~uKaLb3q?AZA5V7~%88w-Oq0L1MSzyJUM diff --git a/deluge/ui/web/themes/images/vista/layout/panel-close.gif b/deluge/ui/web/themes/images/vista/layout/panel-close.gif deleted file mode 100644 index 4e96481a1fdb16a6f332ae06e138f15ac24fcc03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 829 zcmZ?wbhEHbWM^P!XlGzZj0<)6@9^Z&RfbV88UiCP1QdU=Ff%YPGU$N34$2b@98wI7 f92^b-4GxWrJbWP?8xjt;u!}3DSX@YSV6X-NNAwV) diff --git a/deluge/ui/web/themes/images/vista/layout/panel-title-bg.gif b/deluge/ui/web/themes/images/vista/layout/panel-title-bg.gif deleted file mode 100644 index 681f517a3c2e78c59a0a066e72c9d98c89bd5798..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 888 zcmcJOT}V@57{{M|>C|cSy*dzr-6X~>bt5B8-OE?rwTx5*riBXgoz#9DzP zf_73c5Wmu@^K&s0wVo7-u6twKw`k<)WUe1B%Jm>kn&;S4MzJtR9 zc1K788dw2fm~Ov+l3}{kYMQ1^CX-dAqFL6?^C_A(cXnz+q3Kv`HW-|W$N6M((dRp* z)f!YPox#9btv!**Od^rA*?L!3H%3Rt^m<04(VNXSr*p(;wCHq3i^ajR-TV9d@PC%j z;31yZV(1{Q5`b9f&sFvyr<4)r95y5_F87`i8s^sD6oo!s=$ituoOsj3J1#VwsIp#t zm332pvc(#k`xm=Sym^4EPKdMWC?-j@*h`S-U+>DN*J#c&u0_Z3T z@f3suFuwq24KT9=(Ey~%rUDQ1Nmz*1ei8TDPqUJ6J%#bto2YHJYKUSU&3 z<>fY35_b^=2(r>{o+6&Bf@~DWCCCyuuG-U4*6pDYbd6%t)D0{qBWJ1^#l_<v?3yLtEet$R0a-@ke1!L7RwZ{K@#|Iw3&Po6z~_Tt%#S1(?@dG+S)n|JTu zfB5+E)924$zJC4o{l|}=45MH)1O|5qDE?#tI`BV(4#=6HJi)-B&0t&dV1uJG8;`h7 m$N~dK2L?uF4iSR_21h1VZV8iu4-8H$oC?leGL}XP4AuY#5nmwy diff --git a/deluge/ui/web/themes/images/vista/layout/stick.gif b/deluge/ui/web/themes/images/vista/layout/stick.gif deleted file mode 100644 index 7db68eec95fc77cce1fc4560a257dd0fef64c200..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 872 zcmZ?wbhEHbgwvrlP4cMco57R!o#gWSa7h}g-^(5MS#M@b^&=k d6N!%t8@eSVt=4E1Dje_QlWr4PX`sMh4FDiwBDw$o diff --git a/deluge/ui/web/themes/images/vista/layout/tab-close-on.gif b/deluge/ui/web/themes/images/vista/layout/tab-close-on.gif deleted file mode 100644 index 556e905b11cddb4abcacaf2160ff811ec47a894d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 880 zcmV-$1CRViNk%w1VG95Y0EYko000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui01E&M000P00DlP_NKl}>g9s4{d`IWkyNACTy%X5( zSCwBCFIN1ePMyV%9R;2n`Eleqf#u45yqHp;xQ{O{zWfEQ5lwL5BIf+nt*1|)1%v(y G2mm|n+a1fq{uZ2jn48o?zh6WMJix@z}87 pU?UF~kIsPx1?N_NZabd}gGC2BxnzU3XiQk-(8liE#lyj14FHlE< diff --git a/deluge/ui/web/themes/images/vista/qtip/bg.gif b/deluge/ui/web/themes/images/vista/qtip/bg.gif deleted file mode 100644 index 5c0e8c92a810d244a29f21f467b90f5d61fdf0ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1024 zcmV+b1poU-Nk%w1VF>_E0EYko000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui00{t2000Qx0RIUbI8dFzg9q0sT*$EDLUs@%Mr=p1 zVnuftGiuzJ@twzyAK{4{NwTC#lkrljR4K2e%a<@+&YMZIrcIjka_ZDsucyzSKz-U9 zO0=j^qW6+2UCLA`zNb*3=8GCNpVg~Z^=aM8wd>Y>V8e+p>=mnFs)!ReUCi{TW1~SM1Kmmare&KkGs9fT`K0I1 u@IZ?8$gwm=i>NC~T;$%+c3wNW3C)a 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 E0I-oB(f|Me diff --git a/deluge/ui/web/themes/images/vista/s.gif b/deluge/ui/web/themes/images/vista/s.gif deleted file mode 100644 index 1d11fa9ada9e93505b3d736acb204083f45d5fbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43 scmZ?wbhEHbWMp7uX!y@?;J^U}1_s5SEQ~;kK?g*DWEhy3To@Uw0n;G|I{*Lx diff --git a/deluge/ui/web/themes/images/vista/sizer/e-handle-dark.gif b/deluge/ui/web/themes/images/vista/sizer/e-handle-dark.gif deleted file mode 100644 index eac9662eade56ad43732ddff31ebe463871c445e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1062 zcmZ?wbhEHb4q>gB6B`yDZWmDYn&Yu?(a~-Rdwi{%g@huXy%gj+Op!}VvosMv8T4Iyu3VMvDaL$t*frCj@X=a z_te(a*ViW;?vnN1w&v#MjLWNHPj6d$dwap-Q**tyue-au;`6J!r?;=azrTT*Th3?4 zhKGkcgtg<&>_~55;E?Bb&`2;ka(p6lgjs~8(zE7Cn)zivZYI2Fo-4gN?(D9uudi=N zK0VKO_qMmUcND+AcXs#o_xBGpbIbef+41r5iOJgW=l1OU{QSaV@A-avcYS?*V{`WX Tb9;AxfB)ccH}iKX0S0RTywIF? diff --git a/deluge/ui/web/themes/images/vista/sizer/e-handle.gif b/deluge/ui/web/themes/images/vista/sizer/e-handle.gif deleted file mode 100644 index f2c9f538243ecbc0364b1afd7287248ce8f2c513..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1586 zcmV-22F>|LNk%w1VG01y2ZsOv000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui015!m2LK5F0M(fb#|@jog8~U2L^!bELTm{gE{ymP zV#A6QA7-3*QDaAr3O$AdDUsnwlO+vqM2YbuOOYupo>b|Q=1iF}SK7>36KBhtI(@?Y z$rEVLph%A@HOjQ8Q=(9ZN+lVU>eQE3vtr%4vnp4iTDx8q8y4)>q)ok&J-hVjShH*6 z!kvrOZP~hN>9);__if+1d;JCmoK|pQ!gkpnR-9PwU&ed~LpI!4?_$T2F<-V^`LX8C znK?(^>{&GB(V$6(F3oziYt^t*%SKK6v~9$-ao?V-yEpIOpK}8@?K}8xffOkEo#kl2fezwDeD{e#JT~D!6iVD@GL|q$@_W+S)5Z!KyT@ zM#XyctE-hlD=MbZvRW;*(|Wopwy3_!t+d@UzWn0r@4W!SD{#Hv+B>kp1gm>+!3-;$@Vp2|+%Uuw@B8n<4ojSI#r+2S zu*Dv0O!3Afk8Co?7@yp6$|!%lvdb6495Tl-i`=r!FXLP@%`=yLGtVsN47AKa@9eYC zM;ooO(myBN^U_Z@4Rz5`BRw_ISnFIh(^gCEb=P2XE%w%AQ*CzELu-Au+GsnycG_^e k-S*XN*Bv+AcYi(h+j83v-FMz$mp!-Mg8PlPrvU)~JKnY_G5`Po diff --git a/deluge/ui/web/themes/images/vista/sizer/ne-handle-dark.gif b/deluge/ui/web/themes/images/vista/sizer/ne-handle-dark.gif deleted file mode 100644 index c9c041c45f673735de9f54f7967eddec62cde469..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 839 zcmZ?wbhEHb#gW lSa7hJgPTi$AwlsV10#z=iiLm@LpO)4)SL=|#|Ii1tN|md5{du- diff --git a/deluge/ui/web/themes/images/vista/sizer/ne-handle.gif b/deluge/ui/web/themes/images/vista/sizer/ne-handle.gif deleted file mode 100644 index 942ae825357ebae7f68e5ef818d7ebc5de4c02cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 854 zcmV-c1F8H+Nk%w1VF~~W0EYko000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui015yK000Ox0I>-iNU)&6g9r(R`}c1fLxQMK{fqby gBC2o^w-G#NZrs9(1Jj{1N0Feqbmt<5BNz|>J6tuIF8}}l diff --git a/deluge/ui/web/themes/images/vista/sizer/nw-handle-dark.gif b/deluge/ui/web/themes/images/vista/sizer/nw-handle-dark.gif deleted file mode 100644 index 23fced98bfa4e805e9e078fcad909735344b7957..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 839 zcmZ?wbhEHb#gW lSa7hJLy${=AtBL`k&(%PC%{07p_^G&Zcc}Qazg`yH2@eV5k3F_ diff --git a/deluge/ui/web/themes/images/vista/sizer/nw-handle.gif b/deluge/ui/web/themes/images/vista/sizer/nw-handle.gif deleted file mode 100644 index d39b0c38d8994139e389a7da016506e0537aac66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 853 zcmV-b1FHN-Nk%w1VF~~W0EYko000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui015yK000Ow0I>-iNU)&6g9s7+`?qajID-FBp^Au# f;5LcjBtrZbZk)Mu5G9&JmyTdYROiyE3kU!^<_nt% diff --git a/deluge/ui/web/themes/images/vista/sizer/s-handle-dark.gif b/deluge/ui/web/themes/images/vista/sizer/s-handle-dark.gif deleted file mode 100644 index ddc2e18ce48da6338fb4e065effd31f769ae3e34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1060 zcmZ?wbhEHbyui-I(9Qq?YgWws|NlRjIZBL%z{m;##h)z9ARp_12vDA2;P}tL$RXpg zVZp&>4q>gB6B`yDZWmDYn&Yu?(a~-Rdwi{%g@huXy%gj+Op!}VvosMv8PHh8W@=7yR~vTWL;hzu{rDR zsjaK8uTMDKCF{Ly&CSgjmsiD}{=Bkb72~~Kt-q(Oy}P^O^Q*h3x39myzk!)s&S%Gl z#F1=;#XNk%w1VbBK(0EYko000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui0MG{t000R80M!W`NU)&6g9sBUT*$DY!-o(fN}Ncs zqQ#3CGiuz(v7^V2AVZ2ANwTELlPFWFT*({Vj%bu;+?Z0rgaihAOo3`)Yz=I1PPQ1ABU*OP@}?y7lYWvuoeZy}S4C;KPgmA5Xr#`Sa-0t6$H)z5Dm@7rtA2$K=XW)SdCaB+*pMVA`=%9oaYUrVeCaUP7j5g}%qmV`_>7ZqiaYU-(|rmE_ythVavtFXocie*3mJC`c7>Hq)$ diff --git a/deluge/ui/web/themes/images/vista/sizer/se-handle-dark.gif b/deluge/ui/web/themes/images/vista/sizer/se-handle-dark.gif deleted file mode 100644 index 1a678e67fd6edad35c463cb6d96b05fc9d6e89c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 838 zcmZ?wbhEHb6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui015yK000Ow0M(^ChYD3VYzVQXLuanwzl7M%nHv}G f-@}9j!xh{H(V;_#75{Cs2(hHelPFV`3^a diff --git a/deluge/ui/web/themes/images/vista/sizer/sw-handle-dark.gif b/deluge/ui/web/themes/images/vista/sizer/sw-handle-dark.gif deleted file mode 100644 index 937102c6b23e59f512f74b5393378ced56e006c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 839 zcmZ?wbhEHb diff --git a/deluge/ui/web/themes/images/vista/sizer/sw-handle.gif b/deluge/ui/web/themes/images/vista/sizer/sw-handle.gif deleted file mode 100644 index b9e2f563a037e362e69290dff5c19f0316f4659b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 855 zcmV-d1E~B*Nk%w1VF~~W0EYko000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui015yK000Oy0I>b#?Xj_V)Gl_4D&fNJvOYNy*5_$jQmc&CSir%PS}-C@d^2 zDJdx{E32%mtg5Q2t*x!EuWxEmpg2F=$T!MCXKW;pD p+|RbvM@36v9K^$0{|0b#?Xj_V)Gl_4D%!4h~L8NJvRZ$;ima$;rvh&CScpD<~)^ zEG#T3DJd%}tE{Z7s;a83t*x)GZ)|LAYHDh3ZfD!o=;-L|?Ck03VHgFYAux18 zK=CIF(6Rp+bU;o9tx;JQ*%5wKRY?ytoYTPlbe^b&9Q6dlJ&ZxbYYRl zWG&sQl9iX22Sl6odTm`5+7rA!>+Y$q3D?#o91i-cwQWu0qLlNiVzZ5PZ*MOM-qq{9 zJ@5F=vd^!2JIdGJ-yfIAB+V51M$)UOZ?PaMO6$A`+JIuvH>$MPeJX z)q{ua3T+yXI#i}*JnGa~w&GEj&bAkix($wLJnk{#J8_`b;@OJFeKy}-Jnna3(|j_) zMJ)5lL=UxTv)Kj5G@s8Yxt95SZpE{e&*#;Adzn7}f~3NW1ubG(FBW#Ft$MMj$L!UM#S`4L zUM`sumi2P!G`6mn%jT55dbxZ-o7SrpJx<@BuUxTg)vHx&w!M0_y2R;!`++rEu4TPm zyW`oa*X#Ctd-Zz#0XFS78;*!&zu9;~j{7dt8MD`KHeYble!JyLSoYhkH_}$W-FBz! z_1oUX=|YP3k7uj%_g%1k@P0o7yUvFL zEaEvI4sxik`EZEG{LP2M0`58=j|e%7A3Q3NzUJdGnesOuk1Mq6d^({rJ?GO&jpb`T zozhuv^MJ+RxX$M@Cf9R5pS5_t=JPq5?{7YzcVO53a=}I1b_=UGL&3pIKIU(~Tn=#8 z{dy%NJooF>i1f8zuf>$V{dzs2*!SQKE|v)gZ)PlC`|VcF_P5_|7aZ69ey8Mm?)SSD z&)0sxSMyq}w}F9`Md8PT7V*3v4?EP?{dm-4{_e-)3GRA7pG*nQ`}uU5xPyZOgEau_ C3isjw diff --git a/deluge/ui/web/themes/images/vista/tabs/tab-btm-left-bg.gif b/deluge/ui/web/themes/images/vista/tabs/tab-btm-left-bg.gif deleted file mode 100644 index 1d81e54e1043facc21074c0e90417f108e0a53f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 895 zcmZ?wbhEHbWM(j8XlGyu4h~L8NJvjl@9F88JbCht9Xs|PKD__%k^M)2=;(n12M!)Q zc>n(W>$e`DIgJ9J(BFZRLb%kS$iPx55vW@VhJMC>~O zX@@{iC=?ov#$Yf60)a>*ve|4tpDz#yghHWACX;T-w|7-CrBkW+8x3~8;fZy+jeBgtD|FMC?K4{>bAA)%Q@qH7J z5I-cmDLQ9zP}mZ30A9K!pm;f(>AF2*tFYuPw0i+sEL|4 zOW#*+j-y58@8C?v-w&@!=w+Of$Zb|#C7E!ZHD1bTbad8_vL-6pn*5S|BD@tZ`3W-~OC@{=r4wGZ*-J8Yf%haXc2esLOxo5})g{ zhoqI1Ncg-xk5#q&;Lw6qcr!w?t$mDq24) zs#g3QUDZ)}^V530qCK`PQQ2{%uUh#_B4tF`iD2rLUB|_VR|vq@Xw~fu?TG45rdzM- zJ`i;^}%aA^^{TbGb0l; zbFAWI3)i`cv+%syt_l1BCuo_41S6~hXjH9L7?QxSJ`YPbT164ri0|frLbUBgG=^al z!)_RD^Rev+`@)g_TKi%mm0@3kM@=>dMb9A|E2+|2$7+U-;aJP`7#)%`!AR%&xhQ<< zpU~7g;Y(Pm$+?lAjdZ;#D8{?~D#47oHcM}qTvBv9k}2H}>$w$NO&xP@)v`?P?YeoS zXQy6@_q=J;jd^yPJV$xykbPljfxI>9npe@0Fz!_n(#>8~PxdjNy0`e6Pjl~bOa$c1 F{{Xv+AMOAE diff --git a/deluge/ui/web/themes/images/vista/tabs/tab-sprite.gif b/deluge/ui/web/themes/images/vista/tabs/tab-sprite.gif deleted file mode 100644 index a16eedb822c1d852020d7c58a40307659ad1f8ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3150 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 Ru}w*2KC@pnhK+^68UTSX)nNbt diff --git a/deluge/ui/web/themes/images/yourtheme/box/l-blue.gif b/deluge/ui/web/themes/images/yourtheme/box/l-blue.gif deleted file mode 100644 index 5ed7f0043b6b0f956076e02583ca7d18a150e8f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmZ?wbhEHbWMN=rXlGzpbnMHWJ9pl^dGqhzKZa2-8UiCM1QdU=0Db(QK?me-P@Z7m PU}s=uVK7ioV6X-NGaC=| diff --git a/deluge/ui/web/themes/images/yourtheme/box/l.gif b/deluge/ui/web/themes/images/yourtheme/box/l.gif deleted file mode 100644 index 0160f97fe75409f17ab6c3c91f7cbdc58afa8f8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmZ?wbhEHbWMN=rXlGzJc<|tzJ9pl^dGqhzKZa2-8UiCM1QdU=0Db(QK?me-P@Z7m PU}s=uVK7ioV6X-N<)RPU diff --git a/deluge/ui/web/themes/images/yourtheme/box/r-blue.gif b/deluge/ui/web/themes/images/yourtheme/box/r-blue.gif deleted file mode 100644 index 3ea5cae3b7b571ec41ac2b5d38c8a675a1f66efc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmZ?wbhEHbWMN=rXlGzpbnMHWJ9pl^dGr7Oe}+*o8UiCM1QdU=0Db(QK?me-P@Z7m PU}s=w;80LdV6X-NJSY$C diff --git a/deluge/ui/web/themes/images/yourtheme/box/r.gif b/deluge/ui/web/themes/images/yourtheme/box/r.gif deleted file mode 100644 index 34237f6292a7da6ac5d1b95d13ce76a7194dd596..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmZ?wbhEHbWMN=rXlGzJc<|tzJ9pl^dGr7Oe}+*o8UiCM1QdU=0Db(QK?me-P@Z7m PU}s=w;80LdV6X-N?ynEj diff --git a/deluge/ui/web/themes/images/yourtheme/box/tb-blue.gif b/deluge/ui/web/themes/images/yourtheme/box/tb-blue.gif deleted file mode 100644 index 562fecca87176274af7bf13c419daaf93f169249..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 851 zcmZ?wbhEHbWMt4{XlGzpbnMHL<6oAa{JQeg*VSjft~>i}!})KUE_~a1@%#46-*;X4 zvFF;4eb;~7zJ2@P&7Vha|2%Q`=a~n;&OiEf>B+Ba&wkx{`TPEx-%p-AdGqGY@@87@w|Nk?Lg3%Bd$|0cmlLhGf{|q`H xPk{0S1BVKOBoBu|W0NBntB_a%g98I2m#~UU!-oTo%xv5uDh>q)92y%KtN|VsNKya* diff --git a/deluge/ui/web/themes/images/yourtheme/button/arrow.gif b/deluge/ui/web/themes/images/yourtheme/button/arrow.gif deleted file mode 100644 index 3ab4f71ac115188898fa2701b6b11561d0461e4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 828 zcmZ?wbhEHb$G-r}G3Jv@K#TV`88Mr&YJdo+<5RWKZ!-4T@C9#hDIqPs$JJ7Goaa2!1h+Y^fE zj?C+g!uQ4y7}5ECu?77|%5)rYAb~U#UpSamw~$#opVP3INu4CLZTM$({gd7OEw?8i zr#lGK8;GWd;26+6Mr;u~zH~IMWF)bC99}k-N}f!qnnHBeTzLdI7MI56R&~u#dS=PpGkx_xJYpc6WCL0s)`T-`UyO-rnBY+S=UQ+}PMyUteEaTU%XSU0GRKUS3{W zT3TFOTv%9`pP!$bo12-LnVz1WnwpxNoSc}L`0?Y%`1ttP*x2akD4Wf0Z*OmIZl=*_ zjg5`<_4T#2wKX+0)z#G$3WZE2S5;M2R#ujkm6ev3mXwqf7Z;OAq{6~NB9TZS5c2c$ z@pyb*ULFpI!(y=*35G@{1^1! zCPX9vk-lH=hOHR0&blEB2vrj~ouz>Y z@v?Vggyh`eBKLaOsfU$UoI^eP3D#+Z!jUSkF&EUsDv}#jdTVK{U>N~D=ff4AiUrF6E#S8v3cMk$-8XZ#a&+S(<5u^(@1>())Z{{Dlgd*hM7 z!o!+Lc!mse=x5>X^EzUi-bW7X4HRx|`Rhw_3 z5s3#biNWD_#lVgc_r+$kEns38GdamiM^1RPM);nvvk@ulk~0Pw#M30sVk?jV@!=AI(>kr<#nT!NR-zaYKQm;w$eg%)jE*ScMU#fTg-+CQ z@rARv)8a3|uS8}>RXY@1BfOhLzBW@@MW)5=taLD&ZxOmET9FT}VtEnVG^j-XF1Z6mA7+tYzDR^}S zn26P+NuZ-{{^Ae6r;z2?Yka1G+h=@}ATA%HIcB#mso>;q+ITR)Y`OK|C|>NCHo;4; zQQgL1qg`BK@9f$c1-1f< zXW)cL>2uj<^_0&!HXXTEQ*3W7lkU@ZP~8L?-_rXQYJB{1^$P9Cbz?8ngTJJUJP%fO zEO<`SFI>odc)4FDNb=-UcT+RT_er(pl8l$N75aDG<;)ck$4taje9BBr^$Ta<4=?vg z06`Ca{o;PES<>Y#UE#z3KR76xN83dmqDbq87qKDca>c;Z z5k2jvxe@158+uJoF#Pj$ zP{T}0ZX?{>YVwc?zFEGbIKt{fj#M1kOo8SVVU2k%lc4zhvf864C-Lc%waj~`VSO>L zpt-;Fk{}G!9QK9hkjzkJahC21hgw%xJqgKYUfGo6;?g)k&4KeyZSrpzmGO zMI#@+5o{v5%3teZBfCG_JETpDtKBSG?0)-NK7G(J&tMqT^9f#-G3%2D`r!xIfOGXS zN7D0*XCL$iD(Gh%veqy?dBiSExRoP}@%&A_gC4cEl`H7-ymK>(4jbP>bB|rRWnyTb zFjR)oxSemg*v<&jEYHyn)wrkA@d!>Dz)B_K?_FPdlvuf)tuuJZ`YVc&Rp*GiRhV!4 zr}6-Da{y=Fo$rwB;)px<1#eeDu*;%4WJ#7yZ?@JI<&2QU+tS0vbo2?FXdRu48`&h<^A3 zAPv`u*8Th@`_%pCX{S2=7cc*1mFJt9yv7rApM#GZO^WJ~Y5U2=fhUhWKYo)*J9Szo z?DkU+u@G?6xjL`#2kFmGrt!Y3OX)P*O>(xp?tJj^gYFHXBi{dsFhZ2`x8!Heg@(rpt`sZTD?96aHA7(Ew~I9l!T@zZhMd z)s6#oN#EN-jnvGgc2IhJd$uxn{S_;YPce-GxTF5Dmt6h0xyUQLCa>?}CHDCJf_^xoLLAq`|+;(qD1>m*W z)@`QJ_vUT^{NA{_?L6E4C09Veq}Oq)==*D5f!zt|dVtqzE8I*2_7-gG1;cb9w;I@A zkE`FCw*>?vfRIP87w*sj;qJc=OfgW*AW+;X@DMmq0ugwG9C(ZwD8&nuQ4EqZ2s+^u zqyP?5LOu~E z$_#yGAh{(Q=3x-#p`rR39Oj7#dq)m~Pn`Y43-jWIUDFNsaSHcYI1fgILlEKCjPL+n zcmVTaut5aWAmW2}LfkBA~5qLvv^BwiG$?OLfpbh$zF@xP+Uh-mVHP7O1!$ZUg$Z>njI3X`iL@8bj6ff=^f5BxaPV*B~mEh+<@C(jxH9xop60S*sUtz(u_;78d zL|ss#zH{OYzeEE7nP^B!G-4&*;U^j^C7FVf%$$?V{gNz@NtTo(D^`*XKgmuh*&dYa z=$!n-FWCv1>_SO?%1VC5Pj**I@c^Z~bWVBgm*R;`c}Ge4z)JbVPw`Sp^#-N-IH&&Y zmkLIvLMW;JtkeL0YM>G#7=(a2Bf|U;5lBQ71rftS!1#!GB_te#Omar1_#qKUB#MGe zXCX8B$ZRE4E(nEjM&bNWcqEEIK@nLf5+7BplvWB#D|b!{bXFuI)2PmhU43bF{In6- zbQ&mq;Zb^vUphY_y@Qf2!AS4nrz^;1FhCg>>@$Y^GOoij*pv)=M#eZlSY!jLbEDCR#3Q6O>hKpT+gdYJ_JAC|L|fmXMz{Etf53n7v`2eF%~* zmY98nnl0a-EhWglAfF>=n4{;AqX5YrU@UGQNLd;|&~Ma9SDvGFhgK3+K=ZkV6slAi*} zN1*ai)ckaIex@KlTbYn+NWi!da1a6>MIcZKL^gpWAQUSXlo}S4yA)JH3dpDeDz%`7 zT~H?|Xiz5742jJy#1;s#4Mpsr61&*M9s#jexsYL4IN(w^1Sw>q3fa`cQFh_Dpm0K& sG-XJdaUsn?NDC;^5|y;VCanob>&iu&hDF;hMO;V`4^_lemJzx2KQD+sC;$Ke diff --git a/deluge/ui/web/themes/images/yourtheme/button/group-cs.gif b/deluge/ui/web/themes/images/yourtheme/button/group-cs.gif deleted file mode 100644 index 3d1dca8f05ca550917346830a5a0ae4e16665181..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2459 zcmeH`i9ZvH1HdQ!yk5P2p?H)dxpp{mJU@!;=?=U!!Pkq*zsjUC!6Bk-dSFVOt_!mB{_I3VoryMO9y{@Ma z=-n9DL$B{GJqcGoa`AW@KtUEXYxS9y%>dB{M#Mz_E@4eP*_kWX z^$4C>m(33o-~&JGx7SyMz30WrFL$>$RxxA>k0+M{zIVY>_Ns?Yre=MWTI_qhMP6lu~OPcC3oegZjRc3=(^V7L)w0*({)+2G{4{T;} z!o0jGzAzuE1S`!ys~+~X;Ic~gSFD>2s0i!s44Nr2{v9?`?2ia5C=Ng`%#;QugJvIl zX2534LY2Z0<&i8qVL7rJG?#U&KWwg2Z6tfHDp4JGvpPj7exmxGdU$C3eVxYnn$L!U z`PxTjbD?!bexlEHC5Xm_h{s6L!t<)w{UTi5CucPzxwui(_yinUcAMBO2QMa*XVGKC z=GlNC5?&-)q})%Ygw02%fDp? zVNB8KSM#G-X(81lbZQu7nT3hsnXV^A4@CVZF?NFV-}t){`7%2$Np8AIR-7-nvHOnQ^Yr z29ODG<^*{=utg%~TyB+{CHl7?LfQY-rAyiI?J<{dz1}#QCwUHfpd2o~hf|W=KB6QJ zu45SUAF!!>)JvC{YD)6?1&ZX1^D@s|{)cn`#dBJlpkU5!N_ZIg4~{NC(Uzy6x{{=1 zKe?rfYg@ITrV0~|@8ub{|BR&EQ|Ia^S=qK8j9Iy>vok3>3+xaUQ15r1*4vMH-k~NY zr<-xLf4OeU(HvTdwc$>QVsM?qQfg-Hww|)w(fE}flAPtt)lx0AZ85ZzM!P3YPuBpu zIz4GQX`B=4@`f%`F)25gdrYI#mTiHRMj`BlpN4SV3>xj>^#pw_p3!SNBqur_%-}Fb({3Vq!raSJOb>jsf$Mg_Ll=3M}zGh0*jv{cQuF zqmjT9Ni1sMYJk1%XufpWRdV7?$2CxI+916|kz;5kukQ^K6G~rle?6IYiE>rdD!AJo z!NKDDVl5bDbMZ#j3K=C~N*BvVzNyC%m1wm(h9_K{;$IbDeX@-l!VY^kdI9N8_1=jfHxh8T3_)wKnK|Kp zd#kHb=JVjpZkT2o*vDFxiHooYdyV1V)pyhI?)CaUwehdL_6Z^()SB zh=d#_`1@P3XpBUY8&RN-J+pLr$&4YwYPAf?9 zNv=0?zgF??W86>)p4GbSeVcF@FJrNNcTI26z+a}2%;xSja7^K`kr~TUVtBW8#)oO;GY8+ecXL81wkhso@Q7N{RGV36L4-Fn0@B=bZS$i$`@>*e=Y6L&Ng dUQu}td}@Irs8Us{==-D1xS|KJM_Czg`hV^ynJEAO diff --git a/deluge/ui/web/themes/images/yourtheme/button/group-lr.gif b/deluge/ui/web/themes/images/yourtheme/button/group-lr.gif deleted file mode 100644 index 7c549f96d6064d4b0cc022671fd823c13df36d8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 861 zcmZ?wbhEHbe8J4f(9Xcn@V{aEiR+JFe`Od2qaiTzLO}5+3p2>qIv@g+Cm1-a7??R2 z95yUC*vuiU6?0<4!o%$X%3gCkHZD5aEn%E>=fuXv$NLqWyJS2!Ejc+^BY0KJ$xTbW LTbP(wSQxAUYf&Xs diff --git a/deluge/ui/web/themes/images/yourtheme/button/group-tb.gif b/deluge/ui/web/themes/images/yourtheme/button/group-tb.gif deleted file mode 100644 index adeb0a4cf54bdfb626ab6f3c070f6e2919f374c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 846 zcmZ?wbhEHbWMt4`Y-eC-_}{So#PvfrK0JQ?m0=W&hQJ650mYvz%pfo8fCx~YVBpYZ yVCE5U*s$PWGl#HNOoc$h;dTLKuQ?tY7ai@EFwVMjV&mfD{R+-`G6D(;4Aua=h#nIF diff --git a/deluge/ui/web/themes/images/yourtheme/button/s-arrow-b-noline.gif b/deluge/ui/web/themes/images/yourtheme/button/s-arrow-b-noline.gif deleted file mode 100644 index a4220ee9066357ea2270a842ed244bbaadb23de4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 898 zcmZ?wbhEHbJi)-n(9Qq?M~)mhbnDyy|Np_fQDQU%Mo=fuXv$NLqWyJS2!Ejc+^BY0KJ z$xTa7Pd7+DHOF)FGT%0aqGx+fZdP}nYuC)RmLp-s#l;?zwPH_gS$TPRz~V9<4hCxg D_B%R6 diff --git a/deluge/ui/web/themes/images/yourtheme/button/s-arrow-b.gif b/deluge/ui/web/themes/images/yourtheme/button/s-arrow-b.gif deleted file mode 100644 index 84b64703006ca6d86d335b89f8d40b9fa3883c48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 937 zcmZ?wbhEHbJi)-n(9Qq?M~)mhbnDyy|Np_fQDQU%Mo)`~r~W##4N0gJundTm{G tbu}Af#?`K^tFNzT+TJAVU8dErDdY00*wfqA-ripD_|#nQ={XJz)&S^DQ3wD4 diff --git a/deluge/ui/web/themes/images/yourtheme/button/s-arrow-bo.gif b/deluge/ui/web/themes/images/yourtheme/button/s-arrow-bo.gif deleted file mode 100644 index 548700bf45a4766e4633a2ad21cdd03a907e191c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 139 zcmZ?wbhEHbJi)-nu#f=+R-O3x{>OhHL-8jIBNqcRgAPa(B=5i!GpB#$>9_og=WMyv zz4@M01z+1Ek7>_3m%Tc*Z6(9;Pd?Yb^*;Y~?)yJ}o<}i97JcmS(V9N7;WKBi*YYc? qzIL6>+J0x<_w3ZJ<4-pI?D3myle6{rUd98@zwG+kS1-=MU=08a%|q${ diff --git a/deluge/ui/web/themes/images/yourtheme/button/s-arrow-noline.gif b/deluge/ui/web/themes/images/yourtheme/button/s-arrow-noline.gif deleted file mode 100644 index 0953eab5c875fcb0f3b40babd89052b064bf9fec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 863 zcmZ?wbhEHb*_y R+_d!cbc5tmb0h^AtO41(Cb0kj diff --git a/deluge/ui/web/themes/images/yourtheme/button/s-arrow-o.gif b/deluge/ui/web/themes/images/yourtheme/button/s-arrow-o.gif deleted file mode 100644 index 89c70f36fa653684087485ab673043ecbf615cdd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 937 zcmZ?wbhEHbO`C@~rWBPawEf3h$$FfcLbfcy-~6AT<} z46G~?3JVq-Y-VLwiqV*$aJZREUaCi9W8%>kKJB0>J3c15x5sMVlHA(yGnuN7&N42);+}s>}e3|KPvE1;j`8SW1{tiuYV6X-NOpiu@ diff --git a/deluge/ui/web/themes/images/yourtheme/button/s-arrow.gif b/deluge/ui/web/themes/images/yourtheme/button/s-arrow.gif deleted file mode 100644 index 8940774785c25d4467b239aa608a9eee40e273d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 937 zcmZ?wbhEHbkKJB0>J3c15x5sMVlHA(yGnuN7&N42);+}s>}e3|KPvE1;j`8SW1{tiuYV6X-Nh3iI; diff --git a/deluge/ui/web/themes/images/yourtheme/dd/drop-add.gif b/deluge/ui/web/themes/images/yourtheme/dd/drop-add.gif deleted file mode 100644 index b22cd1448efa13c47ad6d3b75bdea8b4031c31e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1001 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 diff --git a/deluge/ui/web/themes/images/yourtheme/form/clear-trigger.gif b/deluge/ui/web/themes/images/yourtheme/form/clear-trigger.gif deleted file mode 100644 index da78d45b3214480842c62514af524f4aebb66124..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1988 zcmdth=~t5n8U^q-VGC;mBm0hsV8ubLEt_Ll8<8_(J7+8+GN29vjM%!ALxG`*vV;KaE8sA!@Y z4L3~1jhLAW4>!Ua947Tqg?%((Kh;b$Ko$&=1w*rGb*ec?N^AxVXqe@UN>0 z891^{u56v7+E|jCmSrZke1FwUW#X##SBxOn2(GSyLZMKlQmNHyjYgx@YWd;~fq0Ft z+7v0*1j;R;!o*jZMDlHsa!;f+iM1w)YEP=(muf+oW=p08<(hqkW|zMX3O7KpZcnTO zrMf+lxo?0HvrSO0Hz^EedrHHu(zqvI1C{Hb+PJIP0JWQ-Y#UT;feI6-)9Lhjy}@8G z8jZTOUH$s*&hGy1-ahdEdx6`Q=5Zi!^uxptKLNl%;1tXUNoYe@!v1h1gG9hjRlyIY zT+i)opRVyJ$m^OWcFfcd!goE+KKq624@2~*{(Gx41$X#rT_Vu?_+4{kc3!~LZ@o|e@KE%NaSqqM2CdnRrfg1wYE_n>MZsu=aYxhs@ zZYg1(SHAI5{)vrY3S>+Sr2G5!}cb)=Lak{l#IcWFsP=h z54sOE<$IwK0i|U>!mQGuh`69u9r$a%T`NxXx|!$| z=ac7y%X=&#XG<+_jk=4wnhTGFb+y-lKaBeiK%tbtM}APdfB|~CqPsh#af)y^(trRQ zEp@1acO7D$So@a(lTLRcQP%+{D$xQ)D?;t7^o`EZs~jG0R~!KcEY9V= zMfruL`9PuG*Qsdx+dj=Ii`&E0II=PwOPulj+Tj@q29JB~T2{m(hfi&|!E zBM$OTv98=N_;e}11gu55UTB%9W)-L))9jWO$gpd{tFfCL@43sLIsT;NS-D3u+AQ2N zWr!%TS6ADl-D$@0q>qlSMI`y2eiHE9u3$58=)j+XZx;IBIT;=;f85a*t?a9*L%6-} zN85P+E0<{PUGyX_R!^ME+)_z>Mape4XM92w`b7;YV!insg9^+qDfzUevNmaJNM0}502MlVmsU>iV}`Lr`6`Bb{t@C#l~>;SXe`ck9;fs%svkL zUAe$-+haTd`enn-;A=LHa#CU?4rl5R1@d8MkEOU&)s-HE(zl)`8NRsxz3AFuDKdp$ U;ezY9-WkTkP-6N%4gg~Q2Qp;nKmY&$ diff --git a/deluge/ui/web/themes/images/yourtheme/form/clear-trigger.psd b/deluge/ui/web/themes/images/yourtheme/form/clear-trigger.psd deleted file mode 100644 index f637fa5d1e12460beabc8b49968ebc0ac883e754..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11804 zcmds6349aP)}JgbA;Ocbf>0GuzzQfJ2%?B00)>YNvUCxIvIz*tj;%n8sK7&Q0D1CQ zltrLGX$urmTA(P<7APcb>E5(W(lkk%eQ6sqbH8&Z({?6l6~E8l?|bhhzmt2G|2b#w z%)MuF?;SDbgAWNF;rR%l=?1ij5D}P%Pn#Gda2|Dsn39*gv69|L?fuB$)^z-xcZ_{4X20k60XxFxV=MG&uck0loQ$W{epAL8` z@TpFnxc9s0xL3xsevqPF5EIuLxGK)@FY{NO49xe089u%ln6UW4E9?>u#0o8GIs42h8( z5j{U9=|;dbx%q`xBUW#1D}JhLx2L=J>D%wcpqGXYdu{lL*GIlP_PufACj?LYaQcjy zvqD0{<}X;dXz?dYmabX5ZvBRhpGSVV?W?c9*}h}v?mc^d*!RyL_y6nYvE#p-IC(1W z^!W=HlP_JCrd;{;x0|R9vZ4sjD>ATAkivwb>ocy7~qej}Ume z1HV4~f!ojH3xxt<8{8ire*=)9qtLI{VE<0
    o7Rp;JAVnkiWNRA}kX#4!D)64-8 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 diff --git a/deluge/ui/web/themes/images/yourtheme/form/date-trigger.psd b/deluge/ui/web/themes/images/yourtheme/form/date-trigger.psd deleted file mode 100644 index 74883b21c54ba3552492162863caf022d51e43c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12377 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 BA5{PV diff --git a/deluge/ui/web/themes/images/yourtheme/form/exclamation.gif b/deluge/ui/web/themes/images/yourtheme/form/exclamation.gif deleted file mode 100644 index ea31a3060a36a625cb5cfdf4fdc5cb4fa5c3b239..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 996 zcmZ?wbhEHb6krfwXlGz>`0sGY+vu>b$x(l^!y&e3LT!$PJ06d9I~VJ7A=2?olFzvm zzpDxE7n6N1CI(zd3A#}bd9NVyZb9tbn*6)9`43}*9>oVgP7HaP6#6VR?0I_l!meOY(6|dTBUw78N>aBj$UH@iM{ilZ1FAYgw8_pbc0Z{x51oBkf&`s?Q9|Ns9pjDkTQ0*XIbm_d%z0TG})!N75lfssSTW5a@j z7VZsy6h0k$;Gk@@Yl-LKR#u*NrzJaX3aNBVGqZFP(Gfc8+b>uAY)8hyXKfvg1xYiW zY*bF=5>dbAA)s8qF(=rm< znzH#Wl@*DQugyk|h0s(J9u~z4MZR499ryhC^~?K*w-=e{wl~-nv>Egj1cL7gguBx% zT)Zq@NE=-Nt6g4JyGT~9fVo?Mjr%bh_W%^(#8yHO+#|w*$V3wYFrM_Cf1JV+84je7 z9ROpGU-)jyX(BU$6nbeLjSW4@*$~LtaEfn9=b%FPo5J`zLU_AExy0xc;4Ihg&$RuV zvJGs78Rz*%p2AAl3(x<8lzp}-|FX4l%|7EfIvgRBjB8tSQLP1VZWEF#ywdLj z>2hyD&Cz7(vFsX(us-NkLs+sfDkV2EMfeY2cqXqlT3nl0R8N;Z551!ZFX)PvHbvg; zPAF=Ql@G){8oW?FobYU%-aQi8(syOzQ{37bFFif|+O^~xchYiY*TsbylHyFUEVrOS zC@mHh+?B~>#g(;XRrU9uJgcg0tgWkKmA77d(0=`qGNYy=^WpQ%CrV+BN>bPLw6R6f z(sR2_!|q(n>iQ^DjS2e4MK5Qv`<8AFEsF-0Btwh&iZ>0-?TxLUQpLzh z&8rU$BjfVd`o|+*kbdR$!ncucOIodVe0*G|(@jlJ&&BTL3F4!sWQKrZSsrbm`jlswPRiNw~ox#)EssIi3K_U?mR$7V-IC9eE}g* z5#SHoR>a6~NhI<=Q;WTt%?}Qu9NUN;+@wtJJS0y=!z59V(h!KT_cmHu5NujLLCxE9 z_QU0%P-;FGb5tI6*gk|&C@tm`|9+v*B6nv=lO}$S+iOD$Mn~aW%lOvrmnW;VvcjwTy1x_M|Vx7g?UOR%A{vxR1=O9xx`_0#)mAz z#O%%n@__a?l=898*N7xDAiI1b<_~Z{nslUk?g_Dey!Eax#h5@k{{; z%`faJ5{8R)QaC;cQD8x5`VzNXi1Wqp3x`c^8P{6P{gaVWuFtYe7c(1?zIg}q~%W>VJ1sc%Av?5s&yuiMsG8Vvph~HOnJjUP7z}R9x z!{}s!KCBJ0F`$WM&Ver~;K&ocSHW(s6Mh)nO&1ErxjYUP9z|fJI2_q7U~QAux`?+R z3gs}A84lrf=7C(=X6VrsYzT(A2H$czA`b%`i`+&{!uU_X)(G<^EyNUO6=M{u;y53QM-q4Y5!fjNf2B$c3=RvJnhbNor$)h(^K&^hwf=q`1g%>cIxsnNp85qN`tNhU3jbmaN?09D@dd_WcK8kleih diff --git a/deluge/ui/web/themes/images/yourtheme/form/search-trigger.gif b/deluge/ui/web/themes/images/yourtheme/form/search-trigger.gif deleted file mode 100644 index db8802beb370d7554d5319c0e0d5c4ecb8da2c5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2182 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 BV7LGP diff --git a/deluge/ui/web/themes/images/yourtheme/form/text-bg.gif b/deluge/ui/web/themes/images/yourtheme/form/text-bg.gif deleted file mode 100644 index 4179607cc1e9486dd6fcc8467c79b5b41dbf4f76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 819 zcmZ?wbhEHbWMmLxXlG!!_xRa|&!0bk{rdI$_wPS{{`~#>&!4}4|NZ;_|3AYh7!85p p9s-I#S%6;r&!7YHC@4=ba0oCkvIrP7I50A^3uwfgFi>Ey1^^@>A+7)b diff --git a/deluge/ui/web/themes/images/yourtheme/form/trigger-square.gif b/deluge/ui/web/themes/images/yourtheme/form/trigger-square.gif deleted file mode 100644 index 3004ec589026c038e7d056e2b99e3a877d1ecd50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1810 zcmeH`=~I#k0Eb@@(r`m7uUt*s$}CGwv#`U(3p3rqV|JbGJ~p>wuw%A$t1UBIwalz( z+{&#$%ZT+L@5&Oi)(njo!2=aJUO-TkLqNb6-<{omV!!O~!}Il-d1iizNhCtlp<{qI zFbe>0K=r2)<>eaTOHke`M`}Tc$K&-w`Z;)h1NmlC>qos_ACXo(VMBP*8NSR=2g;eC zTse!>fe=?>)ai87)6-h5_EoP^AP~Uz`M$nBKA*3fwW+K~cv^AWkZNFHpqV2d92_)R z?LwiDBeg?jq*rY07MUBnWnJRA;o;%P^jikAjW3;mVK^eS*lI_(V=4h;GFfaNL{^bV zWP|59VCLdoYHQ)h*?r>{i-ixF%vSq=!rTU`t#k0} zUggI0TWvzs=P^~+(A0Wn8IQWMaOQ0fTZF_<#RVfdDJ| zU-P$Wo*?VVKr zv>QMX8JhcNpY6P}`bdd8lUmhVPVfpMuo|9opEw=-v~3MQ=RHRG1nv9Oc-)Z|m)zHr z)TI1eNurS+6-EBZuS;&Cc#vt;!iFD%gK}8SH6tyq?@1m&3uTYPa>Im(Gk9&3h6-_B zp3}k4Vn(P0zi~{h{VkGnsuu#lr^Ct719}PhhL} zwJTGMKb;z>Igsvlx}rs~`R#5PcR8;)iRvvM|Jk(+(lJoch!ov6ixFnDlj011>WQkv_op8RKJdoL^uEJJCSo!-%b_pjdzFFrJmJ5u%l|L{a0h$@c| zQG*K7nT$MuxPuq(trliLXcs$F;zO;`Hcjg#WrSFHN-C$kgd zQHVYJk}Y{TLeFA3E+FTQu8@r5a-tocYEMo=ei(-!z!|5@yEuY}*X6J=)3sNTi&Up} Wr&xDc=v65PKOA33bU>qlt$zauvnrPW diff --git a/deluge/ui/web/themes/images/yourtheme/form/trigger-square.psd b/deluge/ui/web/themes/images/yourtheme/form/trigger-square.psd deleted file mode 100644 index e922ee65de361157b2c9bada8704be67a50510ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36542 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 Vn+0%uFaj>+OMzhhbM}qFe*^Pn6NCT& diff --git a/deluge/ui/web/themes/images/yourtheme/form/trigger-tpl.gif b/deluge/ui/web/themes/images/yourtheme/form/trigger-tpl.gif deleted file mode 100644 index e3701a383107e090fe25d3fb8d63aaa9290435e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1487 zcmeH`{ZrC+0DwPCBIojs3o|_0?P^-#Ox&%!R?e}@xx}{YYR;I~>N*jn-Qn&=-p-KA zeA(%=S((N$6_|l9fQC+Hxi9#N2luQwPBW3%=l!}^GELum-8=KbTwwF%Rj%DgphgD1_aTFbxxSbc_7 z*tiC}T&|Us6}Q{%@p#OB*cyNreCzg?@X|W$2*O^k*XQ%C`Tc=FAQ%j8?6A4LxwQ?$ zFnGh80{=sSgX_p0D-7aZyI(&6LSe8g^uSq3699<4vDu>uKv9OqBv(z-4-J(@5=c^c zCvT(%gPg*qb@7!*M7$td*%d>&myq6H6@|%BvEwc%rj<`}&sV>d68bLbzTg)ez92R{ zL%OWyA+pbMNDmz0eA2_8Du?G1p`W#a zi*2IW=5FT;Nm@-f=nK&Ju|GKH$G>G{YFkTqB2{y*&pLXG@cG}HCp8gjUV5YGKrX;c zKcN|~+$?$NF%5hJAHnq}74oAsZQo5Wi&P-SqG~)}Tn55ltvZdK`IT)rc<_XRg^Z+L zEoNSBGTq*jc(eqdQjVJMM2OG;fu#t{Wg$qSxg0~TkXJ<4QMskK7QwahebOaMWkPZx zRCQcO<&}om1lH;#2Gv?~f?O}Zn-ZB9UH!@7hU*~W__FO@Msfvo|59dNOf4yZWj)Bw z%xm6#wG3~s&!Wh#gS~vA{n3r&QHV_+#^*Lr;_-`|0`e>QZ$*LSBb*;mXnE6}$b132 z(DJsR0TJCw1C%R+wAP Mbv*YluxN1lKj3usvH$=8 diff --git a/deluge/ui/web/themes/images/yourtheme/form/trigger.gif b/deluge/ui/web/themes/images/yourtheme/form/trigger.gif deleted file mode 100644 index f6cba375ae3a96c87639a5b3034d204953d1db14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1816 zcmeH`_ft~`0DvC>l)V*M8qq2uh!jyON)b6kq!482iD+?8gcdhyFlbZ|=|RDBw1|nK zYy=g-LKp%@NJ7F0kj2X&VI?8&k(c$_{t^AH-#_r(eRtok-4Q`Qq@Dnl0SotmX1et2 znD}NDyN)jG6Qb30kilRKf(n0Ju2yFdDUimGJpp_36beNxUC5kJ*3g9v!Msd^{)2b{ zt)YWDy+JOQ)A*{nxjFfQrm0UnJ3HGlGWq@9yh#Kd7#LtOnJgA-XlMwAVF=L=4-dbm z3fXKnRiF=ye+a^8A5VqoQJqfL&C@akG8PEYxRXj))60QJM@IwV@*uUQp?9K-gJ^UH z4u_-FYMW@18U{!cz;a0asZU(Z0H>#?IrHd{2&N23`ni(|NYg@>b`8qZYBi$ODPSFh z7`jJhAVkyHJFzMLVGDbb%7s2qg)pKQKO~dc9tw(M&*S2TMv}O{ul| zX(hr_p*$X+#+A0Sq=O=OW@d&4Y7hhgA#_j(ixyB=hq5JVKA%tHNdpt|spDd)a$!U? z)5sF_^Hs10Wr_7%E*AvBz=Vf`lc;0?RY8zKjRwZ&(}g;vQppgb43Ta~iVm}RDwPWO zpZ~tVO2otn0PX`m|Em6d0x&}XXEXQ6TK?^DjDz>V9vskq*Um8{ZzSEb>&{ZYsD`$> zm)(zuOII)3T~F#=j=_{4?5+PUs&M0;zw%rhk5ixe#BCnweRnc8-_pj+BdVzUj`_L_ z?#D?-(@DGs1nWi=zJ{hbxhrf&%I9P;z^0j13zsoCgUyB!LQG$M=6Bn zEAz4?W0%OlXZ*aUKJ;U)pd(AW$gbc;9oStk74bN_sb181!*oCQpv$^Dw9=iqU&fOF zA~XHNGjV!qu8eunzbD^*Rqi>fhV#@l+mqU6##_(wB0iO=C7ZkUxySYgSDd!7KA4`t z06t~PYMpC;jw9vdJDi-&MA7~e!G~Qkj#U=LMSSMXfRx;YLuK16N&BjCr(TdvP5rdc zt{pce*VU*awki_c3{bJ8r)Ojoe=08|_7OJCv7kK{Qgd2!MVLiRi_8Mw-eFrw8P7v;1u9x z-}%LDSypYcB`tYg>w`BBcdlCOdCe)M zfedWoWIDv&Q{*sXo@UiMg$8V^0TPUXMplY3&fDl%31>0(Zc)nn!H}aK4fIu=z6)kv z-+Z?)QwhI?k0h;tqPxe!h}L*+mSyQBc8+_@CEm253L5eZ-+%~}u_Mh*3<*qT_XkyU<3LnMio0A;#iIPH2>?PU+mB(da-cCK;QqFvtUd_gzW zR3d9re%ms)ZMLbqzj@+o@P+O3jjpA7c>MCCZPR2MtU)a-vAv->;ui9GR8TT!P_r-l zp)l_j*PxyKbA^6(s&E5fn9Jqqg!@{l99z5`bkz(Dw>Ii+vxSa)plM$yeY@T53FcuX yYq-rg40qd+b;#6`NHN(^kZr9xY#!i+x4U-1Xsrs12{a3_fn)Cim5HGM5d1gxR!0f| diff --git a/deluge/ui/web/themes/images/yourtheme/form/trigger.psd b/deluge/ui/web/themes/images/yourtheme/form/trigger.psd deleted file mode 100644 index 344c7682409411be63023e77ab2e2140403a4fcd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37599 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 HPl*2qO$roZ diff --git a/deluge/ui/web/themes/images/yourtheme/gradient-bg.gif b/deluge/ui/web/themes/images/yourtheme/gradient-bg.gif deleted file mode 100644 index 8134e4994f2a36da074990b94a5f17aefd378600..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1472 zcmeIx`%jZs7{KwDTLnZd*hMh7R3%&{VK|xh5d@TrMjeTpnq?_&b8`}Bh(kowLJ^R= zwLrP_Mz6F*N-1{`N?)K@6i}uD1>V*|OIv8)A|*;9JN<2c#7;i>=A7rpCpmEmrw$)U zc7mcXc@UIVGnG~gOy34*)9Li-becMyuD$~>)ERVj219+9F_Xbm-(}8ZvefrjGxzFd z?gQ+Z2W-&U2kcoQXO_sF&Em{uap$rD-W-Vsija6n4j*~Q*W?J0hYp%tpk9;bpv@I( z@`Tz)B2B(fn=b+vZGl)@(4Z|8YYQ8+MGfzZp1v;z8bNg>jk*$vu2iBclgyVj>B^es z9|O{PvUGvmyzs<9PmwK9WcqTTMPJ^kuV~R%wCXE?Ha*qBP}OFjwi~K|4nuYOVl`;T zVhzx_SPOK48f&|ZG@#o^cQDa=jErs*qsPQ}W@7f3n4r(hETGq1*K1~j_Lq?Dr%LqcFxvPW zut}by5*6B{LZvEO(+Ju$Vv_!sOuZvAc4ePkK}Mg^X|R8{wv3g3jV&Qm0~*o(w;!4zGtP^}q4TE3f=4jcq2s zNTj41IT7{z(FAgK^iIzZ@_2j+Ir8!+!Q#r@%9(ju7k_5|Ghf7eqx2?7%YoH4jP!wx7HA*Q43) zwFOW=pP6ly3pn=?dHpWVl+z~h4aA7q3Dbmfk>A9h*D=1j0=ZkaJtNDl4|Dy58=OQ4 zb=w|rEX#G|6q4dPk_gFV6VcYbmUmazi7x6i6Xb&As-j$U2PJ(S9-JDYvw05^=DZ2M z-q(%65iC7!Sf=Hfs~2MFb#cc_ASYbPO$Z9ewDx-)GFuhcxKI?v{g{Fd`2H?N2mNoG a(II?Zs7)DAnPM9b=8J95L)rdV=-9sjoxm#q diff --git a/deluge/ui/web/themes/images/yourtheme/grid/arrow-left-white.gif b/deluge/ui/web/themes/images/yourtheme/grid/arrow-left-white.gif deleted file mode 100644 index 63088f56e1c33fd23437ab00ef3e10570c4a57fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 825 zcmZ?wbhEHbWMSZBXlGz>`0uc0#Y_e;`2YVugfU8vhQJ630mYvz%pkAofCx~YVBipA cVC0bDXlQU?ViVMIiI|XhxRH&WjfKG)0LI-8@c;k- diff --git a/deluge/ui/web/themes/images/yourtheme/grid/arrow-right-white.gif b/deluge/ui/web/themes/images/yourtheme/grid/arrow-right-white.gif deleted file mode 100644 index e9e06789044eacb8a695cd1df46449bcb2b9aa07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 825 zcmZ?wbhEHbWMSZBXlGz>`0uc0#Y_e;`2YVugfU8vhQJ630mYvz%pkAofCx~YVBipA cVB}zNNKj~OV&PY_IbpESp@o^1jfKG)0Ls}94FCWD diff --git a/deluge/ui/web/themes/images/yourtheme/grid/col-move-bottom.gif b/deluge/ui/web/themes/images/yourtheme/grid/col-move-bottom.gif deleted file mode 100644 index cc1e473ecc1a48f6d33d935f226588c495da4e05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 868 zcmZ?wbhEHb( zLO{cVgpLOZ6Fwx&_)sw8LBWC#1q=Q+toSft!~X>b{xgh%(GVD#A)xq^g_(hYn?VQU zd{CZX;BaIR=ZFzVT;Rwl#vu{Yu%W4$ky$xng~3BdrVc>?i4_ctPK=BUEM^-R4mL70 a^J-WG2rw*VW@C5a%Q0YR@NEQ2S_1&+BRBT| diff --git a/deluge/ui/web/themes/images/yourtheme/grid/col-move-top.gif b/deluge/ui/web/themes/images/yourtheme/grid/col-move-top.gif deleted file mode 100644 index 58ff32cc8fa2aa1be310b03bb2af77c1b77abe93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 869 zcmZ?wbhEHbG68wVGIhem=U(^LUb4h;c?We$u2%uEc{03e(}^8f$< diff --git a/deluge/ui/web/themes/images/yourtheme/grid/columns.gif b/deluge/ui/web/themes/images/yourtheme/grid/columns.gif deleted file mode 100644 index 2d3a82393e31768c22869778698613b2f5f2174a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 962 zcmZ?wbhEHb6krfwXlGyuEL<5_v@*CDh*pJ^t_~?(6IQl1ymDPc)rN@bjZrn5V(PZU z)NOSrd+hMvA+B+IeDltP)?JCMyOZ1ZrgZEJYkQj3eITRnaL%L?Ia5yNO*xf6?R5V1 zGX)b57R)?XH0ylvoQuVCFO|-_Qnuh~<)Ryvi*HsfxmC5~cGa>w)ywZpoH%jn)T#64 z&D*eH!>(Ps_U+r(Fz^e+YaA8aNxk9Lx+wXJ9gs4iBqReojG&n z?%lgL9)0`&|3AYh7!3i+LO}5+3nK#qAA=6a7*L*I;F!-K%OT^jVZp&>mh3YgjfYq| z1(lp?K5S5QW|J^Yxp3pe#^mFCnoeCZo|g`B%4>LkiP*V`#cPUi%)1K8vI{DjqJ>lyj2t2o f3la`CGVn;rtSCr4)W)vpHOFJ)qNAORj11NQ63h`c diff --git a/deluge/ui/web/themes/images/yourtheme/grid/done.gif b/deluge/ui/web/themes/images/yourtheme/grid/done.gif deleted file mode 100644 index a937cb22c84a2ac6ecfc12ae9681ab72ed83ca78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133 zcmZ?wbhEHb6krfwXl7towPL}p0*huu%~roJzC1V7qiQ)z(xVq;t8Q*e g@TwP&*%vbDj%DY0^FxMh_Sd^OqF)Bg*^}7&&A#5)LvkG7IyS zOnBJr%r7CL!Q$}XP&==XoWqO@51m;T- zPZpr7|1;=-+z!eU3>@+d`VlJv8V|8>3M$wXTxdAR#L6ikV-V2L(7?dJ#=^p24FK}3 BP__U7 diff --git a/deluge/ui/web/themes/images/yourtheme/grid/grid-blue-hd.gif b/deluge/ui/web/themes/images/yourtheme/grid/grid-blue-hd.gif deleted file mode 100644 index 862094e6803f522712e4d193c7becd8e9b857dd3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 829 zcmZ?wbhEHbWMmL!XlGzJa`*r7`~Ocp_<#1%{|it4Uw-=k+VlT6U;e-I>i_*W{~x~l z|K$Du=O6#S`uzXxm;WEW{r~*q|F@t2fByde=kI?YU>F6XAuyCfK=CIF(E0xvbU>Z} m<=_zzU~q6?um%8<;zWG_ diff --git a/deluge/ui/web/themes/images/yourtheme/grid/grid-blue-split.gif b/deluge/ui/web/themes/images/yourtheme/grid/grid-blue-split.gif deleted file mode 100644 index 5286f58f6f798184c3eeacba1352cfd39b9ae03e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 817 zcmZ?wbhEHbWMbfDXlG!Ub?iS7FpPrH5Ezjmp!kyo=M_wPS^_`om@~ diff --git a/deluge/ui/web/themes/images/yourtheme/grid/grid-loading.gif b/deluge/ui/web/themes/images/yourtheme/grid/grid-loading.gif deleted file mode 100644 index d112c54013e1e4c2f606e848352f08958134c46f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 701 zcmZ?wbhEHb6krfw_{6~Q|NsBg$>(oA`P8%SHjuGk&%@0ppYOTwO7TCppKD04vtxj( zk)8oFBLf42;y+oZ(#)I^h4Rdj3>8V47nBGRLn+Q9-(eXZMC@T`q-A zfguTok_rhvuF+B}YGk&S-hZ1Y!QP;7UE)!jv*adK6)hob2AOf}GE&w)<#=MknJHoV zY^}*Md|xE}K6*MO&RAU_^MUKk=Djk=g^pDJi6uprK3M%`#IdVL zUEAw4e{ zmg0{~p6|Ie&p`6H%mYO|r)_gjg|As;$iv1hQk=MZgX#CFjEx2xI6HUG&(-w8Y7Wpj zcm93g6udbnGzoX) diff --git a/deluge/ui/web/themes/images/yourtheme/grid/grid-vista-hd.gif b/deluge/ui/web/themes/images/yourtheme/grid/grid-vista-hd.gif deleted file mode 100644 index d0972638e8305d32d4a2419b3dd317f3c8fd3fe2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 829 zcmZ?wbhEHbWMmL!XlGzJe){5xGZ#;uy>#l_<(QpFT5;g3%Bd$|0cmlLhGf{|q`H nPk{0S1BVoYrq2Wc#zV~Pyb=r?3JDC2Ol*7#9t#p29T=29Ey>tSt{5 zHY{*#Vsg}oIT5h%K(m0QN{+|JM3-h^O`|Opf{7fxyq0BWID}eGbgMYd>zNVs*sDWV zoA1qwjZY3uXHRaM;~D(iZJx6IEfY?Wr2(@o4CQoZZdq`CwriwbsHEt#km;etaZ`6L zTz!3gENh*F_qI0?jS`nu#m){}(7wIk@jlUvh3oF_E@dsdaeDjvxJFSXZaJBV1#O2r zgyqE~6rDPbPjEKrQ!sFDJ262wU4TQ;rQ!Sn=9UHq#|Nzf3_+{e1Rfn?ZRD4$;FDGQ z#@r~Pu^>)X$(*&3x9Pl?tj&%CoF~dRyY`d67r$SB{>v~5Mnhoag@EEu7NDp9Gw6W44$2b@93l*? Z95Nmo7Bnz$2y4ZhC{SczU}R*l1^^j55kLR{ diff --git a/deluge/ui/web/themes/images/yourtheme/grid/grid3-hrow.gif b/deluge/ui/web/themes/images/yourtheme/grid/grid3-hrow.gif deleted file mode 100644 index 8d459a304e0b224f8c28d6b7b585da7019d28cce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 836 zcmZ?wbhEHbWMYtDXlG!!aN)x1H}BrOegF2|hj;HkzW?y)!^h7bKYjW6^C!b77!85p z9s-I#S%6;r&!7YHC@4=ba40eea>#gWNI1yM!7mYUVnf4WCKe8!85Rx=4Ga>@3=9GS G4Auam1ttan diff --git a/deluge/ui/web/themes/images/yourtheme/grid/grid3-special-col-bg.gif b/deluge/ui/web/themes/images/yourtheme/grid/grid3-special-col-bg.gif deleted file mode 100644 index 0b4d6ca3bf28ba44b4ee215fddf936aab7cdd5a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 837 zcmZ?wbhEHblwe?DXlG!!aN)x1H}BrOegF2|hj;HkzW?y)!^h7bKYjW6^C!b77!85p z9s-I#S%6;r&!7YHC@4=ba40bda>#gmIKarv!7ZX-kkHV;z{nslr{jQv6El~jRSSoL H0)sUGu7M?* diff --git a/deluge/ui/web/themes/images/yourtheme/grid/grid3-special-col-sel-bg.gif b/deluge/ui/web/themes/images/yourtheme/grid/grid3-special-col-sel-bg.gif deleted file mode 100644 index 1dfe9a69eae133929f3835ffcfd108959539b9e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 843 zcmZ?wbhEHblwe?DXlGzpb>`cJ$GN zbN|hshj0HpdiUqa`#(?L|9SS|&x?`0o(b_B3_s=d77u3+H|!r zfbs+bM-c-fhm6OD1qYj1`88rr6eKbU2cZFVdORzJ@!m~?8+%1KMTTg@3K$aq~=^PX>8{)(q7 acp2+dVHKAK1EYrP>l5}X$w&(@SOWm68Djnb diff --git a/deluge/ui/web/themes/images/yourtheme/grid/group-collapse.gif b/deluge/ui/web/themes/images/yourtheme/grid/group-collapse.gif deleted file mode 100644 index 495bb051dcee00b837a948af56f7a59e77b69aa5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 881 zcmZ?wbhEHb}Lc00Z?nwEzGB diff --git a/deluge/ui/web/themes/images/yourtheme/grid/group-expand-sprite.gif b/deluge/ui/web/themes/images/yourtheme/grid/group-expand-sprite.gif deleted file mode 100644 index 9c1653b48dbd2d4bb00886c379ba3a66813737c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 955 zcmZ?wbhEHbuiX3i z{QdXWpZ@~^!zdUHf#DSbia%Kx85kHDbU@w$?_tHlbAgvKT&29}T*1_wr_8B7v4Oad0D zH!!O=%UO7AS#fc($7HS8Q(IPEULLU6Yp&PURaaMg26lV0F?{M|skyG2(-{0TB%q{1$Bh!Jw8USBOURwYF diff --git a/deluge/ui/web/themes/images/yourtheme/grid/group-expand.gif b/deluge/ui/web/themes/images/yourtheme/grid/group-expand.gif deleted file mode 100644 index a33ac30bd2b3758ab2e003f70ce638ab77eaf101..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 884 zcmZ?wbhEHbbN~|U;Bpe)@m>5|?LIe~TnPxDF-7pDQklw(o P-YjR~vE{{q1_o;Y#^^iR diff --git a/deluge/ui/web/themes/images/yourtheme/grid/hd-pop.gif b/deluge/ui/web/themes/images/yourtheme/grid/hd-pop.gif deleted file mode 100644 index eb8ba79679eabb7811c3d9d1c86c43bcf67552cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 839 zcmZ?wbhEHb_??HKjfkTCXkweD9 mfT4kbgI~?WW5NQ*7JhN9o*xBDE*)ahRw)@D7aeL~um%9t9ucMh diff --git a/deluge/ui/web/themes/images/yourtheme/grid/hmenu-asc.gif b/deluge/ui/web/themes/images/yourtheme/grid/hmenu-asc.gif deleted file mode 100644 index 8917e0eee0cdf7758e83c4cffa7a7239f72b8427..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 931 zcmeH`u}i~197Zo~Emb-ML>(No#i13!1{`|2)F4_jl^X=3LnUJzge<}>RZc~zP~kV; zB68w#pu>SnK&adpIt5*dn`7OIQ?33Dj(x+oeanNlwY^!!2PQI6AN?^vMGITlu?Sc$ zU>9uS*}igoaC}8PN`jCCnovooc75v7&|^Bl#h|GI2x(JLP!wWjlNOK|~-m_dM?T+-E!pI0dd^5l}(d@Glq_swQ5Q<6ypk{;!;VaqFyLusAH|W zI_^hNH}3WaBSr@P!$9skWgujrrQZ^Mn?RWcN@fn{AM5KVovc^P{B4D$=SroI5_&zI zNSF`DRwb35%9fAbth<-%@nxq_$~TO}IN9OvPh(dz1*g;6JvytHv(;6&xjkRcOr!mB r{VRFNa;Pe5osHT>5@ibIb~{3g+0C%lYO~3O6<&R=-|w9m23q?84YkzM diff --git a/deluge/ui/web/themes/images/yourtheme/grid/hmenu-desc.gif b/deluge/ui/web/themes/images/yourtheme/grid/hmenu-desc.gif deleted file mode 100644 index f26b7c2fc5836850958f7f2b1fafd3988a988d7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 930 zcmeH`u}cC`9LIl>nH9kiSwcv;h)RPe4nCSX#PT4JtLbR)IJcwe#y6z#3aSf)9!+l$ z;%yxW@kSwnZWM)ZydeVHiWX}!?QdxG!)N_2ANcN;ig{#6Ai)s+7(q%#GE!y5mQ{jO zj5MrhrlNCIcT|&WCe|#b*{*J3-4-SmmeaOT%60^HIHrQgae`8gf*j^igs3uBp{hnT zopO)5V>`?=nQ1YLFxzIBGSTNY=9rB4oG{nnt~U^b3F->w3Rehk(B^L2>$m$u&+|JS zzvF-O{o!cJw7~xri2now00G#VJYn()2%o@AE8lw!UPJ@SiC{BRyCfUg+)-YByjskr zv+Ug{Ji~hAw(%`jAsUlHdvfpXd_GaEWO`qB`!@?~^gbD{hpr>BT&DZEGYhLy?xoZ; n!ca~nNw;=d4=v4s)H*Z{&Ndrqrwj#{39jU-m51Y}8o>51Tocwt diff --git a/deluge/ui/web/themes/images/yourtheme/grid/hmenu-lock.gif b/deluge/ui/web/themes/images/yourtheme/grid/hmenu-lock.gif deleted file mode 100644 index 1596126108fd99fc56226b412c6749c55ad5402b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 955 zcmZ?wbhEHb6krfwXlG#X4~ou+bjZoeOV2FG$|=q-C@C(jDlf0eD{N@b6W`Inv#*zP ze=o<1{(yu1+=nJ`ADhB`dOG8|nG9#s|^2dGCVn`{Pc*@>k~$=Pg%ddVgCO)!~fR||KBnE z|HJVAKg0iLR{x*dJ-;0I|GC%y_pblnMF0Qq{Qtk(|NlOXjV)~*Jzd>>6DCZaK7IO( z88c?ioVjUP%kt&RSFKvLYv;-0XzkU1m_xG3of4~3u@#FvBAOHXT`19w_f1o=? z!B7qX#h)z93=CNeIv`Jg@&p6N42G*5G9DWiIGRQ-bEs^3`rv@RCy$K9p(kC=rd|^` zST-*?>B_{iQlwx7E2E<(Ghbe(62oy`Y27&t0f`^nn;9J1SUxr?H8M5pwCs2h(8SWt zC8Qv+=HXHgep#c0o(mriDDdjJR6ObU=;Xr2&gPqN_0-kZOwH=MQtsX=WoB-cUnB8y dW3n5EfMAf!nn#R>TRBB^*6i?z@O5CY1_0nG4B-F( diff --git a/deluge/ui/web/themes/images/yourtheme/grid/hmenu-lock.png b/deluge/ui/web/themes/images/yourtheme/grid/hmenu-lock.png deleted file mode 100644 index 8b81e7ff284100752e155dff383c18bd00107eee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 648 zcmV;30(bq1P)WdKHUATcr^L}hv)GB7YRATlyKF)%tYH6SZ6F)%P+<{wS~000McNliru z(*hb477vONgHQkf010qNS#tmY3h)2`3h)6!tTdPa000DMK}|sb0I`n?{9y$E00H1h zL_t(|+NDy@YZE~f{$`WrhuKPySQAA=4|-5UL@Ysj^nd8hiS;2Kdj#HUllo z8f~>&*KFH9Nwz?Ckui3oR;%3`NI(gPUDtho|G}f2_3e8bT8ASerBbE5)1bTYdcFQ| zZM?C8k+I47`6u~>51*b--wCz*ER>uRr zeV-UkHLH%}72i$a+1i|RAKlWyIlu9^60fuoN4rrzunmYfG3Rj9y^HEzZv5(CEO81y zUYkzkSk-KQ`3%0SF=Q~vI7Aru=z0O7P{Z@#ja`PhX$8v2D-^Gzc;YIGcnR19E(0MI z;kZD@0aiO(XrN-PsAlqHZzKK#l1tJ_)zheV5(%VKYS5UK?$7C;0+>qp-G76P-YrWc z5ZrIlD9FnLDKc3)8S0<dA!cTgY+CR4-a*;u;!NrNF3LWTlP5a1_; iES|Z7@j-3=)A|j?vD&^)Yn&Va00007>1uYXA>3Qh}beSb(Ur!W`$ZoRvwlh8h#GSA{v3P9MZmob1&N}#H|)3 ziyhJ(U{)KHf*@)Iy5?}L)|RKuO{O%cx#h;IvM2X1`q0Jo18y$3o31q0)ZQR~04YGX zfXCOw7l;j1uOz`;`%xPF|1H(H=TQ-Al80O7c-*kEIp@ZM``Ch}Whn7a@ zEo{qiRYg+i%R z4h#&aR4TPvt$O^~PNy46p*I)|Mx)VWGFdDZtJOL&G4XSL3{j3aZnxWK zXJ;3eLR8p^IE^@iXhU=a0)b#Kw7t0&jYea!SUet2Boc@bilUOqB;u|J|M|xX6jAAP z03n=6?Mi(Dm?nrZ^SKu7#oi7Bm%1nSA1H5qaf|0_D`c0ZeXQSbMRJ}Wp^ujFWEojX z(Y1{1lBcW8em3h3o6B)FgQ$TZv?6jQ8yMxx;o>^&qx~ghy5ef_6fHB&ac3`cuq8MD zSbdMbr>J*|b@#!#g0h@qxe*x=qGVcHY diff --git a/deluge/ui/web/themes/images/yourtheme/grid/hmenu-unlock.png b/deluge/ui/web/themes/images/yourtheme/grid/hmenu-unlock.png deleted file mode 100644 index 9dd5df34b70b94b708e862053ef4a634246acc8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 697 zcmV;q0!ICbP)WdKHUATcr^L}hv)GB7YRATlyKF)%tYH6SZ6F)%P+<{wS~000McNliru z(*g|-5GqRX(wr!towOa3bz1}%hRS$Ze*UVXl27U>F*+kf-M;&k-s!`fDVCrZezlf>dy^3`BTW$z=L>EIW zO>?T0B!*En2q>u<@}12dniz6|2?Qm9qx{jpBiX~P{FQ(#@rTzxF``)#1i>x@j&6Pg z`g9}R!YZ+#Bpq}r3e{~P5}$S=h*)1OVUmx@SN9wqKg;4@^1P3fXJWAV73+q9*IOoT f&)vjR{Ezq!d`RXXnklE900000NkvXXu0mjfw|6I- diff --git a/deluge/ui/web/themes/images/yourtheme/grid/invalid_line.gif b/deluge/ui/web/themes/images/yourtheme/grid/invalid_line.gif deleted file mode 100644 index fb7e0f34d6231868ed2f80b6067be837e70cac44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 815 zcmZ?wbhEHbWMN=tXlGzx_z#4mU^E0qXb33&WMKq(T?a&f@&p4150I4La9D7liGhiU G!5RR1hX@}4 diff --git a/deluge/ui/web/themes/images/yourtheme/grid/loading.gif b/deluge/ui/web/themes/images/yourtheme/grid/loading.gif deleted file mode 100644 index e846e1d6c58796558015ffee1fdec546bc207ee8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 771 zcmZ?wbhEHb6krfw*v!MQYQ=(yeQk4RPu{+D?cCXuwr^cCp}%d_ius2R?!0jBXnAQ) zOH<|l|Nj|aK=D7fpKD04vtxj(k)8oFBT!uNCkrbB0}q1^NDatX1{VJbCr|b)oWWMT zS%hVC ~NwO_yO%;SvZ5MdNYf|QNy-I*%yJaj+uTdt+qbZ z4E`Fzb8m}I&!N8OKmWEcCmrLs^Hs&3i)mt@hQVdcqghkaBs*D}tG_lKew4?rTjzIZ z9tSone1TS+TR7tu^CunG)Y7Jg#sw#)sG9C!c0I%LEzP)9;hqRf&)s$D8d5Db{TBs% zgl0~5QQ91luq4Q9tJgt4QLbaxZvAaKeCM9!oy85dg4k>TdBSVqjHub_PG=PO&J-rx z7oYTuF+kH|tG-UK+EkUhDjYx?zW?T|lx>+aOQm zzL$v$zBLo4Cj=G&tw{H}dW?tlTkS)SY4<#NS92z*EY-MMB6Ftp`R=*=*Ev7cS+X%W zMCur^FdlokL}1Y+&aasU2J4#EOuNlnb9CmqgLCGTSY!1BD42pkHY^XidQ5=>YQx%` z*%Pm9D!CkBu&tMWm(%-ejACVWGS2RX5=QOJ$1*tr7F}F+*-OA+Ly&Isg|AEuUYicA z#%IG6kPXkHt{zk2M6zK@Vu^4Q(1zE$?yY6M!^&jQ+2^E?!p7{g*|X6}vuRC3p@jk0 W117c83?+LXEZI4G$p&LV25SKE>nb+@ diff --git a/deluge/ui/web/themes/images/yourtheme/grid/mso-hd.gif b/deluge/ui/web/themes/images/yourtheme/grid/mso-hd.gif deleted file mode 100644 index 669f3cf089a61580a9d1c7632a5b1309f8d0439a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 875 zcmZ?wbhEHbWMYtKXlGzpd-4Cei~rYO`oH1Q|BaXbZ@T<{^OgTwuKwS8_5ZeO|94#b zzw`S4UDyBbzVUz0&HsCE{@-`&|NdM558VEL!C+hQ;zA>HJFm1! z#)%1x%x&D_IuR=Z8kt%-g@N({4h;>A%p3w50S6iynb`#tJSI3aHnDO`7-U>H(Adn* Pui(%j;MmmCz+epk$!Kdz diff --git a/deluge/ui/web/themes/images/yourtheme/grid/nowait.gif b/deluge/ui/web/themes/images/yourtheme/grid/nowait.gif deleted file mode 100644 index 4c5862cd554d78f20683709d0b450b67f81bd24d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 884 zcmZ?wbhEHb6k-r!XlGz>`0sG^=;33>fanOrC>RZa5f%c9KUtVTUe*B-pgh6A5y-&E zA>*-O!NDdb7MYkC1`iK4@=0rzWCSQRbnt4Ywd@dF=+rMIANR*%(jvDmG5%#TnwOp& kU}SchrxH17*#QO%<_$5P0_ncfbgjEYUKG8!(7<2~0Pia+WB>pF diff --git a/deluge/ui/web/themes/images/yourtheme/grid/page-first-disabled.gif b/deluge/ui/web/themes/images/yourtheme/grid/page-first-disabled.gif deleted file mode 100644 index 1e02c419f5e73fc1ba5770df0448d44adf856288..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 925 zcmZ?wbhEHb6krfwXlGzZPfyRu$tfx-s;H=_udjFb@6g=b+}hgO*4EbE-rn8a-P_yS z*VotI-#=;6q{)*fPnj}h=FFM1XV0EDZ{Ga*^A|2$xOnm6B}gPhY%v@z$+dw{PFR zd-v{x2M-uV!Dt8!L;Mq+#E6<8x|aFW_O4e+3))3Q*|Q=94?bWMk!6jGP<+(r$fM>Xwqe7gmNr&4?FkK$jz>EMMFb>zJ~*Z~ zvMU=|C?p6pu`gocw@ENKkig96%Ptk5a9{xwcPOV4M}k2k%Q{v@i4+D0okN>5F7xql HFjxZs_zi%( diff --git a/deluge/ui/web/themes/images/yourtheme/grid/page-first.gif b/deluge/ui/web/themes/images/yourtheme/grid/page-first.gif deleted file mode 100644 index d84f41a91fca3a0ccc1107a78ffbf7b62c527afb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 925 zcmZ?wbhEHb6krfwXlGzh@tC0DJ54uuo^j+di-h&|8QW#kzUrr(*H68ylXk-(>4ag{ zZHv4+cEz{tOYf>=ebOm>XHxXSuI{Hx{sE`lD_*51{Hrf`RNeQhe(3PuA-LgMaLe7$ z)_W1{_x-!R`FH*eYuz6C>RX^ z>V<&fPZnkd21y1TkddG~!N5_)V9X)ov0=f%X7nX_llo;Ppa!i5VLFJ8Q4$&%&Em#6pV(z;0OW5pDfG_ z46F<~Am@Pc1OrC}12>0^$A$$5o7t@;-Y_UNJMxKf6&W}lT+k*Y$eyJjc<@21kdg?` z9)m}X2f37ODg+`IICZeGskVGL@ZdlLlaQT?!H)&bz6?zAIR*(A8e5nhSgkHN9C*OQ m>dC5ipkT8?(+Va*AAy7q4&fY(0%9#)p=)k#W@Tbxum%8@3U^Ha diff --git a/deluge/ui/web/themes/images/yourtheme/grid/page-last.gif b/deluge/ui/web/themes/images/yourtheme/grid/page-last.gif deleted file mode 100644 index 3df5c2ba50b143fca7d168d5acbcc4404b903ee8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 923 zcmZ?wbhEHb6krfwXlGzh@tC0DJ54uuo^j+di-h&|8QW#kzUrr(*H68ylXk-(>4ag{ zZHv4+cEz{tOYf>=ebOm>XHxXSuI{Hx{sE`lD_*51{Hrf`RNeQhe(3PuA-LgMaLe7$ z)_W1{_x-!R`FH*eYuz6C>RX^ z>V<&fPZnkd21y1TkddG~!N5_$V9X)ov0=f%X7)sh7DeV(M==$yO&0_YC2+|IvM<}Q z@ZbVY8B+}&lf=VK2L;XIwg}8jWa;H%bG(qjsCck}M+|z`(?y z1M&eVPcU$JFtBpScx+g3u$hC^!6V}XBXb*zY)A!1phGj4Fjq*7gQ62lFOR54M?r!E kLmQ{U6cz@-#wJD`MJWvdVWq}d0_-7oPHt8|*uY>70KTb0MF0Q* diff --git a/deluge/ui/web/themes/images/yourtheme/grid/page-next.gif b/deluge/ui/web/themes/images/yourtheme/grid/page-next.gif deleted file mode 100644 index 960163530132545abe690cb8e49c5fef0f923344..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 875 zcmZ?wbhEHb6krfwXlGzh@tC0DJ54uuo^j+di-h&|8QW#kzUrr(*H68ylXk-(>4ag{ zZHv4+cEz{tOYf>=ebOm>XHxXSuI{Hx{sE`lD_*51{Hrf`RNeQhe(3PuA-LgMaLe7$ z)_W1{_x-!R`FH*eYuz6C>RX^ z>V<&fPZnkd21y1TkddG~!NB3cV9X)ov0=f%W)9;69vKr@Ionu*A5?G{Hgn3DYJ|un wK6d5q<#D`_!KiqUp-ntt3Jb$U#ts%8MWY1*!jGC}2?&SWIk{Q=U;~3S0KQg&YXATM diff --git a/deluge/ui/web/themes/images/yourtheme/grid/page-prev-disabled.gif b/deluge/ui/web/themes/images/yourtheme/grid/page-prev-disabled.gif deleted file mode 100644 index 37154d62406ddc064dba311b95f554e49ad38003..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 879 zcmZ?wbhEHb6krfwXlGzZPfyRu$tfx-s;H=_udjFb@6g=b+}hgO*4EbD-QC;U+t=4O zY0{+0lPAxdIdk5;dGqJbU$}7L;>C-XELpN*#fp_HSMJ!cW9QDDr%#{0ef##^yLTBz z!Dt8!oe)s`$->OQz{;Qlaxy4SFmU)VaC69bY*=uxnSOV diff --git a/deluge/ui/web/themes/images/yourtheme/grid/page-prev.gif b/deluge/ui/web/themes/images/yourtheme/grid/page-prev.gif deleted file mode 100644 index eb70cf8f6a3b7f524bbeb3656d875a823b27fd7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 879 zcmZ?wbhEHb6krfwXlGzh@tC0DJ54uuo^j+di-h&|8QW#kzUrr(*H68ylXk-(>4ag{ zZHv4+cEz{tOYf>=ebOm>XHxXSuI{Hx{sE`lD_*51{Hrf`RNeQhe(3PuA-LgMaLe7$ z)_W1{_x-!R`FH*eYuz6C>RX^ z>V<&fPZnkd21y1TkddG~!NB3eV9X)ov0=f%W)AK)kBA8^Y;DZmPc|?ZI=9Q{X*oQZ zkbJD2lgIqQijPiCj2*mD6%7sx9yN0CvxS^laG;@KrlbJNftid9=jS`{vav8&0{~Hw Bh1385 diff --git a/deluge/ui/web/themes/images/yourtheme/grid/pick-button.gif b/deluge/ui/web/themes/images/yourtheme/grid/pick-button.gif deleted file mode 100644 index 6957924a8bf01f24f6930aa0213d794a3f56924d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1036 zcmZ?wbhEHbA}e@6f*BUeEG-{mbu9UVeYtn)@A#A9pQ#+`IB&@5(0= zRzH}y`r(9CPbRH>G-dUZ>1!TLU-xM0+NU$tJ)FJ%!HkVh=4^U8ck{CaTb?f6`F!=h zms^g%-go-h&Rf5C-u=Dz!SB6~|L%M6=kVF*ht9t`fBVhRyMGQn`g7pPpQDfe9DDTl z(5wGPUi>@u`u~ZCzfU~=ed^KQvyc9qee&n@+yCcY{k`z?&xIF%F1`GB>D9kWZ~k3* z`RB^(KUZJ||Ns8~&oBx`LjW}d6o0ZXGcYhR=zxSld4hrCB?B{ujK>Cr zPF^XagaZi+ome=9Dmm#SD}7El7CSA;=KXekY^RG>e-{ zuuVYm(pR@|5zQ!{2@Y3s!WlFkEt+xRKzr=&*z_|U*@qgNWbB##KVWn?)_GXn$>4`} z#Rk5^9iqw$CMLJ{owi8Xkg$-crJaR6?!tz^#b0>Dw8Q57c+l9;Af%gcqV6G6E2r=p gYaW5X0}L(q1$Yc3_9+}>;A5Sv9e-|5r2~UC0H_cnr~m)} diff --git a/deluge/ui/web/themes/images/yourtheme/grid/refresh.gif b/deluge/ui/web/themes/images/yourtheme/grid/refresh.gif deleted file mode 100644 index 110f6844b63f04ee495cb6260aadccc5c91f3245..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 977 zcmZ?wbhEHb6krfwXlGy$h}b9*vsWVToJh$rg~Ib{73bBfFRNEyRjIzARe8a@{G?U= zS=*`;&XtFqYK{lh9g^y}Bh~OmX2K7phHF|4mvmY#YBk-m>AI%V{Zwn}AFb*CO}Zah zE&Ol0{J&TG39p`WUhP-C+HU)IUUQmo-)qvfh`zI76Yqx1zV0&XfzSMxLGvGbFMQ~+ z=(Y3m{~l}q`>*>SwD@7vl2_py{zq>5pE~<)_MEHvb8Z#%9?x5TCvVmLlErrtmc7Ye z^(1@q`{eEa%QikQ+y0|u-~Un|+W)`u;QzYA|67+{YhHeP%Er5`D<5=iecZe0VgIfd z6ZSoyyYE@Yq4%wa{&t-D-*@u=lr#UQo%uiG{Quc!{>?l8fByOZOAkC-cNm zdAaJ$n+2EuFS_`D;g$bOF8yC{^Z%AJuQpuyyy5=;?RWm~z4m$Iga5mp{NMZF|DH$x z_dNZ7J^Oa?<^NmHzCC{Z^XcdR&%XSB{pru! zuYbP%{{Q3WpTGb9|NHkJ2pC4ez=eR~PZnkdh6V;5kP|?8f`MZl10$!5$A$$5)il%s zei$5ka6nGTs361eNrP~El!A@oXXa)eCC+CvI2;iHZM67s#E^NJN1wTgOT&i;3Ec;TOAjTi zTyP{|exu5jn1!2~IsF{O7w}9FI^s0Dv3!z%j9{}Lqr9=eiw8w24r1-;JbMZ*Iy$pR TTfCj3pwPfLY5NRjCI)K&rUX|l diff --git a/deluge/ui/web/themes/images/yourtheme/grid/row-check-sprite.gif b/deluge/ui/web/themes/images/yourtheme/grid/row-check-sprite.gif deleted file mode 100644 index 610116465e7e34fe6ec137d674a5a65eb44f3313..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1083 zcmZ?wbhEHbG-BXmXlGz>j-2EYIms=0ihImdkJxD*ann5GrhCOt_fD7*mN_@JU|~Yh zlH}5*DP>F3%9rQXt#bJ9;Pl_AtZj8)e}DJP-90mRO_;lP-R7O^x9r-qeb1Jidw1;K zKX>_o#p_P2-*JBTzJq)AAKI|<;`aSlckaKi>)_Qrhp!zxeDu(fW5aL2&AYd5-M(@A-tF6WZr{0c>(2e#ckkc1d++>}M|bZ(ymSA_y$28PKYDua;miAv zUOssE@WI2!4<9{x_~`M2N6#KTe)9Oq(zkK@q?aP-hU%!6+_U+q`A3uKn{Q2YOFNRSt)Ivb< zCkrzJgCK(r$l;(o!NBpKL779wW5a@j%^bpFa}I1+c({#=)o#uSgQOPDOrxwjGt!z| zdt@$e$lSc_@o^LJpjAf}JZwJMArZPP=b&Sgps8HqqLPD`kM_zs`Roai*qqK|#L3VT zF?sR}KXId?9~w-oM=!LvF0}h7u%L13YL4V{2NpVaOx6sKXt0%-%sxprU4%n}F=ee| zk7OB3V$o4<2?NtNdOnMp+}aIPI1Cb!oedm&q`N#WDjn;2s@TV#Wb?^^L6Du@WzE4m zBH2;`fg2hOC%gI1Qk$u|ta4(CLnAZyojrZEhG#jire0bj>DOw0Oe9%D!a<-Z<>RHq z%WD>VO!l0r8@nULP;YPhBrdTFH4+!k**uiX3i z{QdXWpZ@~^!zdUHf#DSbia%Kx85kHDbU@w$^aLtQ^>)SRb9SKCQ``Jr`=eVAz{OT z183VTy}$iASS#R nB^X?DXxtttx-R#(S?*zGzsXrO9p?HCdj*-f<$NLv92l$th`d^G diff --git a/deluge/ui/web/themes/images/yourtheme/grid/row-over.gif b/deluge/ui/web/themes/images/yourtheme/grid/row-over.gif deleted file mode 100644 index b288e38739ad9914b73eb32837303a11a37f354a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 823 zcmV-71IYYGNk%w1VF3Ug0EYko000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00930EC2ui0096U000OS0Po$iSC8I2dGX-ATgb4XLx%wY06VC` Bj$r@* diff --git a/deluge/ui/web/themes/images/yourtheme/grid/row-sel.gif b/deluge/ui/web/themes/images/yourtheme/grid/row-sel.gif deleted file mode 100644 index 98209e6e7f1ea8cf1ae6c1d61c49e775a37a246c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 823 zcmZ?wbhEHbWMq(KXlG!!`QrEOm%s16{{7(1pGR;1JbC};*@r(bKmL9F`S1V#{~1QX wXb24J5K#Qd0`%X11|5(uL3x6KLxe$C!6IP+Ln9*-6GOy_4GW#y85tR@0bQ{sTL1t6 diff --git a/deluge/ui/web/themes/images/yourtheme/grid/sort-hd.gif b/deluge/ui/web/themes/images/yourtheme/grid/sort-hd.gif deleted file mode 100644 index 45e545f74423d274d5ba7fd942349e9b6e377787..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1473 zcmeH`Yfn-E06_1O8OuKCZ05?;9y0{yY?;~WgRMsR$~K$2`D~d1@}bQ#*KE^FOzmNr zk4h0m5xA%*2nq5&mj9jr&@R9m?MLJ@ z28+?&*i;q2X{glmbaXwjt9hit_dI1))x{ir6L_uMFRHs`tO}FBO&#lQRo8}|J5?7Y zU`>9C$Th8w3EHL`Ba086h!(PEnZzn=+PIK2*LI5;-9YgM=D}nEMKj(5E_P-Pm7jo~EXPhgm4T&wVplL(D->;y1`B0^KR=R4S}*a1vj)fV>NEY1mB8Uq&zYI6Q%t`{**z!J+Vr;E@5~g9*=aqW{3>u}nt)+%y z;;>ng6u?b5{(;L^(y<6nxNxiv6hU01L$+fA6FPrm&HQ1X9CMc{2sC$3gd=9b3;|~m zeo4%+^eknA7SU=RVi9X;xUJr+UX-mqm<4W0%pznE9#Hd|0*@ZIv{eO*Nb# z12yCIrOhLLJlbn33DTB}t(F_b2bV4~y*j=}%v9m90(t13QX1^b_==P$D+H{5*5Mu? z8gKY>BXXf^7@!+sCzFj+>XgJsqfc(1Ya(r=#J=3 zlZtj9{~(p*xA$9X2mMtN6e0bM#^36uHAhJ9Q&;+@HQ_ThCJ=yPPcaaStzMs1DHP_0 zvw_E92pgO+s83$0SnZp{u*pvQ$A3#Rftg(VD(=52XCTzUftd4T-22$PQrgIR*gHx4 z{43C_yk?5j?(i$Mual4dFf?{<9Wn}qfaB%>iNwkdu&q!m&h2IcZ$2Th!C8}<*_&Pr zyKl`OZw8N)3D^4?RK}UoD=o00gbKYHy=yv32mZ9Dl8aIS8x^Z$2?NwcBLzFmZOtoW zzN62&u*QDIz{Fy}^YAXY&Txmg7ATSAhAr8K5fZbFZ*SFa$_qE2L|VVFHOI{wKE8B_ zGXV2p-56OO`rc4Z7g3zbj)2_3YjK$((`OUqD%*mgvS`YELYsVW1or1)YW%;)D$oE>#r zQ3z|D(W$Eg`c?NY^+fD&+nctrc25@u47U__J8-QW7NqK!$T9C@*SpuaHyFRRpIGae rj_Lao#za}+eaj_<`F9!mRdtBiaY8;H`0o(Vu;KK>|7RZkKlk|m`6vG`Jo$g|>HkYl|6hLg|LXJq z*I)d<@$&!8m;Z0Q`hVy3e}+*o8Un*81QdU=FoV3K10q0qf`LPwfssSTW5a@j%?wOD iArS@)&h5PNMll*66^^tBbH?qtQJ{FJU!IwX!5RR^E;%az diff --git a/deluge/ui/web/themes/images/yourtheme/layout/expand.gif b/deluge/ui/web/themes/images/yourtheme/layout/expand.gif deleted file mode 100644 index 7b6e1c1ef82bc36104018936848c3ebfa6e05e6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 842 zcmZ?wbhEHb`0o(Vu;KK>|7RZkKlk|m`6vG`Jo$g|>HkYl|6hLg|LXJq z*I)d<@$&!8m;Z0Q`hVy3e}+*o8Un*81QdU=FoV3K10q0qf`LPwfssSTW5a@jO^j@6 iCK3sWhnx8sU0hxiEIiaD!s-`t;^Ttj{VdE(4AubXYdZG; diff --git a/deluge/ui/web/themes/images/yourtheme/layout/gradient-bg.gif b/deluge/ui/web/themes/images/yourtheme/layout/gradient-bg.gif deleted file mode 100644 index 8134e4994f2a36da074990b94a5f17aefd378600..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1472 zcmeIx`%jZs7{KwDTLnZd*hMh7R3%&{VK|xh5d@TrMjeTpnq?_&b8`}Bh(kowLJ^R= zwLrP_Mz6F*N-1{`N?)K@6i}uD1>V*|OIv8)A|*;9JN<2c#7;i>=A7rpCpmEmrw$)U zc7mcXc@UIVGnG~gOy34*)9Li-becMyuD$~>)ERVj219+9F_Xbm-(}8ZvefrjGxzFd z?gQ+Z2W-&U2kcoQXO_sF&Em{uap$rD-W-Vsija6n4j*~Q*W?J0hYp%tpk9;bpv@I( z@`Tz)B2B(fn=b+vZGl)@(4Z|8YYQ8+MGfzZp1v;z8bNg>jk*$vu2iBclgyVj>B^es z9|O{PvUGvmyzs<9PmwK9WcqTTMPJ^kuV~R%wCXE?Ha*qBP}OFjwi~K|4nuYOVl`;T zVhzx_SPOK48f&|ZG@#o^cQDa=jErs*qsPQ}W@7f3n4r(hETGq1*K1~j_Lq?Dr%LqcFxvPW zut}by5*6B{LZvEO(+Ju$Vv_!sOuZvAc4ePkK}Mg^X|R8{wv3g3jV&Qm0~*o(w;!4zGtP^}q4TE3f=4jcq2s zNTj41IT7{z(FAgK^iIzZ@_2j+Ir8!+!Q#r@%9(ju7k_5|Ghf7eqx2?7%YoH4jP!wx7HA*Q43) zwFOW=pP6ly3pn=?dHpWVl+z~h4aA7q3Dbmfk>A9h*D=1j0=ZkaJtNDl4|Dy58=OQ4 zb=w|rEX#G|6q4dPk_gFV6VcYbmUmazi7x6i6Xb&As-j$U2PJ(S9-JDYvw05^=DZ2M z-q(%65iC7!Sf=Hfs~2MFb#cc_ASYbPO$Z9ewDx-)GFuhcxKI?v{g{Fd`2H?N2mNoG a(II?Zs7)DAnPM9b=8J95L)rdV=-9sjoxm#q diff --git a/deluge/ui/web/themes/images/yourtheme/layout/mini-bottom.gif b/deluge/ui/web/themes/images/yourtheme/layout/mini-bottom.gif deleted file mode 100644 index c18f9e34ac1f4d06525592c5ec25783921e7ab1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 856 zcmZ?wbhEHbRAyjhXlGz>c6N36?{M+r#W!!>FpPrH5Ex-0p!k!8nSp_kK?me-P@Z7m zFlAunknz~C;9xU5Gl#^14GRyqF(|p!cuZW_z#t(WR-;k)_;9y`aa9RNLW=VQMPsFy Kokpn+4AubBJRUOu diff --git a/deluge/ui/web/themes/images/yourtheme/layout/mini-left.gif b/deluge/ui/web/themes/images/yourtheme/layout/mini-left.gif deleted file mode 100644 index 99f7993f260b374440c5c8baa41a600eca99d74d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 871 zcmZ?wbhEHbWMxohXlGz>c6N36?{M+r#W!!>FpPrH5Ex-0p!k!8nSp_kK?me-P@Z7m zaA9EP;893e(9p!fE+S&!pm?~AUD|4jgy5sYono4CYdSV2yD|teHi#$`Jzc6N36?{M+r#W!!>FpPrH5Ex-0p!k!8nSp_kK?me-P@Z7m zaAja+k&tj`IMB$%CgZbW!-Ix)HhHZSi@+q84iWvZBN>K^-5Dep8%#8W7*0-Pa>$EW bxpC?7J_E~BDJKIG4z;p#3-JgDFjxZsq+}v; diff --git a/deluge/ui/web/themes/images/yourtheme/layout/mini-top.gif b/deluge/ui/web/themes/images/yourtheme/layout/mini-top.gif deleted file mode 100644 index a4ca2bb20aad89264b9022fee88ee29154dfb192..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 856 zcmZ?wbhEHbRAyjhXlGz>c6N36?{M+r#W!!>FpPrH5Ex-0p!k!8nSp_kK?me-P@Z7m zFlAuo;89qx;9xU{u$s(?fCCNf0?JM-3L76eGxBgot>IYk*sW87)#{JM#>MWF#5uKM LPHswdV6X-Nu*4oA diff --git a/deluge/ui/web/themes/images/yourtheme/layout/ns-collapse.gif b/deluge/ui/web/themes/images/yourtheme/layout/ns-collapse.gif deleted file mode 100644 index df2a77e9cc50cdb15e8be856710f506d462a9677..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 842 zcmZ?wbhEHb`0o(Vu;KK>|7RZkKlk|m`6vG`Jo$g|>HkYl|6hLg|LXJq z*I)d<@$&!8m;Z0Q`hVy3e}+*o8Un*81QdU=FoV3K10q0qf`LPwfssSTW5WW+W=1|P io&z5e4!5x=GEI;OeCX1}EU(tHE{jAJP4AubO%sO%a diff --git a/deluge/ui/web/themes/images/yourtheme/layout/ns-expand.gif b/deluge/ui/web/themes/images/yourtheme/layout/ns-expand.gif deleted file mode 100644 index 77ab9dad2948270706c9b982c5fcdce78940b4c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 843 zcmZ?wbhEHb`0o(Vu;KK>|7RZkKlk|m`6vG`Jo$g|>HkYl|6hLg|LXJq z*I)d<@$&!8m;Z0Q`hVy3e}+*o8Un*81QdU=FoV3K10q0qf`LPWfssSTW5a@jjf_kR jAsz;b4DD>fMm823AG&mK%ZJ76*!b{ZzXCfO3xhQP{>?dp diff --git a/deluge/ui/web/themes/images/yourtheme/layout/panel-close.gif b/deluge/ui/web/themes/images/yourtheme/layout/panel-close.gif deleted file mode 100644 index 2bdd6239987b95025826fa39f37a036d73ae1c9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 829 zcmZ?wbhEHbWM^P!XlG!MGRSrK@6dAaKf@>(4S|st0*XIbm>C!t8FWBi2jvL{4k-pk f4i1Na28TvQ9=?!{4GD)^*u|AnEG{HEFjxZs3+oT= diff --git a/deluge/ui/web/themes/images/yourtheme/layout/panel-title-bg.gif b/deluge/ui/web/themes/images/yourtheme/layout/panel-title-bg.gif deleted file mode 100644 index d1daef54c578cced19b7f0c3074dd7a23d071cb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 838 zcmZ?wbhEHbWMoKTXlGzB%sOhAecUMblu_OpknmbK5V>R(wmyk!^#qaiSiLO}5+3(z&}UbNe&Fw0C0UOPyhe` diff --git a/deluge/ui/web/themes/images/yourtheme/layout/panel-title-light-bg.gif b/deluge/ui/web/themes/images/yourtheme/layout/panel-title-light-bg.gif deleted file mode 100644 index 8c2c83d82536f2e1e8c1fa15ccdf6683047b1d34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 835 zcmZ?wbhEHbWMoKUXlGzJdGFVm`@haV{B`m1uPaY~Uw`)d){EbFU;TOT=Fj7|f1bYo z^Wx***Ps8s`}&t*6pV(zunPgjpDaK>{b$et`3#gN7&sIdqzxh#C@?lLvvCPXC@3&A WvZm{QhJfNv7G{tF#eZVXMX8A; zsVNHOnI#ztAsML(?w-B@3=BFTX;5xq;Lv4YLV0FMhC)b2s)D9)qBYY9s=7v2nHV6X-NX@DCv diff --git a/deluge/ui/web/themes/images/yourtheme/layout/tab-close-on.gif b/deluge/ui/web/themes/images/yourtheme/layout/tab-close-on.gif deleted file mode 100644 index eacea39b623348f656de9a8f0df4ac4b74ceccbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 880 zcmZ?wbhEHb)z|%kKX-x z_TkUV&wm+4!Dt8!#}H8b$pZA&e+C_p=RkRafy0-9okPYWK%u#rLy#**AmKn$J2Q)p zz={Nh21Zf+FqsJojYs=sS(PMy7OF5cvh&sKnGv+0v0q<*pG<%Q!&xR)rDrk@3zqxO MXKm)=;9#%@0E9$42LJ#7 diff --git a/deluge/ui/web/themes/images/yourtheme/layout/tab-close.gif b/deluge/ui/web/themes/images/yourtheme/layout/tab-close.gif deleted file mode 100644 index 45db61e6000bedd9a4eacdd171d99a9af159389b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 859 zcmZ?wbhEHb+a1fq{uZ2jn48o?zgxVBqGE@d#MZ z(99ty#S`H0kb#knn;}DEVv=)*u)3Vdj=;yqxu0#kX9cC0)w0klmAo1XIMn(o} E0NP7EbN~PV diff --git a/deluge/ui/web/themes/images/yourtheme/menu/checked.gif b/deluge/ui/web/themes/images/yourtheme/menu/checked.gif deleted file mode 100644 index fad5893727ee8a13f428aa777380ae97152adec8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 959 zcmZ?wbhEHb6krfwXlGz>j-2EYIms=0ihImdkJxD*ann5GrhCOt_fD7*mN_@JU|~Yh zlH}5*DP>F3%9rQXt#bJ9P}a7(ufM;0=I)-EyC%%tyKeK&xyuhMUUy>sj`JIKUfjO_ z>dyTab{)LB=kT>-Cr%wbdG^%lGbhhnIDP)=+4C1qp1*tM!nLy(uU)-*?dpv?S8v|E zb?f%+J9qBfy?6e~qdWJX+*RNl{ef##~$B&;sfByLSi(wRuh5*qap!k!8nE{v; zbU->ld4hps4uc|xjK_ur2b)<{HDXQ_Japi6Q1W6iYUvPA5Rzlscwpk<4sO9XmXjI+ zi&_OWe7|@wG&BoL67X4M6R7Omz-DfcwPk^l8<#v6OGU!M%_;%{ss?XfI5Zp-5OGar zYW(QXz|GEX#*rx~s>CVD%q0^Mz{1hH&cW`(j0A>8wr;ZvZ4rjePOb7*MGqXL4LK$% TI;tJY@rY17bXb6iiNP8GS6tA5 diff --git a/deluge/ui/web/themes/images/yourtheme/menu/group-checked.gif b/deluge/ui/web/themes/images/yourtheme/menu/group-checked.gif deleted file mode 100644 index d30b3e5a8f138bfbbfea3d1d6d5631a81268fe26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 891 zcmZ?wbhEHb6krfwXlGzxGAUp-FJv++Vzw-1u&!ctt7CJoDF4C-YI>17M;4q>erj}J#1 znRLYtaeQ=iW)bC#?NNBB=*-HhDWD|4xae>zCoh|V$$>=XHZB1n7Kal~O{`q}VgeQu b3s{-ixj1G-bT~0I2=PqTialkbz+epkbq-F$ diff --git a/deluge/ui/web/themes/images/yourtheme/menu/item-over.gif b/deluge/ui/web/themes/images/yourtheme/menu/item-over.gif deleted file mode 100644 index 01678393246989162922ff0051d855ea02b4c464..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 820 zcmZ?wbhEHbWMU9yXlGzpb>`d67r$SB{>v~5Mnhoag@EEu7NDp9Gw6W44$2b@9D)q2 W95Nmo7Bnz$2y4ZhC`fc*um%9+ToJhd diff --git a/deluge/ui/web/themes/images/yourtheme/menu/menu-parent.gif b/deluge/ui/web/themes/images/yourtheme/menu/menu-parent.gif deleted file mode 100644 index 1e375622ff951a3a3f1ccc668061e81b9c93b411..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 854 zcmZ?wbhEHbOQz{a2h@&qVP zFmM<%@JmQ|Y*@g^%E=?8;=tJG)Wo9VlknjJLnFJO0!M|%0mo(rQBEC(fQyeBCb4lX KFcA=7um%9T95sFb diff --git a/deluge/ui/web/themes/images/yourtheme/menu/menu.gif b/deluge/ui/web/themes/images/yourtheme/menu/menu.gif deleted file mode 100644 index 30a2c4b6c0458751f85126e8bbca6ef2ccc2ff00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 834 zcmZ?wbhEHb{Kde?(9Xc{=<(wZA3ps5|DRzLjE2C-3jxKSEI?2HXV3w89h4^+IOG|a lIb=LGEI8Q6z#`0voy-@k72&h=Y%ZQ8zP%g((!cJJT4@8F*OhYlV-dg#cp zW5-XNI(_EM*|Vq5Up;&A+S!ZOuUxr$qNpFDl?^y$-QVDS9;ix)3mg1{>fcnt(^ zUcUi>w{PFRfB*i&hYz1Vefsj{%h#`8zkU10FbYOPfHonZ_>+YhWU>y30Obh=jxGj9 z4jGRP3l283GHb+~D0p~)!9>Yxj)(FAXDKG5ESZ1@4oAD0WI9R=9v*6Ak!N+{dHKMR zl}FY^$AdFLm4!>ptVN@75u5?#BR20ya;KC(goN;9V qqtnW!)kYaNB(j|}n>i$H<|I5^)XKF~L^CSn=7x7MEgZ~D4AuZjXTU80 diff --git a/deluge/ui/web/themes/images/yourtheme/panel/corners-sprite.gif b/deluge/ui/web/themes/images/yourtheme/panel/corners-sprite.gif deleted file mode 100644 index aa0d0ed8fb4a7af14a00f77c9fb0f456144363d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1418 zcmZ?wbhEHbX=eE$CD3lF|rdidqaqc2yVe7*kk>y2mMZax2Y=f$^s zFTdY^@$LSr?+@R6fAad<okNr>=@9o3~>?|3V7yUI5aB13J zaKA}H!m07@?lNZ{k&O%1-`}Ui)|cS0!{DJHv!_YKnF_05YXQUChAKbD0r9_;V_zg+IF_0JE_j~B1ctE>I_^4-Pb z;rI91)%?ExG5z}fx%JRlT1>lL@nSk$eZ_2W^G;iQPgo#u-=0=cBWyh!fX)V z-;Pc4zyz1P1eHlHdNWlfIN7aCnc{C1sXEm&YNqNm-=d$3r^U)?s?Lb7id-@?psRA} ztmsXWYLioUNvh9DKNYDyH}jF@(z%s=ozLb~O{!czzlO;xV?jOFt>?2k#8$0X*dwQv zxn#<=n=h75j+*sy_Uv;vUoMzhB(-Y!;-*!ZE4$~dTD4;Jq+6?2t~r+eYSo$z=d!Zb z?pWrvdfoONvK30!Z#JC^Hw>o#n#j0q%oi}F9*4uTL>*c}SANK7|+4J$7_xe4|yb})X`}6Mh1P4}D9tQ^o FYXG~Urd`0r4-;O@-bFU~*teev0!D=+?Cd-eb3oBt0#|9|%F|Er(> z-~as&1Pr5KGz5lY2q^w!0eb5{gAT}Zpgh6Av4Vk-LBL_d0!KzBRA3KU$tHU#2ouvN~z1K5DB)O@u~Sflpt7 zPgs#rSc*YhpiyCmRb`1*W{Os7m04nvTy2$EaGqarnM7@?PHCw`aIjx%qE~UOSAM%; zXOL!YkzsV6YjvGsZK7v*qGo!fXL_V(e5h%Br*3(tZhfL@eX47HsAPS$a(|$5eXMeS zv2lOBQGdfzf5AZiKv00NR)w@zhO}9SwOxe2Xn?hAg}iTwykwBNaD%aNg|u*nwsD5G zb%U^Tg1B{qzjBGXbBermi@kb?wR(!TdWpMzjK5TY#8rdFTZYG7h{$1z$6$%cVT;LP zi^ye-%4m+wZ;Q!ni_K_@({75_ZHwA$jofLF&2E#-ZkWPum(+Kj#Cnj(ahT9^nbC8a z)ODKBcb?gKoYi=q*m$4Vd7s;RoZWDb;c=kdd7#;PpxJw&+ZiQuslMu-!2hnn-mAdtt;6ZB#O<%e?z7J1v(4?b%<;C(^19RLw9@~! z)c?EE_rKKfyxRZA?uW-yR3|J&~T-17h5@&4cP{{R2oGb62^XlR9_~G;a=Jx;U^YiWX^XmEk@BRP(|KRcX|M&a<`uqL*{Qdj<{rmj>{Qds@ z{r>;||3LphA^8LY00930EC2ui03HBn0RRa90RR1KMX;d3Rssd?S;(;Ao`kLZNt{U0 zAHsioxM|$Tk=w(F6+>FgD3YSbi1g^KO3891y^-8fx@?*9q`!HqAgr3lGv`j2{(SPp zsdJu9c<_8C)rk~nP^Lcp!L#|Us!yF&-@&ZbGiy_vxK)lLLly^<@+yCkgJQNxFS2LH zFI#2ojM+10dL9RsoOm%~$BqvL9-N&JqeF+aXCJJ68@KG$5?jB9tr~c6lE68$T+R|E z^XE2)N|z3Ey7i+-vulS3bGvt{S;J@l-6~!@*x_YGmkqfwZQX9G;>&jnS3TVM^6TF9 z2BE)y2z{yd*MI)`Bba-K;kSxmFfFFwW#2UR*=Lpg6_PjNa5iCNp^dg7XsLm;nsDf8 z6x%?$6~tR_4CR(0K`XL&qKGAtSmH;<9mkDv%01VddOj`}odrY|S>!xG5%}L(?!jZ^ zliaE2kCFvaWkGrGT$!Xu5HJ}LHx>*R=9V2z>1ACOyrpKETdE0Hmv>o!*PM9Cxn)Rj zBKV|{i%Cgke`kJ}nUu-7*V%_1#v~|eI09!QdNaOwkwP+_h~kSevIvoJj}F%;r^v0= zW020JBod<$4Yj8QNUF!vluDlenVkjrSrBDLP3bgWo)KkrWq4Yu#}x$P@p{&(VD9Lr zlH3^E4XyJPSszKd%2%a(-pEO(wtx9)U|(GtIG6>7l}j#z-cr=1VU4XiD7CRVrXixv zi3H-OH7Zo1i4aMeX>TrKnoy-Pa;opX_>LHANu&B$YLKYjWF2*`Qa2rTvu@X2c4le^ zUR6bgN1j#%W_2EzMyBW5js%`%qFT@HDVKe)w%pBrbmr`rg%#m7Sh+x#+hEW^ODJe% zf@WywqRuTEqQMyLo0@F?4qR!#DgJxgrj8zbV{xGFSSU&mCt7yI6H}Z~+CyRNT~q2c z6%tb5t;&_KH81(j$xo{PTvp5N!Mv8VZ^b27fp6hlr_KV-X(pXN6D_oQk^^n@he!)L z?}lbOop4B( z)UklXnirAn5J@{5YYLI1(!E~!ibx_87FUYo50kl1BPsKnM*LwUm%Z#ggCmlf3k5?7?C8#i#ZP|XGCM%)F?)edGC$CIv+R2Lq|J)X(M^e z-&pz>I6%fMO@*_MTnuR!L}rUy9OQ=M9QjBDMKWlUQV{+Fnyx3bgG0RMWl!pfkrWw?75;tel(ht5U6*!oW~yE!H_RjY#tDRhkx4k z%ZW0CW5d*_M*EYUkL}?d3>l9c-$5+@IMa_AVTc|z0)b}r2Q7lzLpK zAtQp9-h>k`RPvcQ%e4n$NRo0ugMd>l+0Mu`)imn)j8x-^63<)}H1u@LR_|rd;NVkq z{@e{ex0Y6eq^==c8_`*(m?Njij%-*2QrUbrk0DHKmk^j3#)d%H!Vck9+{g}klZ98 zAh}EbPAHQb;^b#M$vIHURg_00WfK9~PvP#9xNI$}Mdn)2SBivCceQ2NvUtl>^>rwI zwdmR~I+Vb2w2bf|EK!YJ{-&%`90q!dcF` z=PiU?OMn;nQ=kUb!22OAYKP#s#`TA_d1FBW*u#d`$Z1S( zdco6P$G#W7=ws<*>093~;g=g%-lKYKO4FL+^gRO}Fo6%emi`R&Ti#G`ni;HGaYC5? zKLBzq&?r3N7IGu1<;t*aDFkB8$+MGTEwMdk4BQmE__#1m?x9y~%2oar#b}lBL1V|T zE9$tRJjNwqu?ysi^{2Z;{-t=yi&({GG`);p*jzstrW`@6iRKCgP+o0TS$ zhsyLl*?r4YYyOH(aNQ{EAhr2x19$VZYtHylA$)8(Pngcj?$d>ztzkV!8BYZ=Sz>Hl zNp|=6$34qzXY-w^9gfVjslCIT|Ems^p&bzi;0& z_i$O)>~{zRnl;;{!TcdGUm9;;%kv@d{JGOf8qQy2O*d+-;l=t9;DIta$%qR zfQKjMQl8sC?^fF*=5`S`U(m|mywUc5E9PJBZTUYJp%pPp@+Nvd(qn&hQEB5gZ<9uE zlWObrdl1-r?*M_p2X-b>d|I|L$oC)0_g~%cd>|No9|(fXXMH)tIIDGn5%yY@BXZ5w zf_sKl)fQszH)8O|A^t~bk5_->Hgn=ec|9n3Ke&JBwp{dAV?}slV*_+gzy$PQ12`~r zEYXBd7=<-~OWJ@63_uPIunD?wJlmCpTiAtP7sT zU<)A73nf4XBH#)izzMBZhj*BVd)S8-r~@ys0Sgcc1%Lnq5CCTXXNZWXh>Yln0MrE4 z01JrF4KjcXuiyX#W{H@niJa((caa0k-~ z4Iy9(CIA2~_zkv*i@L~*zStNCaEu2a4#zkE2Jm6khK$L$jLn#Mix+>5XM{T#b3tf% zL%0y9RBrfJgfPc1NoZH@W=m}V2bM4fYA^?J5C&ghHtD#I?f8!I7#&>T4{IP1_h1jF z-~~*VZ~3^7{?L#AXog*o5Bty${D2SokO@IhY6-cJ4f&7}Nflxc2$%2&eZU8IUKaTACCp5rCkeRhOY23ZYrop%p5D5l|5kAbe-h3M$ExE(w!nw+HcA zqw(nhf7A_H06IY#7a~d#djM2Osgz7P2*}V1QRx>bK%`BH3_&VqTYwBwI;E`;mJNae zQ#z$V8X+_U2x`feZg~P}AeZ6*1rLgy{ow&h(^Wy_Auh+4NBC{~d3pUQ1VTVCc50`1 zs;4~1rwDVWl=gXvIT0R_5kSy@@W3b;VJi*)sHohKpzx5OhYAnPv#4ieBuG)IkD47> zdV7nS9Sz~Bo7#Z&^{J#qmTcp$ji ztEh?>3A(BX>J40qtBUlh$Et!;iXnxnf(+rT3!y0WC2ktJpLgyV|gB@)o`dCKYS3|Jty((GACnG6$=x%bGYH(G5zo i2i`!k9AUDkdMNj4t%6pro^r0{>a8*b0OSRc%h`x+`u--v4D8j|Bfn;auF_feGP z9yuBcEfTpJIa2zNO53N;fARg{^Zfnwc)T9Z$K&;~vavKY@|6QLKq&x#Hp|levl+v~ zIFcHJNNpkUZ6OJa@Fd2?WX9!GMr3+dbXHF!ZMLL&iTZ5yVdp|!@A9L;}}?o?cuq-(Z#*7<)7nA+iy7AuQ>aYt6cUPZ)SaOdV{yLy|?g{$Jynredlfc;{68r zkN*t(-xyH%&d&z`U_j&FM*nUCfbswcRMxtYh7o{@s|WZr`kD$zE7}&O#+Nda;dUYK z2Aj++5)Q(WWue*pWC1j;4E4pyhYwJKv}aHwIjQ&cJs62z9-BB?q$lqO z6)Wqrrzlh8EC}#2^M{Tq?y`F)IHtlf`aa6Y-H`Ee6Qc~T7p5w2i%-NOHXGTs)(LPE zL(MOxTXUkg<1p2#Ck?)x8c$$co9wd1ew36}Vun*QcGy-Xtbf1d!AiH3U8QUh;;~t( z0j{Pq6saU2*69C2|A(8ldF4~0UEPr%Yb&W~GEn(Xl4Wj-OuKMH7_E&6MC;IRd}=qJ znIBB|r`_)`C5zP6`0@5=Y`p{B?dSZD`aZq!zOV2=*qrRG#t(@*qH|W1_iOu~7h~9B zq*vKNGzSohPD?P!!^{%pB3kAX5B}kHB!QtLiAe&3;R_fUq(oVq$n_IWWT^fLKTEmf z4~l7s>cP@rIYmQ-+eP@PcPW%W)Vw7>x34%hxo3cS>uW{u%uQRZHt$-GwuB8sj{{z{qO#c?8Qt>}9a1%l|S(k!DOs-O#cwT>1M@ahfl=46Q?6Owfgh)1DK{kpb06wZOKzNFr<4cLbloc` z>As;fo1!varMqBFy#A_dbDpY)kD+DCOp(*33q0wS#re=X&f{%9QGR&3XYF|2o9xn; zSi)vY7S^sj_N7SMX1=TCbZ9_DfqHe-Vx{fJ>e){B0)}@T`uO8ULFkN=L2JxR)9GYw z$)*gDMG?7uw`wx|bz4YHShAdZ2=ldHdR^-bk{!`6PZFB0y3>>Xrj3&y8^FMU`|JIX zP;C$(4$W%LLWKam!{Q_wsMaG8z<>oe-Vp^Ztg#-A0Rh^*PEf}bOq61D*55>EG-d`P zCJS_f6*PcukXSo@=QaM)k@zkTBb97o2K7kxTMuIl0Kmd&0Kk9d^Mt@frl!HHs0Qz$ z8)#Aze&oO*fa?i5kO?7nsTCgwLmWM~VUZ^Rn=q zb=}YfQWCviM!*_#W(rK=uZJK{rwtfiPxL*qMVI&i$-%Wg@I4$E&6N9a*`F)qDr&{4 zS3m>+9j0aNnY$EF^mZ<#PcmHNM2p=T`mgPtJBNr5`twQKdGy58%)u#y;1nXisgIGPvG;wtM%Q{UsIQaRkk;# z$5fkfMHS&yfJnix<|r|bovU{CgWmHNa%8r^ugW-n+sWq7#7b^PzP6OD)$PKlD+3wT zy3Bt2zYTH83jG|*;9#@*eEXWl`vJVC(`PTCchDoIWrjvW&IMSM{#s(Fy%1w!hMrUG z6`ty7oHv%~HD1f|Tf#uXCR<^WiU)CY?0v#m2X@(gw3L3qi_iMv$QJc5B+Sa_t@>R{ z@$$BbN}QJ&5`Z`Amq^?tw z+a6E^xoO?KHyIkNLzOvKIJc{Mtq+A39C8(0{@BGm>k>J3*sT}*xG@T%e9KCewPHq>?c7IX67Agv)ntOf209MxRWw8^PkjP>9)}ZM%ul?zOaKX!}x}EteMMr~V zVyhuK!WS|-UVM#uYAin&@t|f1uR_MB%y7Ia6a?4pFClY_9lq7+L{Obmu6R7jY>7Mj zix4x0oc-9k+Q|j42xu7BaPR3Mn~MJWyz8U}WKvuxLVPkM-ButH#9I< F0{~gSY2E+; diff --git a/deluge/ui/web/themes/images/yourtheme/panel/top-bottom.png b/deluge/ui/web/themes/images/yourtheme/panel/top-bottom.png deleted file mode 100644 index 578ffb6092a47d9af33fd86615855ac328958537..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^j6kHr!3Jb81>C#}q}WS5eO=kFvq*AsijL3o~JcpmZ-+$h~ z_Wy_3jh&1fGyeT$7yAGIfBVLN2O~0szQ_GbNqF=$At@m#iKWOT4w?3V`{ps}G&u8y_K7ar7g$G|QJ^XUz(U+@FzFvR&^~SSrx1N9d{QdWj z-+%u9|IaWAMnhnTgn;5t7G{uBbwC6tPcU%&XJBNJ@Yt}xfl*RO%SR(2fsIE%+3C!K zfJH7{j7BjxP82F1;}LV};`zC;>EvWJ`=E%EMNf}&8YCb3qp@(=*;(?+FYc`TtlTo+ zp}tPWVT;DaewImEzP~m$Twd;HFEzuf^wn|Zh|NiVI~J_IzD{1aLst9S;-<|R=j&n) zY}38n&-3V1@9&L`cXyZBTirNa{{A?712gkCNfC{QhXnY zwzDg8A8&6~zAsyC`Qh2A#m@8R-Tqnd^6EzM>veOgi(cJ6SpHx9zpZuUvuBsv!|mtQ z{`~sk_VIfC{dRwUzj*$9`+oWV#ozz3{+M6K{3(1v{q?!!3mQ0?c06e26_QxkD6Dkj zcI%WyT+_vK2mMcNg7q+sp IvM^W!0LCzFhyVZp diff --git a/deluge/ui/web/themes/images/yourtheme/panel/white-left-right.gif b/deluge/ui/web/themes/images/yourtheme/panel/white-left-right.gif deleted file mode 100644 index d82c33784d106a699921e8186376adfe08ed7159..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 815 zcmZ?wbhEHbC) zJaOyO$=jb!-~D{{-ski8KVNw8<p u#Ky(P`xTtKWIQ)5IXPLwHYwudrlqH+8zi5aADi9QnH9n_(1;hQKfi0UeNEKzV_IL!CjML&jsnf`iQ*+*TO}5*nMB cm>F0E91a{{WZ^W*x^rUV;^X}?%uEc{048uWPyhe` diff --git a/deluge/ui/web/themes/images/yourtheme/qtip/bg.gif b/deluge/ui/web/themes/images/yourtheme/qtip/bg.gif deleted file mode 100644 index 43488afdbd4924057e45df94ed68690068fbabac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1091 zcmZ?wbhEHbvJG_ z_wB{IZ!h0}dj&)vzP|>dkKf;X{QmaSk9R=y`N#XuKRjL%gg;OJ?2_%ZN9oX+&1IxF3}_H>l603F*t71i4@GZyiE4sw%lkTl{?!^ z6Bo7I-L2~P;_hzq*8BVGLsu~TDQ|svxII!MZqJR@$6^zdt>?XQDtdZif@HSanM&4& z=Nke$o_R~@-`i0Xygcmmtu?PVY}k3~nAhx8xhrg)|NZ;-|Nno6Q7{?;gDC_Qf3h$$FfcOc zfE)$N6ATu z!(r;m%j_$9KP-wo!oMF4bR^Z#pCLVEt6JIYJY>r`(GBHu8TKMAH hV%craN*NY1aV$`Fvrs8ibZTIkpzPfzqoBZG4FEi-n5_T+ diff --git a/deluge/ui/web/themes/images/yourtheme/qtip/tip-anchor-sprite.gif b/deluge/ui/web/themes/images/yourtheme/qtip/tip-anchor-sprite.gif deleted file mode 100644 index 9cf485060802498647ba462c826869140085778c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 951 zcmZ?wbhEHbRAb;`_|Cx4x9Z%wLw6p$`1JJa&v#${Ljc1l7!84u5dw-oSr{1@*cfy` z-Ua0e297BVyc{MB2@4t-nK?8-AM7;o6g|H=X=D(-<8}9T;jWog=1UD z4&$fCrm{73`D9*Nda=)=)Tw8u>7xs+o|a)(X9%W5PEyUaQmLAfdV6NU**cdOLJyDZ LX;5ZkVXy`O9&A$y diff --git a/deluge/ui/web/themes/images/yourtheme/qtip/tip-sprite.gif b/deluge/ui/web/themes/images/yourtheme/qtip/tip-sprite.gif deleted file mode 100644 index 9810acac5b323d99a641627276e8dbb9a3607d2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4271 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 diff --git a/deluge/ui/web/themes/images/yourtheme/shadow-lr.png b/deluge/ui/web/themes/images/yourtheme/shadow-lr.png deleted file mode 100644 index bb88b6f2be887650f28b16726e470c09459b9c86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CG!3HG1zpHNqQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JiZnf4978H@C8Z=JJZMPDQ+U>TNx_ce55uGN4u2%Q{wE|U g2=cJ=GBC0+@aVFNEX<$33#f^~)78&qol`;+0F-4Xf&c&j diff --git a/deluge/ui/web/themes/images/yourtheme/shadow.png b/deluge/ui/web/themes/images/yourtheme/shadow.png deleted file mode 100644 index 75c0eba3e101e3f32cef8bde7bae7383d849e935..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 311 zcmeAS@N?(olHy`uVBq!ia0vp^Y(Q+l0V0jwbN>KRk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XZhE>nhE&`-GTD~D$v~hjI>0gT@Uw(Rj}ARr(#+ZY|Nr|R ztz576{))TQsGN9FjsN;R=N;cX_7>}LNxZmoT3OARN%FUXp-|AVh0k3k3m;=qQcOOgc@EIAyfV(r;i((zEeg z`}y44S?ng!NoE&wcK=*_2F$s1%jHel(|yj_4>tF9g$FFYCZ&0@DQ;=K_|9xe0dH@S zX*Z%4Z8@@VyGFIRewDnzd#yOua)FIqa}4Vg?=kT(Xhpeh(=cjy2J|F@r>mdKI;Vst E09T24*8l(j diff --git a/deluge/ui/web/themes/images/yourtheme/shared/blue-loading.gif b/deluge/ui/web/themes/images/yourtheme/shared/blue-loading.gif deleted file mode 100644 index 3bbf639efae54ae59e83067121a5283ca34fc319..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3236 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 JpNE6N8UT=&&-wrW diff --git a/deluge/ui/web/themes/images/yourtheme/shared/glass-bg.gif b/deluge/ui/web/themes/images/yourtheme/shared/glass-bg.gif deleted file mode 100644 index 26fbbae3bc6d2510832a5ed709f0cb029c2c1170..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 873 zcmZ?wbhEHbWMpt*XlGzJe&g*4AiDYX)q+w@6G_xop)#NygPUI-MM=} z^!_{$-T!dm{)dbAKU@Mb9(=g)@WaK2A1*!oaQVT<%a1-@ehfsPt~~sB_0h*Gk3U^| z^yxZ~`{dJA5c+)e>E~-e^z6&^=U;C;`E>K?=UY!d-+uP_&hsxfUVOdx;_KT_KNv>A zXb8|f1QdU=0PXzGpaZfQlqVQC+!&%a1WaT)$|)>om2)9Mk%@&tK#^^Rgu{V`ZWgW# wlLCgu<17lIIuQpJG%~aEtN6@tSlD!$TihV!!H0*;9Rf;j6Erp|DKJJSK2bm`zya0vPFVPO+Hzo=EoiUW<# zt-R7&85aT+o!hu13_^AkENo)sW?~Im5RiDNg-b{!q(fjK6AOo^oXv^{2OL}3c(n`? z0um24adC-+cuZKp#Ka=XC$l2qfI}-2tCoO5K;nT0E+&=`4uJ(sK-Uz9X;c_IJk-Xo z?6;=E@bR%edFMWzN~5Qzrs*f2TT>bQ{@gtKWw+(i!R!IjKB)<%j$y1Z!Zof6-y9;DGq~5NJ}7gDVJu-S5NBXy HWUvMRItY+| diff --git a/deluge/ui/web/themes/images/yourtheme/shared/large-loading.gif b/deluge/ui/web/themes/images/yourtheme/shared/large-loading.gif deleted file mode 100644 index b36b555b4ff04f841bb2101514d8f95bcf7358f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3236 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 diff --git a/deluge/ui/web/themes/images/yourtheme/shared/left-btn.gif b/deluge/ui/web/themes/images/yourtheme/shared/left-btn.gif deleted file mode 100644 index a0ddd9ee8203b9fc45eb5ee78ae6bcb7e57aed7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 870 zcmZ?wbhEHbSKV^zd-BO3vC604f{{R1d4Yk$n}L-sZYVSj)zmI o(Q}fL|Dq=uMNdw3X~iE>$=vYlK$lteqcf2P3=A_Zn3))?0bn93t^fc4 diff --git a/deluge/ui/web/themes/images/yourtheme/shared/loading-balls.gif b/deluge/ui/web/themes/images/yourtheme/shared/loading-balls.gif deleted file mode 100644 index 9ce214beb5cd4db00666778d371223c605874519..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2118 zcmbW22~ZPf7=}Y29Kir0FmlXvp;AJNF@T|n3=l~OQNReX(lJsJSV$lTCK1p9Cy_(M zQm|OSsz3m3sz4Eyf*^8<#%d)Dpydoi0>~kDK!ll=ZaA%FI-`5dzq{YQ`#%5s?JSAx z1lbx&?h&&9gFi*>!1pzUs7{@wn9`hLm1fx>(Jl7@kz#sNtqbnGu~ zQe16TTxnMP)H3+<{h@2EL)RY+mC2N450&LIW#wqY$lA~nbxPa!&C zu$mg`OY>TK<}eSK12l%IF?DpG!V-0@d@BkYlXMMpg0lep88I%nH28pK5h2~o?kkh6 z2b2xQChiFj0eW(#g;VTwwMJ5_?EDvp>#4GK+r2+JC89@-_OzrTH4{qP8k0!hnWK}9 zap_c+yqJ92gY!};(l)Zfx*I7zMHm#j&@PQG;7HGJgfynxUXLv`)H1{Pg;t0}hNdo2 zEzCw6`;fZ{f2sO<=B5-4@O@rsqC&BzvE4Uy6nRmKzwG>WQa)|oDe}n~loonAD-5{> z?UL_)*}^8e6BlB4$-lNLQ?wCd`#X$Xp*I-B46&`*HeU)u(UfY42oW;RS(7rB(NZ(l zVXa9y3Fg@)|wdEu-^Mr$bM<2lcshb1_0+qU%7*YY5d4R}04b5q{6gDK#lN_Yz+3 zA)Yn+Y!&vbrDwhDx#Nq+`TkLUbU3j!TN`d7b-gn)W>MmQ_}fG`$z)HJCVV5zccWav z)VK6731;9=Y1sl!Lg@h;g8AmhLs23E}Fg8bsA}jW84be zJj3a&!EX+(#)=!^aPHuvE0%9D^z0oWQl`8qV(5Oxp*_o)rkOg&mhP%-u(0XS@f3?_`nfh@f|7!XJ# zk%OqjKq3JM^2G-d4?(;7)p&sbDCoC_x zFgMyk0aQ)fOAm{tLDLuoh6x2UK0R(bi$jkD1vEB~9?s%M(#YylM@%FuVp#;fssZ~@ e5vO$#&5sswUKi2&Xpx=kB8ZO`!7YivcK-uGv{KRl diff --git a/deluge/ui/web/themes/images/yourtheme/shared/right-btn.gif b/deluge/ui/web/themes/images/yourtheme/shared/right-btn.gif deleted file mode 100644 index dee63e2113fcca680699455e8a56ee3eecc81c40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 871 zcmZ?wbhEHbSKV^zd-BO3vC604f{{R1d4Yk$hk=zr!efJiBO@aVPsE804;fk*WxQe}6c#pgOBlzkIk8cxsZYUC>4${T q6OT!%mh)U@eo8sjryPH%CUe8H16^j>kIqCIFfh!NVPs)pum%9ETq}wI diff --git a/deluge/ui/web/themes/images/yourtheme/shared/warning.gif b/deluge/ui/web/themes/images/yourtheme/shared/warning.gif deleted file mode 100644 index 806d4bc09385a98ef1ac19d25e30a21310964e7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 960 zcmZ?wbhEHb6krfwXlDR{f&hVn2muENhm@owhyM-@5dsqm1SVuCOej#8P@%A(LSO-q zY!KMcp>SY^z=a6{7Zxa7SYhyB1;c|43=ehyk-&!?1`l=wJUAfm;Do@30|Fm_AFI_r#;p+LTS5IEMaRKbDQDQU%2#0{;PZnkd237_gkWx^dVBna` zz|A4!v0=eMCPx*A6NM8NOc1gSve|KQ1H(iiYYu@O7ZQ#gR8*}I_~Dqq(8*@R^@`(W z@)HIIWfz?e!wVeVa#HbKFBUvx;Axbo`SPIg5jz8ey-mRe1I2~|N`gTPEE1a-8hE@l zIU)=NI+%skoc{dSsL0&PpvCnl!Qs*I)AH$&GFuihv|L@Lt98xe!$KzpaZ%Pw4hauj N9~|!BW@BNn1^{&szCZu~ diff --git a/deluge/ui/web/themes/images/yourtheme/sizer/e-handle-dark.gif b/deluge/ui/web/themes/images/yourtheme/sizer/e-handle-dark.gif deleted file mode 100644 index b5486c1a95bcc0f39a88c15c10c04ef7c3c561dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1062 zcmZ?wbhEHb#gW zSa7hJLs%>3#D;~3+Xa-p=6GyebhKN-IP1=djf;=>D>!$_cy3y9a}Xwye0g*kiI*?5Qm)FE0;R>^0YG>#D1(BQ|H< zJ+*c9_4NsdyJWq$t+}~5+bHZ`26bb>Fw+9?{8q{mh;)M z;o;#9VePmxJJK5%IOMqVHRPj^sIT3W`5a^n+Y$P=Sr`RJG*P^>+2hm zPtWt+z3uJo9mTKjo!!0t{rv;Y-12^Vc6@w%VzPGpxjj2SKfkcpd%oY^U0+|{*qnX; T+}_>a-#<9q&HP*pKCAv-hK1$|Ns9CqhK@yMn(uI{$v4q z^gn|R$h)9C!NBpKfm=XAL80MbGZUwri^YZqhZs0z^?H5?BpvP&kx!db5t!`W$7S2b zqB-%Q$7EIBJeSUo%H9(-b?1e=ob=3RreXN4Gm*mSr)OK$9{O`qIOF^RkA5xFQ(IO9 zFA8Y)Qk9(g>dN%6%}IB6ZPp537_~c2R9fuK^(DT0C)w`)@-kv`_TxiyyRYTm+?Dlm z+u82#x%YQh|7ByF6IPITsO+X(*qn%W@yBY|oz3n@jiJwDpWpD!D2@#*RM zbouaqd#t{`KC@K){5zTIFYoRwZ~uS)Uu;d~r?Y35yRVo1RrUSt+WvO_e>SyWKknT> zJ%9fHy1zfqK96ts%NTLLo=K|Xej|%gL_(8*oyNju5wi@%W(mC&iq(=uJ08}`wQ)S^ zU@r4m)TA`+$HFenMHNXcqO(ps>K2aMv8dblS;yl(gIhO}`i(wCBu{X-7xARuS!$-r zBtxy6DwFLl{a7+3@KuG%R2RL@rISOsESFA=YWlf!dTg9#+RVgBGoQ{#TXpj3tc*=F z(`J{P%UnLE;@C>{IW_xUs!yq9`t^KTlbF|wh3RZvD`vN;S*=*yYqTq4ZlxC2%O&OS zey&(Dz3kM>?LPQFywyoHAYVDT0ajVyEf83S5 zYUk}~v)}G~z3g<}j<=J3>+SdwC9S{f)2`L|`~Ez7{eCaQVeNvw_itHmILNZPy5Jy> z_M8uUINa|T91(v1`~4w4?>U7>|FZqra8xea=i@Pz{v4wd67%mAp3VHu<2 zhTV5Ioz;IFV|>wdeI5}aFh%{jYv+pP@iy=AuwcHjMWHRrml`Q7q*+i$mvZu8$Qzn3`O RcKf}i-@V(HGcqz*0{{svxFG-l diff --git a/deluge/ui/web/themes/images/yourtheme/sizer/ne-handle-dark.gif b/deluge/ui/web/themes/images/yourtheme/sizer/ne-handle-dark.gif deleted file mode 100644 index 04e5ecf7d3837aec9510f5467282c10f158a5563..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 839 zcmZ?wbhEHb+Yh5$94ZWq95Nmo l794Em;N}uwNKib;z{ui|Vj-Z!(9Iz$HK#)0@qq>gYXJ2^5-b1! diff --git a/deluge/ui/web/themes/images/yourtheme/sizer/ne-handle.gif b/deluge/ui/web/themes/images/yourtheme/sizer/ne-handle.gif deleted file mode 100644 index 09405c7ac7b321b3eb9170b1584167448819a071..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 854 zcmZ?wbhEHbc63}qqP#3eHjE2L+1SS?XB|ZfS0S0RTeD^Ni diff --git a/deluge/ui/web/themes/images/yourtheme/sizer/nw-handle-dark.gif b/deluge/ui/web/themes/images/yourtheme/sizer/nw-handle-dark.gif deleted file mode 100644 index 6e49d6967c08db2c02a3aeb9c1f3cacb9c8665f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 839 zcmZ?wbhEHb+Yh5$94ZWq95Nmo l794Em5abeINJw;KWMp#S2{2G%=w_Cco6{kn+|a;a4FKuB5a0j+ diff --git a/deluge/ui/web/themes/images/yourtheme/sizer/nw-handle.gif b/deluge/ui/web/themes/images/yourtheme/sizer/nw-handle.gif deleted file mode 100644 index 2fcea8a9285dc74626ba9374055b25ab77e53a08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 853 zcmZ?wbhEHb#gW zSa7hJLs%>3#D;~3+Xa-p=6GyebhKN-IP1=djf;=>D>!$_cy3y9a}Xwye0g*kiI*?5UEB1_q}2ZmnDnS(jHwY|grS zYU}Fj>k|%l$$D>Fb8~aX+fl6@9wVn{Oa!M?d$LFZ(!z@^VzW> zaVFC%HL)EM4v!B{Q1+hZvvbqa(=&{-@15DX`T6+;&fRjpySBW%ydrpY+}T}QUtiyl ze0rYm?rm>x?*pKCAv-hK1$|Ns9CqhK@yMn(uI{$v4q z^gn|R$h)9C!NBpKfty3dW5a@j%^bp7F()=GJlrmz>@~+@*_y+_d!cbc5tmb38XMJ3HH=_|=`0o0p%T&eFss>$PRY#l;?zwPH_g zS$TPRz+$htURzgPT^+GG>+Y$otFNz5INT-cy=~3S%^8FMbi#@YAI?A-kP`~v50 zIp1AdUS3`iygKgeuC1@HZ%95pZ|#k>jf~q0nRm>cz3u(|1I^s>etUL&e0*ZEcKo?L zJ3n7!TI4<7Z||eAWv;!(H3F^$JPCf70^_gXw#@wm_C+l$Bj4s4oFCb)=Y zKAGsDw(`j&AG4QFCI`4_KAjR0micsQMB2)y(_+eAKAoP>rul3}%CyX9Gc%U0d^Rg* z+skLO3yx_%pHp%z^ZDG0XDgr2tNHfw`TPbptrrVg#Ijy2>`+_vVo{ITs~3wWxM{sy zG9@hQ<LuU0IXmi21oie;-_ty;6~)vMJTjxl$oIxtuR03tF% AKmY&$ diff --git a/deluge/ui/web/themes/images/yourtheme/sizer/se-handle-dark.gif b/deluge/ui/web/themes/images/yourtheme/sizer/se-handle-dark.gif deleted file mode 100644 index c4c1087868afab5b5bfd329f52d9907eb1c0061a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 838 zcmZ?wbhEHb+YZ5$9Lfxg96SOJ k3mltSSY>Q9925^Vv52er?AV~l(9La}b>~E3vIB!P0N;ZWjQ{`u diff --git a/deluge/ui/web/themes/images/yourtheme/sizer/se-handle.gif b/deluge/ui/web/themes/images/yourtheme/sizer/se-handle.gif deleted file mode 100644 index 972055e7b297a702ab9aa2d799d133b94ac92315..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 853 zcmZ?wbhEHb{~M&wt%~@%zrJ-wdN* zGz5lq2q^w!0s8MhgAT}-pgh6AVaveCA>$E{(A3N!$mMciL!xsdyOP%wjSCG&yTw_> nZk(97*nvsGxlP1k!4l8OOsp$nb_OLhOgBgro5QJ~z+epkjJq?f diff --git a/deluge/ui/web/themes/images/yourtheme/sizer/sw-handle-dark.gif b/deluge/ui/web/themes/images/yourtheme/sizer/sw-handle-dark.gif deleted file mode 100644 index 77224b0c06f1666685286c5322fb02b4cd2204bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 839 zcmZ?wbhEHb+Yh5$94ZWq93m15 l2M#ndammSOI2<_C%q421Gvk7Sb33nm)}0d@l^YrutN|0L6o3E# diff --git a/deluge/ui/web/themes/images/yourtheme/sizer/sw-handle.gif b/deluge/ui/web/themes/images/yourtheme/sizer/sw-handle.gif deleted file mode 100644 index 3ca0ed96df2059fe283c1d65fa1032a777e1ff97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 855 zcmZ?wbhEHb_F_q!3-qVNZQx|DV-A6h!W?b)Wnj^{5*w_%-mFl zkc?6VBXb4c#3BVF0|N^M17j-_11m#w1ziJE1B0DgB7cDlD)IDnWxv59C8liseo9Il zP>8d@BeIx*f$tCqGm2_>H2?)!(j9#r85lP9bN@+X1@ct_d_r9R|Np;d_l_fHFK%AH z^6>thcW+(4aQ66_;|EtQS$O!!!80cg?%BPQLC5($P(5QwkY6x^!?PP{K#rTIi(^Q| zt+Nw$@*Xe{IQ-;9=l;Lnc?BNrIk1yMnla18!|Rfx_=~o=7sXGUdm8y8?D5mi^pr2Z pI^U;TAL(EB=a!G%y}ycg#aS#EpKsu3JPkCF!PC{xWt~$(69A`aaP9yA diff --git a/deluge/ui/web/themes/images/yourtheme/slider/slider-thumb.png b/deluge/ui/web/themes/images/yourtheme/slider/slider-thumb.png deleted file mode 100644 index cd654a4c1680183026145066b4aa1a7802605456..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 933 zcmWktYfO^|6#dFz0*jkYAxr02nPDo(Y#3G2We5n&sxU;xD0?`TAk?4`t&?nHc7tSd z3BhbUwh=-{CW2C=R96rO(&5-gscoUWiha@ACv=ooX>pu=`*F^>IX5>s$;rK%mHE!r zP$h3lZ zsu&tSJM$EgWSu@k&1X2N$vNfP1r2#P<>bx>9-HY>X?dzQ`iE=Wlw;RNCAE=}lB(Zo z<6gMZclprm#8~&$>T1JWM}M<~-Ml+E|D-6_*cxWgU-Z?i6ust)nk;MoNq#u7uv;l^ zc%Sp4FTSFge0_U;M2mWF(hez^x65SwD7r47cs}l{u%vZ=dWdj%&y6Bm@aZmsp732n z`nJSRY5d(iFV7q)Zw^u^L<>z!SwVOYYiDTWE^70(u!`A86P*2iZai9?pV48-{yUCV9Ec?o@;sUjk=1>cAm88uY+&dR!6>c{!;b@zv}ZnqTHCISIq3j zrmRZR!4J?JEO}MEgUxOYRO$OSzfMm1HjkLN%MA;yI5!rveWW!)Se@qKRd$^E(bb#N7V}{^w%jXPw*+ z6yhxKh%9Dc;5!7ujG`J|4M0JbbVpxD28NCO+UBR8*c(lVeoYIb6Mw<&;$UDTwkjI diff --git a/deluge/ui/web/themes/images/yourtheme/slider/slider-v-thumb.png b/deluge/ui/web/themes/images/yourtheme/slider/slider-v-thumb.png deleted file mode 100644 index 7b3d7258ada4c81c6fc060bd5eea69524f0ddd65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 883 zcmWkrX-ty`0R50E#}rYbBu=wW5C%9+p|mz^KUyf-HiDg2qsADUdFzy5J(6V!F6ux{ zaM+2OO$`xO3Uq)R3W!vwP+G1+0l{9h^wh2t1P1Ecw;%7wOWvRN3Pjo4mW8hgCkSGh zfX~}W=_U$Ep}`bKs$wE3`9_+#SDKM~L?S(L_6#XL@#7IfeEd9_vW3i&r8Rg-rR1}uO-*=86B3}KEpj8RNJSwCe z<7ROQqPp;lkCMd%5%jZYyEu~r&Z91X zf9j@W8dR9k4|L3<$&YFmJnu7Kt{FYwd>r5Rl|w2Y#50Oj3~YoXAgst?bG&}PJ#5B*LU z{dhi%PAi5yumtc_57k?YzK3lZCO;fAuuj1>3uQ0r2GKeOg9r8x@cfIq0W`lshXs93 zIA`IVN8>P>-au=Idk*gx@Nx_tR`fbB@($(zCT8GUfYt`J8SN(MT~J+7{6rlSB;A?4 zi{Lm$j#55Vz~hQ9js9@RB1tFCELoIyqu@p3lls?9n^{Tg3m@givo8E|x9G0ECUCv$ zW>S2Nc)=b`i+*yoGx z#+_e9u4`NQ<+fT+t3SUpVSIPU;$N@*R&qb?%B_=I<2M+#S1hId9!oIRt6i-(mIr+o zmUzJ$m2>{w#i(h~Zhb8&|6|8ij!3;n-D6VqYdY^0h8ofXcZ&8bNx3$};+3(67|G0C z237+ptgBK!Xd(M@Vq?UoRC)CgD-;F^C*wA|I6wb-VmZG|v7&PSfrH%d3oaQ}7UiZq zmftCgdwjomxq$gFHJCdQ+PZ_EoJLm54s(eZpwB$-?_*CEA{yP4?kaf^!fVZ&ljHjyZH3qg@$%oTSO4z3`gia3-v=)~KYIE3!JEGi-~N64?(ft0f1iK&`{Lu@ zSD*gA`TY0Im%nen{QdCl-?v}?7)HTp2+%PE6o0ZXGcYhQ=z#15;&S4a5oxH0SN zs>{3yhr48VA6(hFIb*xfjjnHNf_V!bACgrtUw2uk;$t4KK*H+yJ${-Taz2a<42PQM zPKxkJ(vROCEp9#6VdthqhN;HZya#U@-alV!X+70p)|aQ38N94n84nr1IKF1C+YDL8 zubH>}>|d1e-fGQTF3`ljJvU-UF#ieLincdQJ1?_cSRCKycQ>=`^>ta}{qLqUet*xy z)BNWDJCWv}pR=~lGk;&w`1|`i_5=0rzcl^*E&k`x_V*!;|Nk?vt!M}q6Ulhc$Px7* zgo(%O#e-%}i_n8DB4HVctbU3M9=6GpbuB|t=_ytT&nMMP z`uTi9#V?DDDUEfNEBackRz9EIx$NhQITN>8zMMPtSf%EI+Fv_07qYUjFjxZs<-Km4 diff --git a/deluge/ui/web/themes/images/yourtheme/tabs/scroll-right.gif b/deluge/ui/web/themes/images/yourtheme/tabs/scroll-right.gif deleted file mode 100644 index 4c5e7e3958dd31d9591fb86b76bcea760d402589..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1300 zcmZ?wbhEHbRAJC&XlG#XDOwU%v(DkaLssvulIcf!H$6UdwB$-?_*CEA{yP4?kaf^!fVZ&ljHjyZH3qg@$%oTSO4z3`gia3-v=)~KYIE3!JEGi-~N64?(ft0f1iK&`{Lu@ zSD*gA`TY0Im%nen{QdCl-?v}?7)HTp2+%PE6o0ZXGB7YP=z#15bKis=idlbh4oJ2jiQWW7vW8%1R%X~mwJayU>VV6oTSu17E0R!3~kx?Aw2 z<@$QPLv^y%A^2nhXpR#NS^OQa!}QC!nD7;IO;8 zMx0HeKEtuD{z(do7CH|P>8bhKX)WCR_&kGEx1E$yOZVv&hST{9O`5VV%#Yn|$HjEy z<(27&ui0@eG=H;qZ?pX04-d`WZ8%~tlY3xKCG+ufGv&WNSh(rqhAS)OQxEL5Zr*!u zxBSPm6AoHE-0~gh?W8#ltoZnb3pn3T+xmtnRW2k2*D$RU8Q9-}2&7w}D*% z12@~1jK{qeQU;5eZN9yD+|MU+!Ku&XmWIj%k8c_&6J6zIs!Z}Wnz?wg|38VPQ_O=R zmrim{nwiQS9d&c*bki)!XH!#V?Npr=w<=O~cEqlqDszHP%~YA|bBpuojLarUwdpBR zFQ3nM{B-l#g8D}{RTia7NvSW+wu(|;lJ7N3eQ9yjE{%mYT3$=$IaFDxF7sq#VXy`O DM15!0 diff --git a/deluge/ui/web/themes/images/yourtheme/tabs/scroller-bg.gif b/deluge/ui/web/themes/images/yourtheme/tabs/scroller-bg.gif deleted file mode 100644 index 099b90d8aca10ad0e0a87552e5eca975a72f985a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1100 zcmZ?wbhEHbRAvxkXlGzB3f<)J-=TNYo33`GCmeE$39%ip(O{=Nqa{`~*` z?|&d*7zLvtFcd;S@h1x-0|O(24#=^fJi);6pMjM_#$&^RgUzhWECL4>ELn-DC~RnIVicC$7cz76!_!<$ z>JQ$${Hzu@UzjE8z|Ms$FE5w2*ptE~x+;X5$?(CI16#El)=4dqV*M?ebAwTWCGCLb z!rW*EhC5yYr?2V8>?~$a3FsDXisvX`{L|_%{qTbW%}d{jE|}`vc)XF(rY@$UsPV+) zrOQ%#E;pnzH`+^U=vaM8Kg*>5z~#U!(>vEVxDMCxM!#ZRY9ajM9&bW<)1iIUzyH}X ztY+Y{kkp7jH^=eevkOau1SA?YzdQ|GUUZ`%w(=VXldOd1+nvQV=ceVVf8Tof`}V7UcV7Lu_vY_|cfTII{rlwo-)A5GzWVg{)n_33 z|K{`GH(&m~{qpzyxBo!EFbYOPU=W9Z;!hT!>;5z7fZPbm6AT=|49qGs6ec`4(8R&7 zWpctG@o+1jveTR&8bSd<0UIDB9_$ireT@Wf$*vuBf>3d;uuMTd5FMl%bJhJ}p` byxeRN0S*aFO-%B91_mD*nV1VVf8Tof`}V7UcV7Lu_vY_|cfTII{rlwo-)A5GzWVg{)n_33 z|K{`GH(&m~{qpzyxBo!EFbYOPU=W9Z;!hT!>;5z7fZPbm6AT>x8PqvsJT@#i*vuiU z6?0<4!o%$X%3gCkHZD5aEoRSf;Kato$NLqWyJS2!B{ngr2Cs@axoPR?Y3lK(=6G&i zc6O>^{;NADH!nXw$F7-6)@zIMg+(5dwPLGER$g8nkZIQIwRKf!fAIROyQe}EudPcs z9QRji+nSq8QqHf6-EFLUdwW6Rq8{(<>tc3SeC{e)y?y=t)|&rZayE(v4-Z%JD#yu$ z8$LdsCF?v-Cd}yR=_uXgdorQM&(C|=Hp|(Dn7q7fhzYodz&w>VTjrBahiCSe0-cybJ4R4j(HVwd#&8~uB^?Te?#&2xA%OzoBzw} z2R5}c2wYkne}3QI-`_txK0V)m|GvM!e|&y@|NQ>_|NlL=Rd~?AB9`%>kwb08gC-uc z7Y~{R+%z7xh=gT4Y!xeeexOaJ?8U=&g*J^x9V*i@9(8IgTk)t%XWNTM-3I$CVwp{@ zWjyY+c(&qkpUt-ykNX|iG@ndx5zBls(L=3Mg^f|?!IQ}WZkkW0goI^2of?t0^69jg zvX@V%C$wokn~{{I(7=?jY~{0AIon=7n_X~B^ZA^TYnjjIRyp5UhSa>TCY|tnU?ix<%(si zUaeZQ?bWN*8;-eiy=G^vNqD_>$Fo(h*X{ZC>h<~qY}#)&91+WYv+;!5>NlHCNgZHd qxZtM!cFUEp?6+HQq^*9t?M~V2x7#1IX}{a?WSX}gvj__dgEat$YLPww diff --git a/deluge/ui/web/themes/images/yourtheme/tabs/tab-btm-left-bg.gif b/deluge/ui/web/themes/images/yourtheme/tabs/tab-btm-left-bg.gif deleted file mode 100644 index dde796870137f9f9e091100ec800072498b64f80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1402 zcmZ?wbhEHb)L}GYXlG#P-SqhEz0a4Q{k!+(?}K;0UVi%X`tzT6U;lpi_V@FTzh8g; z`|4|fnTJWlvlbe=$Pt%A$HOF)Fva?eR z^IzRLxmo@E9J^*NS+5Y~3yVA^Yx!1{th~HDAl0nbYwN13eZlLq?w$%wytXdkaM)k1 zZEJ2WN;$tOw%SQ_jCSclKT^G@bGXMuX5aD#!Z;nSXxHI@h^gZ$rb^*Ecq2-#@o^_xJY?4tM{T_useY z=jRufSI4i9ThRFZ!{gKQ{rB(t`}@b|*Z0rw-w!MY*fbtAu<&VIVB}C+@t}#v?8Sp- z0XL0@Eh1qV4_hVDRy=HzDLb*yfulv^QHRR3j7Oas%T_$<(%JUnQMbV{jmJGE*D{iO znN$}%?z8#!;&HzNo92@VE@GKaCVHr?d@{+$?B$cmeq2iqObH3gd^$BEZROKxF=a2G zPETmld^RIxTIREv8S^wRFy(A}`D}K&3zjwN)<`^_abSv3P=;*2^VR!m?g2osqUGa~YHAgO|$}v}wIsv1D4-tCcI3t$MX; z&9+ysR&O{KuJwA&CMJOf<{i&gy53p&!*>FTG`_0A^YOCLDI%9Tv4Z}7o z?YCR5gk`_odLwQ1+6^oY+y}NlXw!bT^!xwa?EmKT z|J&;S;_(08@Bg5}?dtXa?f3tl!0hz=|JmyP;P3zB^8e-Y|EI_Co4xAq`2W}F{hGY$ zjk4q5?)u;D|MU9)A^8LV00000EC2ui00RIq000F%ARq)HIhN?DnrzyxZVbjHt3>W|e1@Q4~3<(Tm;RsAF1q~rm=nyy|06T&;ZRY?0 diff --git a/deluge/ui/web/themes/images/yourtheme/tabs/tab-btm-over-right-bg.gif b/deluge/ui/web/themes/images/yourtheme/tabs/tab-btm-over-right-bg.gif deleted file mode 100644 index 45346ab145a9f4796dfbebe62d84c2a785e16b21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 638 zcmV-^0)hQUNk%w1VJrbM0K@goS5=hKY(MPoOO23|ls}S{n3*z{nw_2~oS&kfp`)glrKhTo zsjIGrt*^3wv9q>zwYR!&xx2n-y}!a?!NbN{#mCB1$;-}9JI~T<(bLvq4b|7%TNc{f z;8YRc;pI&e(BTJr4xw7TUm@{kM ztU1F10-!^S9!C>oFt6t5zwd>cgW6PdRyEg3#3kK-k&AYen-@tJ?|=UP{`(&Y7)HTp2n_uYQ2fcl%)r3Npab#>C{HkO#4<3m zSU7BWz}U#Fsu82{@Bt$ykATIDjt0lW%z^?U8V?ebn>bh$O%xm^r7&}_$QvXWEO>f~ vokdbbz+rM46PqC~1H*!Z<&1OKC3FlnEYJv?!yK*^TN$w6U=tHF6N5DXg62z6 diff --git a/deluge/ui/web/themes/images/yourtheme/tabs/tab-strip-bg.gif b/deluge/ui/web/themes/images/yourtheme/tabs/tab-strip-bg.gif deleted file mode 100644 index 34f13334511d9d8efe3dee18e6f69f3d1277f8e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 835 zcmZ?wbhEHbWMq(HXlGzJee3<1+wafb{&4orhjVv6oWJ|w!rhM-?|r;<|I_6MpRPRk zboC(+eZKbS^YurcZ#@2d^U0T6PruxL`t{DUuXlmy`PX~TzukZFjbRjwhQJUE0mYvz zKv(}~&;hv}lqVQC6d3d)RyZU!wQvY1*c4o7ILO4xDIjB!uz;bFk%@_cgM+~u0EV(m Avj6}9 diff --git a/deluge/ui/web/themes/images/yourtheme/tabs/tab-strip-bg.png b/deluge/ui/web/themes/images/yourtheme/tabs/tab-strip-bg.png deleted file mode 100644 index fa8ab3f462f07ad14c7dbbf76117118a302e35a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 259 zcmeAS@N?(olHy`uVBq!ia0y~yU~>SnxjEQ?q`I@C5s=a;ag8W(E=o--$;{7F2+7P% zWe87AQ7|%Ba7j&8FfuSOQ!q5JGBmO>HB!(uFf}kZ+p+j0P#=4Vr>`sfH6CexDft?u z8*)G)&H|6fVg?4eLmeKJnpZ&P`;>Yb*KkvN$ zdGGD72k(9{jDpb+7>*&J_>%?bt^W) diff --git a/deluge/ui/web/themes/images/yourtheme/tabs/tabs-sprite.gif b/deluge/ui/web/themes/images/yourtheme/tabs/tabs-sprite.gif deleted file mode 100644 index e969fb0b7338c81f8e22e3f69f82fe49fb9b3d2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2120 zcmeH`|3A}t0LMR@Sv#(pzRU-6RFY!pi@u#ZcG;OPS3Isuz7>Quj<9+o%+>iHqydKXVUq3t_j~CU~d;1O=3^k%I zK@b^`uT%}+t{?xq&)D9te$_uGl4xEH&A%Shb`ERb%I3SIy7w}@coY$jfq&$NZiV54 za=zztL9f!-HxBy8kpUIxp8ygSBAEcv31nyzNTM!e8%TbKsW$>0{H=_AsuJ(WpBfSg6Eg;XE65o%BUvD{bXEk zOXWSPEqo%A=v#Hal?Wf>hPPG~`V-;UmYcp0i`uPV+Gua_+QM z+jV}9XjM%UXVRS6?YV-3@6U&nCSD1PY#jK)GL$I7A7l=yuRmuXLlc& zu@F~vWI*)H{TFEUl1yM1Q1?`aK~Y?SJL;YpH0EedBw1L87_?THz$uRK(*dzsGDIRr zN|-oDu000xBPZXiMrBDev$%^N#95@_X;=$Cd;!|xEBsJq?XSTrf4yxQ8O3r=d><9( z$|fA7Z?+Cv6}4?0d(}aA(YxVj&me;IkXQF!hcK$_x&zIB`dxH%z}@AAET`IkY#?-W z$p}0A^jgNzrjTXz(8BD)vKw(l9~dVr_zGG6(PpcLQ%k!J%WoygcA%1$&nV<~7}(J7 zQY@FzM+-6?Q<$mNZpzVnSG{=+X~duCio)EOmnf#~Nu{EgbFmx6bj+qJOSnb!#x$OQ zx309J8HCcIwJqyPQw7b|^|;5i*7XaX39QN3hPrj%RhD2mP!*TgGF~F`a34c;?haG& zx`J%V`8^&zq=y45Z4xVov0;gS$z^#J7eHm)^lR+#H!Oo9khi&`&-UgmsGutKK zo3JG{IQG`S`*8EoS+V&=lHg5rPQu)WxZ?7;?)XQlxt^mhNSa=H@?lM%-@f~@{?s<0 z&`1vYIN) zra0~MyiReB6<(**9P7x_+-5Gmp-umDajq_{K$xRXs*K1n9B%+@W8xbj8=()LXV1q> zMX*6MN)n85BA`R-8Mu=o%`(^n`+Em-BweC&$n`L*==eqTTw-v8Jr{{O(q~Nu5lXI5 zOmaCba9#xEHSd)AVCWluTNGO4?WKyhhl1J$ll<_EGTqg0SK=TsxEO4=3?n(>GxLWT z+Fs!J71z|k&D@lenZG({BP+%iMQDqn^!^rkIa&w7FRn2+vc5;h@EPdNBxq}`#kPbC z!!{vHsb7oUY(CXAY`Y?h>hbZ|hI1IH9cro1&PAQB85HRX%{3qI^-El@T)1yD;q6N* z*pLx1l<(NiH$fRyS&5sN5QggKUQUKG{0r|y+e1x{I|Dc3>xW_#PS&{kV>SHjg&6$f z11U-@noGbjlFRoKHs`+Mp*9sBYCBRn9lAbP_HeiTu9##_UP~ji_3{WK0b80cM#ok+ zttB1zXuJ7p=bEan)?Gi(v2G2VjIEI9b|-hUZmaplWs}LP1I{(G?igl@OCfy#Q^4Yw aY~k|oDS;V9tOD~>PCR>kAPR$l-2Vk@&nw{o diff --git a/deluge/ui/web/themes/images/yourtheme/toolbar/bg.gif b/deluge/ui/web/themes/images/yourtheme/toolbar/bg.gif deleted file mode 100644 index 0b085bf24e173f7a2568c347f3245bdaade1579b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 904 zcmZ?wbhEHbWMZ&jXlGzJdGqb5TR`;g^zCwCTzUXRA1^)paQWfKD-So0~;Fd71bH3SrYvH+d-pFs!YKv14w;7Da~Z1~~up_!du)~evahJ_E= zc%_Uy&NM7kYU38y$=KqsP`Q;;Sgxby!h)1$R&Ie6E(r^kHZrktoKP`HXkcJuWMa6% p$*}A^6FZ-Z#4LwKrYSs=j0zqwFtu<5D0@r@Sh(uyYDPu|YXAnXewY9N diff --git a/deluge/ui/web/themes/images/yourtheme/toolbar/btn-arrow-light.gif b/deluge/ui/web/themes/images/yourtheme/toolbar/btn-arrow-light.gif deleted file mode 100644 index b0e24b55e7ee53b419bdd5d769bb036b19fe9592..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 916 zcmZ?wbhEHbQ@i%X_#s+qO5ao&#Bg}b_z?(JW>fAX3`Gd3KV zv*q~0?WdOQKC^1y`Sph`ZaH>k$H{AZ&)(dB?ha5d!zdUHfuS4%ia%Kx85kHDbU>Z} zernn7GpqKUUw`Q0mSb0ToV>R8?9Kh>?)?A%A85cR7!84;8v=?yS(q6Z7#Vax zUI66@296R2W)2yT4GRu7a|mm>STHs?w+nNawPX}9G%#|o>fAZ8aq;nf1?Mgq&rM5C zPSyxs6?1aa(*sN*0#Y579~gX_Ir7AO7EE5yG(%Y4FT%k%!-dUUH;Lzh!*aJqzAC;N dg;0f-Rg6jrr6;$pzP>);aF?w2wgd+TYXG#xTAcs@ diff --git a/deluge/ui/web/themes/images/yourtheme/toolbar/btn-over-bg.gif b/deluge/ui/web/themes/images/yourtheme/toolbar/btn-over-bg.gif deleted file mode 100644 index ee2dd9860c799be6dc194b387c36a953c55aac59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 837 zcmZ?wbhEHbWMoKTXlGzJeCy}&J3mj~|8@T1uggzJpf;!hT!Z~imrfcyl?6AT{b$et`3#gN7&v4Zqzw`_ELgzA$|)pg(Xe14 SBQvX#kb;4O15gDcgEauAx-gUg diff --git a/deluge/ui/web/themes/images/yourtheme/toolbar/more.gif b/deluge/ui/web/themes/images/yourtheme/toolbar/more.gif deleted file mode 100644 index 02c2509fee0fb4555df61072d8e8daac8dc7430e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 845 zcmZ?wbhEHb_??HKjfkTUdnM1~7 r!-9j&9Ku>L9YCQ*K7KbIgN+Z4bP31@U9tF}++`ynz+epkzXub1 diff --git a/deluge/ui/web/themes/images/yourtheme/toolbar/tb-bg.gif b/deluge/ui/web/themes/images/yourtheme/toolbar/tb-bg.gif deleted file mode 100644 index 4969e4efeb37821bba1319dce59cd339cec06f86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 862 zcmZ?wbhEHbWML3xXlG!!aPPx~`#|*Z;=Kx_O l3y+3|gN`0r3Od0)xY0~Iq4Rm?bCJ?B`>oTK&gPd3dz*}CLR%aU_l zD=ze`x;$asm5J-FP1|y7=C<4Oc0KGp@OARxuQQK*oqzJ{(lcLIpZm7u8ukxPurZ-YfblWU`p4o5&%%PX!%{-|5oZ<}b{tn!>Yw4W=u^Uq zQpF50j}MM*?7gx+W?f1zJDKabS=0$Rg*yZqflo?c5Ixr^dQ@Bde4NjsFf-c#W=%hte#Xx8144{oy_EOnT}e!Oo~L)&NLV<%|FT diff --git a/deluge/ui/web/themes/images/yourtheme/toolbar/tb-xl-btn-sprite.gif b/deluge/ui/web/themes/images/yourtheme/toolbar/tb-xl-btn-sprite.gif deleted file mode 100644 index 1bc0420f0f0e30675a9eef74adbcb55e3efe9d00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1663 zcmd_p`BPE}00(e9$fKOV%p>iPJj&c%bKS|xcC^ftT+_6&bQ^Q1v0|HYZH>xJ<)Pwz zJ{2=BT=7g3OVbPx;Rzm~c$*61k!dRMUNt+7`}{lhJD>Uf{{7*5&d1C3_zfM5t5zZg z*DM_almg(yCS!GDY@;y)?seu{c7h(Q&j zgny%6K+jMmP;5z0Y-vv%s!SALDvB=?$Crz#U$z654p0@{`RiKu^2 z14&f_^ePFRB}v{QO|F)tR7+E8P=l$c+QGEiq4e6Jw7Q}6I#~v)9yOfNFq~OGocVGj zt6?PT&fvmXJUF)t2KjJ7H_Q;g#SmQ5 z1DA>53Nc*S3$yy*ntr%$0BMjQ>>fpnXzn#itbEfu-`cm(hU#B@JFwI)`Pd=(_)fa~ zZtzp*(8~Lvl_n|DJczUmA#Y?z+c45Gigb=49N8*o_%nB8jW@E^HM-6jM|cwme{6$4 zuIe6F2`1FtlZbFqBbs8TgLuNs?IjW4Js7St1q>d8g*)ROwcN6j>9 zSu?Y&nf(OIS6~Hd6`or~l%J7#)Ecs|_GNMX3+8_r>uji{Y{M4quYv` zK1ZlvHoGPY*j-7ev-=+W3ti~ob1cXsIm=-%B`70^8A;N(lJ71^2VXz?dPh4Tu$GN$JgLf z{3za}WGW%h4420UW0~llVVYVIXr;Kr+JF~!z5KiQkXD$d#isr)hd6Wp9fH_M_ied= zbBRO2H$dKNZxrE1@t!jP7=AW&Qn~^8e!TYHBDTNK?x(Rb1Ec7OaGiY&W#c)!Q|oa) zxR@|!V1K^37G&$K8%{T-20M=%Uw4vYF~9N0M5&-GxF;=F>DrU-MpPWMarYu94|<*m zCmr;5E>{wK?G#LcKY>tb9dwxj<f_U;r4roZGa6lchMQo#=t2JlW z1rrR`MBfun)4u2}<(LGzxnp$QfVUwDi0IAGB@ z(YR^83IK=@3&2sHp2BJ>i_4GC(}I&g&Z3hSEU z&NlR)MYGw$S*eL3K?x;6chQB>jr0!$UUa!Ir<-f7mDQk# zBwX&silB=a;YFDn76zFmv)QzrZEk1V*~{;o^E|)bI{pWJ`S9@Y+&;Y*FLa&mKg-o{ zGXtE#VCd`XtN%z$v&7^lt+S-nPx^l-H-oChVzFASZnt}UeB9&lc)ebq&o>x?i8W;+ z0x#DTPXs0f@Cq;`sILTdDyqJY!dp!Y{CJS@QVn6G|s1BUZM+WbuojB z68@5KNy4B6%MygL5X|E591VxVu~;mTNF6 zT4fpSr~#G*mQx_FYA^?^pdwK*kF0=+VKowA?Or}MJ76DP!CM%*AD^gZu#s95A z(UowVnQP&+Hh#jD&D=5%-X5|Hk63M^_B)Qd&U>!=55^uodhEK?;~v?6`RUM^EeD?u zRaBmERc*B$=XEu%J!RdtiuUaXoK+lWJI3$cRO{Tq^PTU^ZQD8=zLF2tqkLnX?vSIJ z*Yl=;`DA&!eg2!Rd7-JEKVqNJFP{p`eI1PmRwLiEcXNZi?S{R1W!QA>{Vrp4!M?Mx zj_=e@PDiKTTrV5^*>fdcRasKn(y`S4;=E(uxo1t%_l&bzclc_ccC0io_oQne9xONN Gx$b`#5UBhB diff --git a/deluge/ui/web/themes/images/yourtheme/tree/drop-add.gif b/deluge/ui/web/themes/images/yourtheme/tree/drop-add.gif deleted file mode 100644 index b22cd1448efa13c47ad6d3b75bdea8b4031c31e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1001 zcmZ?wbhEHb6krfwXlG!sZ8LT1HFNH_aOtsj?X~gjxA*9E^z3&Ep6U}i%{O4CWB5GR zxH(~o^CD6fgr+PAPg@j`zBoE{b!f)w;OtcqS!<$mRz>A)jmQU~$dc{RCEH^Pc0?BK zj4s|4Q@Ag_Y)yK_x{UHY2^CvX>NjQ8>`JNKlUBPgy>f3}?ar*)o!Rv}a|;e8R~}5M zI+k5?IJ@p(X5I1prmcC+Tl3ns7k2C@@7Z0}wX?EwUq$b}>dE`-8_$%sovdm*S<`y9 zvg=S~|DoE>6ZKu^Yp3pS>N(xmcc!K9QuCyv4O0&^O+Vf`{Y>lRvmG-|x6L@yKI2T+ z?1R&1ADl7ea@VxWol~!LO}o-P{c88ji`{c?Oj>eo%Chs*mR*>(;O5i?H>WMVJ$u!a zxvQ_tS$1N<@{-~Tgx`xUa|S^%B{CoY`?W?%iUF5@2}Z*cg>Eg z>v!B;zx&SmUDr15xw>=vgZ29!ZQJ`~+mSmvj^5pQ^4^hC_l_QYap3f`!)G2GJNw}H zxtAxeygq;Z-KCo^FW&ihj$;hsoH8C8796zp$T+b>@c4oQ4ptl9{CxcUY?nYS7uzPr^nkf~ zF-KnfWK`sLl+9v^jSOlzC8As$;v$iu&bdH0ut_86$zxX@GwwqiGMCbLCdz4)g$X=7 zcxoaWQ~HIKhmx0vy2>O}Xevx#ky5l?_wGr-qtgtHrgJ}!+;FF#5#6#i2*%nh> zyAFx!#AZoGf3_x%!Zyuz9to2P8w(l~c~334oIij5|Ns9CqhK@yhFS=VTXXjp>_!!i-ZjhjBP9&d=d&P1P-@w z2*?REbZj`-z{teJvFE@96*ex`7^N1;;s=LXIk{il(fr(WZkkH%E}e=3)qp;}RJS=1 ZACr#t%8J+VSOzWgoT4>ViN zU%dGJ;lrOVU;h61@&EsShEXsY0)sdN6o0Y+UH6|s2joUjo?zgZ#9+@MbEA=|m5*7N zuP1?_;V=Wcmd2kAjEoFSyb3l63JeWQEzG)l4<-aOJF{^!n#_11;LyO$#4EyJxnXG= zBd1*n!vlvz??xWBngt9APKV|*$upc#SeW74&N(&d!GU0fOO1}n=k{oQNISc~334!T+I5ReJa7x*DTyS#YWmWQ8@*yChwS&o6 zrsT(mM-FYgx*h@@4;QobG08Hm@c7Wg%*HKZQ}Uv~iG_ooBg3QNK|^B;FB^}5K!V!o j#pc~334eSRT}sa)VS__s8w&@Y zgu;q|!z~;Fasmw<8xA%wGBG*Ccx+O2Y*vXZDtTe_=t!5iao(F9ACgZ@)bm{w(wUgh k*e9SZBf7&RvvH|ppWc*{Usi^4=^EOswG7BU)WBd303hyMjsO4v diff --git a/deluge/ui/web/themes/images/yourtheme/tree/drop-yes.gif b/deluge/ui/web/themes/images/yourtheme/tree/drop-yes.gif deleted file mode 100644 index 8aacb307e89d690f46853e01f5c4726bd5d94e31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1016 zcmZ?wbhEHb6krfwXlGzhFH%vfSJo_7)vQuAsWC9EH&km;*6LR^?KiYxFJMjooS=wa?sdwqwu&r?{0KDI0upwuR+x56{~g zkq<(VSvvztwnvw2k15z6Ua%vwaA$PU&gkM@F@^i$%l9PIZcnS(l~TJWt#)5}{f^9- z1J*HzZPSi=W*zp-IqIEx!mH#^WYOu+{6mTPhZFOT08vuj(d7JNDFp|U3y&lh98WDi zo>p==rRYRP$%%~86B%VEGs{k8RUS;KJD6E_Jiqc}cGa2O`cnnX`*Pb46}28MZ8%lj zaHgpFTzUJ+%FZKY-6tw0oU5O>vwy;#zG=ssCm!gZcDil)nbs*M`lp@kn035;#_6_M zr`l(nX`gwvYwo%3nHRffUg(*1rFZuAiSsW_n15;F+#8b?UYok``qahOr>(v;d-dhn ztL{u+dw=%2>kHRkU$E}Z()D+iZN9m5#o~d_ub#R;qm;f57%vfxPJS?4f`H%+y8jS!N=PUJlT2r&He)i4xD~_ z;M%)OH{V=&_T};0@2@}p{P5-1r$2vx|NZy(|Ns9CqkyasQ2fcl%)rpgpaaqk$`cG6 zR~e)^Wjr=4aC9<_3F%-wzQDoVIAhB~=k&AfoLyW-Re?t*%+d(FBC_aGf`Fq$D3_+D zkjse)Dz(dOBqZEh6jdE-UYxkdEGT3zv4dmE!Dl=ZWi9e%{1g;@!G-s^!P$| z8==@$AR3<{5^GPA?~^>Pma%d|c$9FpHZ#?|? z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$lae%R5x_+pfh=9;jCRWxkA&~=x h2Yp#A(~SZe4mdO}wqloSIC&-M@bZAgN<174)&TX)MQs28 diff --git a/deluge/ui/web/themes/images/yourtheme/tree/elbow-end-minus.gif b/deluge/ui/web/themes/images/yourtheme/tree/elbow-end-minus.gif deleted file mode 100644 index 9a8d727d70ff5161ec18c0cd0156ae8d50a23b75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 905 zcmZ?wbhEHb6krfyXlGzB^h$R6?=)rU-Z?Z#?|? z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$``4~=2xoOmJxRJ?YUCe?7 p4c<*mc6tvw4?K5dl1^^H;N?iZ| diff --git a/deluge/ui/web/themes/images/yourtheme/tree/elbow-end-plus-nl.gif b/deluge/ui/web/themes/images/yourtheme/tree/elbow-end-plus-nl.gif deleted file mode 100644 index 9f7f69880f48db8d86785639055fcc198764617b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 900 zcmZ?wbhEHb6krfyXlGzB^h$R6?=)rU-Z?uiX3i z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$uiX3i z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$y4*XmR1y>vzmpih{E$}o|KC(Juvl9;ogEauy5=OfK diff --git a/deluge/ui/web/themes/images/yourtheme/tree/elbow-end.gif b/deluge/ui/web/themes/images/yourtheme/tree/elbow-end.gif deleted file mode 100644 index f24ddee799ccebea4dfe60fd65a5703a6a59d44f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 844 zcmZ?wbhEHb6krfy_|CxK^xx^&v19*7!DtAK$PiHc$->A01UeuBlqVQCG#MBA01UeuBlqVQCv>6yVWIQ%3 sIM~R@rxjCSpm?~QTh?igM}U%RmzciOnH3WikN0ueH<|n}RA8_M07ViGB>(^b diff --git a/deluge/ui/web/themes/images/yourtheme/tree/elbow-minus-nl.gif b/deluge/ui/web/themes/images/yourtheme/tree/elbow-minus-nl.gif deleted file mode 100644 index 928779e92361aaebfe9446b236d95cb64256e443..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 898 zcmZ?wbhEHb6krfyXlGzB^h$R6?=)rU-Z?Z#?|? z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$lae%R5x_+pfh=9;jCRWxkA&~=x h2Yp#A(~SZe4mdO}wqloSIC&-M@bZAgN<174)&TX)MQs28 diff --git a/deluge/ui/web/themes/images/yourtheme/tree/elbow-minus.gif b/deluge/ui/web/themes/images/yourtheme/tree/elbow-minus.gif deleted file mode 100644 index 97dcc7110f13c3cfb72a66a9891e8ab3ccef4a98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 908 zcmZ?wbhEHb6krfyXlGzB^h$R6?=)rU-Z?Z#?|? z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$``4~=2xoOmJxRJ?YUCe?7 s4c<*mc6tvw4?K5duiX3i z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$uiX3i z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$y4*XmR1y>vzmpih{E$}o|KC;?;W0q*gYXG$^NPhqT diff --git a/deluge/ui/web/themes/images/yourtheme/tree/elbow.gif b/deluge/ui/web/themes/images/yourtheme/tree/elbow.gif deleted file mode 100644 index b8f42083895bb98276f01a5d0e33debddb3ccf1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 850 zcmZ?wbhEHb6krfy_|CxK^xx^&v19*7!DtAK$PiHc$->A01UeuBlqVQC^cfgAWIQ%3 wIM~R@rxjCSpm?~QTh?igM}U%R7pF1PhKh>{$NPBfn?f{-mK<+pWMr@g0DWQ)HUIzs diff --git a/deluge/ui/web/themes/images/yourtheme/tree/folder-open.gif b/deluge/ui/web/themes/images/yourtheme/tree/folder-open.gif deleted file mode 100644 index 56ba737bcc7734693d7ddb2f50c8f3235fceacee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 956 zcmZ?wbhEHb6krfwXlGzB^h$R6?=&-=aaIP?oGg}kIcy8^I2ILfEiU9P24$!>3v-_@?Pw@dZdEXiZDqz?6KotSEHa+=}k8OCR3nw(sqcz%)E z^&Jkk_UAm>?EL6pz~8F{|8JLmcvAKMN&S?id*>|OyM6oiIctwC-Fj{1-dlT*9ou>8 z$^Yvu|6jNKf8Y82L+Ae=lmGvp`Tzf%|NoaBIdbIa(W7V2p1pYS;<0P5Z#?|?{QdXW zpa1{*{pbJx{|uvGGz2IP0mYvz%nS^S3_2i_KzV|JV1OfBquQXEGvI4}0>6q3BdQLvD`XSzZ1sfd8&rn9pxa_cf0 z8;-R|sQDgyVbIvhINu@p(3Fo!OdU)nOn*uow`yILl(G@%_!WGtV|{}AnFkvZ9YR(b rI<1IZ9mc}SXv*Rj;4nR}iJ6T{KqBGLF$ZZACT_Vm-ya@qV6X-NkKMK> diff --git a/deluge/ui/web/themes/images/yourtheme/tree/folder.gif b/deluge/ui/web/themes/images/yourtheme/tree/folder.gif deleted file mode 100644 index 20412f7c1ba83b82dc3421b211db2f2e93f08bf2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 952 zcmZ?wbhEHb6krfwXlGzB^h$R6?=&-=aaIP?oGg}kIcy8^I2IRjFD>R>Udq3sOkj1T z@R}--bv0re>LfNdN^fnF-QFU)=hNov3pP6ZL zdwbCB?S=oZs*|No!)|Nor- z|92fYaNzXm(`U|{xqSKZwQJXoU3-1w;m7CizrX(c9|#ym!DtB3CIl3JvM@6+Ff!^t&H2GZdv-WZP}~tRj*oB|LorIYr@vw({}!uwfFDhO(&LbJ2U^lzeR`sUwH800T8|T z00#d*{P_PLi2nZvyK9sf4FQ^mfZ|UUW(Ec>1|5)1pgh6A(Z?XlA>*-O!NF!$M-7&b z2M@Kd^GWGABrIrf5YP;mqG0Ic!oef1<ENsed*j@4Yk?RR_1qN#Xfm)wA diff --git a/deluge/ui/web/themes/images/yourtheme/tree/loading.gif b/deluge/ui/web/themes/images/yourtheme/tree/loading.gif deleted file mode 100644 index e846e1d6c58796558015ffee1fdec546bc207ee8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 771 zcmZ?wbhEHb6krfw*v!MQYQ=(yeQk4RPu{+D?cCXuwr^cCp}%d_ius2R?!0jBXnAQ) zOH<|l|Nj|aK=D7fpKD04vtxj(k)8oFBT!uNCkrbB0}q1^NDatX1{VJbCr|b)oWWMT zS%hVC ~NwO_yO%;SvZ5MdNYf|QNy-I*%yJaj+uTdt+qbZ z4E`Fzb8m}I&!N8OKmWEcCmrLs^Hs&3i)mt@hQVdcqghkaBs*D}tG_lKew4?rTjzIZ z9tSone1TS+TR7tu^CunG)Y7Jg#sw#)sG9C!c0I%LEzP)9;hqRf&)s$D8d5Db{TBs% zgl0~5QQ91luq4Q9tJgt4QLbaxZvAaKeCM9!oy85dg4k>TdBSVqjHub_PG=PO&J-rx z7oYTuF+kH|tG-UK+EkUhDjYx?zW?T|lx>+aOQm zzL$v$zBLo4Cj=G&tw{H}dW?tlTkS)SY4<#NS92z*EY-MMB6Ftp`R=*=*Ev7cS+X%W zMCur^FdlokL}1Y+&aasU2J4#EOuNlnb9CmqgLCGTSY!1BD42pkHY^XidQ5=>YQx%` z*%Pm9D!CkBu&tMWm(%-ejACVWGS2RX5=QOJ$1*tr7F}F+*-OA+Ly&Isg|AEuUYicA z#%IG6kPXkHt{zk2M6zK@Vu^4Q(1zE$?yY6M!^&jQ+2^E?!p7{g*|X6}vuRC3p@jk0 W117c83?+LXEZI4G$p&LV25SKE>nb+@ diff --git a/deluge/ui/web/themes/images/yourtheme/tree/s.gif b/deluge/ui/web/themes/images/yourtheme/tree/s.gif deleted file mode 100644 index 1d11fa9ada9e93505b3d736acb204083f45d5fbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43 scmZ?wbhEHbWMp7uX!y@?;J^U}1_s5SEQ~;kK?g*DWEhy3To@Uw0n;G|I{*Lx diff --git a/deluge/ui/web/themes/images/yourtheme/window/icon-error.gif b/deluge/ui/web/themes/images/yourtheme/window/icon-error.gif deleted file mode 100644 index 397b655ab83e5362fdc7eb0d18cf361c6f86bd9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1669 zcmV;02738NNk%w1VITk?0QUd@0|NsJ0|X2J00{{R5ds1i7Z(~66B`>G9v&Vb001Kp z5h)oOFaQ8I0021w0Y3o&E-fxEFEBACCN(uSJUcx_0Rc|{08I)CQ~&^5003P90ZlnN zZ2HgaR#tRYR&iNbdS75? zU|?otXJ=+;Yin(FU|@V`YIb#ZeSCg?et>}h0EGYmiU0tO0055<5Rm`?kOl^o005Z) z0GmN+?~005%|1f>7~rUeD5005~41+4%8tpx?M0RglK2)Y6SybBAy92~17B(5YS zt0^g|FE6h$GP@!ovpPDDN=%4PP>)+%g=J@gYio~fZHaSpjd*yLX=#~kY?O0znsITT ze0->1U$sL+wn#|6N=l(?ZKHd8zjAWJ0s_Pf3(Ero%L)p|939OP64C(y(FzLN0RhLMcRH8%DjAoeXS{Ujv)EG+gtJ^wQ^{W?3v zNJh*-LCQ@{#8XqnUth>oR?f~+Utj)HQ~z6A@Lyo#VPouQYVB}x>v?Q{t%gd(L*0R{xyxG~vlatYag2Jb&>V$^kk(2*{ zf&Yw*|C5vdnwsaLq~@lni75b z|Ns8}{@~x^A^8LW00930EC2ui03ZM$000R70RIUbNDv$>R;N^%GKK1uH+KXhN+gI) zQmI(8v}vO?E0!usk6NLdNb;LSjN7_}3)gKMEm^BfQ9=}oWJFkzOv$3fZRN_A+GfF& z32BcxoBv$pj74i3x2G;S3XK)B)FeoEmXWL#snn`jv}gsDrLa^fQ>tQ`viiu;6mb&4 zIih50RjgR4R9RKTR}rL1lO$0B9ElMiAmt)9>blUBj4Y5687efWvLQo=T3ms|nUS42 zGT05w#%K~HN|L}(qt>OeA3m=K#Zlp_nV3Y10NJUdgV?}Dj3P~n6lR(~fAPA&<^wy< z3SY;ip*i$tjvF;7)cwO(hY@E;pU(dEJAMvK96x^EuyA(#I4D2W)wt>4TNE8YjvOf} zG)mrhfAgFX#~WKj)1E)1@X?1HY^b3I4=}g`${ckFf(Rmn_^}B+|J5T5Fy|aN${TUW z0S6mQFhRr!;UgPsq@e^7N-V$&6Kb%bq#Sa*Vdfi^>~mm0dsJzqm1!)YL=j6Upi2{A zuE7S7XQmMhKT=kc#-N0zk;D-~AfZ4mcqp-i8dkz#<`P*@Bc(t0{IW!$Ngy$V5I-1@ zizZxdisc(i!~o5u$IbJ_rv6JTkwg(c{D4CNyI4a65=m^j#u6#8*Ipi;`17AUTJ(BE z5kdIy0|yB7l8z8W9HFeL2U?Ou5|`ZbpQ}X_F@z60{NTU@$Nckz5JFhX#WM$9V(qqN zczc{Zzy$F_4?N^RzzK;Blf(}}6cGhE|5-BcwnvOnPkU1IumcV|U{F8}13B@74?zS0 z#dwzlam2`nic7|EPvkH$4mJotfiVMJGlaxG_)rEWKMWD>&Oe?)03;wIQ58SrAhy#rm+eCjRSRuH))@dW!7dZ& zW5o_u2R%03bq^haWeql1000EIv_ld+Sb#9`4TvW`^x8Ju-~j^zOmNFONd2>m2p`;_ zHs5>m&A|f!9AH8(f>-{JI5cc`2#jD0Go}*+k21NqFv0{8KoG$M PBfNl1GVhQS5C8x>^BLCH diff --git a/deluge/ui/web/themes/images/yourtheme/window/icon-info.gif b/deluge/ui/web/themes/images/yourtheme/window/icon-info.gif deleted file mode 100644 index 58281c3067b309779f5cf949a7196170c8ca97b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1586 zcmV-22F>|LNk%w1VITk?0QUd@002Ay07w84PX`%A3LHrS9ajJYWB>?a019mY3w!_= zeheW`4kS_$BTNt{R2C>w87x&AE?6EhTN5*F88u@cHent&Zy_^VB{*RwJ!T<2Ybrfu zEanAeNJ0@02_k<8;bxSjRY)#049Cl8e5Y1_tY3bkWN(XQaEfVlk7;?7 zZF!SzdY5*8mt2auc!8LDgq&lBt7(C!V~et7k-lw{yKsuMageiql(2i8y-tSTQHA4U zhskM;!F86%bDF?tGlSHx~QzWsjj`Ou)c+z$A_QDf}_NMrOt$@%8RPR zi>%9lsM?CJ)Qqyzkfy4!pytE%CW@Nu*TlB$=|re)xF5pzRlaC#O0*M=&Huzs>kT8$>*ZV^`Xr3 zq{{ZD&GV%F^A_)Y{V6-P_#W#@Xx7+U3jK?!?;j!ruDO*W%II z<s1(&F;b=Ka&^{@UjA-Rbn(?f%pA|J?Ea z-}(RG-{a%sWQF}}=T6!l(LfBVqwLzTzdz--gr zA>~JRUspdjz=SD#uW#3T=*1z15PotP*O<}1TXI=rW8fk~GqY79KP}1YrcVGlvzs zDl$nW+ZJ<7GW-rh3M7OOB8UkZSwRrC?KL;(Q+JJH=Ywg3PC diff --git a/deluge/ui/web/themes/images/yourtheme/window/icon-question.gif b/deluge/ui/web/themes/images/yourtheme/window/icon-question.gif deleted file mode 100644 index 08abd82ae86c9457172c7a4fdbc527641cf28e48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1607 zcmV-N2Dtf0Nk%w1VITk?0QUd@02fyP7F_@vT>uhh032%o9CQF5e-A8e03mY#BzglW zcL_0l6g7B5MoUafO-xQwNKjc)QdCG)VMGais%VD1YKp&Yk+f=&xOI)E zaEiQim9}=7y?K_jd6&3+oV;3t&|-(kYnQ@tj>UPC!+4gSZh?S#&mcD?Rw3D8!n4hVIpuCNxypy7?lBc|sslAz{ zv!1E8nykH`pQ59qrl_Z?tE#T5tFf-Ly0EXZv$D0gx4OH!y?~j^f}_NSpv#4+%#5bO zjit(rsl|+~%!H%Tg{shuuF;CD-i))_m#xK;uF0IQ!Je+okgwa9u*sgY$DOs#l(p29 zwb+%o+nKY|oV(kBuJ?(u=#RDcm$&DYyyKX=;G(m`qqxkgwZo{l%AmW~pu5Wy1~n_!_~3H*|^2hyUEtQ&D)~F!=r_S`L&GoF&_N~(Sv&!PL&+@j??Yq$Bv(odm+WouL^Ss^uzv2JK z#>vRX%gf5m#L3db&e_e*)63J`)6&(_)!NwC+uGXR!PV)++V9BJ>B`#d#N777-1y4d z^3d1g(%a?H-|XGp;>6+p%jEve=>OE=@803%+~e!f;quVt`_t+E+2!%y==0m`{@(Hb z;NRop*MI`>g(&|>+<34{Oa!Wf0xe!3Pge_@yBbqQDAy z^yqLDY^(Y`Bgb#Yy&t*SHt<)MmubQE= zM_%4K|K!o54GAF7UTBq*Ob!?g0o7_ijR4L$#5Cl7WQu5*Y1Gi(Bmg6D)2&N<*T z_(l=0(9+Fy7{;fLf+vi?iGtvWSYtTY0MiN@9f&f^H7LmFMINyXBrZBDyqCps^d=g7F3EF65lHnZVrI>UYlglJe zU~oq>afkv8HsRE$YQu zh#-bkqRKD4cwz`3RWxA(1Qnd&3}YuvgUT2`;GhH*Q&3SwBCD*Dh!i~7&_D!W@DWW; z1F;hgDs>bA#0Ei30Z1pS2x5T)7=Y0SG)EyV5IfR9lMEkstO3X(t9(I08OcCnvDYWD z6Ol7qAd-p~6!7sjC){4MV~P`tbU^{7d>1~=99ZDpN7scTEv^xRGv0Vk((EBd#a;&l F06QAMRrde@ diff --git a/deluge/ui/web/themes/images/yourtheme/window/icon-warning.gif b/deluge/ui/web/themes/images/yourtheme/window/icon-warning.gif deleted file mode 100644 index 27ff98b4f787f776e24227da0227bc781e3b11e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1483 zcmXAoYc$k(9LB%H%(yfgGuR9b<4z3ocd29*O43CNd(`UWmQ=H)a>`a4DYpzOx}c(x zSlvdcWJ?+unZaR-H7>b~v1S^TyJ_?Ptx;{_9t|N0Ki69nENoJ2v3`>&g|W8&busa_So7*+dD)$ zvLc<>kt@t%F{f~h9qzG`vt^ZG;7|7JumJBhJ9Y+8Lf4suZE^fH#5_9C`L|tWUS6U8 z{=uOE0fBzowgqiH9`W<?y6`^?T9Sbi>kIro^$r3_Y4hFwk)R(#Q}G+VFY!jG?tX{A@K zA7Ak-yF;xiAyhqNys9yLRL-ovzEyCSA}UpDxeZO_LcSl+NfU}@28A3*bVbNWrHA>fZ4D_larvD z0o4={9|wFI(DV=ZJRp1#nxdfzI{Lyuvvho356v%?4p|^%j&Mta>}F3~{K0|F!GZpTzVLoC6_EgdgTr?dzB>V$ILvD;-4MrIlR(m27G@h~>JlYZ zVAt|_ro3YUVh;qD&xzwC(+MYO@wD@Y_NS8}VxR3300jn*@X<;}{z{$rL zTQ1Ygt3r~JNZK6NqxROCFAF5#=}AsXB5Gp!SiKu3HLoB=^T~;XI#AbK!S$~9M1UFk{5%nyiu}%*CZiIbNf<7_U*)eK2jmJEb7FxOYX=;RObGwm=_w(}-X91Z& zqYL6B`%{}cDrkMSM*JWx2`jXogS!VNpUr25HWVJ_hwMpzlk(}y+|3YZ)%_6gfm?u*PI1fu~NtNN%<%o?1bnQ|HcP z+A{@eE%wEmbNMT^8Mo3bU$&{4r}IL6UfVqFo%2t*Tz4deYD9aVZE~6`7TH{nSG#4; z<6vfan`>!V4h5%@)!a#Ahc&Ef--@I2iU;@wEYEC-zjIsI(0PM(`f?qQqf=C&8Tb?#p4A}3P=ZzHb8 zU%2?008r{GmdfTSw5X-f*JnevxfSlSM{Cc=no(Hy6^Zi{dugQHUH~t06Bw zQt4307HjGF&8-z0AF;fZZq8-%?^|4nr#0y83LDz+toN8`gZZg2p9Yd5@bP-%L)8(V zUmmP8OS8yf(llyk`BV+l3sY@pR^S)K>*+DB$}jc0e)m$1w?{Mi5Ahq5K8vj4mE(=f iL}jwpve+-)v>A%!R(IJo>4b>g=e!-tLq`xb9G_3G{0 zGdEv6d-+ygtj!51%UBZR7tG-B>_!@pqvPq~7*cWT?X^Hr1_hqO2g;KF>0Y)?neb;$ rtH-@3vsBJ|GJLS*We`|3`JPV9O%{pDFOA1RPGj(N^>bP0l+XkKCecH0 diff --git a/deluge/ui/web/themes/images/yourtheme/window/left-corners.psd b/deluge/ui/web/themes/images/yourtheme/window/left-corners.psd deleted file mode 100644 index 3d7f0623e03727a632cf003e22e11593d547de53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15576 zcmeI1e^3-<7{}lDcK7c172LsrFbH>wVhuI%BO?1j;4ffmCc%<)CPO77wGtJH8DkKN zvKdW7$)+hFN{x{NQZx(GprDKf4pB~$KoLdMl;0e;Z11zs-VFT_IWTkFyze{vx#xZN zeRucy?sLz+w-*-qTpYqkDmZ|ca;b^9+hLK>&$6u8qwtm?BqLSqbA&!FhXCf2IpSP5 zggo9P{i$dM!a|eKidi4x zfe~`or3s2zo7{pj_T(#PN0y$^#Ma;O3tpYP!_MB_V}_^KoVotJaqW$vTu$aD?fhX+mk<5R{ivIbz5BziP4hj!ePN0LL5Kf*=i$Y2sSj0%M#)4G_3kj^dN zMIS6V_F2-)(QEg{@4IBo306n>?Ts$(j9H%a)WLvd8;Y}&k~bPQDERq{1XOVT@R3zT z{sq0-5&?afxSLN~0G&leed!0DtdLcXMC=dm>vSIZV8!-TMdr%mdGYBrLDeG_Isw(M zU$Xp$fF8be-QBm_u~b0%sPx_y^^K+dp4`sqHzT-G@?&Q%XEf&n${+=-9b$U~b&il=5o92>F@0C4S*uP!0LSq>g=xxqCDh z$PgA=B&(A$n&XiVc>?&%BT0UIkqLsO3+BE4M)Jn7t|!L!%p>`obp7|Hj7`|QB{5kW zXgMUY#-2Xnnb>mJr40G!OvcfX_k5-xn2(8<@BpKgDlnM}knfIJ7^amfFv$u)T!~qW zL$p!_CRYI#J#EgyS%rKL&g$XYCHx7N1s9=KCjzJ{TvW z7p!sUfj$bVffdGq83L1nYGA{0VBpP=)#;jnt{J980hatzKONUP^qQ?(0UB4<0%69y3#E2IL6&q!Uq=Rpjs4tz5?Mit0(?ST`<5Jh{POMDn=j@c;kE$^ r3VFIXhE&{2PDn^;Vsc|+GqPadUdIqEbJpV=P?o{d)z4*}Q$iB}hcqa_ diff --git a/deluge/ui/web/themes/images/yourtheme/window/left-right.psd b/deluge/ui/web/themes/images/yourtheme/window/left-right.psd deleted file mode 100644 index 59a3960a2353ebe4c9a22bde84cb79979f3150ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24046 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 diff --git a/deluge/ui/web/themes/images/yourtheme/window/right-corners.psd b/deluge/ui/web/themes/images/yourtheme/window/right-corners.psd deleted file mode 100644 index 86d5095386123b82d2cf11b8308dd1e40459fd9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15530 zcmeI12}~SS7{}k6nLRj~?k>Af5XvrxAQ6Ry3L4|4Xi*vsE)@@~F;uIT!~;q#R!!xo z)uypht+Z-PFI~})hN>+#^`KBdlxS&@1r)i;QLJ(;u!-ndFU z?hVIfH3V=ia=v&SEkb_JknvKq0%5@_bRgB*wE)!HJX6XfWTnAA;h5d z5041bN31j$^q8EckSmremCN-yjZUZkw@s+Vhe;4JEH)C7*f7I#V|~G8*jSxwl&GO-;uI*-972|-go~48IL@=@v+CB*p#(7cgwR|^PbyQShVBi zov*yQYwsIx?t80b|ADs;A36H|2bK>@KRW)&r=OiTS@HR)GgZ}RYijGhsc$@gq3OqF zYfEcqS9j0F-oE~UOT#0hW47^$N&6H=>`XX>e~O3Lj~R|*IR(UnnXTlCw8p{jjh16eys&)26}8rZI&jwcEb^b;}T6Rcji#e)*Im)rtEp z!~9ou5p?YDJh-kerY>3sXDoJ73%0vp(2n51!5s*G`*C?A&zl{=B~FHI)K- zxR_4;9~{^{#P@Xt4Gv`NiY_~CerM0v`hxG2=DlqdRS9=)DgAhx*MTg)-r{Jk|6XW8 zP|?}TVu?_pImfNazC93Fwf}4(ewL z>Va$KfdjIWf_mV#dEg+$9I859Gc3v*b78;Pm*UkpzM8BV9JsOCIgTCkf(_=07z1?$ zMq!MCdf=jYz{8WFpdPqw9`K}?Lsh412D)Zg6bCr+PyJF{>(G04Z3k#xx%Tr}s&~in zB}gD&EXPZn1K2i;9#C`WfUbykP(Mj%1JwesN@xOgo`QPdnt3n<*-1e?aN9hXBE=l4 zI)98*b~~;*=KKxYXYnhjISfKq#3fJz68b>(0xnAE21P+VaM3*A;mJ@?58O5ncv8%v ws`Cw`vh%p5!8wWfd0_(Pi5LfU1#B=zK|OHMJaEF3p`aePZ5}vDF^8)D2iAzm(f|Me diff --git a/deluge/ui/web/themes/images/yourtheme/window/top-bottom.png b/deluge/ui/web/themes/images/yourtheme/window/top-bottom.png deleted file mode 100644 index 33779e76b8d7407100e44ea79974d9c8300a9573..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180 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 Date: Fri, 23 Nov 2012 00:53:49 +0000 Subject: [PATCH 03/58] Updates to web gen_gettext script and add .build_data to gitignore --- .gitignore | 1 + deluge/ui/web/gen_gettext.py | 11 +- deluge/ui/web/gettext.js | 580 ++++++++++++++++++++--------------- 3 files changed, 336 insertions(+), 256 deletions(-) mode change 100644 => 100755 deluge/ui/web/gen_gettext.py diff --git a/.gitignore b/.gitignore index 2a7eb4d80..03b6fe47a 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ dist _trial_temp deluge/i18n/*/ *.desktop +.build_data diff --git a/deluge/ui/web/gen_gettext.py b/deluge/ui/web/gen_gettext.py old mode 100644 new mode 100755 index 05025aec5..b2518d74b --- a/deluge/ui/web/gen_gettext.py +++ b/deluge/ui/web/gen_gettext.py @@ -2,15 +2,14 @@ """ Script to go through the javascript files and dynamically generate gettext.js """ - import os import re -import glob -import cStringIO as StringIO +output_file = "gettext.js" string_re = re.compile('_\\(\'(.*?)\'\\)') strings = {} + gettext_tpl = """## -*- coding: utf-8 -*- /* * Script: gettext.js @@ -59,10 +58,10 @@ for root, dnames, files in os.walk('js/deluge-all'): keys = strings.keys() keys.sort() -fp = StringIO.StringIO() +fp = open(output_file, 'w') fp.write(gettext_tpl) for key in keys: fp.write('// %s\n' % ', '.join(map(lambda x: '%s:%s' % x, strings[key]))) fp.write("GetText.add('%(key)s', '${escape(_(\"%(key)s\"))}')\n\n" % locals()) -fp.seek(0) -print fp.read() +fp.close() + diff --git a/deluge/ui/web/gettext.js b/deluge/ui/web/gettext.js index 7bed3e588..538b78b35 100644 --- a/deluge/ui/web/gettext.js +++ b/deluge/ui/web/gettext.js @@ -26,739 +26,819 @@ function _(string) { return GetText.get(string); } -// Deluge.Torrents.js:117 +// TorrentGrid.js:109 GetText.add('#', '${escape(_("#"))}') -// Deluge.Menus.js:167 +// DetailsTab.js:50 +GetText.add('# of files', '${escape(_("# of files"))}') + +// Menus.js:161 GetText.add('0', '${escape(_("0"))}') -// Deluge.Menus.js:169 +// Menus.js:163 GetText.add('1', '${escape(_("1"))}') -// Deluge.Menus.js:115, Deluge.Menus.js:133 +// Menus.js:109, Menus.js:127 GetText.add('10 KiB/s', '${escape(_("10 KiB/s"))}') -// Deluge.Menus.js:151 +// Menus.js:145 GetText.add('100', '${escape(_("100"))}') -// Deluge.Menus.js:171 +// Menus.js:165 GetText.add('2', '${escape(_("2"))}') -// Deluge.Menus.js:153 +// Menus.js:147 GetText.add('200', '${escape(_("200"))}') -// Deluge.Menus.js:173 +// Menus.js:167 GetText.add('3', '${escape(_("3"))}') -// Deluge.Menus.js:117, Deluge.Menus.js:135 +// Menus.js:111, Menus.js:129 GetText.add('30 KiB/s', '${escape(_("30 KiB/s"))}') -// Deluge.Menus.js:155 +// Menus.js:149 GetText.add('300', '${escape(_("300"))}') -// Deluge.Menus.js:121, Deluge.Menus.js:139 +// Menus.js:115, Menus.js:133 GetText.add('300 KiB/s', '${escape(_("300 KiB/s"))}') -// Deluge.Menus.js:175 +// Menus.js:169 GetText.add('5', '${escape(_("5"))}') -// Deluge.Menus.js:113, Deluge.Menus.js:131 +// Menus.js:107, Menus.js:125 GetText.add('5 KiB/s', '${escape(_("5 KiB/s"))}') -// Deluge.Menus.js:149 +// Menus.js:143 GetText.add('50', '${escape(_("50"))}') -// Deluge.Menus.js:157 +// Menus.js:151 GetText.add('500', '${escape(_("500"))}') -// Deluge.Menus.js:119, Deluge.Menus.js:137 +// Menus.js:113, Menus.js:131 GetText.add('80 KiB/s', '${escape(_("80 KiB/s"))}') -// Deluge.Preferences.Queue.js:70 +// QueuePage.js:69 GetText.add('Active Torrents', '${escape(_("Active Torrents"))}') -// Deluge.ConnectionManager.js:64, Deluge.ConnectionManager.js:222, Deluge.Add.Url.js:55, Deluge.Toolbar.js:51, Deluge.Add.js:384, Deluge.EditTrackers.js:58, Deluge.EditTrackers.js:237, Deluge.Add.File.js:55 +// EditTrackersWindow.js:112, ConnectionManager.js:100, AddConnectionWindow.js:56, Toolbar.js:58, AddTrackerWindow.js:57, UrlWindow.js:50, FileWindow.js:53, AddWindow.js:52 GetText.add('Add', '${escape(_("Add"))}') -// Deluge.ConnectionManager.js:52 +// AddConnectionWindow.js:40 GetText.add('Add Connection', '${escape(_("Add Connection"))}') -// Deluge.Add.js:184 +// OptionsTab.js:147 GetText.add('Add In Paused State', '${escape(_("Add In Paused State"))}') -// Deluge.Add.js:366 +// AddWindow.js:37 GetText.add('Add Torrents', '${escape(_("Add Torrents"))}') -// Deluge.EditTrackers.js:39 +// AddTrackerWindow.js:40 GetText.add('Add Tracker', '${escape(_("Add Tracker"))}') -// Deluge.Add.File.js:47 +// FileWindow.js:40 GetText.add('Add from File', '${escape(_("Add from File"))}') -// Deluge.Add.Url.js:47 +// UrlWindow.js:36 GetText.add('Add from Url', '${escape(_("Add from Url"))}') -// Deluge.Preferences.Downloads.js:142 +// DownloadsPage.js:146 GetText.add('Add torrents in Paused state', '${escape(_("Add torrents in Paused state"))}') -// Deluge.Torrents.js:184 +// TorrentGrid.js:180 GetText.add('Added', '${escape(_("Added"))}') -// Deluge.Sidebar.js:198 +// FilterPanel.js:124 GetText.add('All', '${escape(_("All"))}') -// Deluge.Add.js:114, Deluge.Preferences.Downloads.js:97 +// OptionsTab.js:77, DownloadsPage.js:100 GetText.add('Allocation', '${escape(_("Allocation"))}') -// Deluge.Preferences.Daemon.js:81 +// DaemonPage.js:77 GetText.add('Allow Remote Connections', '${escape(_("Allow Remote Connections"))}') -// Deluge.Details.Options.js:347, Deluge.Preferences.js:91 +// InterfacePage.js:78 +GetText.add('Allow the use of multiple filters at once', '${escape(_("Allow the use of multiple filters at once"))}') + +// OptionsTab.js:347, PreferencesWindow.js:107 GetText.add('Apply', '${escape(_("Apply"))}') -// Deluge.Menus.js:182, Deluge.Details.Options.js:215 +// Menus.js:176, OptionsTab.js:215 GetText.add('Auto Managed', '${escape(_("Auto Managed"))}') -// Deluge.Preferences.Downloads.js:88 +// DownloadsPage.js:91 GetText.add('Autoadd .torrent files from', '${escape(_("Autoadd .torrent files from"))}') -// Deluge.Torrents.js:178 +// TorrentGrid.js:173 GetText.add('Avail', '${escape(_("Avail"))}') -// Deluge.Add.js:144, Deluge.Details.Options.js:88, Deluge.Preferences.Bandwidth.js:39 +// FileBrowser.js:47 +GetText.add('Back', '${escape(_("Back"))}') + +// OptionsTab.js:88, OptionsTab.js:107, BandwidthPage.js:42 GetText.add('Bandwidth', '${escape(_("Bandwidth"))}') -// Deluge.Preferences.Other.js:63 +// OtherPage.js:66 GetText.add('Be alerted about new releases', '${escape(_("Be alerted about new releases"))}') -// Deluge.Menus.js:210 +// Menus.js:204 GetText.add('Bottom', '${escape(_("Bottom"))}') -// Deluge.Preferences.Plugins.js:74, Deluge.Add.File.js:70 +// MoveStorage.js:73, FileWindow.js:70, InstallPluginWindow.js:69 GetText.add('Browse', '${escape(_("Browse"))}') -// Deluge.Preferences.Cache.js:39 +// CachePage.js:41 GetText.add('Cache', '${escape(_("Cache"))}') -// Deluge.Preferences.Cache.js:71 +// CachePage.js:69 GetText.add('Cache Expiry (seconds)', '${escape(_("Cache Expiry (seconds)"))}') -// Deluge.Preferences.Cache.js:59 +// CachePage.js:63 GetText.add('Cache Size (16 KiB Blocks)', '${escape(_("Cache Size (16 KiB Blocks)"))}') -// Deluge.Add.js:383, Deluge.MoveStorage.js:56, Deluge.EditTrackers.js:57, Deluge.EditTrackers.js:116, Deluge.EditTrackers.js:178, Deluge.Remove.js:53 +// EditTrackersWindow.js:56, OtherLimitWindow.js:72, RemoveWindow.js:55, MoveStorage.js:55, EditTrackerWindow.js:56, AddTrackerWindow.js:56, AddWindow.js:51 GetText.add('Cancel', '${escape(_("Cancel"))}') -// Deluge.Preferences.js:55 +// PreferencesWindow.js:85 GetText.add('Categories', '${escape(_("Categories"))}') -// Deluge.Preferences.Interface.js:180 +// InterfacePage.js:173 GetText.add('Certificate', '${escape(_("Certificate"))}') -// Deluge.Preferences.Interface.js:118 +// InterfacePage.js:117 GetText.add('Change', '${escape(_("Change"))}') -// Deluge.Preferences.Interface.js:227 +// InterfacePage.js:224 GetText.add('Change Successful', '${escape(_("Change Successful"))}') -// Deluge.ConnectionManager.js:63, Deluge.ConnectionManager.js:171, Deluge.Preferences.js:90 +// ConnectionManager.js:54, AddConnectionWindow.js:55, PreferencesWindow.js:106 GetText.add('Close', '${escape(_("Close"))}') -// Deluge.Add.js:137 +// DetailsTab.js:51 +GetText.add('Comment', '${escape(_("Comment"))}') + +// OptionsTab.js:100 GetText.add('Compact', '${escape(_("Compact"))}') -// Deluge.Preferences.Interface.js:106 +// InterfacePage.js:105 GetText.add('Confirm Password', '${escape(_("Confirm Password"))}') -// Deluge.ConnectionManager.js:172, Deluge.ConnectionManager.js:284 +// ConnectionManager.js:55, ConnectionManager.js:184 GetText.add('Connect', '${escape(_("Connect"))}') -// Deluge.ConnectionManager.js:277, Deluge.ConnectionManager.js:322 +// ConnectionManager.js:177, ConnectionManager.js:225 GetText.add('Connected', '${escape(_("Connected"))}') -// Deluge.Menus.js:145 +// Menus.js:139 GetText.add('Connection Limit', '${escape(_("Connection Limit"))}') -// Deluge.ConnectionManager.js:159, Deluge.Toolbar.js:99 +// ConnectionManager.js:43, Toolbar.js:100 GetText.add('Connection Manager', '${escape(_("Connection Manager"))}') -// Deluge.Statusbar.js:25, Deluge.Preferences.Daemon.js:72 +// UI.js:151 +GetText.add('Connection restored', '${escape(_("Connection restored"))}') + +// Statusbar.js:57, DaemonPage.js:68 GetText.add('Connections', '${escape(_("Connections"))}') -// Deluge.Add.Url.js:73 +// UrlWindow.js:68 GetText.add('Cookies', '${escape(_("Cookies"))}') -// Deluge.Preferences.Downloads.js:80 +// DownloadsPage.js:83 GetText.add('Copy of .torrent files to', '${escape(_("Copy of .torrent files to"))}') -// Deluge.Toolbar.js:44 +// Toolbar.js:52 GetText.add('Create', '${escape(_("Create"))}') -// Deluge.Menus.js:109 +// Menus.js:103 GetText.add('D/L Speed Limit', '${escape(_("D/L Speed Limit"))}') -// Deluge.Preferences.Network.js:229, Deluge.Preferences.Proxy.js:202 +// NetworkPage.js:225, ProxyPage.js:69 GetText.add('DHT', '${escape(_("DHT"))}') -// Deluge.Statusbar.js:52 +// Statusbar.js:210 GetText.add('DHT Nodes', '${escape(_("DHT Nodes"))}') -// Deluge.Preferences.Daemon.js:39 +// DaemonPage.js:41 GetText.add('Daemon', '${escape(_("Daemon"))}') -// Deluge.Preferences.Daemon.js:58 +// DaemonPage.js:57 GetText.add('Daemon port', '${escape(_("Daemon port"))}') -// Deluge.Details.Details.js:36 +// Toolbar.js:45 +GetText.add('Deluge', '${escape(_("Deluge"))}') + +// DetailsTab.js:36 GetText.add('Details', '${escape(_("Details"))}') -// Deluge.Preferences.Encryption.js:66, Deluge.Preferences.Encryption.js:82 +// EncryptionPage.js:65, EncryptionPage.js:82 GetText.add('Disabled', '${escape(_("Disabled"))}') -// Deluge.ConnectionManager.js:279 +// ConnectionManager.js:179 GetText.add('Disconnect', '${escape(_("Disconnect"))}') -// Deluge.Menus.js:410, Deluge.js:107 +// Menus.js:251, Deluge.js:156 GetText.add('Do Not Download', '${escape(_("Do Not Download"))}') -// Deluge.Preferences.Queue.js:117 +// QueuePage.js:107 GetText.add('Do not count slow torrents', '${escape(_("Do not count slow torrents"))}') -// Deluge.Toolbar.js:86, Deluge.Menus.js:204, Deluge.EditTrackers.js:231 +// EditTrackersWindow.js:107, Menus.js:198, Toolbar.js:89 GetText.add('Down', '${escape(_("Down"))}') -// Deluge.Torrents.js:154 +// TorrentGrid.js:241 +GetText.add('Down Limit', '${escape(_("Down Limit"))}') + +// TorrentGrid.js:148 GetText.add('Down Speed', '${escape(_("Down Speed"))}') -// Deluge.Add.js:94 +// FilesTab.js:63 +GetText.add('Download', '${escape(_("Download"))}') + +// OptionsTab.js:55 GetText.add('Download Location', '${escape(_("Download Location"))}') -// Deluge.Statusbar.js:32 +// Statusbar.js:104 GetText.add('Download Speed', '${escape(_("Download Speed"))}') -// Deluge.Preferences.Downloads.js:66 +// DownloadsPage.js:69 GetText.add('Download to', '${escape(_("Download to"))}') -// Deluge.Preferences.Downloads.js:39 +// TorrentGrid.js:227 +GetText.add('Downloaded', '${escape(_("Downloaded"))}') + +// DownloadsPage.js:42 GetText.add('Downloads', '${escape(_("Downloads"))}') -// Deluge.Torrents.js:166 +// TorrentGrid.js:160 GetText.add('ETA', '${escape(_("ETA"))}') -// Deluge.EditTrackers.js:243 +// EditTrackersWindow.js:117 GetText.add('Edit', '${escape(_("Edit"))}') -// Deluge.EditTrackers.js:98 +// EditTrackerWindow.js:40 GetText.add('Edit Tracker', '${escape(_("Edit Tracker"))}') -// Deluge.Menus.js:224, Deluge.Details.Options.js:329, Deluge.EditTrackers.js:160 +// EditTrackersWindow.js:40, Menus.js:218, OptionsTab.js:332 GetText.add('Edit Trackers', '${escape(_("Edit Trackers"))}') -// Deluge.Preferences.Encryption.js:98 +// EncryptionPage.js:99 GetText.add('Either', '${escape(_("Either"))}') -// Deluge.Preferences.Plugins.js:157, Deluge.Preferences.Encryption.js:65, Deluge.Preferences.Encryption.js:81 +// EncryptionPage.js:64, EncryptionPage.js:81, PluginsPage.js:81 GetText.add('Enabled', '${escape(_("Enabled"))}') -// Deluge.Preferences.Encryption.js:110 +// EncryptionPage.js:112 GetText.add('Encrypt entire stream', '${escape(_("Encrypt entire stream"))}') -// Deluge.Preferences.Encryption.js:39 +// EncryptionPage.js:41 GetText.add('Encryption', '${escape(_("Encryption"))}') -// Deluge.ConnectionManager.js:128, Deluge.ConnectionManager.js:391, Deluge.ConnectionManager.js:447, Deluge.Add.js:541 +// ConnectionManager.js:308, ConnectionManager.js:364, AddConnectionWindow.js:103, AddWindow.js:209 GetText.add('Error', '${escape(_("Error"))}') -// Deluge.Menus.js:406 +// Menus.js:247 GetText.add('Expand All', '${escape(_("Expand All"))}') -// Deluge.Add.js:431, Deluge.Add.File.js:67 +// FileWindow.js:67, AddWindow.js:98 GetText.add('File', '${escape(_("File"))}') -// Deluge.Add.js:63, Deluge.Details.Files.js:53 +// FileBrowser.js:36 +GetText.add('File Browser', '${escape(_("File Browser"))}') + +// OptionsPanel.js:143 +GetText.add('File prioritization is unavailable when using Compact allocation. Would you like to switch to Full allocation?', '${escape(_("File prioritization is unavailable when using Compact allocation. Would you like to switch to Full allocation?"))}') + +// FilesTab.js:41, FilesTab.js:50 GetText.add('Filename', '${escape(_("Filename"))}') -// Deluge.Add.js:54, Deluge.Details.Files.js:47 +// FilesTab.js:35, FilesTab.js:41 GetText.add('Files', '${escape(_("Files"))}') -// Deluge.Sidebar.js:75 +// Sidebar.js:55 GetText.add('Filters', '${escape(_("Filters"))}') -// Deluge.Preferences.Plugins.js:191 +// PluginsPage.js:118 GetText.add('Find More', '${escape(_("Find More"))}') -// Deluge.Preferences.Downloads.js:54 +// DownloadsPage.js:57 GetText.add('Folders', '${escape(_("Folders"))}') -// Deluge.Menus.js:236 +// Menus.js:230 GetText.add('Force Recheck', '${escape(_("Force Recheck"))}') -// Deluge.Preferences.Encryption.js:64, Deluge.Preferences.Encryption.js:80 +// EncryptionPage.js:63, EncryptionPage.js:80 GetText.add('Forced', '${escape(_("Forced"))}') -// Deluge.Statusbar.js:58 +// FileBrowser.js:50 +GetText.add('Forward', '${escape(_("Forward"))}') + +// Statusbar.js:216 GetText.add('Freespace in download location', '${escape(_("Freespace in download location"))}') -// Deluge.Add.js:130 +// OptionsTab.js:93 GetText.add('Full', '${escape(_("Full"))}') -// Deluge.Preferences.Encryption.js:97 +// EncryptionPage.js:98 GetText.add('Full Stream', '${escape(_("Full Stream"))}') -// Deluge.Preferences.Queue.js:53, Deluge.Add.js:177, Deluge.Details.Options.js:281 +// OptionsTab.js:293, OptionsTab.js:140, QueuePage.js:52 GetText.add('General', '${escape(_("General"))}') -// Deluge.Preferences.Other.js:94 +// OtherPage.js:97 GetText.add('GeoIP Database', '${escape(_("GeoIP Database"))}') -// Deluge.Preferences.Bandwidth.js:53 +// BandwidthPage.js:56 GetText.add('Global Bandwidth Usage', '${escape(_("Global Bandwidth Usage"))}') -// Deluge.Preferences.Proxy.js:61 +// ProxyField.js:59 GetText.add('HTTP', '${escape(_("HTTP"))}') -// Deluge.Preferences.Proxy.js:62 +// ProxyField.js:60 GetText.add('HTTP with Auth', '${escape(_("HTTP with Auth"))}') -// Deluge.Preferences.Encryption.js:96 +// EncryptionPage.js:97 GetText.add('Handshake', '${escape(_("Handshake"))}') -// Deluge.Toolbar.js:107 +// DetailsTab.js:47 +GetText.add('Hash', '${escape(_("Hash"))}') + +// Toolbar.js:107 GetText.add('Help', '${escape(_("Help"))}') -// Deluge.Menus.js:420, Deluge.js:109 +// Menus.js:261, Deluge.js:158 GetText.add('High Priority', '${escape(_("High Priority"))}') -// Deluge.Menus.js:425, Deluge.js:110 +// Menus.js:266, Deluge.js:159 GetText.add('Highest Priority', '${escape(_("Highest Priority"))}') -// Deluge.ConnectionManager.js:77, Deluge.ConnectionManager.js:193, Deluge.Preferences.Proxy.js:73 +// FileBrowser.js:56 +GetText.add('Home', '${escape(_("Home"))}') + +// ConnectionManager.js:74, AddConnectionWindow.js:66, ProxyField.js:71 GetText.add('Host', '${escape(_("Host"))}') -// Deluge.Preferences.Bandwidth.js:145 +// BandwidthPage.js:122 GetText.add('Ignore limits on local network', '${escape(_("Ignore limits on local network"))}') -// Deluge.Preferences.Encryption.js:58 +// EncryptionPage.js:57 GetText.add('Inbound', '${escape(_("Inbound"))}') -// Deluge.Preferences.Network.js:53 +// NetworkPage.js:51 GetText.add('Incoming Ports', '${escape(_("Incoming Ports"))}') -// Deluge.Preferences.Plugins.js:203 +// PluginsPage.js:135 GetText.add('Info', '${escape(_("Info"))}') -// Deluge.Add.js:444 +// AddWindow.js:107 GetText.add('Infohash', '${escape(_("Infohash"))}') -// Deluge.Preferences.Plugins.js:59, Deluge.Preferences.Plugins.js:186 +// InstallPluginWindow.js:54, PluginsPage.js:113 GetText.add('Install', '${escape(_("Install"))}') -// Deluge.Preferences.Plugins.js:55 +// InstallPluginWindow.js:40 GetText.add('Install Plugin', '${escape(_("Install Plugin"))}') -// Deluge.Preferences.Interface.js:39, Deluge.Preferences.Interface.js:54 +// InterfacePage.js:41, InterfacePage.js:53 GetText.add('Interface', '${escape(_("Interface"))}') -// Deluge.Preferences.Interface.js:202 +// InterfacePage.js:199 GetText.add('Invalid Password', '${escape(_("Invalid Password"))}') -// Deluge.Details.Options.js:114, Deluge.Details.Options.js:141 +// OptionsTab.js:114, OptionsTab.js:141 GetText.add('KiB/s', '${escape(_("KiB/s"))}') -// Deluge.Preferences.Network.js:223 +// Statusbar.js:144, Statusbar.js:192 +GetText.add('Kib/s', '${escape(_("Kib/s"))}') + +// NetworkPage.js:219 GetText.add('LSD', '${escape(_("LSD"))}') -// Deluge.Preferences.Encryption.js:90 +// TorrentGrid.js:187 +GetText.add('Last Seen Complete', '${escape(_("Last Seen Complete"))}') + +// EncryptionPage.js:91 GetText.add('Level', '${escape(_("Level"))}') -// Deluge.Details.Status.js:57, Deluge.Details.Details.js:43 +// StatusTab.js:61 GetText.add('Loading', '${escape(_("Loading"))}') -// Deluge.MoveStorage.js:68, Deluge.Preferences.Other.js:101 +// MoveStorage.js:67, OtherPage.js:104 GetText.add('Location', '${escape(_("Location"))}') -// Deluge.Login.js:52, Deluge.Login.js:63 +// LoginWindow.js:45, LoginWindow.js:54 GetText.add('Login', '${escape(_("Login"))}') -// Deluge.Login.js:139 +// LoginWindow.js:127 GetText.add('Login Failed', '${escape(_("Login Failed"))}') -// Deluge.Toolbar.js:115 +// Toolbar.js:114 GetText.add('Logout', '${escape(_("Logout"))}') -// Deluge.Add.js:164, Deluge.Details.Options.js:150 +// OptionsTab.js:150, OptionsTab.js:127 GetText.add('Max Connections', '${escape(_("Max Connections"))}') -// Deluge.Add.js:152 +// OptionsTab.js:115 GetText.add('Max Down Speed', '${escape(_("Max Down Speed"))}') -// Deluge.Details.Options.js:97 +// OptionsTab.js:97 GetText.add('Max Download Speed', '${escape(_("Max Download Speed"))}') -// Deluge.Add.js:158 +// OptionsTab.js:121 GetText.add('Max Up Speed', '${escape(_("Max Up Speed"))}') -// Deluge.Add.js:170, Deluge.Details.Options.js:173 +// OptionsTab.js:173, OptionsTab.js:133 GetText.add('Max Upload Slots', '${escape(_("Max Upload Slots"))}') -// Deluge.Details.Options.js:123 +// OptionsTab.js:123 GetText.add('Max Upload Speed', '${escape(_("Max Upload Speed"))}') -// Deluge.Preferences.Bandwidth.js:121 +// BandwidthPage.js:103 GetText.add('Maximum Connection Attempts per Second', '${escape(_("Maximum Connection Attempts per Second"))}') -// Deluge.Preferences.Bandwidth.js:61, Deluge.Preferences.Bandwidth.js:166 +// BandwidthPage.js:68, BandwidthPage.js:147 GetText.add('Maximum Connections', '${escape(_("Maximum Connections"))}') -// Deluge.Preferences.Bandwidth.js:85, Deluge.Preferences.Bandwidth.js:190 +// BandwidthPage.js:82, BandwidthPage.js:161 GetText.add('Maximum Download Speed (KiB/s)', '${escape(_("Maximum Download Speed (KiB/s)"))}') -// Deluge.Preferences.Bandwidth.js:109 +// BandwidthPage.js:96 GetText.add('Maximum Half-Open Connections', '${escape(_("Maximum Half-Open Connections"))}') -// Deluge.Preferences.Bandwidth.js:73, Deluge.Preferences.Bandwidth.js:178 +// BandwidthPage.js:75, BandwidthPage.js:154 GetText.add('Maximum Upload Slots', '${escape(_("Maximum Upload Slots"))}') -// Deluge.Preferences.Bandwidth.js:97, Deluge.Preferences.Bandwidth.js:202 +// BandwidthPage.js:89, BandwidthPage.js:168 GetText.add('Maximum Upload Speed (KiB/s)', '${escape(_("Maximum Upload Speed (KiB/s)"))}') -// Deluge.MoveStorage.js:57 +// MoveStorage.js:56 GetText.add('Move', '${escape(_("Move"))}') -// Deluge.Details.Options.js:262 +// OptionsTab.js:262 GetText.add('Move Completed', '${escape(_("Move Completed"))}') -// Deluge.Menus.js:242, Deluge.MoveStorage.js:39 +// Menus.js:236, MoveStorage.js:38 GetText.add('Move Storage', '${escape(_("Move Storage"))}') -// Deluge.Preferences.Downloads.js:72 +// DownloadsPage.js:75 GetText.add('Move completed to', '${escape(_("Move completed to"))}') -// Deluge.Preferences.Network.js:209 +// NetworkPage.js:205 GetText.add('NAT-PMP', '${escape(_("NAT-PMP"))}') -// Deluge.Torrents.js:124 +// TorrentGrid.js:116, DetailsTab.js:46 GetText.add('Name', '${escape(_("Name"))}') -// Deluge.Preferences.Network.js:40 +// NetworkPage.js:42 GetText.add('Network', '${escape(_("Network"))}') -// Deluge.Preferences.Network.js:192 +// NetworkPage.js:188 GetText.add('Network Extras', '${escape(_("Network Extras"))}') -// Deluge.Preferences.Network.js:161 +// NetworkPage.js:157 GetText.add('Network Interface', '${escape(_("Network Interface"))}') -// Deluge.Preferences.Interface.js:102 +// InterfacePage.js:101 GetText.add('New Password', '${escape(_("New Password"))}') -// Deluge.Preferences.Proxy.js:57 +// ProxyField.js:55 GetText.add('None', '${escape(_("None"))}') -// Deluge.Menus.js:415, Deluge.js:108 +// Menus.js:256, Deluge.js:157 GetText.add('Normal Priority', '${escape(_("Normal Priority"))}') -// Deluge.Statusbar.js:7 +// Statusbar.js:39 GetText.add('Not Connected', '${escape(_("Not Connected"))}') -// Deluge.Add.js:542 +// AddWindow.js:210 GetText.add('Not a valid torrent', '${escape(_("Not a valid torrent"))}') -// Deluge.Preferences.Notification.js:1 -GetText.add('Notification', '${escape(_("Notification"))}') - -// Deluge.ConnectionManager.js:280, Deluge.ConnectionManager.js:288 +// ConnectionManager.js:180, ConnectionManager.js:188 GetText.add('Offline', '${escape(_("Offline"))}') -// Deluge.EditTrackers.js:179, Deluge.Preferences.js:92 +// EditTrackersWindow.js:57, OtherLimitWindow.js:73, PreferencesWindow.js:108 GetText.add('Ok', '${escape(_("Ok"))}') -// Deluge.Preferences.Interface.js:98 +// InterfacePage.js:97 GetText.add('Old Password', '${escape(_("Old Password"))}') -// Deluge.Add.js:85, Deluge.Menus.js:105, Deluge.Details.Options.js:50, Deluge.Preferences.Downloads.js:125 +// Menus.js:99, OptionsTab.js:49, OptionsTab.js:40, DownloadsPage.js:129 GetText.add('Options', '${escape(_("Options"))}') -// Deluge.Menus.js:301, Deluge.Menus.js:348, Deluge.Menus.js:395, Deluge.Preferences.Daemon.js:88, Deluge.Preferences.Other.js:39 +// Statusbar.js:90, Statusbar.js:138, Statusbar.js:186, OtherPage.js:42, DaemonPage.js:84 GetText.add('Other', '${escape(_("Other"))}') -// Deluge.Preferences.Encryption.js:74 +// EncryptionPage.js:74 GetText.add('Outbound', '${escape(_("Outbound"))}') -// Deluge.Preferences.Network.js:108 +// NetworkPage.js:104 GetText.add('Outgoing Ports', '${escape(_("Outgoing Ports"))}') -// Deluge.ConnectionManager.js:109, Deluge.Preferences.Interface.js:85, Deluge.Preferences.Interface.js:217, Deluge.Preferences.Proxy.js:100, Deluge.Login.js:75 +// TorrentGrid.js:207 +GetText.add('Owner', '${escape(_("Owner"))}') + +// AddConnectionWindow.js:88, LoginWindow.js:70, ProxyField.js:95, InterfacePage.js:84, InterfacePage.js:214 GetText.add('Password', '${escape(_("Password"))}') -// Deluge.Toolbar.js:65, Deluge.Menus.js:93 +// DetailsTab.js:48 +GetText.add('Path', '${escape(_("Path"))}') + +// Menus.js:88, Toolbar.js:70 GetText.add('Pause', '${escape(_("Pause"))}') -// Deluge.Preferences.Proxy.js:184 +// ProxyPage.js:51 GetText.add('Peer', '${escape(_("Peer"))}') -// Deluge.Preferences.Network.js:216 +// NetworkPage.js:212 GetText.add('Peer Exchange', '${escape(_("Peer Exchange"))}') -// Deluge.Preferences.Network.js:185 +// NetworkPage.js:181 GetText.add('Peer TOS Byte', '${escape(_("Peer TOS Byte"))}') -// Deluge.Details.Peers.js:64, Deluge.Torrents.js:148 +// TorrentGrid.js:141, TorrentGrid.js:255, PeersTab.js:61 GetText.add('Peers', '${escape(_("Peers"))}') -// Deluge.Preferences.Bandwidth.js:158 +// BandwidthPage.js:135 GetText.add('Per Torrent Bandwidth Usage', '${escape(_("Per Torrent Bandwidth Usage"))}') -// Deluge.Preferences.Daemon.js:97 +// DaemonPage.js:93 GetText.add('Periodically check the website for new releases', '${escape(_("Periodically check the website for new releases"))}') -// Deluge.Preferences.Plugins.js:164 +// PluginsPage.js:92 GetText.add('Plugin', '${escape(_("Plugin"))}') -// Deluge.Preferences.Plugins.js:71 +// InstallPluginWindow.js:66 GetText.add('Plugin Egg', '${escape(_("Plugin Egg"))}') -// Deluge.Preferences.Plugins.js:113 +// PluginsPage.js:41 GetText.add('Plugins', '${escape(_("Plugins"))}') -// Deluge.ConnectionManager.js:85, Deluge.Preferences.Interface.js:151, Deluge.Preferences.Proxy.js:80, Deluge.Preferences.Daemon.js:53 +// AddConnectionWindow.js:72, ProxyField.js:78, DaemonPage.js:52, InterfacePage.js:147 GetText.add('Port', '${escape(_("Port"))}') -// Deluge.Toolbar.js:92, Deluge.Preferences.js:50 +// QueuePage.js:114 +GetText.add('Prefer Seeding over Downloading', '${escape(_("Prefer Seeding over Downloading"))}') + +// Toolbar.js:94, PreferencesWindow.js:47 GetText.add('Preferences', '${escape(_("Preferences"))}') -// Deluge.Details.Options.js:296 +// OptionsTab.js:308 GetText.add('Prioritize First/Last', '${escape(_("Prioritize First/Last"))}') -// Deluge.Add.js:190 +// OptionsTab.js:153 GetText.add('Prioritize First/Last Pieces', '${escape(_("Prioritize First/Last Pieces"))}') -// Deluge.Preferences.Downloads.js:136 +// DownloadsPage.js:140 GetText.add('Prioritize first and last pieces of torrent', '${escape(_("Prioritize first and last pieces of torrent"))}') -// Deluge.Details.Files.js:67 +// FilesTab.js:61 GetText.add('Priority', '${escape(_("Priority"))}') -// Deluge.Details.Options.js:288 +// OptionsTab.js:300 GetText.add('Private', '${escape(_("Private"))}') -// Deluge.Preferences.Interface.js:173 +// InterfacePage.js:166 GetText.add('Private Key', '${escape(_("Private Key"))}') -// Deluge.Details.Files.js:62, Deluge.Torrents.js:136 +// TorrentGrid.js:128, FilesTab.js:53 GetText.add('Progress', '${escape(_("Progress"))}') -// Deluge.Statusbar.js:46 +// Statusbar.js:200 GetText.add('Protocol Traffic Download/Upload', '${escape(_("Protocol Traffic Download/Upload"))}') -// Deluge.Preferences.Proxy.js:175 +// ProxyPage.js:42 GetText.add('Proxy', '${escape(_("Proxy"))}') -// Deluge.Preferences.Queue.js:39, Deluge.Menus.js:187, Deluge.Details.Options.js:196 +// TorrentGrid.js:213 +GetText.add('Public', '${escape(_("Public"))}') + +// Menus.js:181, OptionsTab.js:196, QueuePage.js:41 GetText.add('Queue', '${escape(_("Queue"))}') -// Deluge.Preferences.Queue.js:63 +// QueuePage.js:62 GetText.add('Queue new torrents to top', '${escape(_("Queue new torrents to top"))}') -// Deluge.Preferences.Bandwidth.js:152 +// BandwidthPage.js:129 GetText.add('Rate limit IP overhead', '${escape(_("Rate limit IP overhead"))}') -// Deluge.Torrents.js:172 +// TorrentGrid.js:166 GetText.add('Ratio', '${escape(_("Ratio"))}') -// Deluge.ConnectionManager.js:229, Deluge.Toolbar.js:58, Deluge.Add.js:450, Deluge.EditTrackers.js:249 +// EditTrackersWindow.js:122, ConnectionManager.js:107, Toolbar.js:64, AddWindow.js:112 GetText.add('Remove', '${escape(_("Remove"))}') -// Deluge.Menus.js:230, Deluge.Remove.js:38, Deluge.Remove.js:55 +// Menus.js:224, RemoveWindow.js:39, RemoveWindow.js:57 GetText.add('Remove Torrent', '${escape(_("Remove Torrent"))}') -// Deluge.Remove.js:54 +// RemoveWindow.js:56 GetText.add('Remove With Data', '${escape(_("Remove With Data"))}') -// Deluge.Details.Options.js:253 +// OptionsTab.js:253 GetText.add('Remove at ratio', '${escape(_("Remove at ratio"))}') -// Deluge.Preferences.Queue.js:209 +// QueuePage.js:198 GetText.add('Remove torrent when share ratio is reached', '${escape(_("Remove torrent when share ratio is reached"))}') -// Deluge.Toolbar.js:72, Deluge.Menus.js:99 +// Menus.js:94, Toolbar.js:76 GetText.add('Resume', '${escape(_("Resume"))}') -// Deluge.EditTrackers.js:117 +// EditTrackerWindow.js:57 GetText.add('Save', '${escape(_("Save"))}') -// Deluge.Preferences.Queue.js:154 +// TorrentGrid.js:200 +GetText.add('Save Path', '${escape(_("Save Path"))}') + +// QueuePage.js:149 GetText.add('Seed Time (m)', '${escape(_("Seed Time (m)"))}') -// Deluge.Torrents.js:142 +// TorrentGrid.js:134, TorrentGrid.js:255 GetText.add('Seeders', '${escape(_("Seeders"))}') -// Deluge.Preferences.Queue.js:123 +// QueuePage.js:120 GetText.add('Seeding', '${escape(_("Seeding"))}') -// Deluge.Add.File.js:66 +// FileWindow.js:66 GetText.add('Select a torrent', '${escape(_("Select a torrent"))}') -// Deluge.Preferences.Plugins.js:70 +// InstallPluginWindow.js:65 GetText.add('Select an egg', '${escape(_("Select an egg"))}') -// Deluge.Preferences.Interface.js:130 +// InterfacePage.js:129 GetText.add('Server', '${escape(_("Server"))}') -// Deluge.Preferences.Interface.js:141 +// InterfacePage.js:140 GetText.add('Session Timeout', '${escape(_("Session Timeout"))}') -// Deluge.Preferences.Cache.js:53, Deluge.Preferences.Encryption.js:53 +// Statusbar.js:96 +GetText.add('Set Maximum Connections', '${escape(_("Set Maximum Connections"))}') + +// Statusbar.js:143 +GetText.add('Set Maximum Download Speed', '${escape(_("Set Maximum Download Speed"))}') + +// Statusbar.js:191 +GetText.add('Set Maximum Upload Speed', '${escape(_("Set Maximum Upload Speed"))}') + +// EncryptionPage.js:51, CachePage.js:52 GetText.add('Settings', '${escape(_("Settings"))}') -// Deluge.Preferences.Queue.js:130 +// QueuePage.js:127 GetText.add('Share Ratio Limit', '${escape(_("Share Ratio Limit"))}') -// Deluge.Preferences.Queue.js:142 +// QueuePage.js:138 GetText.add('Share Time Ratio', '${escape(_("Share Time Ratio"))}') -// Deluge.Preferences.Interface.js:72 +// TorrentGrid.js:220 +GetText.add('Shared', '${escape(_("Shared"))}') + +// InterfacePage.js:71 GetText.add('Show filters with zero torrents', '${escape(_("Show filters with zero torrents"))}') -// Deluge.Preferences.Interface.js:65 +// InterfacePage.js:64 GetText.add('Show session speed in titlebar', '${escape(_("Show session speed in titlebar"))}') -// Deluge.Preferences.Interface.js:79 -GetText.add('Show trackers with zero torrents', '${escape(_("Show trackers with zero torrents"))}') - -// Deluge.Add.js:67, Deluge.Details.Files.js:57, Deluge.Torrents.js:130 +// TorrentGrid.js:122, FilesTab.js:45, FilesTab.js:54 GetText.add('Size', '${escape(_("Size"))}') -// Deluge.Preferences.Proxy.js:58 +// ProxyField.js:56 GetText.add('Socksv4', '${escape(_("Socksv4"))}') -// Deluge.Preferences.Proxy.js:59 +// ProxyField.js:57 GetText.add('Socksv5', '${escape(_("Socksv5"))}') -// Deluge.Preferences.Proxy.js:60 +// ProxyField.js:58 GetText.add('Socksv5 with Auth', '${escape(_("Socksv5 with Auth"))}') -// Deluge.ConnectionManager.js:291 +// ConnectionManager.js:191 GetText.add('Start Daemon', '${escape(_("Start Daemon"))}') -// Deluge.Sidebar.js:37 +// Sidebar.js:34 GetText.add('State', '${escape(_("State"))}') -// Deluge.ConnectionManager.js:186, Deluge.Details.Status.js:35 +// ConnectionManager.js:68, StatusTab.js:39, DetailsTab.js:52 GetText.add('Status', '${escape(_("Status"))}') -// Deluge.ConnectionManager.js:237, Deluge.ConnectionManager.js:297, Deluge.ConnectionManager.js:415 +// ConnectionManager.js:115, ConnectionManager.js:197, ConnectionManager.js:328 GetText.add('Stop Daemon', '${escape(_("Stop Daemon"))}') -// Deluge.Details.Options.js:225 +// OptionsTab.js:225 GetText.add('Stop seed at ratio', '${escape(_("Stop seed at ratio"))}') -// Deluge.Preferences.Queue.js:183 +// QueuePage.js:175 GetText.add('Stop seeding when share ratio reaches:', '${escape(_("Stop seeding when share ratio reaches:"))}') -// Deluge.Preferences.Other.js:69 +// OtherPage.js:72 GetText.add('System Information', '${escape(_("System Information"))}') -// Deluge.Preferences.Network.js:177 +// NetworkPage.js:173 GetText.add('TOS', '${escape(_("TOS"))}') -// Deluge.EditTrackers.js:198 +// EditTrackersWindow.js:76 GetText.add('Tier', '${escape(_("Tier"))}') -// Deluge.Menus.js:192 +// Menus.js:186 GetText.add('Top', '${escape(_("Top"))}') -// Deluge.Preferences.Queue.js:77 +// QueuePage.js:76 GetText.add('Total Active', '${escape(_("Total Active"))}') -// Deluge.Preferences.Queue.js:89 +// QueuePage.js:85 GetText.add('Total Active Downloading', '${escape(_("Total Active Downloading"))}') -// Deluge.Preferences.Queue.js:101 +// QueuePage.js:94 GetText.add('Total Active Seeding', '${escape(_("Total Active Seeding"))}') -// Deluge.Preferences.Proxy.js:196, Deluge.Torrents.js:190, Deluge.EditTrackers.js:126, Deluge.EditTrackers.js:205 +// DetailsTab.js:49 +GetText.add('Total Size', '${escape(_("Total Size"))}') + +// EditTrackersWindow.js:80, TorrentGrid.js:193, EditTrackerWindow.js:66, DetailsTab.js:53, ProxyPage.js:63 GetText.add('Tracker', '${escape(_("Tracker"))}') -// Deluge.Sidebar.js:38 +// Sidebar.js:35 GetText.add('Tracker Host', '${escape(_("Tracker Host"))}') -// Deluge.EditTrackers.js:67 +// AddTrackerWindow.js:66 GetText.add('Trackers', '${escape(_("Trackers"))}') -// Deluge.Preferences.Proxy.js:50 +// ProxyField.js:48 GetText.add('Type', '${escape(_("Type"))}') -// Deluge.Menus.js:127 +// Menus.js:121 GetText.add('U/L Speed Limit', '${escape(_("U/L Speed Limit"))}') -// Deluge.Preferences.Network.js:203 +// NetworkPage.js:199 GetText.add('UPnP', '${escape(_("UPnP"))}') -// Deluge.Menus.js:123, Deluge.Menus.js:141, Deluge.Menus.js:159, Deluge.Menus.js:177, Deluge.Menus.js:295, Deluge.Menus.js:342, Deluge.Menus.js:389 +// OptionsPanel.js:142 +GetText.add('Unable to set file priority!', '${escape(_("Unable to set file priority!"))}') + +// Statusbar.js:85, Statusbar.js:133, Statusbar.js:181, Menus.js:117, Menus.js:135, Menus.js:153, Menus.js:171 GetText.add('Unlimited', '${escape(_("Unlimited"))}') -// Deluge.Toolbar.js:79, Deluge.Menus.js:198, Deluge.EditTrackers.js:225 +// EditTrackersWindow.js:102, Menus.js:192, Toolbar.js:83, FileBrowser.js:53 GetText.add('Up', '${escape(_("Up"))}') -// Deluge.Torrents.js:160 +// TorrentGrid.js:248 +GetText.add('Up Limit', '${escape(_("Up Limit"))}') + +// TorrentGrid.js:154 GetText.add('Up Speed', '${escape(_("Up Speed"))}') -// Deluge.Menus.js:218 +// Menus.js:212 GetText.add('Update Tracker', '${escape(_("Update Tracker"))}') -// Deluge.Preferences.Other.js:53 +// OtherPage.js:56 GetText.add('Updates', '${escape(_("Updates"))}') -// Deluge.Menus.js:163 +// Menus.js:157 GetText.add('Upload Slot Limit', '${escape(_("Upload Slot Limit"))}') -// Deluge.Statusbar.js:39 +// Statusbar.js:152 GetText.add('Upload Speed', '${escape(_("Upload Speed"))}') -// Deluge.Preferences.Plugins.js:83 +// TorrentGrid.js:234 +GetText.add('Uploaded', '${escape(_("Uploaded"))}') + +// InstallPluginWindow.js:78 GetText.add('Uploading your plugin...', '${escape(_("Uploading your plugin..."))}') -// Deluge.Add.File.js:81 +// FileWindow.js:82 GetText.add('Uploading your torrent...', '${escape(_("Uploading your torrent..."))}') -// Deluge.Add.Url.js:65, Deluge.Add.js:437 +// UrlWindow.js:60, AddWindow.js:102 GetText.add('Url', '${escape(_("Url"))}') -// Deluge.Preferences.Downloads.js:117 +// DownloadsPage.js:121 GetText.add('Use Compact', '${escape(_("Use Compact"))}') -// Deluge.Preferences.Downloads.js:114 +// DownloadsPage.js:118 GetText.add('Use Full', '${escape(_("Use Full"))}') -// Deluge.Preferences.Network.js:62, Deluge.Preferences.Network.js:117 +// NetworkPage.js:60, NetworkPage.js:113 GetText.add('Use Random Ports', '${escape(_("Use Random Ports"))}') -// Deluge.Preferences.Interface.js:165 +// InterfacePage.js:158 GetText.add('Use SSL (paths relative to Deluge config folder)', '${escape(_("Use SSL (paths relative to Deluge config folder)"))}') -// Deluge.ConnectionManager.js:101, Deluge.Preferences.Proxy.js:93 +// AddConnectionWindow.js:83, ProxyField.js:88 GetText.add('Username', '${escape(_("Username"))}') -// Deluge.ConnectionManager.js:199 +// ConnectionManager.js:80 GetText.add('Version', '${escape(_("Version"))}') -// Deluge.Preferences.Proxy.js:190 +// ProxyPage.js:57 GetText.add('Web Seed', '${escape(_("Web Seed"))}') -// Deluge.Preferences.Other.js:87 +// OtherPage.js:90 GetText.add('Yes, please send anonymous statistics', '${escape(_("Yes, please send anonymous statistics"))}') -// Deluge.Login.js:140 +// LoginWindow.js:128 GetText.add('You entered an incorrect password', '${escape(_("You entered an incorrect password"))}') -// Deluge.Preferences.Interface.js:218 +// InterfacePage.js:215 GetText.add('Your old password was incorrect!', '${escape(_("Your old password was incorrect!"))}') -// Deluge.Preferences.Interface.js:228 +// InterfacePage.js:225 GetText.add('Your password was successfully changed!', '${escape(_("Your password was successfully changed!"))}') -// Deluge.Preferences.Interface.js:203 +// InterfacePage.js:200 GetText.add('Your passwords don\'t match!', '${escape(_("Your passwords don\'t match!"))}') - From dd8dac0574c101102093dfdd0c212c53c147d6f0 Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Sat, 24 Nov 2012 10:50:11 +0000 Subject: [PATCH 04/58] Fix #2212 : WebUI: Unable to scroll in proxy preferences page --- .../js/deluge-all/preferences/ProxyPage.js | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/deluge/ui/web/js/deluge-all/preferences/ProxyPage.js b/deluge/ui/web/js/deluge-all/preferences/ProxyPage.js index db4740fb6..0cb61a439 100644 --- a/deluge/ui/web/js/deluge-all/preferences/ProxyPage.js +++ b/deluge/ui/web/js/deluge-all/preferences/ProxyPage.js @@ -1,6 +1,6 @@ /*! * Deluge.preferences.ProxyPage.js - * + * * Copyright (c) Damien Churchill 2009-2010 * * This program is free software; you can redistribute it and/or modify @@ -40,11 +40,12 @@ Deluge.preferences.Proxy = Ext.extend(Ext.form.FormPanel, { config = Ext.apply({ border: false, title: _('Proxy'), - layout: 'form' + layout: 'form', + autoScroll: true }, config); Deluge.preferences.Proxy.superclass.constructor.call(this, config); }, - + initComponent: function() { Deluge.preferences.Proxy.superclass.initComponent.call(this); this.peer = this.add(new Deluge.preferences.ProxyField({ @@ -52,28 +53,28 @@ Deluge.preferences.Proxy = Ext.extend(Ext.form.FormPanel, { name: 'peer' })); this.peer.on('change', this.onProxyChange, this); - + this.web_seed = this.add(new Deluge.preferences.ProxyField({ title: _('Web Seed'), name: 'web_seed' })); this.web_seed.on('change', this.onProxyChange, this); - + this.tracker = this.add(new Deluge.preferences.ProxyField({ title: _('Tracker'), name: 'tracker' })); this.tracker.on('change', this.onProxyChange, this); - + this.dht = this.add(new Deluge.preferences.ProxyField({ title: _('DHT'), name: 'dht' })); this.dht.on('change', this.onProxyChange, this); - + deluge.preferences.getOptionsManager().bind('proxies', this); }, - + getValue: function() { return { 'dht': this.dht.getValue(), @@ -82,18 +83,18 @@ Deluge.preferences.Proxy = Ext.extend(Ext.form.FormPanel, { 'web_seed': this.web_seed.getValue() } }, - + setValue: function(value) { for (var proxy in value) { this[proxy].setValue(value[proxy]); } }, - + onProxyChange: function(field, newValue, oldValue) { var newValues = this.getValue(); var oldValues = Ext.apply({}, newValues); oldValues[field.getName()] = oldValue; - + this.fireEvent('change', this, newValues, oldValues); } }); From 0676d7e2dc0cb4950af314eb889d3989a537db84 Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Sat, 24 Nov 2012 12:16:40 +0000 Subject: [PATCH 05/58] Fix #2120 : WebUI: Manually entered values not being saved in Spinners --- deluge/ui/web/js/ext-extensions/form/SpinnerGroup.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/deluge/ui/web/js/ext-extensions/form/SpinnerGroup.js b/deluge/ui/web/js/ext-extensions/form/SpinnerGroup.js index 7e042fb5a..c63f7719f 100644 --- a/deluge/ui/web/js/ext-extensions/form/SpinnerGroup.js +++ b/deluge/ui/web/js/ext-extensions/form/SpinnerGroup.js @@ -1,6 +1,6 @@ /*! * Ext.ux.form.SpinnerGroup.js - * + * * Copyright (c) Damien Churchill 2009-2010 * * This program is free software; you can redistribute it and/or modify @@ -154,6 +154,7 @@ Ext.ux.form.SpinnerGroup = Ext.extend(Ext.form.CheckboxGroup, { this.items.each(function(field) { field.on('spin', this.onFieldChange, this); + field.on('change', this.onFieldChange, this); }, this); if (this.lazyValueSet) { From 84bc2e78bc3f1ff0ee9b766db4aa083b8bdbbfb1 Mon Sep 17 00:00:00 2001 From: sedulous Date: Sat, 24 Nov 2012 12:34:20 +0000 Subject: [PATCH 06/58] Fix #2103 : WebUI: Sorting by name is case-sensitive --- deluge/ui/web/js/deluge-all/TorrentGrid.js | 2 +- deluge/ui/web/js/deluge-all/data/SortTypes.js | 8 ++++++-- deluge/ui/web/js/deluge-all/data/TorrentRecord.js | 5 +++-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/deluge/ui/web/js/deluge-all/TorrentGrid.js b/deluge/ui/web/js/deluge-all/TorrentGrid.js index 4c41b06bc..50be33b03 100644 --- a/deluge/ui/web/js/deluge-all/TorrentGrid.js +++ b/deluge/ui/web/js/deluge-all/TorrentGrid.js @@ -265,7 +265,7 @@ idProperty: 'id', fields: [ {name: 'queue', sortType: Deluge.data.SortTypes.asQueuePosition}, - {name: 'name'}, + {name: 'name', sortType: Deluge.data.SortTypes.asName}, {name: 'total_size', type: 'int'}, {name: 'state'}, {name: 'progress', type: 'float'}, diff --git a/deluge/ui/web/js/deluge-all/data/SortTypes.js b/deluge/ui/web/js/deluge-all/data/SortTypes.js index e404ba348..3a6de182f 100644 --- a/deluge/ui/web/js/deluge-all/data/SortTypes.js +++ b/deluge/ui/web/js/deluge-all/data/SortTypes.js @@ -1,6 +1,6 @@ /*! * Deluge.data.SortTypes.js - * + * * Copyright (c) Damien Churchill 2009-2010 * * This program is free software; you can redistribute it and/or modify @@ -39,7 +39,7 @@ Ext.namespace('Deluge.data'); * * @class Deluge.data.SortTypes * @singleton - */ + */ Deluge.data.SortTypes = { asIPAddress: function(value) { var d = value.match(/(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\:(\d+)/); @@ -48,5 +48,9 @@ Deluge.data.SortTypes = { asQueuePosition: function(value) { return (value > -1) ? value : Number.MAX_VALUE; + }, + + asName: function(value) { + return String(value).toLowerCase(); } } diff --git a/deluge/ui/web/js/deluge-all/data/TorrentRecord.js b/deluge/ui/web/js/deluge-all/data/TorrentRecord.js index d13806c14..f92cfc641 100644 --- a/deluge/ui/web/js/deluge-all/data/TorrentRecord.js +++ b/deluge/ui/web/js/deluge-all/data/TorrentRecord.js @@ -1,6 +1,6 @@ /*! * Deluge.data.TorrentRecord.js - * + * * Copyright (c) Damien Churchill 2009-2010 * * This program is free software; you can redistribute it and/or modify @@ -47,7 +47,8 @@ Deluge.data.Torrent = Ext.data.Record.create([{ type: 'int' }, { name: 'name', - type: 'string' + type: 'string', + sortType: Deluge.data.SortTypes.asName }, { name: 'total_size', type: 'int' From c37cfdfa2fb0fd17ccebf402f09e8e18a8e1c0c6 Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Sat, 24 Nov 2012 15:49:57 +0000 Subject: [PATCH 07/58] Fix config not defined in ipcinterface --- deluge/ui/gtkui/ipcinterface.py | 1 + 1 file changed, 1 insertion(+) diff --git a/deluge/ui/gtkui/ipcinterface.py b/deluge/ui/gtkui/ipcinterface.py index d061a7a8d..242e6b2d7 100644 --- a/deluge/ui/gtkui/ipcinterface.py +++ b/deluge/ui/gtkui/ipcinterface.py @@ -59,6 +59,7 @@ log = logging.getLogger(__name__) class IPCProtocolServer(Protocol): def dataReceived(self, data): + config = ConfigManager("gtkui.conf") data = rencode.loads(data) if not data or config["focus_main_window_on_add"]: component.get("MainWindow").present() From b1cf5b9c405d9c3ea37f29d252ef39bd71181ff3 Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Sat, 24 Nov 2012 16:10:15 +0000 Subject: [PATCH 08/58] Fix #1890 : WebUI: Column in files and peers view could use some spacing Also fixed the SpinnerGroup to no longer show horizontal scrollbar and added vertical scrolling to detailstab. --- deluge/ui/web/css/deluge.css | 51 ++++++++++++++++++- .../web/js/deluge-all/details/DetailsTab.js | 2 +- .../ui/web/js/deluge-all/details/FilesTab.js | 17 +++---- .../js/ext-extensions/form/SpinnerGroup.js | 1 + 4 files changed, 59 insertions(+), 12 deletions(-) diff --git a/deluge/ui/web/css/deluge.css b/deluge/ui/web/css/deluge.css index 4701d7e66..ab02a4536 100644 --- a/deluge/ui/web/css/deluge.css +++ b/deluge/ui/web/css/deluge.css @@ -244,10 +244,57 @@ dl.singleline dd { } /* Files TreeGrid */ -.x-treegrid-col { - overflow: hidden; +.x-treegrid-root-table { + border-right: 1px solid; } +.x-treegrid-root-node { + overflow: auto; +} + +.x-treegrid-hd-hidden { + visibility: hidden; + border: 0; + width: 0; +} + +.x-treegrid-col { + border-bottom: 1px solid; + height: 20px; + overflow: hidden; + vertical-align: top; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + white-space: nowrap; +} + +.x-treegrid-text { + padding-left: 4px; + -moz-user-select: none; + -khtml-user-select: none; +} + +.x-treegrid-resizer { + border-left:1px solid; + border-right:1px solid; + position:absolute; + left:0; + top:0; +} + +.x-treegrid-header-inner { + overflow: hidden; +} + +.x-treegrid-root-table, +.x-treegrid-col { + border-color: #ededed; +} + +.x-treegrid-resizer { + border-left-color:#555; + border-right-color:#555; +} /* Options Tab Styles */ .x-deluge-options-label { diff --git a/deluge/ui/web/js/deluge-all/details/DetailsTab.js b/deluge/ui/web/js/deluge-all/details/DetailsTab.js index ca41478d4..82d54f3bc 100644 --- a/deluge/ui/web/js/deluge-all/details/DetailsTab.js +++ b/deluge/ui/web/js/deluge-all/details/DetailsTab.js @@ -36,7 +36,7 @@ Deluge.details.DetailsTab = Ext.extend(Ext.Panel, { title: _('Details'), fields: {}, - + autoScroll: true, queuedItems: {}, oldData: {}, diff --git a/deluge/ui/web/js/deluge-all/details/FilesTab.js b/deluge/ui/web/js/deluge-all/details/FilesTab.js index 061ed7950..31ab79f55 100644 --- a/deluge/ui/web/js/deluge-all/details/FilesTab.js +++ b/deluge/ui/web/js/deluge-all/details/FilesTab.js @@ -1,6 +1,6 @@ /*! * Deluge.details.FilesTab.js - * + * * Copyright (c) Damien Churchill 2009-2010 * * This program is free software; you can redistribute it and/or modify @@ -29,12 +29,11 @@ * this exception statement from your version. If you delete this exception * statement from all source files in the program, then also delete it here. */ - + Deluge.details.FilesTab = Ext.extend(Ext.ux.tree.TreeGrid, { title: _('Files'), - autoScroll: true, rootVisible: false, columns: [{ @@ -74,7 +73,7 @@ Deluge.details.FilesTab = Ext.extend(Ext.ux.tree.TreeGrid, { } }) }], - + selModel: new Ext.tree.MultiSelectionModel(), initComponent: function() { @@ -130,7 +129,7 @@ Deluge.details.FilesTab = Ext.extend(Ext.ux.tree.TreeGrid, { this.clear(); this.torrentId = torrentId; } - + deluge.client.web.get_torrent_files(torrentId, { success: this.onRequestComplete, scope: this, @@ -163,7 +162,7 @@ Deluge.details.FilesTab = Ext.extend(Ext.ux.tree.TreeGrid, { folderSort: true }); }, - + onContextMenu: function(node, e) { e.stopEvent(); var selModel = this.getSelectionModel(); @@ -173,7 +172,7 @@ Deluge.details.FilesTab = Ext.extend(Ext.ux.tree.TreeGrid, { } deluge.menus.filePriorities.showAt(e.getPoint()); }, - + onItemClick: function(baseItem, e) { switch (baseItem.id) { case 'expandAll': @@ -200,7 +199,7 @@ Deluge.details.FilesTab = Ext.extend(Ext.ux.tree.TreeGrid, { return; } }); - + var priorities = new Array(Ext.keys(indexes).length); for (var index in indexes) { priorities[index] = indexes[index]; @@ -217,7 +216,7 @@ Deluge.details.FilesTab = Ext.extend(Ext.ux.tree.TreeGrid, { break; } }, - + onRequestComplete: function(files, options) { if (!this.getRootNode().hasChildNodes()) { this.createFileTree(files); diff --git a/deluge/ui/web/js/ext-extensions/form/SpinnerGroup.js b/deluge/ui/web/js/ext-extensions/form/SpinnerGroup.js index c63f7719f..4ad3a7bf1 100644 --- a/deluge/ui/web/js/ext-extensions/form/SpinnerGroup.js +++ b/deluge/ui/web/js/ext-extensions/form/SpinnerGroup.js @@ -38,6 +38,7 @@ Ext.ux.form.SpinnerGroup = Ext.extend(Ext.form.CheckboxGroup, { // private defaultType: 'spinnerfield', + anchor: '98%', // private groupCls: 'x-form-spinner-group', From cd41089e49d05da93c96104459954825ce61bcc5 Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Sat, 24 Nov 2012 16:49:06 +0000 Subject: [PATCH 09/58] Fix #2069 : WebUI: Login window layout problem when using larger than default font size --- deluge/ui/web/js/deluge-all/LoginWindow.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/deluge/ui/web/js/deluge-all/LoginWindow.js b/deluge/ui/web/js/deluge-all/LoginWindow.js index de77fd78f..2946a0155 100644 --- a/deluge/ui/web/js/deluge-all/LoginWindow.js +++ b/deluge/ui/web/js/deluge-all/LoginWindow.js @@ -59,15 +59,18 @@ Deluge.LoginWindow = Ext.extend(Ext.Window, { this.form = this.add({ xtype: 'form', baseCls: 'x-plain', - labelWidth: 55, - width: 300, - defaults: {width: 200}, + labelWidth: 120, + labelAlign: 'right', + defaults: {width: 110}, defaultType: 'textfield' }); this.passwordField = this.form.add({ xtype: 'textfield', fieldLabel: _('Password'), + grow: true, + growMin: '110', + growMax: '145', id: '_password', name: 'password', inputType: 'password' From d3d07f7f11d664414d4ab2d7dda628ecf956ab4d Mon Sep 17 00:00:00 2001 From: Asmageddon Date: Sun, 25 Nov 2012 20:12:55 +0100 Subject: [PATCH 10/58] Fixed setting move on complete option in new console --- deluge/ui/console/modes/torrent_actions.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/deluge/ui/console/modes/torrent_actions.py b/deluge/ui/console/modes/torrent_actions.py index 2988245e1..fb6a9f4cd 100644 --- a/deluge/ui/console/modes/torrent_actions.py +++ b/deluge/ui/console/modes/torrent_actions.py @@ -250,6 +250,8 @@ def torrent_action(idx, data, mode, ids): for tid in ids: if "move_on_completed_path" in options: client.core.set_torrent_move_completed_path(tid, options["move_on_completed_path"]) + if "move_on_completed" in options: + client.core.set_torrent_move_completed(tid, options["move_on_completed"]) if "is_auto_managed" in options: client.core.set_torrent_auto_managed(tid, options["is_auto_managed"]) if "remove_at_ratio" in options: From 294fc48bd17e00a5df17e4dae532d0e08d50d812 Mon Sep 17 00:00:00 2001 From: Asmageddon Date: Sun, 25 Nov 2012 20:18:35 +0100 Subject: [PATCH 11/58] Fixed setting some of the torrent options via the manage command --- deluge/ui/console/commands/manage.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/deluge/ui/console/commands/manage.py b/deluge/ui/console/commands/manage.py index ab781b768..ef66829d4 100644 --- a/deluge/ui/console/commands/manage.py +++ b/deluge/ui/console/commands/manage.py @@ -133,7 +133,22 @@ class Command(BaseCommand): deferred.callback(True) self.console.write("Setting %s to %s for torrents %s.." % (key, val, torrent_ids)) - client.core.set_torrent_options(torrent_ids, {key: val}).addCallback(on_set_config) + + + for tid in torrent_ids: + if key == "move_on_completed_path": + client.core.set_torrent_move_completed_path(tid, val).addCallback(on_set_config) + elif key == "move_on_completed": + client.core.set_torrent_move_completed(tid, val).addCallback(on_set_config) + elif key == "is_auto_managed": + client.core.set_torrent_auto_managed(tid, val).addCallback(on_set_config) + elif key == "remove_at_ratio": + client.core.set_torrent_remove_at_ratio(tid, val).addCallback(on_set_config) + elif key == "prioritize_first_last": + client.core.set_torrent_prioritize_first_last(tid, val).addCallback(on_set_config) + else: + client.core.set_torrent_options(torrent_ids, {key: val}).addCallback(on_set_config) + break return deferred def complete(self, line): From 751bc317ea89514b0e3641f362d0aa9fb2ec4fbd Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Sun, 25 Nov 2012 23:30:13 +0000 Subject: [PATCH 12/58] Fix #2201 : auth fails if auth file has extra newlines --- deluge/core/authmanager.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/deluge/core/authmanager.py b/deluge/core/authmanager.py index 771043e8b..f8cffbb7c 100644 --- a/deluge/core/authmanager.py +++ b/deluge/core/authmanager.py @@ -236,10 +236,10 @@ class AuthManager(component.Component): f = open(auth_file, "r").readlines() for line in f: - if line.startswith("#"): - # This is a comment line - continue line = line.strip() + if line.startswith("#") or not line: + # This line is a comment or empty + continue try: lsplit = line.split(":") except Exception, e: From 09e43f3e41fe97db4e3e3b12f7542c5414d2db17 Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Sun, 25 Nov 2012 14:38:29 +0000 Subject: [PATCH 13/58] Fix use of translated text for widget name in build_menu_radio_list --- deluge/ui/gtkui/common.py | 4 ++-- deluge/ui/gtkui/statusbar.py | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/deluge/ui/gtkui/common.py b/deluge/ui/gtkui/common.py index 4b56048e5..088223803 100644 --- a/deluge/ui/gtkui/common.py +++ b/deluge/ui/gtkui/common.py @@ -111,7 +111,7 @@ def build_menu_radio_list(value_list, callback, pref_value=None, if show_notset: menuitem = gtk.RadioMenuItem(group, notset_label) - menuitem.set_name(notset_label) + menuitem.set_name("unlimited") if pref_value < notset_lessthan and pref_value != None: menuitem.set_active(True) if show_activated and pref_value == 1: @@ -124,7 +124,7 @@ def build_menu_radio_list(value_list, callback, pref_value=None, menuitem = gtk.SeparatorMenuItem() menu.append(menuitem) menuitem = gtk.MenuItem(_("Other...")) - menuitem.set_name(_("Other...")) + menuitem.set_name("other") menuitem.connect("activate", callback) menu.append(menuitem) diff --git a/deluge/ui/gtkui/statusbar.py b/deluge/ui/gtkui/statusbar.py index c433b2834..f4219900c 100644 --- a/deluge/ui/gtkui/statusbar.py +++ b/deluge/ui/gtkui/statusbar.py @@ -392,9 +392,9 @@ class StatusBar(component.Component): def _on_set_download_speed(self, widget): log.debug("_on_set_download_speed") - if widget.get_name() == _("Unlimited"): + if widget.get_name() == "unlimited": value = -1 - elif widget.get_name() == _("Other..."): + elif widget.get_name() == "other": value = common.show_other_dialog( _("Set Maximum Download Speed"), _("KiB/s"), None, "downloading.svg", self.max_download_speed) if value == None: @@ -420,9 +420,9 @@ class StatusBar(component.Component): def _on_set_upload_speed(self, widget): log.debug("_on_set_upload_speed") - if widget.get_name() == _("Unlimited"): + if widget.get_name() == "unlimited": value = -1 - elif widget.get_name() == _("Other..."): + elif widget.get_name() == "other": value = common.show_other_dialog( _("Set Maximum Upload Speed"), _("KiB/s"), None, "seeding.svg", self.max_upload_speed) if value == None: @@ -447,9 +447,9 @@ class StatusBar(component.Component): def _on_set_connection_limit(self, widget): log.debug("_on_set_connection_limit") - if widget.get_name() == _("Unlimited"): + if widget.get_name() == "unlimited": value = -1 - elif widget.get_name() == _("Other..."): + elif widget.get_name() == "other": value = common.show_other_dialog( _("Set Maximum Connections"), "", gtk.STOCK_NETWORK, None, self.max_connections) if value == None: From 88223fc058e3c03d765870c07ac206566247609d Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Mon, 26 Nov 2012 01:59:22 +0000 Subject: [PATCH 14/58] Fix #2086 : Enable submenus for appindicator --- deluge/ui/gtkui/glade/tray_menu.ui | 3 ++ deluge/ui/gtkui/systemtray.py | 55 +++++++++++++----------------- 2 files changed, 26 insertions(+), 32 deletions(-) diff --git a/deluge/ui/gtkui/glade/tray_menu.ui b/deluge/ui/gtkui/glade/tray_menu.ui index c92797cd2..b621e5fd4 100644 --- a/deluge/ui/gtkui/glade/tray_menu.ui +++ b/deluge/ui/gtkui/glade/tray_menu.ui @@ -61,6 +61,7 @@ True menu-item-image1 False + True
@@ -109,6 +110,7 @@ True download-limit-image False + True @@ -120,6 +122,7 @@ True upload-limit-image False + True diff --git a/deluge/ui/gtkui/systemtray.py b/deluge/ui/gtkui/systemtray.py index c54b0943a..2b4c02f7f 100644 --- a/deluge/ui/gtkui/systemtray.py +++ b/deluge/ui/gtkui/systemtray.py @@ -138,10 +138,9 @@ class SystemTray(component.Component): self.tray.connect("activate", self.on_tray_clicked) self.tray.connect("popup-menu", self.on_tray_popup) - # For some reason these icons do not display in appindicator - self.builder.get_object("download-limit-image").set_from_file( + self.builder.get_object("download-limit-image").set_from_file( deluge.common.get_pixmap("downloading16.png")) - self.builder.get_object("upload-limit-image").set_from_file( + self.builder.get_object("upload-limit-image").set_from_file( deluge.common.get_pixmap("seeding16.png")) client.register_event_handler("ConfigValueChangedEvent", self.config_value_changed) @@ -162,16 +161,6 @@ class SystemTray(component.Component): self.builder.get_object("menuitem_quitdaemon").hide() self.builder.get_object("separatormenuitem4").hide() - # These do not work with appindicator currently and can crash Deluge. - # Related to Launchpad bug #608219 - if appindicator and self.config["enable_appindicator"]: - self.hide_widget_list.remove("menuitem_download_limit") - self.hide_widget_list.remove("menuitem_upload_limit") - self.hide_widget_list.remove("separatormenuitem3") - self.builder.get_object("menuitem_download_limit").hide() - self.builder.get_object("menuitem_upload_limit").hide() - self.builder.get_object("separatormenuitem3").hide() - # Show widgets in the hide list because we've connected to a host for widget in self.hide_widget_list: self.builder.get_object(widget).show() @@ -266,16 +255,15 @@ class SystemTray(component.Component): def build_tray_bwsetsubmenu(self): # Create the Download speed list sub-menu submenu_bwdownset = common.build_menu_radio_list( - self.config["tray_download_speed_list"], self.tray_setbwdown, + self.config["tray_download_speed_list"], self.on_tray_setbwdown, self.max_download_speed, _("KiB/s"), show_notset=True, show_other=True) # Create the Upload speed list sub-menu submenu_bwupset = common.build_menu_radio_list( - self.config["tray_upload_speed_list"], self.tray_setbwup, + self.config["tray_upload_speed_list"], self.on_tray_setbwup, self.max_upload_speed, _("KiB/s"), show_notset=True, show_other=True) - # Add the sub-menus to the tray menu self.builder.get_object("menuitem_download_limit").set_submenu( submenu_bwdownset) @@ -286,10 +274,6 @@ class SystemTray(component.Component): submenu_bwdownset.show_all() submenu_bwupset.show_all() - # Re-set the menu to partly work around Launchpad bug #608219 - if appindicator and self.config["enable_appindicator"]: - self.indicator.set_menu(self.tray_menu) - def disable(self,invert_app_ind_conf=False): """Disables the system tray icon or appindicator.""" try: @@ -399,10 +383,22 @@ class SystemTray(component.Component): self.window.quit(shutdown=True) - def tray_setbwdown(self, widget, data=None): + def on_tray_setbwdown(self, widget, data=None): + if isinstance(widget, gtk.RadioMenuItem): + #ignore previous radiomenuitem value + if not widget.get_active(): + return self.setbwlimit(widget, _("Set Maximum Download Speed"), "max_download_speed", "tray_download_speed_list", self.max_download_speed, "downloading.svg") + def on_tray_setbwup(self, widget, data=None): + if isinstance(widget, gtk.RadioMenuItem): + #ignore previous radiomenuitem value + if not widget.get_active(): + return + self.setbwlimit(widget, _("Set Maximum Upload Speed"), "max_upload_speed", + "tray_upload_speed_list", self.max_upload_speed, "seeding.svg") + def _on_window_hide(self, widget, data=None): """_on_window_hide - update the menuitem's status""" log.debug("_on_window_hide") @@ -413,26 +409,21 @@ class SystemTray(component.Component): log.debug("_on_window_show") self.builder.get_object("menuitem_show_deluge").set_active(True) - def tray_setbwup(self, widget, data=None): - self.setbwlimit(widget, _("Set Maximum Upload Speed"), "max_upload_speed", - "tray_upload_speed_list", self.max_upload_speed, "seeding.svg") - def setbwlimit(self, widget, string, core_key, ui_key, default, image): """Sets the bandwidth limit based on the user selection.""" - value = widget.get_children()[0].get_text().rstrip(" " + _("KiB/s")) - if value == _("Unlimited"): + value = widget.get_children()[0].get_text().split(" ")[0] + log.debug('setbwlimit: %s', value) + if widget.get_name() == "unlimited": value = -1 - - if value == _("Other..."): + if widget.get_name() == "other": value = common.show_other_dialog(string, _("KiB/s"), None, image, default) if value == None: return - + elif value == 0: + value = -1 # Set the config in the core client.core.set_config({core_key: value}) - self.build_tray_bwsetsubmenu() - def unlock_tray(self, is_showing_dlg=[False]): try: from hashlib import sha1 as sha_hash From b8deea5c76fa75d0806e529d0cc1296371d140c3 Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Fri, 23 Nov 2012 01:29:37 +0000 Subject: [PATCH 15/58] Fix #2208 : Win32 Open Folder not working with non-ascii paths --- deluge/common.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deluge/common.py b/deluge/common.py index ea615df20..73c89daa5 100644 --- a/deluge/common.py +++ b/deluge/common.py @@ -231,7 +231,7 @@ def open_file(path): """ if windows_check(): - os.startfile("%s" % path) + os.startfile(path.decode("utf8")) elif osx_check(): subprocess.Popen(["open", "%s" % path]) else: From 19bbf5ac8fe4a101f98a9d31652aa0e20f0a62ee Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Mon, 26 Nov 2012 13:31:41 +0000 Subject: [PATCH 16/58] Fix Windows tray submenu items requiring right-click instead of left-click --- deluge/ui/gtkui/systemtray.py | 1 + 1 file changed, 1 insertion(+) diff --git a/deluge/ui/gtkui/systemtray.py b/deluge/ui/gtkui/systemtray.py index 2b4c02f7f..9e1248a25 100644 --- a/deluge/ui/gtkui/systemtray.py +++ b/deluge/ui/gtkui/systemtray.py @@ -344,6 +344,7 @@ class SystemTray(component.Component): popup_function = gtk.status_icon_position_menu if deluge.common.windows_check(): popup_function = None + button = 0 self.tray_menu.popup(None, None, popup_function, button, activate_time, status_icon) From bd979da94915d3e42a607ba112e67341cf0b3dba Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Mon, 26 Nov 2012 16:52:41 +0000 Subject: [PATCH 17/58] Update Changelog, translation files and compress js --- ChangeLog | 45 +++++++++++ deluge/ui/web/gettext.js | 20 ++--- deluge/ui/web/js/deluge-all-debug.js | 97 +++++++++++++----------- deluge/ui/web/js/deluge-all.js | 26 +++---- deluge/ui/web/js/ext-extensions-debug.js | 4 +- deluge/ui/web/js/ext-extensions.js | 4 +- 6 files changed, 126 insertions(+), 70 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1077fbfea..c2cd38e4a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -44,6 +44,51 @@ === Deluge 1.3.6 (In Development) === ==== Core ==== * Catch & log KeyError when removing a torrent from the queued torrents set + * Fix moving/renaming torrents with non-ascii characters in libtorrent 0.16 + * Make sure queue order is preserved when restarting + * #2160: Disable use of python bindings for libtorrent extensions and replace with session flag + * #2163: Fix unable add torrent file with empty (0:) encoding tag + * #2201: Fix error in authmanager if auth file has extra newlines + +==== GtkUI ==== + * Add move completed option to add torrent dialog + * Prevent jitter in torrent view + * Fix torrent creation with non-ascii characters + * Fix #2100 : Add option not to bring main window to front when adding torrents through ipcinterface + * Add Quit Dialog when toggling classic mode in preferences and only show connection manager when not in classic mode. + * #2169: Fix 'Download Location' in the Add Torrent Dialog not set correctly when folder typed into Other->Location field + * #2171: Fix the Add Peer dialog not responding if empty or invalid values entered + * #2104: Fix no title set for the appindicator + * #2086: Fix submenus and icons for appindicator + +==== Console ==== + * LP#1004793: Enable use of connect command in non-interactive mode + * Ensure console commands are executed in order + * #2065: Fix crash with missing closing quote + * #1397: Add support for -s STATE in info command + +==== WebUI ==== + * #2112: Fix world readable tmp directory in json_api + * #2069: Fix login window layout problem when using larger than default font size + * #1890: Fix columns in files and peers view could use some spacing + * #2103: Fix sorting by name is case-sensitive [sedulous] + * #2120: Fix manually entered values not being saved in spinners + * #2212: Fix unable to scroll in proxy preferences page + * Fix autoconnecting to the default host + +==== Windows OS ==== + * Hide the cmd windows when running deluged.exe or deluge-web.exe + * Add deluged-debug.exe and deluge-web-debug.exe that still show the cmd window + * Add gtk locale files to fix untranslated text + * Fix the Open Folder option not working with non-ascii paths + * Fix the daemon starting with config dir containing spaces + * Fix Windows tray submenu items requiring right-click instead of left-click + +==== OS X ==== + * Fix Open File/Folder option + +==== Execute ==== + * Fix execute plugin not working with unicode torrent names === Deluge 1.3.5 (09 April 2012) === ==== GtkUI ==== diff --git a/deluge/ui/web/gettext.js b/deluge/ui/web/gettext.js index 538b78b35..4ac07490a 100644 --- a/deluge/ui/web/gettext.js +++ b/deluge/ui/web/gettext.js @@ -212,7 +212,7 @@ GetText.add('Create', '${escape(_("Create"))}') // Menus.js:103 GetText.add('D/L Speed Limit', '${escape(_("D/L Speed Limit"))}') -// NetworkPage.js:225, ProxyPage.js:69 +// NetworkPage.js:225, ProxyPage.js:70 GetText.add('DHT', '${escape(_("DHT"))}') // Statusbar.js:210 @@ -308,7 +308,7 @@ GetText.add('File Browser', '${escape(_("File Browser"))}') // OptionsPanel.js:143 GetText.add('File prioritization is unavailable when using Compact allocation. Would you like to switch to Full allocation?', '${escape(_("File prioritization is unavailable when using Compact allocation. Would you like to switch to Full allocation?"))}') -// FilesTab.js:41, FilesTab.js:50 +// FilesTab.js:40, FilesTab.js:50 GetText.add('Filename', '${escape(_("Filename"))}') // FilesTab.js:35, FilesTab.js:41 @@ -428,7 +428,7 @@ GetText.add('Location', '${escape(_("Location"))}') // LoginWindow.js:45, LoginWindow.js:54 GetText.add('Login', '${escape(_("Login"))}') -// LoginWindow.js:127 +// LoginWindow.js:130 GetText.add('Login Failed', '${escape(_("Login Failed"))}') // Toolbar.js:114 @@ -545,7 +545,7 @@ GetText.add('Path', '${escape(_("Path"))}') // Menus.js:88, Toolbar.js:70 GetText.add('Pause', '${escape(_("Pause"))}') -// ProxyPage.js:51 +// ProxyPage.js:52 GetText.add('Peer', '${escape(_("Peer"))}') // NetworkPage.js:212 @@ -590,7 +590,7 @@ GetText.add('Prioritize First/Last Pieces', '${escape(_("Prioritize First/Last P // DownloadsPage.js:140 GetText.add('Prioritize first and last pieces of torrent', '${escape(_("Prioritize first and last pieces of torrent"))}') -// FilesTab.js:61 +// FilesTab.js:60 GetText.add('Priority', '${escape(_("Priority"))}') // OptionsTab.js:300 @@ -599,7 +599,7 @@ GetText.add('Private', '${escape(_("Private"))}') // InterfacePage.js:166 GetText.add('Private Key', '${escape(_("Private Key"))}') -// TorrentGrid.js:128, FilesTab.js:53 +// TorrentGrid.js:128, FilesTab.js:52 GetText.add('Progress', '${escape(_("Progress"))}') // Statusbar.js:200 @@ -695,7 +695,7 @@ GetText.add('Show filters with zero torrents', '${escape(_("Show filters with ze // InterfacePage.js:64 GetText.add('Show session speed in titlebar', '${escape(_("Show session speed in titlebar"))}') -// TorrentGrid.js:122, FilesTab.js:45, FilesTab.js:54 +// TorrentGrid.js:122, FilesTab.js:44, FilesTab.js:54 GetText.add('Size', '${escape(_("Size"))}') // ProxyField.js:56 @@ -749,7 +749,7 @@ GetText.add('Total Active Seeding', '${escape(_("Total Active Seeding"))}') // DetailsTab.js:49 GetText.add('Total Size', '${escape(_("Total Size"))}') -// EditTrackersWindow.js:80, TorrentGrid.js:193, EditTrackerWindow.js:66, DetailsTab.js:53, ProxyPage.js:63 +// EditTrackersWindow.js:80, TorrentGrid.js:193, EditTrackerWindow.js:66, DetailsTab.js:53, ProxyPage.js:64 GetText.add('Tracker', '${escape(_("Tracker"))}') // Sidebar.js:35 @@ -824,13 +824,13 @@ GetText.add('Username', '${escape(_("Username"))}') // ConnectionManager.js:80 GetText.add('Version', '${escape(_("Version"))}') -// ProxyPage.js:57 +// ProxyPage.js:58 GetText.add('Web Seed', '${escape(_("Web Seed"))}') // OtherPage.js:90 GetText.add('Yes, please send anonymous statistics', '${escape(_("Yes, please send anonymous statistics"))}') -// LoginWindow.js:128 +// LoginWindow.js:131 GetText.add('You entered an incorrect password', '${escape(_("You entered an incorrect password"))}') // InterfacePage.js:215 diff --git a/deluge/ui/web/js/deluge-all-debug.js b/deluge/ui/web/js/deluge-all-debug.js index 390f3f970..ce56ad132 100644 --- a/deluge/ui/web/js/deluge-all-debug.js +++ b/deluge/ui/web/js/deluge-all-debug.js @@ -1,6 +1,6 @@ /*! * Deluge.data.SortTypes.js - * + * * Copyright (c) Damien Churchill 2009-2010 * * This program is free software; you can redistribute it and/or modify @@ -39,7 +39,7 @@ Ext.namespace('Deluge.data'); * * @class Deluge.data.SortTypes * @singleton - */ + */ Deluge.data.SortTypes = { asIPAddress: function(value) { var d = value.match(/(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\:(\d+)/); @@ -48,6 +48,10 @@ Deluge.data.SortTypes = { asQueuePosition: function(value) { return (value > -1) ? value : Number.MAX_VALUE; + }, + + asName: function(value) { + return String(value).toLowerCase(); } } /*! @@ -121,7 +125,7 @@ Deluge.data.Peer = Ext.data.Record.create([ ]); /*! * Deluge.data.TorrentRecord.js - * + * * Copyright (c) Damien Churchill 2009-2010 * * This program is free software; you can redistribute it and/or modify @@ -168,7 +172,8 @@ Deluge.data.Torrent = Ext.data.Record.create([{ type: 'int' }, { name: 'name', - type: 'string' + type: 'string', + sortType: Deluge.data.SortTypes.asName }, { name: 'total_size', type: 'int' @@ -349,7 +354,7 @@ Deluge.details.DetailsTab = Ext.extend(Ext.Panel, { title: _('Details'), fields: {}, - + autoScroll: true, queuedItems: {}, oldData: {}, @@ -428,7 +433,7 @@ Deluge.details.DetailsTab = Ext.extend(Ext.Panel, { }); /*! * Deluge.details.FilesTab.js - * + * * Copyright (c) Damien Churchill 2009-2010 * * This program is free software; you can redistribute it and/or modify @@ -457,12 +462,11 @@ Deluge.details.DetailsTab = Ext.extend(Ext.Panel, { * this exception statement from your version. If you delete this exception * statement from all source files in the program, then also delete it here. */ - + Deluge.details.FilesTab = Ext.extend(Ext.ux.tree.TreeGrid, { title: _('Files'), - autoScroll: true, rootVisible: false, columns: [{ @@ -502,7 +506,7 @@ Deluge.details.FilesTab = Ext.extend(Ext.ux.tree.TreeGrid, { } }) }], - + selModel: new Ext.tree.MultiSelectionModel(), initComponent: function() { @@ -558,7 +562,7 @@ Deluge.details.FilesTab = Ext.extend(Ext.ux.tree.TreeGrid, { this.clear(); this.torrentId = torrentId; } - + deluge.client.web.get_torrent_files(torrentId, { success: this.onRequestComplete, scope: this, @@ -591,7 +595,7 @@ Deluge.details.FilesTab = Ext.extend(Ext.ux.tree.TreeGrid, { folderSort: true }); }, - + onContextMenu: function(node, e) { e.stopEvent(); var selModel = this.getSelectionModel(); @@ -601,7 +605,7 @@ Deluge.details.FilesTab = Ext.extend(Ext.ux.tree.TreeGrid, { } deluge.menus.filePriorities.showAt(e.getPoint()); }, - + onItemClick: function(baseItem, e) { switch (baseItem.id) { case 'expandAll': @@ -628,7 +632,7 @@ Deluge.details.FilesTab = Ext.extend(Ext.ux.tree.TreeGrid, { return; } }); - + var priorities = new Array(Ext.keys(indexes).length); for (var index in indexes) { priorities[index] = indexes[index]; @@ -645,7 +649,7 @@ Deluge.details.FilesTab = Ext.extend(Ext.ux.tree.TreeGrid, { break; } }, - + onRequestComplete: function(files, options) { if (!this.getRootNode().hasChildNodes()) { this.createFileTree(files); @@ -1544,6 +1548,7 @@ Deluge.add.AddWindow = Ext.extend(Deluge.add.Window, { }, { text: _('Infohash'), iconCls: 'icon-add-magnet', + hidden: true, disabled: true }, '->', { text: _('Remove'), @@ -4392,7 +4397,7 @@ Deluge.preferences.ProxyField = Ext.extend(Ext.form.FieldSet, { }); /*! * Deluge.preferences.ProxyPage.js - * + * * Copyright (c) Damien Churchill 2009-2010 * * This program is free software; you can redistribute it and/or modify @@ -4432,11 +4437,12 @@ Deluge.preferences.Proxy = Ext.extend(Ext.form.FormPanel, { config = Ext.apply({ border: false, title: _('Proxy'), - layout: 'form' + layout: 'form', + autoScroll: true }, config); Deluge.preferences.Proxy.superclass.constructor.call(this, config); }, - + initComponent: function() { Deluge.preferences.Proxy.superclass.initComponent.call(this); this.peer = this.add(new Deluge.preferences.ProxyField({ @@ -4444,28 +4450,28 @@ Deluge.preferences.Proxy = Ext.extend(Ext.form.FormPanel, { name: 'peer' })); this.peer.on('change', this.onProxyChange, this); - + this.web_seed = this.add(new Deluge.preferences.ProxyField({ title: _('Web Seed'), name: 'web_seed' })); this.web_seed.on('change', this.onProxyChange, this); - + this.tracker = this.add(new Deluge.preferences.ProxyField({ title: _('Tracker'), name: 'tracker' })); this.tracker.on('change', this.onProxyChange, this); - + this.dht = this.add(new Deluge.preferences.ProxyField({ title: _('DHT'), name: 'dht' })); this.dht.on('change', this.onProxyChange, this); - + deluge.preferences.getOptionsManager().bind('proxies', this); }, - + getValue: function() { return { 'dht': this.dht.getValue(), @@ -4474,18 +4480,18 @@ Deluge.preferences.Proxy = Ext.extend(Ext.form.FormPanel, { 'web_seed': this.web_seed.getValue() } }, - + setValue: function(value) { for (var proxy in value) { this[proxy].setValue(value[proxy]); } }, - + onProxyChange: function(field, newValue, oldValue) { var newValues = this.getValue(); var oldValues = Ext.apply({}, newValues); oldValues[field.getName()] = oldValue; - + this.fireEvent('change', this, newValues, oldValues); } }); @@ -7039,7 +7045,7 @@ Ext.each(Deluge.Keys.Grid, function(key) { }); /*! * Deluge.LoginWindow.js - * + * * Copyright (c) Damien Churchill 2009-2010 * * This program is free software; you can redistribute it and/or modify @@ -7070,7 +7076,7 @@ Ext.each(Deluge.Keys.Grid, function(key) { */ Deluge.LoginWindow = Ext.extend(Ext.Window, { - + firstShow: true, bodyStyle: 'padding: 10px 5px;', buttonAlign: 'center', @@ -7084,36 +7090,39 @@ Deluge.LoginWindow = Ext.extend(Ext.Window, { title: _('Login'), width: 300, height: 120, - + initComponent: function() { Deluge.LoginWindow.superclass.initComponent.call(this); this.on('show', this.onShow, this); - + this.addButton({ text: _('Login'), handler: this.onLogin, scope: this }); - + this.form = this.add({ xtype: 'form', baseCls: 'x-plain', - labelWidth: 55, - width: 300, - defaults: {width: 200}, + labelWidth: 120, + labelAlign: 'right', + defaults: {width: 110}, defaultType: 'textfield' }); this.passwordField = this.form.add({ xtype: 'textfield', fieldLabel: _('Password'), + grow: true, + growMin: '110', + growMax: '145', id: '_password', name: 'password', inputType: 'password' }); this.passwordField.on('specialkey', this.onSpecialKey, this); }, - + logout: function() { deluge.events.fire('logout'); deluge.client.auth.delete_session({ @@ -7123,17 +7132,17 @@ Deluge.LoginWindow = Ext.extend(Ext.Window, { scope: this }); }, - + show: function(skipCheck) { if (this.firstShow) { deluge.client.on('error', this.onClientError, this); this.firstShow = false; } - + if (skipCheck) { return Deluge.LoginWindow.superclass.show.call(this); } - + deluge.client.auth.check_session({ success: function(result) { if (result) { @@ -7148,11 +7157,11 @@ Deluge.LoginWindow = Ext.extend(Ext.Window, { scope: this }); }, - + onSpecialKey: function(field, e) { if (e.getKey() == 13) this.onLogin(); }, - + onLogin: function() { var passwordField = this.passwordField; deluge.client.auth.login(passwordField.getValue(), { @@ -7178,16 +7187,16 @@ Deluge.LoginWindow = Ext.extend(Ext.Window, { scope: this }); }, - + onClientError: function(errorObj, response, requestOptions) { if (errorObj.error.code == 1) { deluge.events.fire('logout'); this.show(true); } }, - + onShow: function() { - this.passwordField.focus(true, 100); + this.passwordField.focus(true, 300); } }); /*! @@ -9046,7 +9055,7 @@ Deluge.Toolbar = Ext.extend(Ext.Toolbar, { idProperty: 'id', fields: [ {name: 'queue', sortType: Deluge.data.SortTypes.asQueuePosition}, - {name: 'name'}, + {name: 'name', sortType: Deluge.data.SortTypes.asName}, {name: 'total_size', type: 'int'}, {name: 'state'}, {name: 'progress', type: 'float'}, @@ -9055,7 +9064,7 @@ Deluge.Toolbar = Ext.extend(Ext.Toolbar, { {name: 'num_peers', type: 'int'}, {name: 'total_peers', type: 'int'}, {name: 'download_payload_rate', type: 'int'}, - {name: 'upload_payload_speed', type: 'int'}, + {name: 'upload_payload_rate', type: 'int'}, {name: 'eta', type: 'int', sortType: etaSorter}, {name: 'ratio', type: 'float'}, {name: 'distributed_copies', type: 'float'}, diff --git a/deluge/ui/web/js/deluge-all.js b/deluge/ui/web/js/deluge-all.js index 7348b402f..c78359c45 100644 --- a/deluge/ui/web/js/deluge-all.js +++ b/deluge/ui/web/js/deluge-all.js @@ -1,6 +1,6 @@ /* * Deluge.data.SortTypes.js - * + * * Copyright (c) Damien Churchill 2009-2010 * * This program is free software; you can redistribute it and/or modify @@ -29,7 +29,7 @@ * this exception statement from your version. If you delete this exception * statement from all source files in the program, then also delete it here. */ -Ext.namespace("Deluge.data");Deluge.data.SortTypes={asIPAddress:function(a){var b=a.match(/(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\:(\d+)/);return((((((+b[1])*256)+(+b[2]))*256)+(+b[3]))*256)+(+b[4])},asQueuePosition:function(a){return(a>-1)?a:Number.MAX_VALUE}} +Ext.namespace("Deluge.data");Deluge.data.SortTypes={asIPAddress:function(a){var b=a.match(/(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\:(\d+)/);return((((((+b[1])*256)+(+b[2]))*256)+(+b[3]))*256)+(+b[4])},asQueuePosition:function(a){return(a>-1)?a:Number.MAX_VALUE},asName:function(a){return String(a).toLowerCase()}} /* * Deluge.data.PeerRecord.js * @@ -64,7 +64,7 @@ Ext.namespace("Deluge.data");Deluge.data.SortTypes={asIPAddress:function(a){var ;Ext.namespace("Deluge.data");Deluge.data.Peer=Ext.data.Record.create([{name:"country",type:"string"},{name:"ip",type:"string",sortType:Deluge.data.SortTypes.asIPAddress},{name:"client",type:"string"},{name:"progress",type:"float"},{name:"down_speed",type:"int"},{name:"up_speed",type:"int"},{name:"seed",type:"int"}]); /* * Deluge.data.TorrentRecord.js - * + * * Copyright (c) Damien Churchill 2009-2010 * * This program is free software; you can redistribute it and/or modify @@ -93,7 +93,7 @@ Ext.namespace("Deluge.data");Deluge.data.SortTypes={asIPAddress:function(a){var * this exception statement from your version. If you delete this exception * statement from all source files in the program, then also delete it here. */ -Ext.namespace("Deluge.data");Deluge.data.Torrent=Ext.data.Record.create([{name:"queue",type:"int"},{name:"name",type:"string"},{name:"total_size",type:"int"},{name:"state",type:"string"},{name:"progress",type:"int"},{name:"num_seeds",type:"int"},{name:"total_seeds",type:"int"},{name:"num_peers",type:"int"},{name:"total_peers",type:"int"},{name:"download_payload_rate",type:"int"},{name:"upload_payload_rate",type:"int"},{name:"eta",type:"int"},{name:"ratio",type:"float"},{name:"distributed_copies",type:"float"},{name:"time_added",type:"int"},{name:"tracker_host",type:"string"}]); +Ext.namespace("Deluge.data");Deluge.data.Torrent=Ext.data.Record.create([{name:"queue",type:"int"},{name:"name",type:"string",sortType:Deluge.data.SortTypes.asName},{name:"total_size",type:"int"},{name:"state",type:"string"},{name:"progress",type:"int"},{name:"num_seeds",type:"int"},{name:"total_seeds",type:"int"},{name:"num_peers",type:"int"},{name:"total_peers",type:"int"},{name:"download_payload_rate",type:"int"},{name:"upload_payload_rate",type:"int"},{name:"eta",type:"int"},{name:"ratio",type:"float"},{name:"distributed_copies",type:"float"},{name:"time_added",type:"int"},{name:"tracker_host",type:"string"}]); /* * Deluge.details.DetailsPanel.js * @@ -125,10 +125,10 @@ Ext.namespace("Deluge.data");Deluge.data.Torrent=Ext.data.Record.create([{name:" * this exception statement from your version. If you delete this exception * statement from all source files in the program, then also delete it here. */ -Ext.namespace("Deluge.details");Deluge.details.DetailsPanel=Ext.extend(Ext.TabPanel,{id:"torrentDetails",activeTab:0,initComponent:function(){Deluge.details.DetailsPanel.superclass.initComponent.call(this);this.add(new Deluge.details.StatusTab());this.add(new Deluge.details.DetailsTab());this.add(new Deluge.details.FilesTab());this.add(new Deluge.details.PeersTab());this.add(new Deluge.details.OptionsTab())},clear:function(){this.items.each(function(a){if(a.clear){a.clear.defer(100,a);a.disable()}})},update:function(a){var b=deluge.torrents.getSelected();if(!b){this.clear();return}this.items.each(function(c){if(c.disabled){c.enable()}});a=a||this.getActiveTab();if(a.update){a.update(b.id)}},onRender:function(b,a){Deluge.details.DetailsPanel.superclass.onRender.call(this,b,a);deluge.events.on("disconnect",this.clear,this);deluge.torrents.on("rowclick",this.onTorrentsClick,this);this.on("tabchange",this.onTabChange,this);deluge.torrents.getSelectionModel().on("selectionchange",function(c){if(!c.hasSelection()){this.clear()}},this)},onTabChange:function(a,b){this.update(b)},onTorrentsClick:function(a,c,b){this.update()}});Deluge.details.DetailsTab=Ext.extend(Ext.Panel,{title:_("Details"),fields:{},queuedItems:{},oldData:{},initComponent:function(){Deluge.details.DetailsTab.superclass.initComponent.call(this);this.addItem("torrent_name",_("Name"));this.addItem("hash",_("Hash"));this.addItem("path",_("Path"));this.addItem("size",_("Total Size"));this.addItem("files",_("# of files"));this.addItem("comment",_("Comment"));this.addItem("status",_("Status"));this.addItem("tracker",_("Tracker"))},onRender:function(b,a){Deluge.details.DetailsTab.superclass.onRender.call(this,b,a);this.body.setStyle("padding","10px");this.dl=Ext.DomHelper.append(this.body,{tag:"dl"},true);for(var c in this.queuedItems){this.doAddItem(c,this.queuedItems[c])}},addItem:function(b,a){if(!this.rendered){this.queuedItems[b]=a}else{this.doAddItem(b,a)}},doAddItem:function(b,a){Ext.DomHelper.append(this.dl,{tag:"dt",cls:b,html:a+":"});this.fields[b]=Ext.DomHelper.append(this.dl,{tag:"dd",cls:b,html:""},true)},clear:function(){if(!this.fields){return}for(var a in this.fields){this.fields[a].dom.innerHTML=""}this.oldData={}},update:function(a){deluge.client.web.get_torrent_status(a,Deluge.Keys.Details,{success:this.onRequestComplete,scope:this,torrentId:a})},onRequestComplete:function(e,c,a,b){var d={torrent_name:e.name,hash:b.options.torrentId,path:e.save_path,size:fsize(e.total_size),files:e.num_files,status:e.message,tracker:e.tracker,comment:e.comment};for(var f in this.fields){if(!Ext.isDefined(d[f])){continue}if(d[f]==this.oldData[f]){continue}this.fields[f].dom.innerHTML=Ext.escapeHTML(d[f])}this.oldData=d}}); +Ext.namespace("Deluge.details");Deluge.details.DetailsPanel=Ext.extend(Ext.TabPanel,{id:"torrentDetails",activeTab:0,initComponent:function(){Deluge.details.DetailsPanel.superclass.initComponent.call(this);this.add(new Deluge.details.StatusTab());this.add(new Deluge.details.DetailsTab());this.add(new Deluge.details.FilesTab());this.add(new Deluge.details.PeersTab());this.add(new Deluge.details.OptionsTab())},clear:function(){this.items.each(function(a){if(a.clear){a.clear.defer(100,a);a.disable()}})},update:function(a){var b=deluge.torrents.getSelected();if(!b){this.clear();return}this.items.each(function(c){if(c.disabled){c.enable()}});a=a||this.getActiveTab();if(a.update){a.update(b.id)}},onRender:function(b,a){Deluge.details.DetailsPanel.superclass.onRender.call(this,b,a);deluge.events.on("disconnect",this.clear,this);deluge.torrents.on("rowclick",this.onTorrentsClick,this);this.on("tabchange",this.onTabChange,this);deluge.torrents.getSelectionModel().on("selectionchange",function(c){if(!c.hasSelection()){this.clear()}},this)},onTabChange:function(a,b){this.update(b)},onTorrentsClick:function(a,c,b){this.update()}});Deluge.details.DetailsTab=Ext.extend(Ext.Panel,{title:_("Details"),fields:{},autoScroll:true,queuedItems:{},oldData:{},initComponent:function(){Deluge.details.DetailsTab.superclass.initComponent.call(this);this.addItem("torrent_name",_("Name"));this.addItem("hash",_("Hash"));this.addItem("path",_("Path"));this.addItem("size",_("Total Size"));this.addItem("files",_("# of files"));this.addItem("comment",_("Comment"));this.addItem("status",_("Status"));this.addItem("tracker",_("Tracker"))},onRender:function(b,a){Deluge.details.DetailsTab.superclass.onRender.call(this,b,a);this.body.setStyle("padding","10px");this.dl=Ext.DomHelper.append(this.body,{tag:"dl"},true);for(var c in this.queuedItems){this.doAddItem(c,this.queuedItems[c])}},addItem:function(b,a){if(!this.rendered){this.queuedItems[b]=a}else{this.doAddItem(b,a)}},doAddItem:function(b,a){Ext.DomHelper.append(this.dl,{tag:"dt",cls:b,html:a+":"});this.fields[b]=Ext.DomHelper.append(this.dl,{tag:"dd",cls:b,html:""},true)},clear:function(){if(!this.fields){return}for(var a in this.fields){this.fields[a].dom.innerHTML=""}this.oldData={}},update:function(a){deluge.client.web.get_torrent_status(a,Deluge.Keys.Details,{success:this.onRequestComplete,scope:this,torrentId:a})},onRequestComplete:function(e,c,a,b){var d={torrent_name:e.name,hash:b.options.torrentId,path:e.save_path,size:fsize(e.total_size),files:e.num_files,status:e.message,tracker:e.tracker,comment:e.comment};for(var f in this.fields){if(!Ext.isDefined(d[f])){continue}if(d[f]==this.oldData[f]){continue}this.fields[f].dom.innerHTML=Ext.escapeHTML(d[f])}this.oldData=d}}); /* * Deluge.details.FilesTab.js - * + * * Copyright (c) Damien Churchill 2009-2010 * * This program is free software; you can redistribute it and/or modify @@ -157,7 +157,7 @@ Ext.namespace("Deluge.details");Deluge.details.DetailsPanel=Ext.extend(Ext.TabPa * this exception statement from your version. If you delete this exception * statement from all source files in the program, then also delete it here. */ -Deluge.details.FilesTab=Ext.extend(Ext.ux.tree.TreeGrid,{title:_("Files"),autoScroll:true,rootVisible:false,columns:[{header:_("Filename"),width:330,dataIndex:"filename"},{header:_("Size"),width:150,dataIndex:"size",tpl:new Ext.XTemplate("{size:this.fsize}",{fsize:function(a){return fsize(a)}})},{xtype:"tgrendercolumn",header:_("Progress"),width:150,dataIndex:"progress",renderer:function(a){var b=a*100;return Deluge.progressBar(b,this.col.width,b.toFixed(2)+"%",0)}},{header:_("Priority"),width:150,dataIndex:"priority",tpl:new Ext.XTemplate('
{priority:this.getName}
',{getClass:function(a){return FILE_PRIORITY_CSS[a]},getName:function(a){return _(FILE_PRIORITY[a])}})}],selModel:new Ext.tree.MultiSelectionModel(),initComponent:function(){Deluge.details.FilesTab.superclass.initComponent.call(this);this.setRootNode(new Ext.tree.TreeNode({text:"Files"}))},clear:function(){var a=this.getRootNode();if(!a.hasChildNodes()){return}a.cascade(function(c){var b=c.parentNode;if(!b){return}if(!b.ownerTree){return}b.removeChild(c)})},createFileTree:function(c){function b(g,d){for(var e in g.contents){var f=g.contents[e];if(f.type=="dir"){b(f,d.appendChild(new Ext.tree.TreeNode({text:e,filename:e,size:f.size,progress:f.progress,priority:f.priority})))}else{d.appendChild(new Ext.tree.TreeNode({text:e,filename:e,fileIndex:f.index,size:f.size,progress:f.progress,priority:f.priority,leaf:true,iconCls:"x-deluge-file",uiProvider:Ext.ux.tree.TreeGridNodeUI}))}}}var a=this.getRootNode();b(c,a);a.firstChild.expand()},update:function(a){if(this.torrentId!=a){this.clear();this.torrentId=a}deluge.client.web.get_torrent_files(a,{success:this.onRequestComplete,scope:this,torrentId:a})},updateFileTree:function(b){function a(g,c){for(var d in g.contents){var f=g.contents[d];var e=c.findChild("filename",d);e.attributes.size=f.size;e.attributes.progress=f.progress;e.attributes.priority=f.priority;e.ui.updateColumns();if(f.type=="dir"){a(f,e)}}}a(b,this.getRootNode())},onRender:function(b,a){Deluge.details.FilesTab.superclass.onRender.call(this,b,a);deluge.menus.filePriorities.on("itemclick",this.onItemClick,this);this.on("contextmenu",this.onContextMenu,this);this.sorter=new Ext.tree.TreeSorter(this,{folderSort:true})},onContextMenu:function(b,c){c.stopEvent();var a=this.getSelectionModel();if(a.getSelectedNodes().length<2){a.clearSelections();b.select()}deluge.menus.filePriorities.showAt(c.getPoint())},onItemClick:function(h,g){switch(h.id){case"expandAll":this.expandAll();break;default:var f={};function a(e){if(Ext.isEmpty(e.attributes.fileIndex)){return}f[e.attributes.fileIndex]=e.attributes.priority}this.getRootNode().cascade(a);var b=this.getSelectionModel().getSelectedNodes();Ext.each(b,function(i){if(!i.isLeaf()){function e(j){if(Ext.isEmpty(j.attributes.fileIndex)){return}f[j.attributes.fileIndex]=h.filePriority}i.cascade(e)}else{if(!Ext.isEmpty(i.attributes.fileIndex)){f[i.attributes.fileIndex]=h.filePriority;return}}});var d=new Array(Ext.keys(f).length);for(var c in f){d[c]=f[c]}deluge.client.core.set_torrent_file_priorities(this.torrentId,d,{success:function(){Ext.each(b,function(e){e.setColumnValue(3,h.filePriority)})},scope:this});break}},onRequestComplete:function(b,a){if(!this.getRootNode().hasChildNodes()){this.createFileTree(b)}else{this.updateFileTree(b)}}}); +Deluge.details.FilesTab=Ext.extend(Ext.ux.tree.TreeGrid,{title:_("Files"),rootVisible:false,columns:[{header:_("Filename"),width:330,dataIndex:"filename"},{header:_("Size"),width:150,dataIndex:"size",tpl:new Ext.XTemplate("{size:this.fsize}",{fsize:function(a){return fsize(a)}})},{xtype:"tgrendercolumn",header:_("Progress"),width:150,dataIndex:"progress",renderer:function(a){var b=a*100;return Deluge.progressBar(b,this.col.width,b.toFixed(2)+"%",0)}},{header:_("Priority"),width:150,dataIndex:"priority",tpl:new Ext.XTemplate('
{priority:this.getName}
',{getClass:function(a){return FILE_PRIORITY_CSS[a]},getName:function(a){return _(FILE_PRIORITY[a])}})}],selModel:new Ext.tree.MultiSelectionModel(),initComponent:function(){Deluge.details.FilesTab.superclass.initComponent.call(this);this.setRootNode(new Ext.tree.TreeNode({text:"Files"}))},clear:function(){var a=this.getRootNode();if(!a.hasChildNodes()){return}a.cascade(function(c){var b=c.parentNode;if(!b){return}if(!b.ownerTree){return}b.removeChild(c)})},createFileTree:function(c){function b(g,d){for(var e in g.contents){var f=g.contents[e];if(f.type=="dir"){b(f,d.appendChild(new Ext.tree.TreeNode({text:e,filename:e,size:f.size,progress:f.progress,priority:f.priority})))}else{d.appendChild(new Ext.tree.TreeNode({text:e,filename:e,fileIndex:f.index,size:f.size,progress:f.progress,priority:f.priority,leaf:true,iconCls:"x-deluge-file",uiProvider:Ext.ux.tree.TreeGridNodeUI}))}}}var a=this.getRootNode();b(c,a);a.firstChild.expand()},update:function(a){if(this.torrentId!=a){this.clear();this.torrentId=a}deluge.client.web.get_torrent_files(a,{success:this.onRequestComplete,scope:this,torrentId:a})},updateFileTree:function(b){function a(g,c){for(var d in g.contents){var f=g.contents[d];var e=c.findChild("filename",d);e.attributes.size=f.size;e.attributes.progress=f.progress;e.attributes.priority=f.priority;e.ui.updateColumns();if(f.type=="dir"){a(f,e)}}}a(b,this.getRootNode())},onRender:function(b,a){Deluge.details.FilesTab.superclass.onRender.call(this,b,a);deluge.menus.filePriorities.on("itemclick",this.onItemClick,this);this.on("contextmenu",this.onContextMenu,this);this.sorter=new Ext.tree.TreeSorter(this,{folderSort:true})},onContextMenu:function(b,c){c.stopEvent();var a=this.getSelectionModel();if(a.getSelectedNodes().length<2){a.clearSelections();b.select()}deluge.menus.filePriorities.showAt(c.getPoint())},onItemClick:function(h,g){switch(h.id){case"expandAll":this.expandAll();break;default:var f={};function a(e){if(Ext.isEmpty(e.attributes.fileIndex)){return}f[e.attributes.fileIndex]=e.attributes.priority}this.getRootNode().cascade(a);var b=this.getSelectionModel().getSelectedNodes();Ext.each(b,function(i){if(!i.isLeaf()){function e(j){if(Ext.isEmpty(j.attributes.fileIndex)){return}f[j.attributes.fileIndex]=h.filePriority}i.cascade(e)}else{if(!Ext.isEmpty(i.attributes.fileIndex)){f[i.attributes.fileIndex]=h.filePriority;return}}});var d=new Array(Ext.keys(f).length);for(var c in f){d[c]=f[c]}deluge.client.core.set_torrent_file_priorities(this.torrentId,d,{success:function(){Ext.each(b,function(e){e.setColumnValue(3,h.filePriority)})},scope:this});break}},onRequestComplete:function(b,a){if(!this.getRootNode().hasChildNodes()){this.createFileTree(b)}else{this.updateFileTree(b)}}}); /* * Deluge.details.OptionsTab.js * @@ -317,7 +317,7 @@ Ext.ns("Deluge.add");Deluge.add.Window=Ext.extend(Ext.Window,{initComponent:func * this exception statement from your version. If you delete this exception * statement from all source files in the program, then also delete it here. */ -Ext.namespace("Deluge.add");Deluge.add.AddWindow=Ext.extend(Deluge.add.Window,{title:_("Add Torrents"),layout:"border",width:470,height:450,bodyStyle:"padding: 10px 5px;",buttonAlign:"right",closeAction:"hide",closable:true,plain:true,iconCls:"x-deluge-add-window-icon",initComponent:function(){Deluge.add.AddWindow.superclass.initComponent.call(this);this.addButton(_("Cancel"),this.onCancelClick,this);this.addButton(_("Add"),this.onAddClick,this);function a(c,d,b){if(b.data.info_hash){return String.format('
{0}
',c)}else{return String.format('
{0}
',c)}}this.list=new Ext.list.ListView({store:new Ext.data.SimpleStore({fields:[{name:"info_hash",mapping:1},{name:"text",mapping:2}],id:0}),columns:[{id:"torrent",width:150,sortable:true,renderer:a,dataIndex:"text"}],stripeRows:true,singleSelect:true,listeners:{selectionchange:{fn:this.onSelect,scope:this}},hideHeaders:true,autoExpandColumn:"torrent",height:"100%",autoScroll:true});this.add({region:"center",items:[this.list],margins:"5 5 5 5",bbar:new Ext.Toolbar({items:[{iconCls:"x-deluge-add-file",text:_("File"),handler:this.onFile,scope:this},{text:_("Url"),iconCls:"icon-add-url",handler:this.onUrl,scope:this},{text:_("Infohash"),iconCls:"icon-add-magnet",disabled:true},"->",{text:_("Remove"),iconCls:"icon-remove",handler:this.onRemove,scope:this}]})});this.optionsPanel=this.add(new Deluge.add.OptionsPanel());this.on("hide",this.onHide,this);this.on("show",this.onShow,this)},clear:function(){this.list.getStore().removeAll();this.optionsPanel.clear()},onAddClick:function(){var a=[];if(!this.list){return}this.list.getStore().each(function(b){var c=b.get("info_hash");a.push({path:this.optionsPanel.getFilename(c),options:this.optionsPanel.getOptions(c)})},this);deluge.client.web.add_torrents(a,{success:function(b){}});this.clear();this.hide()},onCancelClick:function(){this.clear();this.hide()},onFile:function(){if(!this.file){this.file=new Deluge.add.FileWindow()}this.file.show()},onHide:function(){this.optionsPanel.setActiveTab(0);this.optionsPanel.files.setDisabled(true);this.optionsPanel.form.setDisabled(true)},onRemove:function(){if(!this.list.getSelectionCount()){return}var a=this.list.getSelectedRecords()[0];this.list.getStore().remove(a);this.optionsPanel.clear();if(this.torrents&&this.torrents[a.id]){delete this.torrents[a.id]}},onSelect:function(c,b){if(b.length){var a=this.list.getRecord(b[0]);this.optionsPanel.setTorrent(a.get("info_hash"))}else{this.optionsPanel.files.setDisabled(true);this.optionsPanel.form.setDisabled(true)}},onShow:function(){if(!this.url){this.url=new Deluge.add.UrlWindow();this.url.on("beforeadd",this.onTorrentBeforeAdd,this);this.url.on("add",this.onTorrentAdd,this)}if(!this.file){this.file=new Deluge.add.FileWindow();this.file.on("beforeadd",this.onTorrentBeforeAdd,this);this.file.on("add",this.onTorrentAdd,this)}this.optionsPanel.form.getDefaults()},onTorrentBeforeAdd:function(b,c){var a=this.list.getStore();a.loadData([[b,null,c]],true)},onTorrentAdd:function(a,c){var b=this.list.getStore().getById(a);if(!c){Ext.MessageBox.show({title:_("Error"),msg:_("Not a valid torrent"),buttons:Ext.MessageBox.OK,modal:false,icon:Ext.MessageBox.ERROR,iconCls:"x-deluge-icon-error"});this.list.getStore().remove(b)}else{b.set("info_hash",c.info_hash);b.set("text",c.name);this.list.getStore().commitChanges();this.optionsPanel.addTorrent(c);this.list.select(b)}},onUrl:function(a,b){this.url.show()}}); +Ext.namespace("Deluge.add");Deluge.add.AddWindow=Ext.extend(Deluge.add.Window,{title:_("Add Torrents"),layout:"border",width:470,height:450,bodyStyle:"padding: 10px 5px;",buttonAlign:"right",closeAction:"hide",closable:true,plain:true,iconCls:"x-deluge-add-window-icon",initComponent:function(){Deluge.add.AddWindow.superclass.initComponent.call(this);this.addButton(_("Cancel"),this.onCancelClick,this);this.addButton(_("Add"),this.onAddClick,this);function a(c,d,b){if(b.data.info_hash){return String.format('
{0}
',c)}else{return String.format('
{0}
',c)}}this.list=new Ext.list.ListView({store:new Ext.data.SimpleStore({fields:[{name:"info_hash",mapping:1},{name:"text",mapping:2}],id:0}),columns:[{id:"torrent",width:150,sortable:true,renderer:a,dataIndex:"text"}],stripeRows:true,singleSelect:true,listeners:{selectionchange:{fn:this.onSelect,scope:this}},hideHeaders:true,autoExpandColumn:"torrent",height:"100%",autoScroll:true});this.add({region:"center",items:[this.list],margins:"5 5 5 5",bbar:new Ext.Toolbar({items:[{iconCls:"x-deluge-add-file",text:_("File"),handler:this.onFile,scope:this},{text:_("Url"),iconCls:"icon-add-url",handler:this.onUrl,scope:this},{text:_("Infohash"),iconCls:"icon-add-magnet",hidden:true,disabled:true},"->",{text:_("Remove"),iconCls:"icon-remove",handler:this.onRemove,scope:this}]})});this.optionsPanel=this.add(new Deluge.add.OptionsPanel());this.on("hide",this.onHide,this);this.on("show",this.onShow,this)},clear:function(){this.list.getStore().removeAll();this.optionsPanel.clear()},onAddClick:function(){var a=[];if(!this.list){return}this.list.getStore().each(function(b){var c=b.get("info_hash");a.push({path:this.optionsPanel.getFilename(c),options:this.optionsPanel.getOptions(c)})},this);deluge.client.web.add_torrents(a,{success:function(b){}});this.clear();this.hide()},onCancelClick:function(){this.clear();this.hide()},onFile:function(){if(!this.file){this.file=new Deluge.add.FileWindow()}this.file.show()},onHide:function(){this.optionsPanel.setActiveTab(0);this.optionsPanel.files.setDisabled(true);this.optionsPanel.form.setDisabled(true)},onRemove:function(){if(!this.list.getSelectionCount()){return}var a=this.list.getSelectedRecords()[0];this.list.getStore().remove(a);this.optionsPanel.clear();if(this.torrents&&this.torrents[a.id]){delete this.torrents[a.id]}},onSelect:function(c,b){if(b.length){var a=this.list.getRecord(b[0]);this.optionsPanel.setTorrent(a.get("info_hash"))}else{this.optionsPanel.files.setDisabled(true);this.optionsPanel.form.setDisabled(true)}},onShow:function(){if(!this.url){this.url=new Deluge.add.UrlWindow();this.url.on("beforeadd",this.onTorrentBeforeAdd,this);this.url.on("add",this.onTorrentAdd,this)}if(!this.file){this.file=new Deluge.add.FileWindow();this.file.on("beforeadd",this.onTorrentBeforeAdd,this);this.file.on("add",this.onTorrentAdd,this)}this.optionsPanel.form.getDefaults()},onTorrentBeforeAdd:function(b,c){var a=this.list.getStore();a.loadData([[b,null,c]],true)},onTorrentAdd:function(a,c){var b=this.list.getStore().getById(a);if(!c){Ext.MessageBox.show({title:_("Error"),msg:_("Not a valid torrent"),buttons:Ext.MessageBox.OK,modal:false,icon:Ext.MessageBox.ERROR,iconCls:"x-deluge-icon-error"});this.list.getStore().remove(b)}else{b.set("info_hash",c.info_hash);b.set("text",c.name);this.list.getStore().commitChanges();this.optionsPanel.addTorrent(c);this.list.select(b)}},onUrl:function(a,b){this.url.show()}}); /* * Deluge.add.File.js * @@ -896,7 +896,7 @@ Ext.namespace("Deluge.preferences");PreferencesRecord=Ext.data.Record.create([{n Ext.ns("Deluge.preferences");Deluge.preferences.ProxyField=Ext.extend(Ext.form.FieldSet,{border:false,autoHeight:true,labelWidth:70,initComponent:function(){Deluge.preferences.ProxyField.superclass.initComponent.call(this);this.proxyType=this.add({xtype:"combo",fieldLabel:_("Type"),name:"proxytype",mode:"local",width:150,store:new Ext.data.ArrayStore({fields:["id","text"],data:[[0,_("None")],[1,_("Socksv4")],[2,_("Socksv5")],[3,_("Socksv5 with Auth")],[4,_("HTTP")],[5,_("HTTP with Auth")]]}),editable:false,triggerAction:"all",valueField:"id",displayField:"text"});this.hostname=this.add({xtype:"textfield",name:"hostname",fieldLabel:_("Host"),width:220});this.port=this.add({xtype:"spinnerfield",name:"port",fieldLabel:_("Port"),width:80,decimalPrecision:0,minValue:-1,maxValue:99999});this.username=this.add({xtype:"textfield",name:"username",fieldLabel:_("Username"),width:220});this.password=this.add({xtype:"textfield",name:"password",fieldLabel:_("Password"),inputType:"password",width:220});this.proxyType.on("change",this.onFieldChange,this);this.proxyType.on("select",this.onTypeSelect,this);this.setting=false},getName:function(){return this.initialConfig.name},getValue:function(){return{type:this.proxyType.getValue(),hostname:this.hostname.getValue(),port:Number(this.port.getValue()),username:this.username.getValue(),password:this.password.getValue()}},setValue:function(c){this.setting=true;this.proxyType.setValue(c.type);var b=this.proxyType.getStore().find("id",c.type);var a=this.proxyType.getStore().getAt(b);this.hostname.setValue(c.hostname);this.port.setValue(c.port);this.username.setValue(c.username);this.password.setValue(c.password);this.onTypeSelect(this.type,a,b);this.setting=false},onFieldChange:function(e,d,c){if(this.setting){return}var b=this.getValue();var a=Ext.apply({},b);a[e.getName()]=c;this.fireEvent("change",this,b,a)},onTypeSelect:function(d,a,b){var c=a.get("id");if(c>0){this.hostname.show();this.port.show()}else{this.hostname.hide();this.port.hide()}if(c==3||c==5){this.username.show();this.password.show()}else{this.username.hide();this.password.hide()}}}); /* * Deluge.preferences.ProxyPage.js - * + * * Copyright (c) Damien Churchill 2009-2010 * * This program is free software; you can redistribute it and/or modify @@ -925,7 +925,7 @@ Ext.ns("Deluge.preferences");Deluge.preferences.ProxyField=Ext.extend(Ext.form.F * this exception statement from your version. If you delete this exception * statement from all source files in the program, then also delete it here. */ -Ext.namespace("Deluge.preferences");Deluge.preferences.Proxy=Ext.extend(Ext.form.FormPanel,{constructor:function(a){a=Ext.apply({border:false,title:_("Proxy"),layout:"form"},a);Deluge.preferences.Proxy.superclass.constructor.call(this,a)},initComponent:function(){Deluge.preferences.Proxy.superclass.initComponent.call(this);this.peer=this.add(new Deluge.preferences.ProxyField({title:_("Peer"),name:"peer"}));this.peer.on("change",this.onProxyChange,this);this.web_seed=this.add(new Deluge.preferences.ProxyField({title:_("Web Seed"),name:"web_seed"}));this.web_seed.on("change",this.onProxyChange,this);this.tracker=this.add(new Deluge.preferences.ProxyField({title:_("Tracker"),name:"tracker"}));this.tracker.on("change",this.onProxyChange,this);this.dht=this.add(new Deluge.preferences.ProxyField({title:_("DHT"),name:"dht"}));this.dht.on("change",this.onProxyChange,this);deluge.preferences.getOptionsManager().bind("proxies",this)},getValue:function(){return{dht:this.dht.getValue(),peer:this.peer.getValue(),tracker:this.tracker.getValue(),web_seed:this.web_seed.getValue()}},setValue:function(b){for(var a in b){this[a].setValue(b[a])}},onProxyChange:function(e,d,c){var b=this.getValue();var a=Ext.apply({},b);a[e.getName()]=c;this.fireEvent("change",this,b,a)}}); +Ext.namespace("Deluge.preferences");Deluge.preferences.Proxy=Ext.extend(Ext.form.FormPanel,{constructor:function(a){a=Ext.apply({border:false,title:_("Proxy"),layout:"form",autoScroll:true},a);Deluge.preferences.Proxy.superclass.constructor.call(this,a)},initComponent:function(){Deluge.preferences.Proxy.superclass.initComponent.call(this);this.peer=this.add(new Deluge.preferences.ProxyField({title:_("Peer"),name:"peer"}));this.peer.on("change",this.onProxyChange,this);this.web_seed=this.add(new Deluge.preferences.ProxyField({title:_("Web Seed"),name:"web_seed"}));this.web_seed.on("change",this.onProxyChange,this);this.tracker=this.add(new Deluge.preferences.ProxyField({title:_("Tracker"),name:"tracker"}));this.tracker.on("change",this.onProxyChange,this);this.dht=this.add(new Deluge.preferences.ProxyField({title:_("DHT"),name:"dht"}));this.dht.on("change",this.onProxyChange,this);deluge.preferences.getOptionsManager().bind("proxies",this)},getValue:function(){return{dht:this.dht.getValue(),peer:this.peer.getValue(),tracker:this.tracker.getValue(),web_seed:this.web_seed.getValue()}},setValue:function(b){for(var a in b){this[a].setValue(b[a])}},onProxyChange:function(e,d,c){var b=this.getValue();var a=Ext.apply({},b);a[e.getName()]=c;this.fireEvent("change",this,b,a)}}); /* * Deluge.preferences.QueuePage.js * @@ -1408,7 +1408,7 @@ Ext.ns("Deluge");Deluge.FilterPanel=Ext.extend(Ext.Panel,{autoScroll:true,border Deluge.Keys={Grid:["queue","name","total_size","state","progress","num_seeds","total_seeds","num_peers","total_peers","download_payload_rate","upload_payload_rate","eta","ratio","distributed_copies","is_auto_managed","time_added","tracker_host","save_path","last_seen_complete","total_done","total_uploaded","max_download_speed","max_upload_speed","seeds_peers_ratio"],Status:["total_done","total_payload_download","total_uploaded","total_payload_upload","next_announce","tracker_status","num_pieces","piece_length","is_auto_managed","active_time","seeding_time","seed_rank","last_seen_complete","owner","public","shared"],Files:["files","file_progress","file_priorities"],Peers:["peers"],Details:["name","save_path","total_size","num_files","message","tracker","comment"],Options:["max_download_speed","max_upload_speed","max_connections","max_upload_slots","is_auto_managed","stop_at_ratio","stop_ratio","remove_at_ratio","private","prioritize_first_last","move_completed","move_completed_path"]};Ext.each(Deluge.Keys.Grid,function(a){Deluge.Keys.Status.push(a)}); /* * Deluge.LoginWindow.js - * + * * Copyright (c) Damien Churchill 2009-2010 * * This program is free software; you can redistribute it and/or modify @@ -1437,7 +1437,7 @@ Deluge.Keys={Grid:["queue","name","total_size","state","progress","num_seeds","t * this exception statement from your version. If you delete this exception * statement from all source files in the program, then also delete it here. */ -Deluge.LoginWindow=Ext.extend(Ext.Window,{firstShow:true,bodyStyle:"padding: 10px 5px;",buttonAlign:"center",closable:false,closeAction:"hide",iconCls:"x-deluge-login-window-icon",layout:"fit",modal:true,plain:true,resizable:false,title:_("Login"),width:300,height:120,initComponent:function(){Deluge.LoginWindow.superclass.initComponent.call(this);this.on("show",this.onShow,this);this.addButton({text:_("Login"),handler:this.onLogin,scope:this});this.form=this.add({xtype:"form",baseCls:"x-plain",labelWidth:55,width:300,defaults:{width:200},defaultType:"textfield"});this.passwordField=this.form.add({xtype:"textfield",fieldLabel:_("Password"),id:"_password",name:"password",inputType:"password"});this.passwordField.on("specialkey",this.onSpecialKey,this)},logout:function(){deluge.events.fire("logout");deluge.client.auth.delete_session({success:function(a){this.show(true)},scope:this})},show:function(a){if(this.firstShow){deluge.client.on("error",this.onClientError,this);this.firstShow=false}if(a){return Deluge.LoginWindow.superclass.show.call(this)}deluge.client.auth.check_session({success:function(b){if(b){deluge.events.fire("login")}else{this.show(true)}},failure:function(b){this.show(true)},scope:this})},onSpecialKey:function(b,a){if(a.getKey()==13){this.onLogin()}},onLogin:function(){var a=this.passwordField;deluge.client.auth.login(a.getValue(),{success:function(b){if(b){deluge.events.fire("login");this.hide();a.setRawValue("")}else{Ext.MessageBox.show({title:_("Login Failed"),msg:_("You entered an incorrect password"),buttons:Ext.MessageBox.OK,modal:false,fn:function(){a.focus(true,10)},icon:Ext.MessageBox.WARNING,iconCls:"x-deluge-icon-warning"})}},scope:this})},onClientError:function(c,b,a){if(c.error.code==1){deluge.events.fire("logout");this.show(true)}},onShow:function(){this.passwordField.focus(true,100)}}); +Deluge.LoginWindow=Ext.extend(Ext.Window,{firstShow:true,bodyStyle:"padding: 10px 5px;",buttonAlign:"center",closable:false,closeAction:"hide",iconCls:"x-deluge-login-window-icon",layout:"fit",modal:true,plain:true,resizable:false,title:_("Login"),width:300,height:120,initComponent:function(){Deluge.LoginWindow.superclass.initComponent.call(this);this.on("show",this.onShow,this);this.addButton({text:_("Login"),handler:this.onLogin,scope:this});this.form=this.add({xtype:"form",baseCls:"x-plain",labelWidth:120,labelAlign:"right",defaults:{width:110},defaultType:"textfield"});this.passwordField=this.form.add({xtype:"textfield",fieldLabel:_("Password"),grow:true,growMin:"110",growMax:"145",id:"_password",name:"password",inputType:"password"});this.passwordField.on("specialkey",this.onSpecialKey,this)},logout:function(){deluge.events.fire("logout");deluge.client.auth.delete_session({success:function(a){this.show(true)},scope:this})},show:function(a){if(this.firstShow){deluge.client.on("error",this.onClientError,this);this.firstShow=false}if(a){return Deluge.LoginWindow.superclass.show.call(this)}deluge.client.auth.check_session({success:function(b){if(b){deluge.events.fire("login")}else{this.show(true)}},failure:function(b){this.show(true)},scope:this})},onSpecialKey:function(b,a){if(a.getKey()==13){this.onLogin()}},onLogin:function(){var a=this.passwordField;deluge.client.auth.login(a.getValue(),{success:function(b){if(b){deluge.events.fire("login");this.hide();a.setRawValue("")}else{Ext.MessageBox.show({title:_("Login Failed"),msg:_("You entered an incorrect password"),buttons:Ext.MessageBox.OK,modal:false,fn:function(){a.focus(true,10)},icon:Ext.MessageBox.WARNING,iconCls:"x-deluge-icon-warning"})}},scope:this})},onClientError:function(c,b,a){if(c.error.code==1){deluge.events.fire("logout");this.show(true)}},onShow:function(){this.passwordField.focus(true,300)}}); /* * Deluge.Menus.js * @@ -1757,7 +1757,7 @@ Deluge.Toolbar=Ext.extend(Ext.Toolbar,{constructor:function(a){a=Ext.apply({item * this exception statement from your version. If you delete this exception * statement from all source files in the program, then also delete it here. */ -(function(){function c(l){return(l==-1)?"":l+1}function f(m,n,l){return String.format('
{1}
',l.data.state.toLowerCase(),m)}function g(l){if(!l){return}return fspeed(l)}function i(l){if(l==-1){return""}return fspeed(l*1024)}function k(q,s,o){q=new Number(q);var l=q;var t=o.data.state+" "+q.toFixed(2)+"%";if(this.style){var n=this.style}else{var n=s.style}var m=new Number(n.match(/\w+:\s*(\d+)\w+/)[1]);return Deluge.progressBar(q,m-8,t)}function a(m,n,l){if(l.data.total_seeds>-1){return String.format("{0} ({1})",m,l.data.total_seeds)}else{return m}}function e(m,n,l){if(l.data.total_peers>-1){return String.format("{0} ({1})",m,l.data.total_peers)}else{return m}}function b(m,n,l){return(m<0)?"∞":parseFloat(new Number(m).toFixed(3))}function d(m,n,l){return String.format('
{0}
',m)}function h(l){return l*-1}function j(l){return l>0?fdate(l):"Never"}Deluge.TorrentGrid=Ext.extend(Ext.grid.GridPanel,{torrents:{},columns:[{id:"queue",header:_("#"),width:30,sortable:true,renderer:c,dataIndex:"queue"},{id:"name",header:_("Name"),width:150,sortable:true,renderer:f,dataIndex:"name"},{header:_("Size"),width:75,sortable:true,renderer:fsize,dataIndex:"total_size"},{header:_("Progress"),width:150,sortable:true,renderer:k,dataIndex:"progress"},{header:_("Seeders"),hidden:true,width:60,sortable:true,renderer:a,dataIndex:"num_seeds"},{header:_("Peers"),hidden:true,width:60,sortable:true,renderer:e,dataIndex:"num_peers"},{header:_("Down Speed"),width:80,sortable:true,renderer:g,dataIndex:"download_payload_rate"},{header:_("Up Speed"),width:80,sortable:true,renderer:g,dataIndex:"upload_payload_rate"},{header:_("ETA"),width:60,sortable:true,renderer:ftime,dataIndex:"eta"},{header:_("Ratio"),hidden:true,width:60,sortable:true,renderer:b,dataIndex:"ratio"},{header:_("Avail"),hidden:true,width:60,sortable:true,renderer:b,dataIndex:"distributed_copies"},{header:_("Added"),hidden:true,width:80,sortable:true,renderer:fdate,dataIndex:"time_added"},{header:_("Last Seen Complete"),width:80,sortable:true,renderer:j,dataIndex:"last_seen_complete"},{header:_("Tracker"),hidden:true,width:120,sortable:true,renderer:d,dataIndex:"tracker_host"},{header:_("Save Path"),hidden:true,width:120,sortable:true,renderer:fplain,dataIndex:"save_path"},{header:_("Owner"),width:80,sortable:true,renderer:fplain,dataIndex:"owner"},{header:_("Public"),hidden:true,width:80,sortable:true,renderer:fplain,dataIndex:"public"},{header:_("Shared"),hidden:true,width:80,sortable:true,renderer:fplain,dataIndex:"shared"},{header:_("Downloaded"),hidden:true,width:75,sortable:true,renderer:fsize,dataIndex:"total_done"},{header:_("Uploaded"),hidden:true,width:75,sortable:true,renderer:fsize,dataIndex:"total_uploaded"},{header:_("Down Limit"),hidden:true,width:75,sortable:true,renderer:i,dataIndex:"max_download_speed"},{header:_("Up Limit"),hidden:true,width:75,sortable:true,renderer:i,dataIndex:"max_upload_speed"},{header:_("Seeders")+"/"+_("Peers"),hidden:true,width:75,sortable:true,renderer:b,dataIndex:"seeds_peers_ratio"}],meta:{root:"torrents",idProperty:"id",fields:[{name:"queue",sortType:Deluge.data.SortTypes.asQueuePosition},{name:"name"},{name:"total_size",type:"int"},{name:"state"},{name:"progress",type:"float"},{name:"num_seeds",type:"int"},{name:"total_seeds",type:"int"},{name:"num_peers",type:"int"},{name:"total_peers",type:"int"},{name:"download_payload_rate",type:"int"},{name:"upload_payload_speed",type:"int"},{name:"eta",type:"int",sortType:h},{name:"ratio",type:"float"},{name:"distributed_copies",type:"float"},{name:"time_added",type:"int"},{name:"tracker_host"},{name:"save_path"},{name:"total_done",type:"int"},{name:"total_uploaded",type:"int"},{name:"max_download_speed",type:"int"},{name:"max_upload_speed",type:"int"},{name:"seeds_peers_ratio",type:"float"}]},keys:[{key:"a",ctrl:true,stopEvent:true,handler:function(){deluge.torrents.getSelectionModel().selectAll()}},{key:[46],stopEvent:true,handler:function(){ids=deluge.torrents.getSelectedIds();deluge.removeWindow.show(ids)}}],constructor:function(l){l=Ext.apply({id:"torrentGrid",store:new Ext.data.JsonStore(this.meta),columns:this.columns,keys:this.keys,region:"center",cls:"deluge-torrents",stripeRows:true,autoExpandColumn:"name",autoExpandMin:150,deferredRender:false,autoScroll:true,margins:"5 5 0 0",stateful:true,view:new Ext.ux.grid.BufferView({rowHeight:26,scrollDelay:false})},l);Deluge.TorrentGrid.superclass.constructor.call(this,l)},initComponent:function(){Deluge.TorrentGrid.superclass.initComponent.call(this);deluge.events.on("torrentRemoved",this.onTorrentRemoved,this);deluge.events.on("disconnect",this.onDisconnect,this);this.on("rowcontextmenu",function(l,o,n){n.stopEvent();var m=l.getSelectionModel();if(!m.hasSelection()){m.selectRow(o)}deluge.menus.torrent.showAt(n.getPoint())})},getTorrent:function(l){return this.getStore().getAt(l)},getSelected:function(){return this.getSelectionModel().getSelected()},getSelections:function(){return this.getSelectionModel().getSelections()},getSelectedId:function(){return this.getSelectionModel().getSelected().id},getSelectedIds:function(){var l=[];Ext.each(this.getSelectionModel().getSelections(),function(m){l.push(m.id)});return l},update:function(o,m){var q=this.getStore();if(m){q.removeAll();this.torrents={}}var p=[];for(var r in o){var u=o[r];if(this.torrents[r]){var n=q.getById(r);n.beginEdit();for(var l in u){if(n.get(l)!=u[l]){n.set(l,u[l])}}n.endEdit()}else{var n=new Deluge.data.Torrent(u);n.id=r;this.torrents[r]=1;p.push(n)}}q.add(p);q.each(function(t){if(!o[t.id]){q.remove(t);delete this.torrents[t.id]}},this);q.commitChanges();var s=q.getSortState();if(!s){return}q.sort(s.field,s.direction)},onDisconnect:function(){this.getStore().removeAll();this.torrents={}},onTorrentRemoved:function(m){var l=this.getSelectionModel();Ext.each(m,function(o){var n=this.getStore().getById(o);if(l.isSelected(n)){l.deselectRow(this.getStore().indexOf(n))}this.getStore().remove(n);delete this.torrents[o]},this)}});deluge.torrents=new Deluge.TorrentGrid()})(); +(function(){function c(l){return(l==-1)?"":l+1}function f(m,n,l){return String.format('
{1}
',l.data.state.toLowerCase(),m)}function g(l){if(!l){return}return fspeed(l)}function i(l){if(l==-1){return""}return fspeed(l*1024)}function k(q,s,o){q=new Number(q);var l=q;var t=o.data.state+" "+q.toFixed(2)+"%";if(this.style){var n=this.style}else{var n=s.style}var m=new Number(n.match(/\w+:\s*(\d+)\w+/)[1]);return Deluge.progressBar(q,m-8,t)}function a(m,n,l){if(l.data.total_seeds>-1){return String.format("{0} ({1})",m,l.data.total_seeds)}else{return m}}function e(m,n,l){if(l.data.total_peers>-1){return String.format("{0} ({1})",m,l.data.total_peers)}else{return m}}function b(m,n,l){return(m<0)?"∞":parseFloat(new Number(m).toFixed(3))}function d(m,n,l){return String.format('
{0}
',m)}function h(l){return l*-1}function j(l){return l>0?fdate(l):"Never"}Deluge.TorrentGrid=Ext.extend(Ext.grid.GridPanel,{torrents:{},columns:[{id:"queue",header:_("#"),width:30,sortable:true,renderer:c,dataIndex:"queue"},{id:"name",header:_("Name"),width:150,sortable:true,renderer:f,dataIndex:"name"},{header:_("Size"),width:75,sortable:true,renderer:fsize,dataIndex:"total_size"},{header:_("Progress"),width:150,sortable:true,renderer:k,dataIndex:"progress"},{header:_("Seeders"),hidden:true,width:60,sortable:true,renderer:a,dataIndex:"num_seeds"},{header:_("Peers"),hidden:true,width:60,sortable:true,renderer:e,dataIndex:"num_peers"},{header:_("Down Speed"),width:80,sortable:true,renderer:g,dataIndex:"download_payload_rate"},{header:_("Up Speed"),width:80,sortable:true,renderer:g,dataIndex:"upload_payload_rate"},{header:_("ETA"),width:60,sortable:true,renderer:ftime,dataIndex:"eta"},{header:_("Ratio"),hidden:true,width:60,sortable:true,renderer:b,dataIndex:"ratio"},{header:_("Avail"),hidden:true,width:60,sortable:true,renderer:b,dataIndex:"distributed_copies"},{header:_("Added"),hidden:true,width:80,sortable:true,renderer:fdate,dataIndex:"time_added"},{header:_("Last Seen Complete"),width:80,sortable:true,renderer:j,dataIndex:"last_seen_complete"},{header:_("Tracker"),hidden:true,width:120,sortable:true,renderer:d,dataIndex:"tracker_host"},{header:_("Save Path"),hidden:true,width:120,sortable:true,renderer:fplain,dataIndex:"save_path"},{header:_("Owner"),width:80,sortable:true,renderer:fplain,dataIndex:"owner"},{header:_("Public"),hidden:true,width:80,sortable:true,renderer:fplain,dataIndex:"public"},{header:_("Shared"),hidden:true,width:80,sortable:true,renderer:fplain,dataIndex:"shared"},{header:_("Downloaded"),hidden:true,width:75,sortable:true,renderer:fsize,dataIndex:"total_done"},{header:_("Uploaded"),hidden:true,width:75,sortable:true,renderer:fsize,dataIndex:"total_uploaded"},{header:_("Down Limit"),hidden:true,width:75,sortable:true,renderer:i,dataIndex:"max_download_speed"},{header:_("Up Limit"),hidden:true,width:75,sortable:true,renderer:i,dataIndex:"max_upload_speed"},{header:_("Seeders")+"/"+_("Peers"),hidden:true,width:75,sortable:true,renderer:b,dataIndex:"seeds_peers_ratio"}],meta:{root:"torrents",idProperty:"id",fields:[{name:"queue",sortType:Deluge.data.SortTypes.asQueuePosition},{name:"name",sortType:Deluge.data.SortTypes.asName},{name:"total_size",type:"int"},{name:"state"},{name:"progress",type:"float"},{name:"num_seeds",type:"int"},{name:"total_seeds",type:"int"},{name:"num_peers",type:"int"},{name:"total_peers",type:"int"},{name:"download_payload_rate",type:"int"},{name:"upload_payload_rate",type:"int"},{name:"eta",type:"int",sortType:h},{name:"ratio",type:"float"},{name:"distributed_copies",type:"float"},{name:"time_added",type:"int"},{name:"tracker_host"},{name:"save_path"},{name:"total_done",type:"int"},{name:"total_uploaded",type:"int"},{name:"max_download_speed",type:"int"},{name:"max_upload_speed",type:"int"},{name:"seeds_peers_ratio",type:"float"}]},keys:[{key:"a",ctrl:true,stopEvent:true,handler:function(){deluge.torrents.getSelectionModel().selectAll()}},{key:[46],stopEvent:true,handler:function(){ids=deluge.torrents.getSelectedIds();deluge.removeWindow.show(ids)}}],constructor:function(l){l=Ext.apply({id:"torrentGrid",store:new Ext.data.JsonStore(this.meta),columns:this.columns,keys:this.keys,region:"center",cls:"deluge-torrents",stripeRows:true,autoExpandColumn:"name",autoExpandMin:150,deferredRender:false,autoScroll:true,margins:"5 5 0 0",stateful:true,view:new Ext.ux.grid.BufferView({rowHeight:26,scrollDelay:false})},l);Deluge.TorrentGrid.superclass.constructor.call(this,l)},initComponent:function(){Deluge.TorrentGrid.superclass.initComponent.call(this);deluge.events.on("torrentRemoved",this.onTorrentRemoved,this);deluge.events.on("disconnect",this.onDisconnect,this);this.on("rowcontextmenu",function(l,o,n){n.stopEvent();var m=l.getSelectionModel();if(!m.hasSelection()){m.selectRow(o)}deluge.menus.torrent.showAt(n.getPoint())})},getTorrent:function(l){return this.getStore().getAt(l)},getSelected:function(){return this.getSelectionModel().getSelected()},getSelections:function(){return this.getSelectionModel().getSelections()},getSelectedId:function(){return this.getSelectionModel().getSelected().id},getSelectedIds:function(){var l=[];Ext.each(this.getSelectionModel().getSelections(),function(m){l.push(m.id)});return l},update:function(o,m){var q=this.getStore();if(m){q.removeAll();this.torrents={}}var p=[];for(var r in o){var u=o[r];if(this.torrents[r]){var n=q.getById(r);n.beginEdit();for(var l in u){if(n.get(l)!=u[l]){n.set(l,u[l])}}n.endEdit()}else{var n=new Deluge.data.Torrent(u);n.id=r;this.torrents[r]=1;p.push(n)}}q.add(p);q.each(function(t){if(!o[t.id]){q.remove(t);delete this.torrents[t.id]}},this);q.commitChanges();var s=q.getSortState();if(!s){return}q.sort(s.field,s.direction)},onDisconnect:function(){this.getStore().removeAll();this.torrents={}},onTorrentRemoved:function(m){var l=this.getSelectionModel();Ext.each(m,function(o){var n=this.getStore().getById(o);if(l.isSelected(n)){l.deselectRow(this.getStore().indexOf(n))}this.getStore().remove(n);delete this.torrents[o]},this)}});deluge.torrents=new Deluge.TorrentGrid()})(); /* * Deluge.UI.js * diff --git a/deluge/ui/web/js/ext-extensions-debug.js b/deluge/ui/web/js/ext-extensions-debug.js index ae3841c1a..365e7618d 100644 --- a/deluge/ui/web/js/ext-extensions-debug.js +++ b/deluge/ui/web/js/ext-extensions-debug.js @@ -1543,7 +1543,7 @@ Ext.override(Ext.ux.form.SpinnerField, { }); /*! * Ext.ux.form.SpinnerGroup.js - * + * * Copyright (c) Damien Churchill 2009-2010 * * This program is free software; you can redistribute it and/or modify @@ -1581,6 +1581,7 @@ Ext.ux.form.SpinnerGroup = Ext.extend(Ext.form.CheckboxGroup, { // private defaultType: 'spinnerfield', + anchor: '98%', // private groupCls: 'x-form-spinner-group', @@ -1697,6 +1698,7 @@ Ext.ux.form.SpinnerGroup = Ext.extend(Ext.form.CheckboxGroup, { this.items.each(function(field) { field.on('spin', this.onFieldChange, this); + field.on('change', this.onFieldChange, this); }, this); if (this.lazyValueSet) { diff --git a/deluge/ui/web/js/ext-extensions.js b/deluge/ui/web/js/ext-extensions.js index e77e6e257..be6f182cb 100644 --- a/deluge/ui/web/js/ext-extensions.js +++ b/deluge/ui/web/js/ext-extensions.js @@ -191,7 +191,7 @@ Ext.ns("Ext.ux.form");Ext.ux.form.SpinnerField=Ext.extend(Ext.form.NumberField,{ Ext.override(Ext.ux.form.SpinnerField,{onBlur:Ext.form.Field.prototype.onBlur}); /* * Ext.ux.form.SpinnerGroup.js - * + * * Copyright (c) Damien Churchill 2009-2010 * * This program is free software; you can redistribute it and/or modify @@ -220,7 +220,7 @@ Ext.override(Ext.ux.form.SpinnerField,{onBlur:Ext.form.Field.prototype.onBlur}); * this exception statement from your version. If you delete this exception * statement from all source files in the program, then also delete it here. */ -Ext.ns("Ext.ux.form");Ext.ux.form.SpinnerGroup=Ext.extend(Ext.form.CheckboxGroup,{defaultType:"spinnerfield",groupCls:"x-form-spinner-group",colCfg:{},onRender:function(h,f){if(!this.el){var o={cls:this.groupCls,layout:"column",border:false,renderTo:h};var a=Ext.apply({defaultType:this.defaultType,layout:"form",border:false,labelWidth:60,defaults:{hideLabel:true,anchor:"60%"}},this.colCfg);if(this.items[0].items){Ext.apply(o,{layoutConfig:{columns:this.items.length},defaults:this.defaults,items:this.items});for(var e=0,k=this.items.length;e0&&e%q==0){n++}if(this.items[e].fieldLabel){this.items[e].hideLabel=false}m[n].items.push(this.items[e])}}else{for(var e=0,k=this.items.length;e0&&e%q==0){n++}if(this.items[e].fieldLabel){this.items[e].hideLabel=false}m[n].items.push(this.items[e])}}else{for(var e=0,k=this.items.length;e Date: Mon, 26 Nov 2012 17:18:41 -0500 Subject: [PATCH 18/58] Fix file renaming and moving with unicode characters on libtorrent 0.16 Fix torrent creation with unicode characters --- deluge/core/torrent.py | 44 ++++++++++++++++---------- deluge/core/torrentmanager.py | 9 +++++- deluge/ui/gtkui/createtorrentdialog.py | 4 +-- 3 files changed, 37 insertions(+), 20 deletions(-) diff --git a/deluge/core/torrent.py b/deluge/core/torrent.py index cafec162c..85433e533 100644 --- a/deluge/core/torrent.py +++ b/deluge/core/torrent.py @@ -885,31 +885,32 @@ class Torrent(object): def move_storage(self, dest): """Move a torrent's storage location""" - - if deluge.common.windows_check(): - # Attempt to convert utf8 path to unicode - # Note: Inconsistent encoding for 'dest', needs future investigation - try: - dest_u = unicode(dest, "utf-8") - except TypeError: - # String is already unicode - dest_u = dest - else: - dest_u = dest + try: + dest = unicode(dest, "utf-8") + except TypeError: + # String is already unicode + pass - if not os.path.exists(dest_u): + if not os.path.exists(dest): try: # Try to make the destination path if it doesn't exist - os.makedirs(dest_u) + os.makedirs(dest) except IOError, e: log.exception(e) log.error("Could not move storage for torrent %s since %s does " "not exist and could not create the directory.", - self.torrent_id, dest_u) + self.torrent_id, dest) return False + + dest_bytes = dest.encode('utf-8') try: - self.handle.move_storage(dest_u) - except: + # libtorrent needs unicode object if wstrings are enabled, utf8 bytestring otherwise + try: + self.handle.move_storage(dest) + except TypeError: + self.handle.move_storage(dest_bytes) + except Exception, e: + log.error("Error calling libtorrent move_storage: %s" % e) return False return True @@ -985,8 +986,17 @@ class Torrent(object): """Renames files in the torrent. 'filenames' should be a list of (index, filename) pairs.""" for index, filename in filenames: + # Make sure filename is a unicode object + try: + filename = unicode(filename, "utf-8") + except TypeError: + pass filename = sanitize_filepath(filename) - self.handle.rename_file(index, filename.encode("utf-8")) + # libtorrent needs unicode object if wstrings are enabled, utf8 bytestring otherwise + try: + self.handle.rename_file(index, filename) + except TypeError: + self.handle.rename_file(index, filename.encode("utf-8")) def rename_folder(self, folder, new_folder): """Renames a folder within a torrent. This basically does a file rename diff --git a/deluge/core/torrentmanager.py b/deluge/core/torrentmanager.py index b3c6d4cba..bb6605569 100644 --- a/deluge/core/torrentmanager.py +++ b/deluge/core/torrentmanager.py @@ -452,9 +452,16 @@ class TorrentManager(component.Component): # before adding to the session. if options["mapped_files"]: for index, fname in options["mapped_files"].items(): + try: + fname = unicode(fname, "utf-8") + except TypeError: + pass fname = deluge.core.torrent.sanitize_filepath(fname) log.debug("renaming file index %s to %s", index, fname) - torrent_info.rename_file(index, utf8_encoded(fname)) + try: + torrent_info.rename_file(index, fname) + except TypeError: + torrent_info.rename_file(index, fname.encode("utf-8")) add_torrent_params["ti"] = torrent_info diff --git a/deluge/ui/gtkui/createtorrentdialog.py b/deluge/ui/gtkui/createtorrentdialog.py index acfc06097..435cba0a6 100644 --- a/deluge/ui/gtkui/createtorrentdialog.py +++ b/deluge/ui/gtkui/createtorrentdialog.py @@ -174,7 +174,7 @@ class CreateTorrentDialog: chooser.destroy() return - path = result.decode('utf-8').encode(sys.getfilesystemencoding()) + path = result.decode('utf-8') self.files_treestore.clear() self.files_treestore.append(None, [result, gtk.STOCK_FILE, deluge.common.get_path_size(path)]) @@ -202,7 +202,7 @@ class CreateTorrentDialog: chooser.destroy() return - path = result.decode('utf-8').encode(sys.getfilesystemencoding()) + path = result.decode('utf-8') self.files_treestore.clear() self.files_treestore.append(None, [result, gtk.STOCK_OPEN, deluge.common.get_path_size(path)]) From d48d3c9c2fcc23fe75ad90e266ea3414dda7884f Mon Sep 17 00:00:00 2001 From: Chase Sterling Date: Mon, 26 Nov 2012 17:19:09 -0500 Subject: [PATCH 19/58] Make sure queue order is preserved when restarting daemon. --- deluge/core/torrentmanager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deluge/core/torrentmanager.py b/deluge/core/torrentmanager.py index bb6605569..a985d531c 100644 --- a/deluge/core/torrentmanager.py +++ b/deluge/core/torrentmanager.py @@ -685,7 +685,7 @@ class TorrentManager(component.Component): # Reorder the state.torrents list to add torrents in the correct queue # order. - state.torrents.sort(key=operator.attrgetter("queue")) + state.torrents.sort(key=operator.attrgetter("queue"), reverse=self.config["queue_new_to_top"]) resume_data = self.load_resume_data_file() From 4f59a48f573da96323c45a0cee027fabb0fb500c Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Tue, 27 Nov 2012 01:29:33 +0000 Subject: [PATCH 20/58] Fix #2146 : Missing translations in View|Tabs submenu Also fixed small bug when hiding Status tab --- deluge/ui/gtkui/torrentdetails.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/deluge/ui/gtkui/torrentdetails.py b/deluge/ui/gtkui/torrentdetails.py index 36fc92270..6c11af8f6 100644 --- a/deluge/ui/gtkui/torrentdetails.py +++ b/deluge/ui/gtkui/torrentdetails.py @@ -113,6 +113,15 @@ class TorrentDetails(component.Component): ("Options", True) ] + self.translate_tabs = { + "All" : _("_All"), + "Status" : _("_Status"), + "Details" : _("_Details"), + "Files" : _("_Files"), + "Peers" : _("_Peers"), + "Options" : _("_Options") + } + # Get the state from saved file state = self.load_state() @@ -242,8 +251,8 @@ class TorrentDetails(component.Component): def hide_tab(self, tab_name): """Hides tab by name""" - self.notebook.remove_page(self.tabs[tab_name].position) self.tabs[tab_name].is_visible = False + self.notebook.remove_page(self.tabs[tab_name].position) self.regenerate_positions() self.generate_menu() @@ -275,7 +284,8 @@ class TorrentDetails(component.Component): """Generates the checklist menu for all the tabs and attaches it""" menu = gtk.Menu() # Create 'All' menuitem and a separator - menuitem = gtk.CheckMenuItem("All") + menuitem = gtk.CheckMenuItem(self.translate_tabs["All"], True) + menuitem.set_name("All") all_tabs = True for key in self.tabs: @@ -297,7 +307,8 @@ class TorrentDetails(component.Component): menuitem_list.sort() for pos, name in menuitem_list: - menuitem = gtk.CheckMenuItem(name) + menuitem = gtk.CheckMenuItem(self.translate_tabs[name], True) + menuitem.set_name(name) menuitem.set_active(self.tabs[name].is_visible) menuitem.connect("toggled", self._on_menuitem_toggled) menu.append(menuitem) @@ -386,7 +397,7 @@ class TorrentDetails(component.Component): def _on_menuitem_toggled(self, widget): # Get the tab name - name = widget.get_child().get_text() + name = widget.get_name() if name == "All": if widget.get_active(): self.show_all_tabs() From 6b5cf3396dbfc8208c9be790669a5d9e83307f2e Mon Sep 17 00:00:00 2001 From: Chase Sterling Date: Mon, 26 Nov 2012 22:01:15 -0500 Subject: [PATCH 21/58] Rencode module now always loads strings as utf-8 encoded byte strings. --- deluge/rencode.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/deluge/rencode.py b/deluge/rencode.py index a0a6eec35..188c51736 100644 --- a/deluge/rencode.py +++ b/deluge/rencode.py @@ -159,12 +159,6 @@ def decode_string(x, f): raise ValueError colon += 1 s = x[colon:colon+n] - try: - t = s.decode("utf8") - if len(t) != len(s): - s = t - except UnicodeDecodeError: - pass return (s, colon+n) def decode_list(x, f): From 2187cef14f8701afbc88bda80092b9e364061e4e Mon Sep 17 00:00:00 2001 From: Chase Sterling Date: Mon, 26 Nov 2012 22:53:08 -0500 Subject: [PATCH 22/58] Add decode_utf8 argument to rencode.loads, which decodes all strings from utf8. Update rpc protocol to load all strings as unicode. --- DEPENDS | 1 + deluge/rencode.py | 17 ++++++++++------- deluge/transfer.py | 2 +- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/DEPENDS b/DEPENDS index a74440609..55b915ff6 100644 --- a/DEPENDS +++ b/DEPENDS @@ -11,6 +11,7 @@ * chardet * geoip-database (optional) * setproctitle (optional) + * rencode >= 1.0.2 (optional), a pure python version is included * libtorrent >= 0.16.1, or build the included version diff --git a/deluge/rencode.py b/deluge/rencode.py index 188c51736..b1545a0cc 100644 --- a/deluge/rencode.py +++ b/deluge/rencode.py @@ -107,6 +107,9 @@ STR_FIXED_COUNT = 64 LIST_FIXED_START = STR_FIXED_START+STR_FIXED_COUNT LIST_FIXED_COUNT = 64 +# Whether strings should be decoded when loading +_decode_utf8 = False + def decode_int(x, f): f += 1 newf = x.index(CHR_TERM, f) @@ -159,6 +162,8 @@ def decode_string(x, f): raise ValueError colon += 1 s = x[colon:colon+n] + if _decode_utf8: + s = s.decode('utf8') return (s, colon+n) def decode_list(x, f): @@ -212,12 +217,8 @@ def make_fixed_length_string_decoders(): def make_decoder(slen): def f(x, f): s = x[f+1:f+1+slen] - try: - t = s.decode("utf8") - if len(t) != len(s): - s = t - except UnicodeDecodeError: - pass + if _decode_utf8: + s = s.decode("utf8") return (s, f+1+slen) return f for i in range(STR_FIXED_COUNT): @@ -273,7 +274,9 @@ def encode_dict(x,r): r.append(CHR_TERM) -def loads(x): +def loads(x, decode_utf8=False): + global _decode_utf8 + _decode_utf8 = decode_utf8 try: r, l = decode_func[x[0]](x, 0) except (IndexError, KeyError): diff --git a/deluge/transfer.py b/deluge/transfer.py index c89f89e4f..a09ad98a5 100644 --- a/deluge/transfer.py +++ b/deluge/transfer.py @@ -140,7 +140,7 @@ class DelugeTransferProtocol(Protocol): """ try: - self.message_received(rencode.loads(zlib.decompress(data))) + self.message_received(rencode.loads(zlib.decompress(data), decode_utf8=True)) except Exception, e: log.warn("Failed to decompress (%d bytes) and load serialized data "\ "with rencode: %s" % (len(data), str(e))) From c426f998e2b84eacc399fb0a828202bebe834533 Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Tue, 27 Nov 2012 02:34:11 +0000 Subject: [PATCH 23/58] Fix #2147 : Missing translations for plugin preferences page --- deluge/plugins/AutoAdd/deluge/plugins/autoadd/gtkui.py | 4 ++-- deluge/plugins/Extractor/deluge/plugins/extractor/gtkui.py | 4 ++-- .../Notifications/deluge/plugins/notifications/gtkui.py | 4 ++-- deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py | 4 ++-- deluge/plugins/WebUi/deluge/plugins/webui/gtkui.py | 4 ++-- deluge/ui/gtkui/preferences.py | 6 ++++-- 6 files changed, 14 insertions(+), 12 deletions(-) diff --git a/deluge/plugins/AutoAdd/deluge/plugins/autoadd/gtkui.py b/deluge/plugins/AutoAdd/deluge/plugins/autoadd/gtkui.py index 6803755d2..1c3e925b3 100644 --- a/deluge/plugins/AutoAdd/deluge/plugins/autoadd/gtkui.py +++ b/deluge/plugins/AutoAdd/deluge/plugins/autoadd/gtkui.py @@ -403,12 +403,12 @@ class GtkUI(GtkPluginBase): sw.add(self.treeView) sw.show_all() component.get("Preferences").add_page( - "AutoAdd", self.glade.get_widget("prefs_box") + _("AutoAdd"), self.glade.get_widget("prefs_box") ) self.on_show_prefs() def disable(self): - component.get("Preferences").remove_page("AutoAdd") + component.get("Preferences").remove_page(_("AutoAdd")) component.get("PluginManager").deregister_hook( "on_apply_prefs", self.on_apply_prefs ) diff --git a/deluge/plugins/Extractor/deluge/plugins/extractor/gtkui.py b/deluge/plugins/Extractor/deluge/plugins/extractor/gtkui.py index 6f0469200..8ee08ee92 100644 --- a/deluge/plugins/Extractor/deluge/plugins/extractor/gtkui.py +++ b/deluge/plugins/Extractor/deluge/plugins/extractor/gtkui.py @@ -54,13 +54,13 @@ class GtkUI(GtkPluginBase): def enable(self): self.glade = gtk.glade.XML(get_resource("extractor_prefs.glade")) - component.get("Preferences").add_page("Extractor", self.glade.get_widget("extractor_prefs_box")) + component.get("Preferences").add_page(_("Extractor"), self.glade.get_widget("extractor_prefs_box")) component.get("PluginManager").register_hook("on_apply_prefs", self.on_apply_prefs) component.get("PluginManager").register_hook("on_show_prefs", self.on_show_prefs) self.on_show_prefs() def disable(self): - component.get("Preferences").remove_page("Extractor") + component.get("Preferences").remove_page(_("Extractor")) component.get("PluginManager").deregister_hook("on_apply_prefs", self.on_apply_prefs) component.get("PluginManager").deregister_hook("on_show_prefs", self.on_show_prefs) del self.glade diff --git a/deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py b/deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py index 2400c7966..b3e5acbb3 100644 --- a/deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py +++ b/deluge/plugins/Notifications/deluge/plugins/notifications/gtkui.py @@ -287,7 +287,7 @@ class GtkUI(GtkPluginBase, GtkUiNotifications): if parent: parent.remove(self.prefs) index = prefs.notebook.append_page(self.prefs) - prefs.liststore.append([index, "Notifications"]) + prefs.liststore.append([index, _("Notifications")]) component.get("PluginManager").register_hook("on_apply_prefs", self.on_apply_prefs) @@ -320,7 +320,7 @@ class GtkUI(GtkPluginBase, GtkUiNotifications): def disable(self): GtkUiNotifications.disable(self) - component.get("Preferences").remove_page("Notifications") + component.get("Preferences").remove_page(_("Notifications")) component.get("PluginManager").deregister_hook("on_apply_prefs", self.on_apply_prefs) component.get("PluginManager").deregister_hook("on_show_prefs", diff --git a/deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py b/deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py index 580eba2d8..5d16e660a 100644 --- a/deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py +++ b/deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py @@ -170,7 +170,7 @@ class GtkUI(GtkPluginBase): client.register_event_handler("SchedulerEvent", self.on_scheduler_event) def disable(self): - component.get("Preferences").remove_page("Scheduler") + component.get("Preferences").remove_page(_("Scheduler")) # Remove status item component.get("StatusBar").remove_item(self.status_item) del self.status_item @@ -294,4 +294,4 @@ class GtkUI(GtkPluginBase): vbox.pack_start(frame, False, False) vbox.show_all() - component.get("Preferences").add_page("Scheduler", vbox) + component.get("Preferences").add_page(_("Scheduler"), vbox) diff --git a/deluge/plugins/WebUi/deluge/plugins/webui/gtkui.py b/deluge/plugins/WebUi/deluge/plugins/webui/gtkui.py index 978ac5fe4..c13f0b755 100644 --- a/deluge/plugins/WebUi/deluge/plugins/webui/gtkui.py +++ b/deluge/plugins/WebUi/deluge/plugins/webui/gtkui.py @@ -53,14 +53,14 @@ class GtkUI(GtkPluginBase): def enable(self): self.glade = gtk.glade.XML(get_resource("config.glade")) - component.get("Preferences").add_page("WebUi", self.glade.get_widget("prefs_box")) + component.get("Preferences").add_page(_("WebUi"), self.glade.get_widget("prefs_box")) component.get("PluginManager").register_hook("on_apply_prefs", self.on_apply_prefs) component.get("PluginManager").register_hook("on_show_prefs", self.on_show_prefs) client.webui.get_config().addCallback(self.cb_get_config) client.webui.got_deluge_web().addCallback(self.cb_chk_deluge_web) def disable(self): - component.get("Preferences").remove_page("WebUi") + component.get("Preferences").remove_page(_("WebUi")) component.get("PluginManager").deregister_hook("on_apply_prefs", self.on_apply_prefs) component.get("PluginManager").deregister_hook("on_show_prefs", self.on_show_prefs) diff --git a/deluge/ui/gtkui/preferences.py b/deluge/ui/gtkui/preferences.py index eeb264c69..2755a330c 100644 --- a/deluge/ui/gtkui/preferences.py +++ b/deluge/ui/gtkui/preferences.py @@ -121,7 +121,8 @@ class Preferences(component.Component): self.accounts_frame = self.builder.get_object("AccountsFrame") # Setup plugin tab listview - self.plugin_liststore = gtk.ListStore(str, bool) + # The third entry is for holding translated plugin names + self.plugin_liststore = gtk.ListStore(str, bool, str) self.plugin_liststore.set_sort_column_id(0, gtk.SORT_ASCENDING) self.plugin_listview = self.builder.get_object("plugin_listview") self.plugin_listview.set_model(self.plugin_liststore) @@ -131,7 +132,7 @@ class Preferences(component.Component): self.plugin_listview.append_column( gtk.TreeViewColumn(_("Enabled"), render, active=1)) self.plugin_listview.append_column( - gtk.TreeViewColumn(_("Plugin"), gtk.CellRendererText(), text=0)) + gtk.TreeViewColumn(_("Plugin"), gtk.CellRendererText(), text=2)) # Connect to the 'changed' event of TreeViewSelection to get selection # changes. @@ -585,6 +586,7 @@ class Preferences(component.Component): row = self.plugin_liststore.append() self.plugin_liststore.set_value(row, 0, plugin) self.plugin_liststore.set_value(row, 1, enabled) + self.plugin_liststore.set_value(row, 2, _(plugin)) # Now show the dialog self.pref_dialog.show() From 6fe350fa52245d1fead990f32ccd9a778dd207de Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Tue, 27 Nov 2012 17:42:18 +0000 Subject: [PATCH 24/58] Fix #2110 : Accept magnet uris with xt param anywhere within them --- deluge/common.py | 4 +- deluge/ui/web/js/deluge-all/add/UrlWindow.js | 2 +- deluge/ui/web/json_api.py | 39 +++++++++++--------- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/deluge/common.py b/deluge/common.py index 73c89daa5..cde0d3c2e 100644 --- a/deluge/common.py +++ b/deluge/common.py @@ -448,7 +448,9 @@ def is_magnet(uri): True """ - if uri[:20] == "magnet:?xt=urn:btih:": + magnet_scheme = 'magnet:?' + xt_param = 'xt=urn:btih:' + if uri.startswith(magnet_scheme) and xt_param in uri: return True return False diff --git a/deluge/ui/web/js/deluge-all/add/UrlWindow.js b/deluge/ui/web/js/deluge-all/add/UrlWindow.js index 3aba36c1f..8a8a1c1de 100644 --- a/deluge/ui/web/js/deluge-all/add/UrlWindow.js +++ b/deluge/ui/web/js/deluge-all/add/UrlWindow.js @@ -81,7 +81,7 @@ Deluge.add.UrlWindow = Ext.extend(Deluge.add.Window, { var cookies = this.cookieField.getValue(); var torrentId = this.createTorrentId(); - if (url.substring(0,20) == 'magnet:?xt=urn:btih:') { + if (url.indexOf('magnet:?') == 0 && url.indexOf('xt=urn:btih') > -1) { deluge.client.web.get_magnet_info(url, { success: this.onGotInfo, scope: this, diff --git a/deluge/ui/web/json_api.py b/deluge/ui/web/json_api.py index 8b0fc9473..a4b8cc73b 100644 --- a/deluge/ui/web/json_api.py +++ b/deluge/ui/web/json_api.py @@ -722,24 +722,29 @@ class WebApi(JSONComponent): :rtype: dictionary """ - try: - s = uri.split("&")[0][20:] - if len(s) == 32: - info_hash = base64.b32decode(s).encode("hex") - elif len(s) == 40: - info_hash = s - else: - return False + magnet_scheme = 'magnet:?' + xt_param = 'xt=urn:btih:' + dn_param = 'dn=' + if uri.startswith(magnet_scheme): name = None - for i in uri.split("&")[1:]: - if i[:3] == "dn=": - name = unquote_plus(i.split("=")[1]) - if not name: - name = info_hash - return {"name":name, "info_hash":info_hash, "files_tree":''} - except Exception, e: - log.exception(e) - return False + info_hash = None + for param in uri[len(magnet_scheme):].split('&'): + if param.startswith(xt_param): + xt_hash = param[len(xt_param):] + if len(xt_hash) == 32: + info_hash = base64.b32decode(xt_hash).encode("hex") + elif len(xt_hash) == 40: + info_hash = xt_hash + else: + break + elif param.startswith(dn_param): + name = unquote_plus(param[len(dn_param):]) + + if info_hash: + if not name: + name = info_hash + return {"name":name, "info_hash":info_hash, "files_tree":''} + return False @export def add_torrents(self, torrents): From e90e608fdd7b5c5495b9be0d19e89960aa34b643 Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Tue, 27 Nov 2012 22:47:03 +0000 Subject: [PATCH 25/58] Fix #1474 : on_show_prefs hook is not executed immediatly after enabling a plugin --- deluge/plugins/AutoAdd/deluge/plugins/autoadd/gtkui.py | 1 - deluge/ui/gtkui/pluginmanager.py | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/deluge/plugins/AutoAdd/deluge/plugins/autoadd/gtkui.py b/deluge/plugins/AutoAdd/deluge/plugins/autoadd/gtkui.py index 1c3e925b3..b369fc124 100644 --- a/deluge/plugins/AutoAdd/deluge/plugins/autoadd/gtkui.py +++ b/deluge/plugins/AutoAdd/deluge/plugins/autoadd/gtkui.py @@ -405,7 +405,6 @@ class GtkUI(GtkPluginBase): component.get("Preferences").add_page( _("AutoAdd"), self.glade.get_widget("prefs_box") ) - self.on_show_prefs() def disable(self): component.get("Preferences").remove_page(_("AutoAdd")) diff --git a/deluge/ui/gtkui/pluginmanager.py b/deluge/ui/gtkui/pluginmanager.py index b5169977d..a5bfcc819 100644 --- a/deluge/ui/gtkui/pluginmanager.py +++ b/deluge/ui/gtkui/pluginmanager.py @@ -93,6 +93,7 @@ class PluginManager(deluge.pluginmanagerbase.PluginManagerBase, def _on_plugin_enabled_event(self, name): self.enable_plugin(name) + self.run_on_show_prefs() def _on_plugin_disabled_event(self, name): self.disable_plugin(name) From 6b9ae264ffcd3c7dced610950f1165c780fc0b47 Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Wed, 28 Nov 2012 23:35:56 +0000 Subject: [PATCH 26/58] Fix typo in json_api docstring --- deluge/ui/web/json_api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deluge/ui/web/json_api.py b/deluge/ui/web/json_api.py index a4b8cc73b..a59ab5af8 100644 --- a/deluge/ui/web/json_api.py +++ b/deluge/ui/web/json_api.py @@ -759,7 +759,7 @@ class WebApi(JSONComponent): >>> json_api.web.add_torrents([{ "path": "/tmp/deluge-web/some-torrent-file.torrent", - "options": {"download_path": "/home/deluge/"} + "options": {"download_location": "/home/deluge/"} }]) """ From 48cbf0d9b092aa1192c273bf448ea8c9cf9d3ccb Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Thu, 29 Nov 2012 22:39:37 +0000 Subject: [PATCH 27/58] Update Changelog --- ChangeLog | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ChangeLog b/ChangeLog index c2cd38e4a..ba4c8133b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -49,6 +49,8 @@ * #2160: Disable use of python bindings for libtorrent extensions and replace with session flag * #2163: Fix unable add torrent file with empty (0:) encoding tag * #2201: Fix error in authmanager if auth file has extra newlines + * #2109: Fix the Proxy settings not being cleared by setting None + * #2110: Fix accepting magnet uris with xt param anywhere within them ==== GtkUI ==== * Add move completed option to add torrent dialog @@ -60,6 +62,10 @@ * #2171: Fix the Add Peer dialog not responding if empty or invalid values entered * #2104: Fix no title set for the appindicator * #2086: Fix submenus and icons for appindicator + * #2146: Fix missing translations in View|Tabs submenu + * Fix torrent names on libtorrent 0.16 on windows + * #2147: Fix missing translations for plugin preferences page + * #1474: Fix the on_show_prefs hook not being executed immediatly after enabling a plugin ==== Console ==== * LP#1004793: Enable use of connect command in non-interactive mode From 3d76ab18324e29d00b04e1d7e99dd783ef8329b2 Mon Sep 17 00:00:00 2001 From: Chase Sterling Date: Thu, 29 Nov 2012 23:11:16 -0500 Subject: [PATCH 28/58] Update version for rencode module. --- deluge/rencode.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deluge/rencode.py b/deluge/rencode.py index b1545a0cc..7c0f7d8b1 100644 --- a/deluge/rencode.py +++ b/deluge/rencode.py @@ -19,7 +19,7 @@ rencode module versions, so you should check that you are using the same rencode version throughout your project. """ -__version__ = '1.0.1' +__version__ = '1.0.2' __all__ = ['dumps', 'loads'] # Original bencode module by Petru Paler, et al. From b4903b763e4c9b60adb9fbee1b2fa85152a487e2 Mon Sep 17 00:00:00 2001 From: Chase Sterling Date: Thu, 29 Nov 2012 23:26:37 -0500 Subject: [PATCH 29/58] Fix torrent names on libtorrent 0.16 on windows. --- deluge/core/torrent.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deluge/core/torrent.py b/deluge/core/torrent.py index 85433e533..f90a7b5e7 100644 --- a/deluge/core/torrent.py +++ b/deluge/core/torrent.py @@ -252,7 +252,7 @@ class Torrent(object): def get_name(self): if self.handle.has_metadata(): - name = self.torrent_info.file_at(0).path.split("/", 1)[0] + name = self.torrent_info.file_at(0).path.replace("\\", "/", 1).split("/", 1)[0] if not name: name = self.torrent_info.name() try: From 0b5b585992323454f36e89a7c189d4e32b3857fe Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Fri, 30 Nov 2012 14:44:05 +0000 Subject: [PATCH 30/58] Replace subprocess.call with subprocess.Popen to start deluged from gtk client The use of Popen was originally a fix for a Win32 issue on 1.3 but makes sense to apply to all OSs and simplify code. --- deluge/ui/client.py | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/deluge/ui/client.py b/deluge/ui/client.py index 3feba4c57..cf9dee85f 100644 --- a/deluge/ui/client.py +++ b/deluge/ui/client.py @@ -37,17 +37,13 @@ import logging from twisted.internet.protocol import ClientFactory from twisted.internet import reactor, ssl, defer +import subprocess import deluge.common from deluge import error from deluge.event import known_events from deluge.transfer import DelugeTransferProtocol -if deluge.common.windows_check(): - import win32api -else: - import subprocess - RPC_RESPONSE = 1 RPC_ERROR = 2 RPC_EVENT = 3 @@ -629,12 +625,7 @@ class Client(object): """ try: - if deluge.common.windows_check(): - win32api.WinExec("deluged --port=%s --config=\"%s\"" % (port, config)) - elif deluge.common.osx_check(): - subprocess.call(["nohup", "deluged", "--port=%s" % port, "--config=%s" % config]) - else: - subprocess.call(["deluged", "--port=%s" % port, "--config=%s" % config]) + subprocess.Popen(["deluged", "--port=%s" % port, "--config=%s" % config]) except OSError, e: from errno import ENOENT if e.errno == ENOENT: From 71183f6c1904322c117ae4af17f96aa25b67e73c Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Sat, 1 Dec 2012 02:21:01 +0000 Subject: [PATCH 31/58] Add windows support to is_ip --- deluge/common.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/deluge/common.py b/deluge/common.py index cde0d3c2e..dd0a86e02 100644 --- a/deluge/common.py +++ b/deluge/common.py @@ -544,15 +544,23 @@ def is_ip(ip): import socket #first we test ipv4 try: - if socket.inet_pton(socket.AF_INET, "%s" % (ip)): - return True + if windows_check(): + if socket.inet_aton("%s" % (ip)): + return True + else: + if socket.inet_pton(socket.AF_INET, "%s" % (ip)): + return True except socket.error: if not socket.has_ipv6: return False #now test ipv6 try: - if socket.inet_pton(socket.AF_INET6, "%s" % (ip)): + if windows_check(): + log.warning("ipv6 check unavailable on windows") return True + else: + if socket.inet_pton(socket.AF_INET6, "%s" % (ip)): + return True except socket.error: return False From b4d7e429738edf17af1ea0a097110be18f60baa9 Mon Sep 17 00:00:00 2001 From: Chase Sterling Date: Mon, 3 Dec 2012 01:03:58 -0500 Subject: [PATCH 32/58] Update libtorrent minimum version checking. --- deluge/_libtorrent.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deluge/_libtorrent.py b/deluge/_libtorrent.py index ab782d67a..898cfb150 100644 --- a/deluge/_libtorrent.py +++ b/deluge/_libtorrent.py @@ -45,9 +45,9 @@ supports. """ -REQUIRED_VERSION = "0.14.9.0" +REQUIRED_VERSION = "0.16.1.0" -def check_version(LT): +def check_version(lt): from deluge.common import VersionSplit if VersionSplit(lt.version) < VersionSplit(REQUIRED_VERSION): raise ImportError("This version of Deluge requires libtorrent >=%s!" % REQUIRED_VERSION) From e79c695732ed8d279b3185a9d62d3110d3de5a69 Mon Sep 17 00:00:00 2001 From: Chase Sterling Date: Mon, 3 Dec 2012 01:18:25 -0500 Subject: [PATCH 33/58] Remove some backwards compatibility code for libtorrent 0.14. --- deluge/core/torrent.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/deluge/core/torrent.py b/deluge/core/torrent.py index f90a7b5e7..44bea6c5c 100644 --- a/deluge/core/torrent.py +++ b/deluge/core/torrent.py @@ -177,13 +177,7 @@ class Torrent(object): # Tracker list self.trackers = [] # Create a list of trackers - for value in self.handle.trackers(): - if lt.version_minor < 15: - tracker = {} - tracker["url"] = value.url - tracker["tier"] = value.tier - else: - tracker = value + for tracker in self.handle.trackers(): self.trackers.append(tracker) # Various torrent options From 331cef16efec0bc2a9c88a71c4be78e1d6cef9fc Mon Sep 17 00:00:00 2001 From: Hengjie Date: Thu, 29 Nov 2012 17:30:47 +1300 Subject: [PATCH 34/58] Fix #2220 : MacOSX homebrew build not finding boost libs --- setup.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index a55567c76..a649755b3 100755 --- a/setup.py +++ b/setup.py @@ -152,11 +152,12 @@ else: for include in os.environ.get("INCLUDEDIR", "").split(":"): _include_dirs.append(include) - _library_dirs += [sysconfig.get_config_var("LIBDIR"), '/opt/local/lib'] + _library_dirs += [sysconfig.get_config_var("LIBDIR"), '/opt/local/lib', '/usr/local/lib'] if osx_check(): _include_dirs += [ '/opt/local/include/boost-1_35', '/opt/local/include/boost-1_36', + '/usr/local/include' '/sw/include/boost-1_35', '/sw/include/boost' ] From a5df53249a9def5844b7f84a1e731fffa9fff458 Mon Sep 17 00:00:00 2001 From: Vincent Castellano Date: Mon, 3 Dec 2012 23:06:25 -0800 Subject: [PATCH 35/58] Fix #2228 : Apply-To-All in AddTorrent Dialog is copying file renames to other torrents --- deluge/ui/gtkui/addtorrentdialog.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/deluge/ui/gtkui/addtorrentdialog.py b/deluge/ui/gtkui/addtorrentdialog.py index 84ea16e57..47f2b1ce1 100644 --- a/deluge/ui/gtkui/addtorrentdialog.py +++ b/deluge/ui/gtkui/addtorrentdialog.py @@ -825,14 +825,15 @@ class AddTorrentDialog(component.Component): self.save_torrent_options(row) - # The options we want all the torrents to have - options = self.options[model.get_value(row, 0)] + # The options, except file renames, we want all the torrents to have + options = self.options[model.get_value(row, 0)].copy() + del options["mapped_files"] # Set all the torrent options row = model.get_iter_first() while row != None: torrent_id = model.get_value(row, 0) - self.options[torrent_id] = options + self.options[torrent_id].update(options) row = model.iter_next(row) def _on_button_revert_clicked(self, widget): From eed46994da86d010fc899dd91eee33d91b47dd9f Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Wed, 5 Dec 2012 18:10:53 +0000 Subject: [PATCH 36/58] Fix #2129 : Empty filename can be set in AddTorrent dialog --- deluge/ui/gtkui/addtorrentdialog.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/deluge/ui/gtkui/addtorrentdialog.py b/deluge/ui/gtkui/addtorrentdialog.py index 47f2b1ce1..aee0c5323 100644 --- a/deluge/ui/gtkui/addtorrentdialog.py +++ b/deluge/ui/gtkui/addtorrentdialog.py @@ -864,7 +864,7 @@ class AddTorrentDialog(component.Component): def _on_filename_edited(self, renderer, path, new_text): index = self.files_treestore[path][3] - new_text = new_text.strip(os.path.sep) + new_text = new_text.strip(os.path.sep).strip() # Return if the text hasn't changed if new_text == self.files_treestore[path][1]: @@ -882,6 +882,8 @@ class AddTorrentDialog(component.Component): if index > -1: # We're renaming a file! Yay! That's easy! + if not new_text: + return parent = self.files_treestore.iter_parent(itr) file_path = os.path.join(self.get_file_path(parent), new_text) From bb5dbecbf2f56db1f9df998b1035ff3d4d2e1817 Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Wed, 5 Dec 2012 18:12:08 +0000 Subject: [PATCH 37/58] Fix #2130 : Same name can be given to different files in Add Torrent dialog --- deluge/ui/gtkui/addtorrentdialog.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/deluge/ui/gtkui/addtorrentdialog.py b/deluge/ui/gtkui/addtorrentdialog.py index aee0c5323..74eff669f 100644 --- a/deluge/ui/gtkui/addtorrentdialog.py +++ b/deluge/ui/gtkui/addtorrentdialog.py @@ -886,7 +886,10 @@ class AddTorrentDialog(component.Component): return parent = self.files_treestore.iter_parent(itr) file_path = os.path.join(self.get_file_path(parent), new_text) - + # Don't rename if filename exists + for row in self.files_treestore[parent].iterchildren(): + if new_text == row[1] and row[3] > -1: + return if os.path.sep in new_text: # There are folders in this path, so we need to create them # and then move the file iter to top From ce76c278ed0772bae6ccabbbb1ee20700cc00932 Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Wed, 5 Dec 2012 18:35:44 +0000 Subject: [PATCH 38/58] fix snafu in last commit --- deluge/ui/gtkui/addtorrentdialog.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deluge/ui/gtkui/addtorrentdialog.py b/deluge/ui/gtkui/addtorrentdialog.py index 74eff669f..e2df0c91d 100644 --- a/deluge/ui/gtkui/addtorrentdialog.py +++ b/deluge/ui/gtkui/addtorrentdialog.py @@ -888,7 +888,7 @@ class AddTorrentDialog(component.Component): file_path = os.path.join(self.get_file_path(parent), new_text) # Don't rename if filename exists for row in self.files_treestore[parent].iterchildren(): - if new_text == row[1] and row[3] > -1: + if new_text == row[1]: return if os.path.sep in new_text: # There are folders in this path, so we need to create them From ce99b5f6885bc74cb20f6ed19e73c7b5ef91b899 Mon Sep 17 00:00:00 2001 From: Chase Sterling Date: Thu, 6 Dec 2012 01:20:19 -0500 Subject: [PATCH 39/58] Refactor resume data saving to not read and write fastresume unnecessarily. Refactor saving resume data on shutdown to use deferreds. Make bulk resume data saves write to disk only once. --- deluge/core/torrent.py | 4 - deluge/core/torrentmanager.py | 148 +++++++++++++--------------------- 2 files changed, 56 insertions(+), 96 deletions(-) diff --git a/deluge/core/torrent.py b/deluge/core/torrent.py index 44bea6c5c..3664c1e2d 100644 --- a/deluge/core/torrent.py +++ b/deluge/core/torrent.py @@ -125,9 +125,6 @@ class Torrent(object): # Set the torrent_id for this torrent self.torrent_id = str(handle.info_hash()) - # Let's us know if we're waiting on a lt alert - self.waiting_on_resume_data = False - # Keep a list of file indexes we're waiting for file_rename alerts on # This also includes the old_folder and new_folder to know what signal to send # This is so we can send one folder_renamed signal instead of multiple @@ -913,7 +910,6 @@ class Torrent(object): """Signals libtorrent to build resume data for this torrent, it gets returned in a libtorrent alert""" self.handle.save_resume_data() - self.waiting_on_resume_data = True def write_torrentfile(self): """Writes the torrent file""" diff --git a/deluge/core/torrentmanager.py b/deluge/core/torrentmanager.py index a985d531c..d2e9bff13 100644 --- a/deluge/core/torrentmanager.py +++ b/deluge/core/torrentmanager.py @@ -45,6 +45,7 @@ import logging import re from twisted.internet.task import LoopingCall +from twisted.internet.defer import Deferred, DeferredList from deluge._libtorrent import lt @@ -151,15 +152,11 @@ class TorrentManager(component.Component): self.last_seen_complete_loop = None self.queued_torrents = set() - # This is a list of torrent_id when we shutdown the torrentmanager. - # We use this list to determine if all active torrents have been paused - # and that their resume data has been written. - self.shutdown_torrent_pause_list = [] + # This is a map of torrent_ids to Deferreds used to track needed resume data. + # The Deferreds will be completed when resume data has been saved. + self.waiting_on_resume_data = {} - # self.num_resume_data used to save resume_data in bulk - self.num_resume_data = 0 - - # Keeps track of resume data that needs to be saved to disk + # Keeps track of resume data self.resume_data = {} # Register set functions @@ -216,11 +213,14 @@ class TorrentManager(component.Component): # Try to load the state from file self.load_state() - # Save the state every 5 minutes + # Save the state periodically self.save_state_timer = LoopingCall(self.save_state) self.save_state_timer.start(200, False) self.save_resume_data_timer = LoopingCall(self.save_resume_data) - self.save_resume_data_timer.start(190) + self.save_resume_data_timer.start(190, False) + # Force update for all resume data a bit less frequently + self.save_all_resume_data_timer = LoopingCall(self.save_resume_data, self.torrents.keys()) + self.save_all_resume_data_timer.start(900, False) if self.last_seen_complete_loop: self.last_seen_complete_loop.start(60) @@ -233,45 +233,28 @@ class TorrentManager(component.Component): if self.save_resume_data_timer.running: self.save_resume_data_timer.stop() + if self.save_all_resume_data_timer.running: + self.save_all_resume_data_timer.stop() + if self.last_seen_complete_loop: self.last_seen_complete_loop.stop() # Save state on shutdown self.save_state() - # Make another list just to make sure all paused torrents will be - # passed to self.save_resume_data(). With - # self.shutdown_torrent_pause_list it is possible to have a case when - # torrent_id is removed from it in self.on_alert_torrent_paused() - # before we call self.save_resume_data() here. - save_resume_data_list = [] + self.session.pause() for key in self.torrents: # Stop the status cleanup LoopingCall here self.torrents[key].prev_status_cleanup_loop.stop() - if not self.torrents[key].handle.is_paused(): - # We set auto_managed false to prevent lt from resuming the torrent - self.torrents[key].handle.auto_managed(False) - self.torrents[key].handle.pause() - self.shutdown_torrent_pause_list.append(key) - save_resume_data_list.append(key) - self.save_resume_data(save_resume_data_list) + # Save all resume data and wait until alerts have finished + lc = LoopingCall(lambda: self.alerts.handle_alerts(True)) - # We have to wait for all torrents to pause and write their resume data - wait = True - while wait: - if self.shutdown_torrent_pause_list: - wait = True - else: - wait = False - for torrent in self.torrents.values(): - if torrent.waiting_on_resume_data: - wait = True - break + def on_save_resume_finished(result, lc): + lc.stop() - time.sleep(0.01) - # Wait for all alerts - self.alerts.handle_alerts(True) + self.save_resume_data(self.torrents.keys()).addBoth(on_save_resume_finished, lc) + return lc.start(0.01) def update(self): for torrent_id, torrent in self.torrents.items(): @@ -613,9 +596,7 @@ class TorrentManager(component.Component): return False # Remove fastresume data if it is exists - resume_data = self.load_resume_data_file() - resume_data.pop(torrent_id, None) - self.save_resume_data_file(resume_data) + self.resume_data.pop(torrent_id, None) # Remove the .torrent file in the state self.torrents[torrent_id].delete_torrentfile() @@ -777,17 +758,34 @@ class TorrentManager(component.Component): def save_resume_data(self, torrent_ids=None): """ - Saves resume data for list of torrent_ids or for all torrents if - torrent_ids is None + Saves resume data for list of torrent_ids or for all torrents + needing resume data updated if torrent_ids is None + + :returns: A Deferred whose callback will be invoked when save is complete + :rtype: twisted.internet.defer.Deferred """ if torrent_ids is None: - torrent_ids = self.torrents.keys() + torrent_ids = (t[0] for t in self.torrents.iteritems() if t[1].handle.need_save_resume_data()) + + if self.waiting_on_resume_data: + # If we are still waiting on resume data from last call, force write and clear the queue + self.save_resume_data_file() + self.waiting_on_resume_data = {} + + def on_torrent_resume_save(result, torrent_id): + self.waiting_on_resume_data.pop(torrent_id, None) for torrent_id in torrent_ids: + self.waiting_on_resume_data[torrent_id] = Deferred() + self.waiting_on_resume_data[torrent_id].addBoth(on_torrent_resume_save, torrent_id) self.torrents[torrent_id].save_resume_data() - self.num_resume_data = len(torrent_ids) + def on_all_resume_data_finished(result): + if result: + self.save_resume_data_file() + + return DeferredList(self.waiting_on_resume_data.values()).addBoth(on_all_resume_data_finished) def load_resume_data_file(self): resume_data = {} @@ -807,34 +805,16 @@ class TorrentManager(component.Component): return resume_data - def save_resume_data_file(self, resume_data=None): + def save_resume_data_file(self): """ - Saves the resume data file with the contents of self.resume_data. If - `resume_data` is None, then we grab the resume_data from the file on - disk, else, we update `resume_data` with self.resume_data and save - that to disk. - - :param resume_data: the current resume_data, this will be loaded from disk if not provided - :type resume_data: dict - + Saves the resume data file with the contents of self.resume_data. """ - # Check to see if we're waiting on more resume data - if self.num_resume_data or not self.resume_data: - return - path = os.path.join(get_config_dir(), "state", "torrents.fastresume") - # First step is to load the existing file and update the dictionary - if resume_data is None: - resume_data = self.load_resume_data_file() - - resume_data.update(self.resume_data) - self.resume_data = {} - try: log.debug("Saving fastresume file: %s", path) fastresume_file = open(path, "wb") - fastresume_file.write(lt.bencode(resume_data)) + fastresume_file.write(lt.bencode(self.resume_data)) fastresume_file.flush() os.fsync(fastresume_file.fileno()) fastresume_file.close() @@ -988,15 +968,10 @@ class TorrentManager(component.Component): if torrent.state != old_state: component.get("EventManager").emit(TorrentStateChangedEvent(torrent_id, torrent.state)) - # Don't save resume data for each torrent after self.stop() was called. - # We save resume data in bulk in self.stop() in this case. - if self.save_resume_data_timer.running: - # Write the fastresume file + # Write the fastresume file if we are not waiting on a bulk write + if not self.waiting_on_resume_data: self.save_resume_data((torrent_id, )) - if torrent_id in self.shutdown_torrent_pause_list: - self.shutdown_torrent_pause_list.remove(torrent_id) - def on_alert_torrent_checked(self, alert): log.debug("on_alert_torrent_checked") try: @@ -1105,32 +1080,21 @@ class TorrentManager(component.Component): def on_alert_save_resume_data(self, alert): log.debug("on_alert_save_resume_data") - try: - torrent_id = str(alert.handle.info_hash()) - torrent = self.torrents[torrent_id] - except: - return + torrent_id = str(alert.handle.info_hash()) - # Libtorrent in add_torrent() expects resume_data to be bencoded - self.resume_data[torrent_id] = lt.bencode(alert.resume_data) - self.num_resume_data -= 1 + if torrent_id in self.torrents: + # Libtorrent in add_torrent() expects resume_data to be bencoded + self.resume_data[torrent_id] = lt.bencode(alert.resume_data) - torrent.waiting_on_resume_data = False - - self.save_resume_data_file() + if torrent_id in self.waiting_on_resume_data: + self.waiting_on_resume_data[torrent_id].callback(None) def on_alert_save_resume_data_failed(self, alert): log.debug("on_alert_save_resume_data_failed: %s", alert.message()) - try: - torrent = self.torrents[str(alert.handle.info_hash())] - except: - return - - self.num_resume_data -= 1 - torrent.waiting_on_resume_data = False - - self.save_resume_data_file() + torrent_id = alert.handle.info_hash() + if torrent_id in self.waiting_on_resume_data: + self.waiting_on_resume_data[torrent_id].errback(Exception(alert.message())) def on_alert_file_renamed(self, alert): log.debug("on_alert_file_renamed") From 58cb9e1c22540ff32fe0de267f60476d0bc3f623 Mon Sep 17 00:00:00 2001 From: Chase Sterling Date: Fri, 7 Dec 2012 19:00:43 -0500 Subject: [PATCH 40/58] Make sure dependent components are stopped before their dependencies. Make sure deferreds are not lost in new resume saving code. --- deluge/component.py | 32 ++++++++++++++++++++++++-------- deluge/core/alertmanager.py | 3 ++- deluge/core/torrentmanager.py | 29 +++++++++++------------------ 3 files changed, 37 insertions(+), 27 deletions(-) diff --git a/deluge/component.py b/deluge/component.py index 538d2f9f6..6085db277 100644 --- a/deluge/component.py +++ b/deluge/component.py @@ -34,6 +34,7 @@ # import logging +from collections import defaultdict from twisted.internet.defer import maybeDeferred, succeed, DeferredList, fail from twisted.internet.task import LoopingCall @@ -225,6 +226,8 @@ class ComponentRegistry(object): """ def __init__(self): self.components = {} + # Stores all of the components that are dependent on a particular component + self.dependents = defaultdict(list) def register(self, obj): """ @@ -243,6 +246,9 @@ class ComponentRegistry(object): "Component already registered with name %s" % name) self.components[obj._component_name] = obj + if obj._component_depend: + for depend in obj._component_depend: + self.dependents[depend].append(name) def deregister(self, obj): """ @@ -317,11 +323,23 @@ class ComponentRegistry(object): elif isinstance(names, str): names = [names] + def on_dependents_stopped(result, name): + return self.components[name]._component_stop() + + stopped_in_deferred = set() deferreds = [] for name in names: + if name in stopped_in_deferred: + continue if name in self.components: - deferreds.append(self.components[name]._component_stop()) + if name in self.dependents: + # If other components depend on this component, stop them first + d = self.stop(self.dependents[name]).addCallback(on_dependents_stopped, name) + deferreds.append(d) + stopped_in_deferred.update(self.dependents[name]) + else: + deferreds.append(self.components[name]._component_stop()) return DeferredList(deferreds) @@ -360,7 +378,7 @@ class ComponentRegistry(object): :param names: a list of Components to resume :type names: list - :returns: a Deferred object that will fire once all Components have been sucessfully resumed + :returns: a Deferred object that will fire once all Components have been successfully resumed :rtype: twisted.internet.defer.Deferred """ @@ -384,16 +402,14 @@ class ComponentRegistry(object): be called when the program is exiting to ensure all Components have a chance to properly shutdown. - :returns: a Deferred object that will fire once all Components have been sucessfully resumed + :returns: a Deferred object that will fire once all Components have been successfully shut down :rtype: twisted.internet.defer.Deferred """ - deferreds = [] + def on_stopped(result): + return DeferredList(map(lambda c: c._component_shutdown(), self.components.values())) - for component in self.components.values(): - deferreds.append(component._component_shutdown()) - - return DeferredList(deferreds) + return self.stop(self.components.keys()).addCallback(on_stopped) def update(self): """ diff --git a/deluge/core/alertmanager.py b/deluge/core/alertmanager.py index e2ff6c865..063bda723 100644 --- a/deluge/core/alertmanager.py +++ b/deluge/core/alertmanager.py @@ -75,7 +75,8 @@ class AlertManager(component.Component): def stop(self): for dc in self.delayed_calls: - dc.cancel() + if dc.active(): + dc.cancel() self.delayed_calls = [] def register_handler(self, alert_type, handler): diff --git a/deluge/core/torrentmanager.py b/deluge/core/torrentmanager.py index d2e9bff13..621b3c181 100644 --- a/deluge/core/torrentmanager.py +++ b/deluge/core/torrentmanager.py @@ -43,6 +43,7 @@ import shutil import operator import logging import re +from collections import defaultdict from twisted.internet.task import LoopingCall from twisted.internet.defer import Deferred, DeferredList @@ -134,7 +135,7 @@ class TorrentManager(component.Component): def __init__(self): component.Component.__init__(self, "TorrentManager", interval=5, - depend=["CorePluginManager"]) + depend=["CorePluginManager", "AlertManager"]) log.debug("TorrentManager init..") # Set the libtorrent session self.session = component.get("Core").session @@ -154,7 +155,7 @@ class TorrentManager(component.Component): # This is a map of torrent_ids to Deferreds used to track needed resume data. # The Deferreds will be completed when resume data has been saved. - self.waiting_on_resume_data = {} + self.waiting_on_resume_data = defaultdict(list) # Keeps track of resume data self.resume_data = {} @@ -247,14 +248,7 @@ class TorrentManager(component.Component): # Stop the status cleanup LoopingCall here self.torrents[key].prev_status_cleanup_loop.stop() - # Save all resume data and wait until alerts have finished - lc = LoopingCall(lambda: self.alerts.handle_alerts(True)) - - def on_save_resume_finished(result, lc): - lc.stop() - - self.save_resume_data(self.torrents.keys()).addBoth(on_save_resume_finished, lc) - return lc.start(0.01) + return self.save_resume_data(self.torrents.keys()) def update(self): for torrent_id, torrent in self.torrents.items(): @@ -768,24 +762,22 @@ class TorrentManager(component.Component): if torrent_ids is None: torrent_ids = (t[0] for t in self.torrents.iteritems() if t[1].handle.need_save_resume_data()) - if self.waiting_on_resume_data: - # If we are still waiting on resume data from last call, force write and clear the queue - self.save_resume_data_file() - self.waiting_on_resume_data = {} + deferreds = [] def on_torrent_resume_save(result, torrent_id): self.waiting_on_resume_data.pop(torrent_id, None) for torrent_id in torrent_ids: - self.waiting_on_resume_data[torrent_id] = Deferred() - self.waiting_on_resume_data[torrent_id].addBoth(on_torrent_resume_save, torrent_id) + d = Deferred().addBoth(on_torrent_resume_save, torrent_id) + self.waiting_on_resume_data[torrent_id].append(d) + deferreds.append(d) self.torrents[torrent_id].save_resume_data() def on_all_resume_data_finished(result): if result: self.save_resume_data_file() - return DeferredList(self.waiting_on_resume_data.values()).addBoth(on_all_resume_data_finished) + return DeferredList(deferreds).addBoth(on_all_resume_data_finished) def load_resume_data_file(self): resume_data = {} @@ -1087,7 +1079,8 @@ class TorrentManager(component.Component): self.resume_data[torrent_id] = lt.bencode(alert.resume_data) if torrent_id in self.waiting_on_resume_data: - self.waiting_on_resume_data[torrent_id].callback(None) + for d in self.waiting_on_resume_data[torrent_id]: + d.callback(None) def on_alert_save_resume_data_failed(self, alert): log.debug("on_alert_save_resume_data_failed: %s", alert.message()) From bcac44bcb4ea8471a9e915e9e589c1012a515fc0 Mon Sep 17 00:00:00 2001 From: Chase Sterling Date: Fri, 7 Dec 2012 00:24:34 -0500 Subject: [PATCH 41/58] Increase libtorrent alert queue size. refs #2204 --- ChangeLog | 1 + deluge/core/core.py | 2 ++ 2 files changed, 3 insertions(+) diff --git a/ChangeLog b/ChangeLog index ba4c8133b..b1062d393 100644 --- a/ChangeLog +++ b/ChangeLog @@ -51,6 +51,7 @@ * #2201: Fix error in authmanager if auth file has extra newlines * #2109: Fix the Proxy settings not being cleared by setting None * #2110: Fix accepting magnet uris with xt param anywhere within them + * #2204: Fix daemon shutdown hang ==== GtkUI ==== * Add move completed option to add torrent dialog diff --git a/deluge/core/core.py b/deluge/core/core.py index e69944790..242359a9d 100644 --- a/deluge/core/core.py +++ b/deluge/core/core.py @@ -94,6 +94,8 @@ class Core(component.Component): self.settings.user_agent = "Deluge/%(deluge_version)s Libtorrent/%(lt_version)s" % \ { 'deluge_version': deluge.common.get_version(), 'lt_version': self.get_libtorrent_version().rpartition(".")[0] } + # Increase the alert queue size so that alerts don't get lost + self.settings.alert_queue_size = 10000 # Set session settings self.settings.send_redundant_have = True From 67b40a8442d5fa917b13d42807e76ddb9adb1630 Mon Sep 17 00:00:00 2001 From: Chase Sterling Date: Fri, 7 Dec 2012 21:58:12 -0500 Subject: [PATCH 42/58] Remove unneeded import from torrentmanager. --- deluge/core/torrentmanager.py | 1 - 1 file changed, 1 deletion(-) diff --git a/deluge/core/torrentmanager.py b/deluge/core/torrentmanager.py index 621b3c181..d6314dda4 100644 --- a/deluge/core/torrentmanager.py +++ b/deluge/core/torrentmanager.py @@ -38,7 +38,6 @@ import cPickle import os -import time import shutil import operator import logging From 25efa5437b690316c7f944a55c2f4daf0070915a Mon Sep 17 00:00:00 2001 From: Chase Sterling Date: Fri, 7 Dec 2012 17:17:25 -0500 Subject: [PATCH 43/58] Update folder rename to use deferreds. --- deluge/core/torrent.py | 70 ++++++++++++++++++++++++++++++----- deluge/core/torrentmanager.py | 58 +++-------------------------- 2 files changed, 66 insertions(+), 62 deletions(-) diff --git a/deluge/core/torrent.py b/deluge/core/torrent.py index 3664c1e2d..ba6ec285a 100644 --- a/deluge/core/torrent.py +++ b/deluge/core/torrent.py @@ -37,9 +37,12 @@ import os import time import logging +import re from urllib import unquote from urlparse import urlparse +from twisted.internet.defer import Deferred, DeferredList +from twisted.internet.task import LoopingCall from deluge._libtorrent import lt import deluge.common @@ -116,7 +119,6 @@ class Torrent(object): # We use this to return dicts that only contain changes from the previous # {session_id: status_dict, ...} self.prev_status = {} - from twisted.internet.task import LoopingCall self.prev_status_cleanup_loop = LoopingCall(self.cleanup_prev_status) self.prev_status_cleanup_loop.start(10) @@ -125,11 +127,10 @@ class Torrent(object): # Set the torrent_id for this torrent self.torrent_id = str(handle.info_hash()) - # Keep a list of file indexes we're waiting for file_rename alerts on - # This also includes the old_folder and new_folder to know what signal to send + # Keep a list of Deferreds for file indexes we're waiting for file_rename alerts on # This is so we can send one folder_renamed signal instead of multiple # file_renamed signals. - # [(old_folder, new_folder, [*indexes]), ...] + # [{index: Deferred, ...}, ...] self.waiting_on_folder_rename = [] # We store the filename just in case we need to make a copy of the torrentfile @@ -989,8 +990,13 @@ class Torrent(object): self.handle.rename_file(index, filename.encode("utf-8")) def rename_folder(self, folder, new_folder): - """Renames a folder within a torrent. This basically does a file rename - on all of the folders children.""" + """ + Renames a folder within a torrent. This basically does a file rename + on all of the folders children. + + :returns: A deferred which fires when the rename is complete + :rtype: twisted.internet.defer.Deferred + """ log.debug("attempting to rename folder: %s to %s", folder, new_folder) if len(new_folder) < 1: log.error("Attempting to rename a folder with an invalid folder name: %s", new_folder) @@ -998,13 +1004,57 @@ class Torrent(object): new_folder = sanitize_filepath(new_folder, folder=True) - wait_on_folder = (folder, new_folder, []) + def on_file_rename_complete(result, wait_dict, index): + wait_dict.pop(index, None) + + wait_on_folder = {} + self.waiting_on_folder_rename.append(wait_on_folder) for f in self.get_files(): if f["path"].startswith(folder): - # Keep a list of filerenames we're waiting on - wait_on_folder[2].append(f["index"]) + # Keep track of filerenames we're waiting on + wait_on_folder[f["index"]] = Deferred().addBoth(on_file_rename_complete, wait_on_folder, f["index"]) self.handle.rename_file(f["index"], f["path"].replace(folder, new_folder, 1).encode("utf-8")) - self.waiting_on_folder_rename.append(wait_on_folder) + + def on_folder_rename_complete(result, torrent, folder, new_folder): + component.get("EventManager").emit(TorrentFolderRenamedEvent(torrent.torrent_id, folder, new_folder)) + # Empty folders are removed after libtorrent folder renames + self.remove_empty_folders(folder) + torrent.waiting_on_folder_rename = filter(None, torrent.waiting_on_folder_rename) + component.get("TorrentManager").save_resume_data((self.torrent_id,)) + + d = DeferredList(wait_on_folder.values()) + d.addBoth(on_folder_rename_complete, self, folder, new_folder) + return d + + def remove_empty_folders(self, folder): + """ + Recursively removes folders but only if they are empty. + Cleans up after libtorrent folder renames. + + """ + info = self.get_status(['save_path']) + # Regex removes leading slashes that causes join function to ignore save_path + folder_full_path = os.path.join(info['save_path'], re.sub("^/*", "", folder)) + folder_full_path = os.path.normpath(folder_full_path) + + try: + if not os.listdir(folder_full_path): + os.removedirs(folder_full_path) + log.debug("Removed Empty Folder %s", folder_full_path) + else: + for root, dirs, files in os.walk(folder_full_path, topdown=False): + for name in dirs: + try: + os.removedirs(os.path.join(root, name)) + log.debug("Removed Empty Folder %s", os.path.join(root, name)) + except OSError as (errno, strerror): + from errno import ENOTEMPTY + if errno == ENOTEMPTY: + # Error raised if folder is not empty + log.debug("%s", strerror) + + except OSError as (errno, strerror): + log.debug("Cannot Remove Folder: %s (ErrNo %s)", strerror, errno) def cleanup_prev_status(self): """ diff --git a/deluge/core/torrentmanager.py b/deluge/core/torrentmanager.py index d6314dda4..25eab66bb 100644 --- a/deluge/core/torrentmanager.py +++ b/deluge/core/torrentmanager.py @@ -41,7 +41,6 @@ import os import shutil import operator import logging -import re from collections import defaultdict from twisted.internet.task import LoopingCall @@ -812,39 +811,6 @@ class TorrentManager(component.Component): except IOError: log.warning("Error trying to save fastresume file") - def remove_empty_folders(self, torrent_id, folder): - """ - Recursively removes folders but only if they are empty. - Cleans up after libtorrent folder renames. - - """ - if torrent_id not in self.torrents: - raise InvalidTorrentError("torrent_id is not in session") - - info = self.torrents[torrent_id].get_status(['save_path']) - # Regex removes leading slashes that causes join function to ignore save_path - folder_full_path = os.path.join(info['save_path'], re.sub("^/*", "", folder)) - folder_full_path = os.path.normpath(folder_full_path) - - try: - if not os.listdir(folder_full_path): - os.removedirs(folder_full_path) - log.debug("Removed Empty Folder %s", folder_full_path) - else: - for root, dirs, files in os.walk(folder_full_path, topdown=False): - for name in dirs: - try: - os.removedirs(os.path.join(root, name)) - log.debug("Removed Empty Folder %s", os.path.join(root, name)) - except OSError as (errno, strerror): - from errno import ENOTEMPTY - if errno == ENOTEMPTY: - # Error raised if folder is not empty - log.debug("%s", strerror) - - except OSError as (errno, strerror): - log.debug("Cannot Remove Folder: %s (ErrNo %s)", strerror, errno) - def get_queue_position(self, torrent_id): """Get queue position of torrent""" return self.torrents[torrent_id].get_queue_position() @@ -1097,24 +1063,12 @@ class TorrentManager(component.Component): except: return - # We need to see if this file index is in a waiting_on_folder list - folder_rename = False - for i, wait_on_folder in enumerate(torrent.waiting_on_folder_rename): - if alert.index in wait_on_folder[2]: - folder_rename = True - if len(wait_on_folder[2]) == 1: - # This is the last alert we were waiting for, time to send signal - component.get("EventManager").emit(TorrentFolderRenamedEvent(torrent_id, wait_on_folder[0], wait_on_folder[1])) - # Empty folders are removed after libtorrent folder renames - self.remove_empty_folders(torrent_id, wait_on_folder[0]) - del torrent.waiting_on_folder_rename[i] - self.save_resume_data((torrent_id,)) - break - # This isn't the last file to be renamed in this folder, so just - # remove the index and continue - torrent.waiting_on_folder_rename[i][2].remove(alert.index) - - if not folder_rename: + # We need to see if this file index is in a waiting_on_folder dict + for wait_on_folder in torrent.waiting_on_folder_rename: + if alert.index in wait_on_folder: + wait_on_folder[alert.index].callback(None) + break + else: # This is just a regular file rename so send the signal component.get("EventManager").emit(TorrentFileRenamedEvent(torrent_id, alert.index, alert.name)) self.save_resume_data((torrent_id,)) From d3a0b9d877dba3fb52f2e35b392df418fcb69446 Mon Sep 17 00:00:00 2001 From: Chase Sterling Date: Sat, 8 Dec 2012 00:39:02 -0500 Subject: [PATCH 44/58] Small tweak to make sure writing fastresume is not skipped when torrents are paused. --- deluge/core/torrentmanager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deluge/core/torrentmanager.py b/deluge/core/torrentmanager.py index 25eab66bb..d60d78575 100644 --- a/deluge/core/torrentmanager.py +++ b/deluge/core/torrentmanager.py @@ -926,8 +926,8 @@ class TorrentManager(component.Component): component.get("EventManager").emit(TorrentStateChangedEvent(torrent_id, torrent.state)) # Write the fastresume file if we are not waiting on a bulk write - if not self.waiting_on_resume_data: - self.save_resume_data((torrent_id, )) + if torrent_id not in self.waiting_on_resume_data: + self.save_resume_data((torrent_id,)) def on_alert_torrent_checked(self, alert): log.debug("on_alert_torrent_checked") From fe44a5ba69df57292ab6e50510a371fa852a246b Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Sat, 8 Dec 2012 17:59:09 +0000 Subject: [PATCH 45/58] Fix #2231 : WebUI: Fix unneeded scrollbars in webui add dialog Also fix spinner display issue --- deluge/ui/web/js/deluge-all/add/FilesTab.js | 4 ++-- deluge/ui/web/js/deluge-all/add/OptionsTab.js | 15 ++++++--------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/deluge/ui/web/js/deluge-all/add/FilesTab.js b/deluge/ui/web/js/deluge-all/add/FilesTab.js index 3e624823d..709105b1b 100644 --- a/deluge/ui/web/js/deluge-all/add/FilesTab.js +++ b/deluge/ui/web/js/deluge-all/add/FilesTab.js @@ -1,6 +1,6 @@ /*! * Deluge.add.FilesTab.js - * + * * Copyright (c) Damien Churchill 2009-2010 * * This program is free software; you can redistribute it and/or modify @@ -40,7 +40,7 @@ Deluge.add.FilesTab = Ext.extend(Ext.ux.tree.TreeGrid, { layout: 'fit', title: _('Files'), - autoScroll: true, + autoScroll: false, animate: false, border: false, disabled: true, diff --git a/deluge/ui/web/js/deluge-all/add/OptionsTab.js b/deluge/ui/web/js/deluge-all/add/OptionsTab.js index c65dc6f40..9ea306c73 100644 --- a/deluge/ui/web/js/deluge-all/add/OptionsTab.js +++ b/deluge/ui/web/js/deluge-all/add/OptionsTab.js @@ -1,6 +1,6 @@ /*! * Deluge.add.OptionsPanel.js - * + * * Copyright (c) Damien Churchill 2009-2010 * * This program is free software; you can redistribute it and/or modify @@ -67,7 +67,7 @@ Deluge.add.OptionsTab = Ext.extend(Ext.form.FormPanel, { width: 400, labelSeparator: '' })); - + var panel = this.add({ border: false, layout: 'column', @@ -78,7 +78,6 @@ Deluge.add.OptionsTab = Ext.extend(Ext.form.FormPanel, { border: false, autoHeight: true, defaultType: 'radio', - width: 100 }); this.optionsManager.bind('compact_allocation', fieldset.add({ @@ -86,6 +85,7 @@ Deluge.add.OptionsTab = Ext.extend(Ext.form.FormPanel, { columns: 1, vertical: true, labelSeparator: '', + width: 80, items: [{ name: 'compact_allocation', value: false, @@ -107,35 +107,32 @@ Deluge.add.OptionsTab = Ext.extend(Ext.form.FormPanel, { title: _('Bandwidth'), border: false, autoHeight: true, - labelWidth: 100, + bodyStyle: 'margin-left: 7px', + labelWidth: 105, width: 200, defaultType: 'spinnerfield' }); this.optionsManager.bind('max_download_speed', fieldset.add({ fieldLabel: _('Max Down Speed'), - labelStyle: 'margin-left: 10px', name: 'max_download_speed', width: 60 })); this.optionsManager.bind('max_upload_speed', fieldset.add({ fieldLabel: _('Max Up Speed'), - labelStyle: 'margin-left: 10px', name: 'max_upload_speed', width: 60 })); this.optionsManager.bind('max_connections', fieldset.add({ fieldLabel: _('Max Connections'), - labelStyle: 'margin-left: 10px', name: 'max_connections', width: 60 })); this.optionsManager.bind('max_upload_slots', fieldset.add({ fieldLabel: _('Max Upload Slots'), - labelStyle: 'margin-left: 10px', name: 'max_upload_slots', width: 60 })); - + fieldset = panel.add({ title: _('General'), border: false, From 2f3623d4303bc698eebc2bfc43e7cda1ad994556 Mon Sep 17 00:00:00 2001 From: Andrew Resch Date: Sat, 8 Dec 2012 12:56:58 -0800 Subject: [PATCH 46/58] Fix component tests --- deluge/tests/test_component.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/deluge/tests/test_component.py b/deluge/tests/test_component.py index ab5e4d534..816bb9716 100644 --- a/deluge/tests/test_component.py +++ b/deluge/tests/test_component.py @@ -57,6 +57,7 @@ class ComponentTestClass(unittest.TestCase): def on_start(result, c): self.assertEquals(c._component_state, "Started") self.assertEquals(c.start_count, 1) + c._component_timer.stop() c = testcomponent("test_start_c1") d = component.start(["test_start_c1"]) @@ -69,6 +70,8 @@ class ComponentTestClass(unittest.TestCase): self.assertEquals(c2._component_state, "Started") self.assertEquals(c1.start_count, 1) self.assertEquals(c2.start_count, 1) + c1._component_timer.stop() + c2._component_timer.stop() c1 = testcomponent("test_start_depends_c1") c2 = testcomponent("test_start_depends_c2") From 2a0048afbb386ec414261623520d21bc15c141a3 Mon Sep 17 00:00:00 2001 From: Chase Sterling Date: Sat, 8 Dec 2012 16:18:58 -0500 Subject: [PATCH 47/58] Add unit test for new component dependency stopping code. --- deluge/tests/test_component.py | 41 +++++++++++++++++----------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/deluge/tests/test_component.py b/deluge/tests/test_component.py index 816bb9716..6f13eeca2 100644 --- a/deluge/tests/test_component.py +++ b/deluge/tests/test_component.py @@ -3,8 +3,8 @@ from twisted.internet import threads import deluge.component as component class testcomponent(component.Component): - def __init__(self, name): - component.Component.__init__(self, name) + def __init__(self, name, depend=None): + component.Component.__init__(self, name, depend=depend) self.start_count = 0 self.stop_count = 0 @@ -51,31 +51,35 @@ class testcomponent_shutdown(component.Component): class ComponentTestClass(unittest.TestCase): def tearDown(self): + component.stop() component._ComponentRegistry.components = {} def test_start_component(self): def on_start(result, c): self.assertEquals(c._component_state, "Started") self.assertEquals(c.start_count, 1) - c._component_timer.stop() c = testcomponent("test_start_c1") d = component.start(["test_start_c1"]) d.addCallback(on_start, c) return d - def test_start_depends(self): + def test_start_stop_depends(self): + def on_stop(result, c1, c2): + self.assertEquals(c1._component_state, "Stopped") + self.assertEquals(c2._component_state, "Stopped") + self.assertEquals(c1.stop_count, 1) + self.assertEquals(c2.stop_count, 1) + def on_start(result, c1, c2): self.assertEquals(c1._component_state, "Started") self.assertEquals(c2._component_state, "Started") self.assertEquals(c1.start_count, 1) self.assertEquals(c2.start_count, 1) - c1._component_timer.stop() - c2._component_timer.stop() + return component.stop(["test_start_depends_c1"]).addCallback(on_stop, c1, c2) c1 = testcomponent("test_start_depends_c1") - c2 = testcomponent("test_start_depends_c2") - c2._component_depend = ["test_start_depends_c1"] + c2 = testcomponent("test_start_depends_c2", depend=["test_start_depends_c1"]) d = component.start(["test_start_depends_c2"]) d.addCallback(on_start, c1, c2) @@ -83,15 +87,12 @@ class ComponentTestClass(unittest.TestCase): def start_with_depends(self): c1 = testcomponent_delaystart("test_start_all_c1") - c2 = testcomponent("test_start_all_c2") - c3 = testcomponent_delaystart("test_start_all_c3") - c4 = testcomponent("test_start_all_c4") + c2 = testcomponent("test_start_all_c2", depend=["test_start_all_c4"]) + c3 = testcomponent_delaystart("test_start_all_c3", + depend=["test_start_all_c5", "test_start_all_c1"]) + c4 = testcomponent("test_start_all_c4", depend=["test_start_all_c3"]) c5 = testcomponent("test_start_all_c5") - c3._component_depend = ["test_start_all_c5", "test_start_all_c1"] - c4._component_depend = ["test_start_all_c3"] - c2._component_depend = ["test_start_all_c4"] - d = component.start() return (d, c1, c2, c3, c4, c5) @@ -133,15 +134,15 @@ class ComponentTestClass(unittest.TestCase): return d def test_stop_all(self): - def on_stop(*args): - for c in args[1:]: + def on_stop(result, *args): + for c in args: self.assertEquals(c._component_state, "Stopped") self.assertEquals(c.stop_count, 1) - def on_start(*args): - for c in args[1:]: + def on_start(result, *args): + for c in args: self.assertEquals(c._component_state, "Started") - return component.stop().addCallback(on_stop, *args[1:]) + return component.stop().addCallback(on_stop, *args) ret = self.start_with_depends() ret[0].addCallback(on_start, *ret[1:]) From 848b14605eb3b512cb2af43471535317dd8d1cff Mon Sep 17 00:00:00 2001 From: Chase Sterling Date: Sat, 8 Dec 2012 17:57:12 -0500 Subject: [PATCH 48/58] Make sure pending gtk events are processed before quitting gtkui. --- deluge/ui/gtkui/gtkui.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/deluge/ui/gtkui/gtkui.py b/deluge/ui/gtkui/gtkui.py index e48472d99..685ed45a5 100644 --- a/deluge/ui/gtkui/gtkui.py +++ b/deluge/ui/gtkui/gtkui.py @@ -246,9 +246,8 @@ class GtkUI(object): component.stop() # Process any pending gtk events since the mainloop has been quit - if not deluge.common.windows_check(): - while gtk.events_pending() and reactor.running: - reactor.doIteration(0) + while gtk.events_pending(): + gtk.main_iteration(0) # Shutdown all components component.shutdown() From ac6785eb1a6146dc7891fdad6a7d3e474806edfc Mon Sep 17 00:00:00 2001 From: clippit Date: Sun, 9 Dec 2012 19:06:40 +0000 Subject: [PATCH 49/58] Fix #2232 : WebUI: Flag Icon path in Peers Tab missing deluge.config.base --- deluge/ui/web/js/deluge-all/details/PeersTab.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deluge/ui/web/js/deluge-all/details/PeersTab.js b/deluge/ui/web/js/deluge-all/details/PeersTab.js index bb45d6655..490c49ff4 100644 --- a/deluge/ui/web/js/deluge-all/details/PeersTab.js +++ b/deluge/ui/web/js/deluge-all/details/PeersTab.js @@ -35,7 +35,7 @@ if (!value.replace(' ', '').replace(' ', '')){ return ''; } - return String.format('', value); + return String.format('', deluge.config.base, value); } function peerAddressRenderer(value, p, record) { var seed = (record.data['seed'] == 1024) ? 'x-deluge-seed' : 'x-deluge-peer'; From 2a8b8e93dab38f04835dc5a68872ff1c7f043e3b Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Fri, 7 Dec 2012 10:48:56 +0000 Subject: [PATCH 50/58] Use try-except instead of if statement to gain a little performance --- deluge/core/torrentmanager.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/deluge/core/torrentmanager.py b/deluge/core/torrentmanager.py index d60d78575..2387741ed 100644 --- a/deluge/core/torrentmanager.py +++ b/deluge/core/torrentmanager.py @@ -571,12 +571,11 @@ class TorrentManager(component.Component): :raises InvalidTorrentError: if the torrent_id is not in the session """ - - if torrent_id not in self.torrents: + try: + torrent_name = self.torrents[torrent_id].get_status(["name"])["name"] + except KeyError: raise InvalidTorrentError("torrent_id not in session") - torrent_name = self.torrents[torrent_id].get_status(["name"])["name"] - # Emit the signal to the clients component.get("EventManager").emit(PreTorrentRemovedEvent(torrent_id)) From 8658be3b05fc7ee2c74e35bd204398ba46988e22 Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Wed, 5 Dec 2012 13:41:30 +0000 Subject: [PATCH 51/58] Fix #2227 : Torrent file contains sha1 and ed2k digest that needs encoding to hex --- deluge/ui/common.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/deluge/ui/common.py b/deluge/ui/common.py index 3b754cef7..64c0b61b0 100644 --- a/deluge/ui/common.py +++ b/deluge/ui/common.py @@ -106,8 +106,11 @@ class TorrentInfo(object): else: path = decode_string(os.path.join(prefix, decode_string(os.path.join(*f["path"]), self.encoding)), self.encoding) f["index"] = index + if "sha1" in f and len(f["sha1"]) == 20: + f["sha1"] = f["sha1"].encode('hex') + if "ed2k" in f and len(f["ed2k"]) == 16: + f["ed2k"] = f["ed2k"].encode('hex') paths[path] = f - dirname = os.path.dirname(path) while dirname: dirinfo = dirs.setdefault(dirname, {}) From c2d301bf52978e3ea7438afd11bb8061f3174468 Mon Sep 17 00:00:00 2001 From: Chase Sterling Date: Thu, 15 Nov 2012 23:36:20 -0500 Subject: [PATCH 52/58] Make deluge-gtk get arguments as unicode. Fix a few places that use those arguments. Make sure gtkui loads strings as unicode from rencode. --- ChangeLog | 1 + deluge/ui/client.py | 3 +++ deluge/ui/gtkui/addtorrentdialog.py | 3 --- deluge/ui/gtkui/ipcinterface.py | 2 +- deluge/ui/gtkui/queuedtorrents.py | 2 +- deluge/ui/ui.py | 36 ++++++++++++++++++++++++++++- 6 files changed, 41 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index b1062d393..cc00f123a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -32,6 +32,7 @@ * Implemented sequential downloads UI handling. * #378: Allow showing a pieces bar instead of a regular progress bar in a torrent's status tab. + * #2093: Make torrent opening compatible with all unicode paths. ==== Blocklist Plugin ==== * #1382: Implemented whitelist support to both core and GTK UI. diff --git a/deluge/ui/client.py b/deluge/ui/client.py index cf9dee85f..342480e20 100644 --- a/deluge/ui/client.py +++ b/deluge/ui/client.py @@ -37,6 +37,7 @@ import logging from twisted.internet.protocol import ClientFactory from twisted.internet import reactor, ssl, defer +import sys import subprocess import deluge.common @@ -624,6 +625,8 @@ class Client(object): :raises OSError: received from subprocess.call() """ + # subprocess.popen does not work with unicode args (with non-ascii characters) on windows + config = config.encode(sys.getfilesystemencoding()) try: subprocess.Popen(["deluged", "--port=%s" % port, "--config=%s" % config]) except OSError, e: diff --git a/deluge/ui/gtkui/addtorrentdialog.py b/deluge/ui/gtkui/addtorrentdialog.py index e2df0c91d..976f95eaa 100644 --- a/deluge/ui/gtkui/addtorrentdialog.py +++ b/deluge/ui/gtkui/addtorrentdialog.py @@ -213,9 +213,6 @@ class AddTorrentDialog(component.Component): new_row = None for filename in filenames: - # Convert the path to unicode - filename = unicode(filename) - # Get the torrent data from the torrent file try: info = deluge.ui.common.TorrentInfo(filename) diff --git a/deluge/ui/gtkui/ipcinterface.py b/deluge/ui/gtkui/ipcinterface.py index 242e6b2d7..6600e4ec2 100644 --- a/deluge/ui/gtkui/ipcinterface.py +++ b/deluge/ui/gtkui/ipcinterface.py @@ -60,7 +60,7 @@ log = logging.getLogger(__name__) class IPCProtocolServer(Protocol): def dataReceived(self, data): config = ConfigManager("gtkui.conf") - data = rencode.loads(data) + data = rencode.loads(data, decode_utf8=True) if not data or config["focus_main_window_on_add"]: component.get("MainWindow").present() process_args(data) diff --git a/deluge/ui/gtkui/queuedtorrents.py b/deluge/ui/gtkui/queuedtorrents.py index 3b63934c5..7eeaaa78b 100644 --- a/deluge/ui/gtkui/queuedtorrents.py +++ b/deluge/ui/gtkui/queuedtorrents.py @@ -173,7 +173,7 @@ class QueuedTorrents(component.Component): def on_button_add_clicked(self, widget): # Add all the torrents in the liststore def add_torrent(model, path, iter, data): - torrent_path = model.get_value(iter, 1) + torrent_path = model.get_value(iter, 1).decode('utf-8') process_args([torrent_path]) self.liststore.foreach(add_torrent, None) diff --git a/deluge/ui/ui.py b/deluge/ui/ui.py index 792f416c2..c10a2c323 100644 --- a/deluge/ui/ui.py +++ b/deluge/ui/ui.py @@ -64,6 +64,35 @@ if 'dev' not in deluge.common.get_version(): import warnings warnings.filterwarnings('ignore', category=DeprecationWarning, module='twisted') +def win32_unicode_argv(): + """Uses shell32.GetCommandLineArgvW to get sys.argv as a list of Unicode + strings. + + Versions 2.x of Python don't support Unicode in sys.argv on + Windows, with the underlying Windows API instead replacing multi-byte + characters with '?'. + """ + + from ctypes import POINTER, byref, cdll, c_int, windll + from ctypes.wintypes import LPCWSTR, LPWSTR + + GetCommandLineW = cdll.kernel32.GetCommandLineW + GetCommandLineW.argtypes = [] + GetCommandLineW.restype = LPCWSTR + + CommandLineToArgvW = windll.shell32.CommandLineToArgvW + CommandLineToArgvW.argtypes = [LPCWSTR, POINTER(c_int)] + CommandLineToArgvW.restype = POINTER(LPWSTR) + + cmd = GetCommandLineW() + argc = c_int(0) + argv = CommandLineToArgvW(cmd, byref(argc)) + if argc.value > 0: + # Remove Python executable and commands if present + start = argc.value - len(sys.argv) + return [argv[i] for i in + xrange(start, argc.value)] + class _UI(object): def __init__(self, name="gtk"): @@ -107,7 +136,12 @@ class _UI(object): return self.__args def start(self): - (self.__options, self.__args) = self.__parser.parse_args() + # Make sure all arguments are unicode + if deluge.common.windows_check(): + argv = win32_unicode_argv()[1:] + else: + argv = [arg.decode(sys.stdin.encoding) for arg in sys.argv[1:]] + (self.__options, self.__args) = self.__parser.parse_args(argv) if self.__options.quiet: self.__options.loglevel = "none" From 1ac62fce01596cb0c737a8bdfbfc7a2767637013 Mon Sep 17 00:00:00 2001 From: Chase Sterling Date: Fri, 16 Nov 2012 18:26:31 -0500 Subject: [PATCH 53/58] Get cli arguments in unicode in deluge core as well. Make a better guess at what arguments are encoded in on linux. --- deluge/common.py | 37 +++++++++++++++++++++++++++++++++++++ deluge/main.py | 2 +- deluge/ui/ui.py | 34 +--------------------------------- 3 files changed, 39 insertions(+), 34 deletions(-) diff --git a/deluge/common.py b/deluge/common.py index dd0a86e02..c188bbb5e 100644 --- a/deluge/common.py +++ b/deluge/common.py @@ -68,6 +68,7 @@ if not hasattr(json, "dumps"): import pkg_resources import gettext import locale +import sys from deluge.error import * @@ -751,3 +752,39 @@ def setup_translations(setup_pygtk=False): log.exception(e) import __builtin__ __builtin__.__dict__["_"] = lambda x: x + +def unicode_argv(): + """ Gets sys.argv as list of unicode objects on any platform.""" + if windows_check(): + # Versions 2.x of Python don't support Unicode in sys.argv on + # Windows, with the underlying Windows API instead replacing multi-byte + # characters with '?'. + from ctypes import POINTER, byref, cdll, c_int, windll + from ctypes.wintypes import LPCWSTR, LPWSTR + + GetCommandLineW = cdll.kernel32.GetCommandLineW + GetCommandLineW.argtypes = [] + GetCommandLineW.restype = LPCWSTR + + CommandLineToArgvW = windll.shell32.CommandLineToArgvW + CommandLineToArgvW.argtypes = [LPCWSTR, POINTER(c_int)] + CommandLineToArgvW.restype = POINTER(LPWSTR) + + cmd = GetCommandLineW() + argc = c_int(0) + argv = CommandLineToArgvW(cmd, byref(argc)) + if argc.value > 0: + # Remove Python executable and commands if present + start = argc.value - len(sys.argv) + return [argv[i] for i in + xrange(start, argc.value)] + else: + # On other platforms, we have to find the likely encoding of the args and decode + # First check if sys.stdout or stdin have encoding set + encoding = getattr(sys.stdout, "encoding") or getattr(sys.stdin, "encoding") + # If that fails, check what the locale is set to + encoding = encoding or locale.getpreferredencoding() + # As a last resort, just default to utf-8 + encoding = encoding or "utf-8" + + return [arg.decode(encoding) for arg in sys.argv] diff --git a/deluge/main.py b/deluge/main.py index a966356de..422b661fe 100644 --- a/deluge/main.py +++ b/deluge/main.py @@ -86,7 +86,7 @@ def start_ui(): help="Rotate logfiles.", action="store_true", default=False) # Get the options and args from the OptionParser - (options, args) = parser.parse_args() + (options, args) = parser.parse_args(deluge.common.unicode_argv()[1:]) if options.quiet: options.loglevel = "none" diff --git a/deluge/ui/ui.py b/deluge/ui/ui.py index c10a2c323..46a597a5f 100644 --- a/deluge/ui/ui.py +++ b/deluge/ui/ui.py @@ -64,35 +64,6 @@ if 'dev' not in deluge.common.get_version(): import warnings warnings.filterwarnings('ignore', category=DeprecationWarning, module='twisted') -def win32_unicode_argv(): - """Uses shell32.GetCommandLineArgvW to get sys.argv as a list of Unicode - strings. - - Versions 2.x of Python don't support Unicode in sys.argv on - Windows, with the underlying Windows API instead replacing multi-byte - characters with '?'. - """ - - from ctypes import POINTER, byref, cdll, c_int, windll - from ctypes.wintypes import LPCWSTR, LPWSTR - - GetCommandLineW = cdll.kernel32.GetCommandLineW - GetCommandLineW.argtypes = [] - GetCommandLineW.restype = LPCWSTR - - CommandLineToArgvW = windll.shell32.CommandLineToArgvW - CommandLineToArgvW.argtypes = [LPCWSTR, POINTER(c_int)] - CommandLineToArgvW.restype = POINTER(LPWSTR) - - cmd = GetCommandLineW() - argc = c_int(0) - argv = CommandLineToArgvW(cmd, byref(argc)) - if argc.value > 0: - # Remove Python executable and commands if present - start = argc.value - len(sys.argv) - return [argv[i] for i in - xrange(start, argc.value)] - class _UI(object): def __init__(self, name="gtk"): @@ -137,10 +108,7 @@ class _UI(object): def start(self): # Make sure all arguments are unicode - if deluge.common.windows_check(): - argv = win32_unicode_argv()[1:] - else: - argv = [arg.decode(sys.stdin.encoding) for arg in sys.argv[1:]] + argv = deluge.common.unicode_argv()[1:] (self.__options, self.__args) = self.__parser.parse_args(argv) if self.__options.quiet: From 4520fdd58bd6a27ae2536088a54bc1df03d2062f Mon Sep 17 00:00:00 2001 From: Asmageddon Date: Mon, 10 Dec 2012 14:45:23 +0100 Subject: [PATCH 54/58] Added priority colors to torrent detail view in console --- deluge/ui/console/modes/torrentdetail.py | 37 +++++++++++++++++++----- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/deluge/ui/console/modes/torrentdetail.py b/deluge/ui/console/modes/torrentdetail.py index 13ec757b9..4252c4e17 100644 --- a/deluge/ui/console/modes/torrentdetail.py +++ b/deluge/ui/console/modes/torrentdetail.py @@ -310,6 +310,8 @@ class TorrentDetail(BaseMode, component.Component): color_partially_selected = "magenta" color_highlighted = "white" for fl in files: + #from sys import stderr + #print >> stderr, fl[6] # kick out if we're going to draw too low on the screen if (off >= self.rows-1): self.more_to_draw = True @@ -317,18 +319,34 @@ class TorrentDetail(BaseMode, component.Component): self.file_limit = idx - if idx >= self.file_off: - # set fg/bg colors based on if we are selected/marked or not - # default values - fg = "white" - bg = "black" + # default color values + fg = "white" + bg = "black" + attr = "" + + if fl[6] == -2: priority = -1 #Mixed + elif fl[6] == 0: + priority = 0 #Do Not Download + fg = "red" + elif fl[6] == 1: + priority = 1 #Normal + elif fl[6] <= 6: + priority = 2 #High + fg = "yellow" + elif fl[6] == 7: + priority = 3 #Highest + fg = "green" + + if idx >= self.file_off: + # set fg/bg colors based on whether the file is selected/marked or not if fl[1] in self.marked: bg = color_selected if fl[3]: if self.marked[fl[1]] < self.__get_contained_files_count(file_list=fl[3]): bg = color_partially_selected + attr = "bold" if idx == self.current_file_idx: self.current_file = fl @@ -339,9 +357,14 @@ class TorrentDetail(BaseMode, component.Component): if self.marked[fl[1]] < self.__get_contained_files_count(file_list = fl[3]): fg = color_partially_selected else: - fg = "black" + if fg == "white": + fg = "black" + attr = "bold" - color_string = "{!%s,%s!}"%(fg,bg) + if attr: + color_string = "{!%s,%s,%s!}"%(fg, bg, attr) + else: + color_string = "{!%s,%s!}"%(fg, bg) #actually draw the dir/file string if fl[3] and fl[4]: # this is an expanded directory From 6c07b7378c82d23b22d9c36aa06e7d8b18e4ccdf Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Mon, 10 Dec 2012 15:48:33 +0000 Subject: [PATCH 55/58] Fix #2085 : WebUI: Does not show torrents in sidebar for categories other than 'All' unicode value in filter_dict would not be converted into a list --- deluge/core/filtermanager.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/deluge/core/filtermanager.py b/deluge/core/filtermanager.py index 25ae4be1b..b09f39154 100644 --- a/deluge/core/filtermanager.py +++ b/deluge/core/filtermanager.py @@ -153,9 +153,8 @@ class FilterManager(component.Component): #sanitize input: filter-value must be a list of strings for key, value in filter_dict.items(): - if isinstance(value, str): - filter_dict[key] = [value] - + if not isinstance(value, list): + filter_dict[key] = [value] if "id"in filter_dict: #optimized filter for id: torrent_ids = list(filter_dict["id"]) From c556613b9ff7fb6babea8ed367199dce27054856 Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Mon, 10 Dec 2012 19:33:13 +0000 Subject: [PATCH 56/58] Catch exception when enabling/disabling indicator in classic mode --- deluge/ui/gtkui/systemtray.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/deluge/ui/gtkui/systemtray.py b/deluge/ui/gtkui/systemtray.py index 9e1248a25..0c5c104c1 100644 --- a/deluge/ui/gtkui/systemtray.py +++ b/deluge/ui/gtkui/systemtray.py @@ -156,8 +156,11 @@ class SystemTray(component.Component): if self.config["enable_system_tray"]: if self.config["classic_mode"]: - self.hide_widget_list.remove("menuitem_quitdaemon") - self.hide_widget_list.remove("separatormenuitem4") + try: + self.hide_widget_list.remove("menuitem_quitdaemon") + self.hide_widget_list.remove("separatormenuitem4") + except ValueError: + pass self.builder.get_object("menuitem_quitdaemon").hide() self.builder.get_object("separatormenuitem4").hide() From 3bf023e4dfc985dc30b57e4632c4978e8ea7c9e5 Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Tue, 11 Dec 2012 00:57:48 +0000 Subject: [PATCH 57/58] fix error in #2085 commit 3ca886ac7ad5: value may be a tuple --- deluge/core/filtermanager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deluge/core/filtermanager.py b/deluge/core/filtermanager.py index b09f39154..53e95030c 100644 --- a/deluge/core/filtermanager.py +++ b/deluge/core/filtermanager.py @@ -153,7 +153,7 @@ class FilterManager(component.Component): #sanitize input: filter-value must be a list of strings for key, value in filter_dict.items(): - if not isinstance(value, list): + if isinstance(value, basestring): filter_dict[key] = [value] if "id"in filter_dict: #optimized filter for id: From ca1a5d33f487e9f7983090041d8f20af3aa5d1e8 Mon Sep 17 00:00:00 2001 From: Chase Sterling Date: Mon, 10 Dec 2012 20:10:37 -0500 Subject: [PATCH 58/58] Fix issue when saving resume data fails. Clean up resume data deferred code a bit. --- deluge/core/torrentmanager.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/deluge/core/torrentmanager.py b/deluge/core/torrentmanager.py index 2387741ed..9831646b3 100644 --- a/deluge/core/torrentmanager.py +++ b/deluge/core/torrentmanager.py @@ -41,7 +41,6 @@ import os import shutil import operator import logging -from collections import defaultdict from twisted.internet.task import LoopingCall from twisted.internet.defer import Deferred, DeferredList @@ -153,7 +152,7 @@ class TorrentManager(component.Component): # This is a map of torrent_ids to Deferreds used to track needed resume data. # The Deferreds will be completed when resume data has been saved. - self.waiting_on_resume_data = defaultdict(list) + self.waiting_on_resume_data = {} # Keeps track of resume data self.resume_data = {} @@ -765,8 +764,10 @@ class TorrentManager(component.Component): self.waiting_on_resume_data.pop(torrent_id, None) for torrent_id in torrent_ids: - d = Deferred().addBoth(on_torrent_resume_save, torrent_id) - self.waiting_on_resume_data[torrent_id].append(d) + d = self.waiting_on_resume_data.get(torrent_id) + if not d: + d = Deferred().addBoth(on_torrent_resume_save, torrent_id) + self.waiting_on_resume_data[torrent_id] = d deferreds.append(d) self.torrents[torrent_id].save_resume_data() @@ -1043,12 +1044,11 @@ class TorrentManager(component.Component): self.resume_data[torrent_id] = lt.bencode(alert.resume_data) if torrent_id in self.waiting_on_resume_data: - for d in self.waiting_on_resume_data[torrent_id]: - d.callback(None) + self.waiting_on_resume_data[torrent_id].callback(None) def on_alert_save_resume_data_failed(self, alert): log.debug("on_alert_save_resume_data_failed: %s", alert.message()) - torrent_id = alert.handle.info_hash() + torrent_id = str(alert.handle.info_hash()) if torrent_id in self.waiting_on_resume_data: self.waiting_on_resume_data[torrent_id].errback(Exception(alert.message()))