gget r22 - in trunk: . data gget



Author: johans
Date: Fri Jul  4 22:56:22 2008
New Revision: 22
URL: http://svn.gnome.org/viewvc/gget?rev=22&view=rev

Log:
Added support for proxies.

Modified:
   trunk/configure.ac
   trunk/data/gget.glade
   trunk/data/gget.schemas.in
   trunk/gget/Configuration.py
   trunk/gget/DownloadManager.py
   trunk/gget/MainWindow.py
   trunk/gget/PreferencesDialog.py

Modified: trunk/configure.ac
==============================================================================
--- trunk/configure.ac	(original)
+++ trunk/configure.ac	Fri Jul  4 22:56:22 2008
@@ -47,7 +47,7 @@
 dnl Requirements
 dnl ============
 
-PKG_CHECK_MODULES(ONTV,
+PKG_CHECK_MODULES(GGET,
 	gtk+-2.0 >= 2.10.0
 	pygtk-2.0 >= 2.10.0
 	pygobject-2.0 >= 2.12.0

Modified: trunk/data/gget.glade
==============================================================================
--- trunk/data/gget.glade	(original)
+++ trunk/data/gget.glade	Fri Jul  4 22:56:22 2008
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
-<!--Generated with glade3 3.4.5 on Mon Jun 30 11:04:22 2008 -->
+<!--Generated with glade3 3.4.5 on Sat Jul  5 00:14:15 2008 -->
 <glade-interface>
   <widget class="GtkWindow" id="main_window">
     <property name="width_request">800</property>
@@ -428,7 +428,7 @@
                 <property name="visible">True</property>
                 <property name="border_width">6</property>
                 <child>
-                  <widget class="GtkAlignment" id="alignment4">
+                  <widget class="GtkAlignment" id="general_alignment1">
                     <property name="visible">True</property>
                     <property name="top_padding">6</property>
                     <property name="bottom_padding">6</property>
@@ -489,7 +489,7 @@
                   </packing>
                 </child>
                 <child>
-                  <widget class="GtkAlignment" id="alignment6">
+                  <widget class="GtkAlignment" id="general_alignment2">
                     <property name="visible">True</property>
                     <property name="top_padding">6</property>
                     <property name="bottom_padding">12</property>
@@ -570,6 +570,7 @@
                   <widget class="GtkAlignment" id="folders_alignment">
                     <property name="visible">True</property>
                     <property name="top_padding">6</property>
+                    <property name="bottom_padding">3</property>
                     <child>
                       <widget class="GtkFrame" id="default_download_folders_frame">
                         <property name="visible">True</property>
@@ -788,11 +789,225 @@
             <child>
               <widget class="GtkVBox" id="network_vbox">
                 <property name="visible">True</property>
+                <property name="border_width">6</property>
                 <child>
-                  <placeholder/>
-                </child>
-                <child>
-                  <placeholder/>
+                  <widget class="GtkAlignment" id="network_alignment">
+                    <property name="visible">True</property>
+                    <property name="top_padding">6</property>
+                    <child>
+                      <widget class="GtkFrame" id="proxy_frame">
+                        <property name="visible">True</property>
+                        <property name="label_xalign">0</property>
+                        <property name="shadow_type">GTK_SHADOW_NONE</property>
+                        <child>
+                          <widget class="GtkAlignment" id="proxy_alignment">
+                            <property name="visible">True</property>
+                            <property name="top_padding">6</property>
+                            <property name="bottom_padding">6</property>
+                            <property name="left_padding">12</property>
+                            <child>
+                              <widget class="GtkVBox" id="proxy_vbox">
+                                <property name="visible">True</property>
+                                <property name="spacing">6</property>
+                                <child>
+                                  <widget class="GtkRadioButton" id="direct_radiobutton">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="label" translatable="yes">Direct _Internet connection</property>
+                                    <property name="use_underline">True</property>
+                                    <property name="response_id">0</property>
+                                    <property name="active">True</property>
+                                    <property name="draw_indicator">True</property>
+                                  </widget>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <widget class="GtkRadioButton" id="gnome_radiobutton">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="label" translatable="yes">Default _GNOME network settings</property>
+                                    <property name="use_underline">True</property>
+                                    <property name="response_id">0</property>
+                                    <property name="active">True</property>
+                                    <property name="draw_indicator">True</property>
+                                    <property name="group">direct_radiobutton</property>
+                                  </widget>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <widget class="GtkVBox" id="vbox2">
+                                    <property name="visible">True</property>
+                                    <child>
+                                      <widget class="GtkRadioButton" id="manual_radiobutton">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="label" translatable="yes">_Manual proxy configuration</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="response_id">0</property>
+                                        <property name="active">True</property>
+                                        <property name="draw_indicator">True</property>
+                                        <property name="group">direct_radiobutton</property>
+                                      </widget>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <widget class="GtkAlignment" id="manual_proxy_alignment">
+                                        <property name="visible">True</property>
+                                        <property name="top_padding">6</property>
+                                        <property name="left_padding">23</property>
+                                        <child>
+                                          <widget class="GtkVBox" id="manual_proxy_vbox">
+                                            <property name="visible">True</property>
+                                            <property name="spacing">6</property>
+                                            <child>
+                                              <widget class="GtkHBox" id="proxy_hbox">
+                                                <property name="visible">True</property>
+                                                <property name="spacing">6</property>
+                                                <child>
+                                                  <widget class="GtkLabel" id="proxy_label">
+                                                    <property name="visible">True</property>
+                                                    <property name="label" translatable="yes">_Proxy:</property>
+                                                    <property name="use_underline">True</property>
+                                                    <property name="mnemonic_widget">proxy_entry</property>
+                                                  </widget>
+                                                  <packing>
+                                                    <property name="expand">False</property>
+                                                  </packing>
+                                                </child>
+                                                <child>
+                                                  <widget class="GtkEntry" id="proxy_entry">
+                                                    <property name="visible">True</property>
+                                                    <property name="can_focus">True</property>
+                                                  </widget>
+                                                  <packing>
+                                                    <property name="position">1</property>
+                                                  </packing>
+                                                </child>
+                                                <child>
+                                                  <widget class="GtkLabel" id="proxy_port_label">
+                                                    <property name="visible">True</property>
+                                                    <property name="label" translatable="yes">P_ort:</property>
+                                                    <property name="use_underline">True</property>
+                                                    <property name="mnemonic_widget">proxy_port_spinbutton</property>
+                                                  </widget>
+                                                  <packing>
+                                                    <property name="expand">False</property>
+                                                    <property name="position">2</property>
+                                                  </packing>
+                                                </child>
+                                                <child>
+                                                  <widget class="GtkSpinButton" id="proxy_port_spinbutton">
+                                                    <property name="visible">True</property>
+                                                    <property name="can_focus">True</property>
+                                                    <property name="adjustment">0 0 65550 1 100 10</property>
+                                                  </widget>
+                                                  <packing>
+                                                    <property name="position">3</property>
+                                                  </packing>
+                                                </child>
+                                              </widget>
+                                              <packing>
+                                                <property name="expand">False</property>
+                                              </packing>
+                                            </child>
+                                            <child>
+                                              <widget class="GtkCheckButton" id="proxy_auth_checkbutton">
+                                                <property name="visible">True</property>
+                                                <property name="can_focus">True</property>
+                                                <property name="label" translatable="yes">Proxy requires _authentication</property>
+                                                <property name="use_underline">True</property>
+                                                <property name="response_id">0</property>
+                                                <property name="draw_indicator">True</property>
+                                              </widget>
+                                              <packing>
+                                                <property name="expand">False</property>
+                                                <property name="position">1</property>
+                                              </packing>
+                                            </child>
+                                            <child>
+                                              <widget class="GtkHBox" id="proxy_auth_hbox">
+                                                <property name="visible">True</property>
+                                                <property name="spacing">6</property>
+                                                <child>
+                                                  <widget class="GtkLabel" id="proxy_user_label">
+                                                    <property name="visible">True</property>
+                                                    <property name="label" translatable="yes">_User:</property>
+                                                    <property name="use_underline">True</property>
+                                                    <property name="mnemonic_widget">proxy_user_entry</property>
+                                                  </widget>
+                                                </child>
+                                                <child>
+                                                  <widget class="GtkEntry" id="proxy_user_entry">
+                                                    <property name="visible">True</property>
+                                                    <property name="can_focus">True</property>
+                                                  </widget>
+                                                  <packing>
+                                                    <property name="position">1</property>
+                                                  </packing>
+                                                </child>
+                                                <child>
+                                                  <widget class="GtkLabel" id="proxy_password_label">
+                                                    <property name="visible">True</property>
+                                                    <property name="label" translatable="yes">Pass_word:</property>
+                                                    <property name="use_underline">True</property>
+                                                    <property name="mnemonic_widget">proxy_password_entry</property>
+                                                  </widget>
+                                                  <packing>
+                                                    <property name="position">2</property>
+                                                  </packing>
+                                                </child>
+                                                <child>
+                                                  <widget class="GtkEntry" id="proxy_password_entry">
+                                                    <property name="visible">True</property>
+                                                    <property name="can_focus">True</property>
+                                                    <property name="visibility">False</property>
+                                                  </widget>
+                                                  <packing>
+                                                    <property name="position">3</property>
+                                                  </packing>
+                                                </child>
+                                              </widget>
+                                              <packing>
+                                                <property name="expand">False</property>
+                                                <property name="position">2</property>
+                                              </packing>
+                                            </child>
+                                          </widget>
+                                        </child>
+                                      </widget>
+                                      <packing>
+                                        <property name="position">1</property>
+                                      </packing>
+                                    </child>
+                                  </widget>
+                                  <packing>
+                                    <property name="position">2</property>
+                                  </packing>
+                                </child>
+                              </widget>
+                            </child>
+                          </widget>
+                        </child>
+                        <child>
+                          <widget class="GtkLabel" id="label6">
+                            <property name="visible">True</property>
+                            <property name="label" translatable="yes">&lt;b&gt;Proxy Configuration&lt;/b&gt;</property>
+                            <property name="use_markup">True</property>
+                          </widget>
+                          <packing>
+                            <property name="type">label_item</property>
+                          </packing>
+                        </child>
+                      </widget>
+                    </child>
+                  </widget>
                 </child>
               </widget>
               <packing>

Modified: trunk/data/gget.schemas.in
==============================================================================
--- trunk/data/gget.schemas.in	(original)
+++ trunk/data/gget.schemas.in	Fri Jul  4 22:56:22 2008
@@ -124,6 +124,90 @@
             </locale>
         </schema>
         <schema>
+            <key>/schemas/apps/gget/general/show_status</key>
+            <applyto>/apps/gget/general/show_status</applyto>
+            <owner>gget</owner>
+            <type>bool</type>
+            <default>true</default>
+            <locale name="C">
+                <short>Show status</short>
+                <long>
+                    Whether GGet should display a status column for downloads
+                    in the main window.
+                </long>
+            </locale>
+        </schema>
+        <schema>
+            <key>/schemas/apps/gget/general/show_current_size</key>
+            <applyto>/apps/gget/general/show_current_size</applyto>
+            <owner>gget</owner>
+            <type>bool</type>
+            <default>true</default>
+            <locale name="C">
+                <short>Show current size</short>
+                <long>
+                    Whether GGet should display a current size column for
+                    downloads in the main window.
+                </long>
+            </locale>
+        </schema>
+        <schema>
+            <key>/schemas/apps/gget/general/show_total_size</key>
+            <applyto>/apps/gget/general/show_total_size</applyto>
+            <owner>gget</owner>
+            <type>bool</type>
+            <default>true</default>
+            <locale name="C">
+                <short>Show total size</short>
+                <long>
+                    Whether GGet should display a total size column for
+                    downloads in the main window.
+                </long>
+            </locale>
+        </schema>
+        <schema>
+            <key>/schemas/apps/gget/general/show_progress</key>
+            <applyto>/apps/gget/general/show_progress</applyto>
+            <owner>gget</owner>
+            <type>bool</type>
+            <default>true</default>
+            <locale name="C">
+                <short>Show progress</short>
+                <long>
+                    Whether GGet should display a progress column for
+                    downloads in the main window.
+                </long>
+            </locale>
+        </schema>
+        <schema>
+            <key>/schemas/apps/gget/general/show_speed</key>
+            <applyto>/apps/gget/general/show_speed</applyto>
+            <owner>gget</owner>
+            <type>bool</type>
+            <default>true</default>
+            <locale name="C">
+                <short>Show speed</short>
+                <long>
+                    Whether GGet should display a speed column for
+                    downloads in the main window.
+                </long>
+            </locale>
+        </schema>
+        <schema>
+            <key>/schemas/apps/gget/general/show_eta</key>
+            <applyto>/apps/gget/general/show_eta</applyto>
+            <owner>gget</owner>
+            <type>bool</type>
+            <default>true</default>
+            <locale name="C">
+                <short>Show ETA</short>
+                <long>
+                    Whether GGet should display a ETA (Estimated Time of
+                    Arrival) column for downloads in the main window.
+                </long>
+            </locale>
+        </schema>
+        <schema>
             <key>/schemas/apps/gget/folders/ask_for_location</key>
             <applyto>/apps/gget/folders/ask_for_location</applyto>
             <owner>gget</owner>
@@ -196,86 +280,82 @@
             </locale>
         </schema>
         <schema>
-            <key>/schemas/apps/gget/general/show_status</key>
-            <applyto>/apps/gget/general/show_status</applyto>
+            <key>/schemas/apps/gget/network/proxy_mode</key>
+            <applyto>/apps/gget/network/proxy_mode</applyto>
             <owner>gget</owner>
-            <type>bool</type>
-            <default>true</default>
+            <type>string</type>
+            <default>direct</default>
             <locale name="C">
-                <short>Show status</short>
+                <short>Mode for proxy configuration</short>
                 <long>
-                    Whether GGet should display a status column for downloads
-                    in the main window.
+                    Mode for proxy configuration, can be either "direct",
+                    "gnome" or "manual".
                 </long>
             </locale>
         </schema>
         <schema>
-            <key>/schemas/apps/gget/general/show_current_size</key>
-            <applyto>/apps/gget/general/show_current_size</applyto>
+            <key>/schemas/apps/gget/network/proxy_host</key>
+            <applyto>/apps/gget/network/proxy_host</applyto>
             <owner>gget</owner>
-            <type>bool</type>
-            <default>true</default>
+            <type>string</type>
+            <default></default>
             <locale name="C">
-                <short>Show current size</short>
+                <short>HTTP proxy host</short>
                 <long>
-                    Whether GGet should display a current size column for
-                    downloads in the main window.
+                    Hostname for the HTTP proxy.
                 </long>
             </locale>
         </schema>
         <schema>
-            <key>/schemas/apps/gget/general/show_total_size</key>
-            <applyto>/apps/gget/general/show_total_size</applyto>
+            <key>/schemas/apps/gget/network/proxy_port</key>
+            <applyto>/apps/gget/network/proxy_port</applyto>
             <owner>gget</owner>
-            <type>bool</type>
-            <default>true</default>
+            <type>int</type>
+            <default>8080</default>
             <locale name="C">
-                <short>Show total size</short>
+                <short>HTTP proxy port</short>
                 <long>
-                    Whether GGet should display a total size column for
-                    downloads in the main window.
+                    Port number for the HTTP proxy.
                 </long>
             </locale>
         </schema>
         <schema>
-            <key>/schemas/apps/gget/general/show_progress</key>
-            <applyto>/apps/gget/general/show_progress</applyto>
+            <key>/schemas/apps/gget/network/proxy_auth</key>
+            <applyto>/apps/gget/network/proxy_auth</applyto>
             <owner>gget</owner>
             <type>bool</type>
-            <default>true</default>
+            <default>false</default>
             <locale name="C">
-                <short>Show progress</short>
+                <short>Use authentication for HTTP proxy</short>
                 <long>
-                    Whether GGet should display a progress column for
-                    downloads in the main window.
+                    Whether to use authentication when connecting to the HTTP
+                    proxy.
                 </long>
             </locale>
         </schema>
         <schema>
-            <key>/schemas/apps/gget/general/show_speed</key>
-            <applyto>/apps/gget/general/show_speed</applyto>
+            <key>/schemas/apps/gget/network/proxy_user</key>
+            <applyto>/apps/gget/network/proxy_user</applyto>
             <owner>gget</owner>
-            <type>bool</type>
-            <default>true</default>
+            <type>string</type>
+            <default></default>
             <locale name="C">
-                <short>Show speed</short>
+                <short>HTTP proxy username</short>
                 <long>
-                    Whether GGet should display a speed column for
-                    downloads in the main window.
+                    The username to use when connecting the the HTTP proxy.
                 </long>
             </locale>
         </schema>
         <schema>
-            <key>/schemas/apps/gget/general/show_eta</key>
-            <applyto>/apps/gget/general/show_eta</applyto>
+            <key>/schemas/apps/gget/network/proxy_password</key>
+            <applyto>/apps/gget/network/proxy_password</applyto>
             <owner>gget</owner>
-            <type>bool</type>
-            <default>true</default>
+            <type>string</type>
+            <default></default>
             <locale name="C">
-                <short>Show ETA</short>
+                <short>HTTP proxy password</short>
                 <long>
-                    Whether GGet should display a ETA (Estimated Time of
-                    Arrival) column for downloads in the main window.
+                    The password to use when connecting the the HTTP proxy.
                 </long>
             </locale>
         </schema>

Modified: trunk/gget/Configuration.py
==============================================================================
--- trunk/gget/Configuration.py	(original)
+++ trunk/gget/Configuration.py	Fri Jul  4 22:56:22 2008
@@ -26,8 +26,10 @@
 
 from GUI import ErrorDialog
 
-DIR_GGET = "/apps/gget"
-DIR_GNOME = "/desktop/gnome"
+DIR_GGET       = "/apps/gget"
+DIR_GNOME      = "/desktop/gnome"
+DIR_PROXY      = "/system/proxy"
+DIR_HTTP_PROXY = "/system/http_proxy"
 
 KEY_SHOW_STATUSBAR    = "/general/show_statusbar"
 KEY_SHOW_TOOLBAR      = "/general/show_toolbar"
@@ -35,11 +37,6 @@
 KEY_SHOW_MAIN_WINDOW  = "/general/show_main_window"
 KEY_AUTOSTART         = "/general/autostart"
 KEY_AUTORESUME        = "/general/autoresume"
-KEY_ASK_FOR_LOCATION  = "/folders/ask_for_location"
-KEY_DEFAULT_FOLDER    = "/folders/default_folder"
-KEY_CHECK_EXTENSIONS  = "/folders/check_extensions"
-KEY_EXTENSIONS        = "/folders/extensions"
-KEY_EXTENSION_FOLDERS = "/folders/extension_folders"
 KEY_WINDOW_WIDTH      = "/general/window_width"
 KEY_WINDOW_HEIGHT     = "/general/window_height"
 KEY_WINDOW_POSITION_X = "/general/window_position_x"
@@ -51,6 +48,19 @@
 KEY_SHOW_SPEED        = "/general/show_speed"
 KEY_SHOW_ETA          = "/general/show_eta"
 
+KEY_ASK_FOR_LOCATION  = "/folders/ask_for_location"
+KEY_DEFAULT_FOLDER    = "/folders/default_folder"
+KEY_CHECK_EXTENSIONS  = "/folders/check_extensions"
+KEY_EXTENSIONS        = "/folders/extensions"
+KEY_EXTENSION_FOLDERS = "/folders/extension_folders"
+
+KEY_PROXY_MODE        = "/network/proxy_mode"
+KEY_PROXY_HOST        = "/network/proxy_host"
+KEY_PROXY_PORT        = "/network/proxy_port"
+KEY_PROXY_AUTH        = "/network/proxy_auth"
+KEY_PROXY_USER        = "/network/proxy_user"
+KEY_PROXY_PASSWORD    = "/network/proxy_password"
+
 KEY_TOOLBAR_STYLE = "/interface/toolbar_style"
 
 FUNCTION_SUFFIXES = {KEY_SHOW_TOOLBAR:      'bool',
@@ -59,22 +69,31 @@
                      KEY_SHOW_MAIN_WINDOW:  'bool',
                      KEY_AUTOSTART:         'bool',
                      KEY_AUTORESUME:        'bool',
-                     KEY_ASK_FOR_LOCATION:  'bool',
-                     KEY_DEFAULT_FOLDER:    'string',
-                     KEY_CHECK_EXTENSIONS:  'bool',
-                     KEY_EXTENSIONS:        'list',
-                     KEY_EXTENSION_FOLDERS: 'list',
                      KEY_WINDOW_WIDTH:      'int',
                      KEY_WINDOW_HEIGHT:     'int',
                      KEY_WINDOW_POSITION_X: 'int',
                      KEY_WINDOW_POSITION_Y: 'int',
-                     KEY_TOOLBAR_STYLE:     'string',
                      KEY_SHOW_STATUS:       'bool',
                      KEY_SHOW_CURRENT_SIZE: 'bool',
                      KEY_SHOW_TOTAL_SIZE:   'bool',
                      KEY_SHOW_PROGRESS:     'bool',
                      KEY_SHOW_SPEED:        'bool',
-                     KEY_SHOW_ETA:          'bool'
+                     KEY_SHOW_ETA:          'bool',
+
+                     KEY_ASK_FOR_LOCATION:  'bool',
+                     KEY_DEFAULT_FOLDER:    'string',
+                     KEY_CHECK_EXTENSIONS:  'bool',
+                     KEY_EXTENSIONS:        'list',
+                     KEY_EXTENSION_FOLDERS: 'list',
+
+                     KEY_PROXY_MODE:        'string',
+                     KEY_PROXY_HOST:        'string',
+                     KEY_PROXY_PORT:        'int',
+                     KEY_PROXY_AUTH:        'bool',
+                     KEY_PROXY_USER:        'string',
+                     KEY_PROXY_PASSWORD:    'string',
+
+                     KEY_TOOLBAR_STYLE:     'string'
                      }
 
 class Configuration(object):
@@ -206,68 +225,6 @@
 
     autoresume = property(get_autoresume, set_autoresume)
 
-    # Ask for location
-    def get_ask_for_location(self, use_cache=True):
-        if use_cache:
-            return self.option_cache[KEY_ASK_FOR_LOCATION]
-        else:
-            return self.__get_option(KEY_ASK_FOR_LOCATION)
-
-    def set_ask_for_location(self, ask_for_location):
-        self.__set_option(KEY_ASK_FOR_LOCATION, ask_for_location)
-
-    ask_for_location = property(get_ask_for_location, set_ask_for_location)
-
-    # Default folder
-    def get_default_folder(self, use_cache=True):
-        if use_cache:
-            return self.option_cache[KEY_DEFAULT_FOLDER]
-        else:
-            return self.__get_option(KEY_DEFAULT_FOLDER)
-
-    def set_default_folder(self, default_folder):
-        self.__set_option(KEY_DEFAULT_FOLDER, default_folder)
-
-    default_folder = property(get_default_folder, set_default_folder)
-
-    # Check extensions
-    def get_check_extensions(self, use_cache=True):
-        if use_cache:
-            return self.option_cache[KEY_CHECK_EXTENSIONS]
-        else:
-            return self.__get_option(KEY_CHECK_EXTENSIONS)
-
-    def set_check_extensions(self, check_extensions):
-        self.__set_option(KEY_CHECK_EXTENSIONS, check_extensions)
-
-    check_extensions = property(get_check_extensions, set_check_extensions)
-
-    # Extensions
-    def get_extensions(self, use_cache=True):
-        if use_cache:
-            return self.option_cache[KEY_EXTENSIONS]
-        else:
-            return self.__get_option(KEY_EXTENSIONS, type=gconf.VALUE_STRING)
-
-    def set_extensions(self, extensions):
-        self.__set_option(KEY_EXTENSIONS, extensions, type=gconf.VALUE_STRING)
-
-    extensions = property(get_extensions, set_extensions)
-
-    # Extension folders
-    def get_extension_folders(self, use_cache=True):
-        if use_cache:
-            return self.option_cache[KEY_EXTENSION_FOLDERS]
-        else:
-            return self.__get_option(KEY_EXTENSION_FOLDERS,
-                    type=gconf.VALUE_STRING)
-
-    def set_extension_folders(self, extension_folders):
-        self.__set_option(KEY_EXTENSION_FOLDERS, extension_folders,
-                type=gconf.VALUE_STRING)
-
-    extension_folders = property(get_extension_folders, set_extension_folders)
-
     # Window width
     def get_window_width(self, use_cache=True):
         if use_cache:
@@ -311,23 +268,6 @@
         else:
             return self.__get_option(KEY_WINDOW_POSITION_Y)
 
-    def set_window_position_y(self, window_position_y):
-        self.__set_option(KEY_WINDOW_POSITION_Y, window_position_y)
-
-    window_position_y = property(get_window_position_y, set_window_position_y)
-
-    # Toolbar style
-    def get_toolbar_style(self, use_cache=True):
-        if use_cache:
-            return self.option_cache[KEY_TOOLBAR_STYLE]
-        else:
-            return self.__get_option(KEY_TOOLBAR_STYLE)
-
-    def set_toolbar_style(self, toolbar_style):
-        self.__set_option(KEY_TOOLBAR_STYLE, toolbar_style)
-
-    toolbar_style = property(get_toolbar_style, set_toolbar_style)
-
     # Show status
     def get_show_status(self, use_cache=True):
         if use_cache:
@@ -400,4 +340,155 @@
 
     show_eta = property(get_show_eta, set_show_eta)
 
+    def set_window_position_y(self, window_position_y):
+        self.__set_option(KEY_WINDOW_POSITION_Y, window_position_y)
+
+    window_position_y = property(get_window_position_y, set_window_position_y)
+
+    # Ask for location
+    def get_ask_for_location(self, use_cache=True):
+        if use_cache:
+            return self.option_cache[KEY_ASK_FOR_LOCATION]
+        else:
+            return self.__get_option(KEY_ASK_FOR_LOCATION)
+
+    def set_ask_for_location(self, ask_for_location):
+        self.__set_option(KEY_ASK_FOR_LOCATION, ask_for_location)
+
+    ask_for_location = property(get_ask_for_location, set_ask_for_location)
+
+    # Default folder
+    def get_default_folder(self, use_cache=True):
+        if use_cache:
+            return self.option_cache[KEY_DEFAULT_FOLDER]
+        else:
+            return self.__get_option(KEY_DEFAULT_FOLDER)
+
+    def set_default_folder(self, default_folder):
+        self.__set_option(KEY_DEFAULT_FOLDER, default_folder)
+
+    default_folder = property(get_default_folder, set_default_folder)
+
+    # Check extensions
+    def get_check_extensions(self, use_cache=True):
+        if use_cache:
+            return self.option_cache[KEY_CHECK_EXTENSIONS]
+        else:
+            return self.__get_option(KEY_CHECK_EXTENSIONS)
+
+    def set_check_extensions(self, check_extensions):
+        self.__set_option(KEY_CHECK_EXTENSIONS, check_extensions)
+
+    check_extensions = property(get_check_extensions, set_check_extensions)
+
+    # Extensions
+    def get_extensions(self, use_cache=True):
+        if use_cache:
+            return self.option_cache[KEY_EXTENSIONS]
+        else:
+            return self.__get_option(KEY_EXTENSIONS, type=gconf.VALUE_STRING)
+
+    def set_extensions(self, extensions):
+        self.__set_option(KEY_EXTENSIONS, extensions, type=gconf.VALUE_STRING)
+
+    extensions = property(get_extensions, set_extensions)
+
+    # Extension folders
+    def get_extension_folders(self, use_cache=True):
+        if use_cache:
+            return self.option_cache[KEY_EXTENSION_FOLDERS]
+        else:
+            return self.__get_option(KEY_EXTENSION_FOLDERS,
+                    type=gconf.VALUE_STRING)
+
+    def set_extension_folders(self, extension_folders):
+        self.__set_option(KEY_EXTENSION_FOLDERS, extension_folders,
+                type=gconf.VALUE_STRING)
+
+    extension_folders = property(get_extension_folders, set_extension_folders)
+
+    # Proxy mode
+    def get_proxy_mode(self, use_cache=True):
+        if use_cache:
+            return self.option_cache[KEY_PROXY_MODE]
+        else:
+            return self.__get_option(KEY_PROXY_MODE)
+
+    def set_proxy_mode(self, proxy_mode):
+        self.__set_option(KEY_PROXY_MODE, proxy_mode)
+
+    proxy_mode = property(get_proxy_mode, set_proxy_mode)
+
+    # Proxy host
+    def get_proxy_host(self, use_cache=True):
+        if use_cache:
+            return self.option_cache[KEY_PROXY_HOST]
+        else:
+            return self.__get_option(KEY_PROXY_HOST)
+
+    def set_proxy_host(self, proxy_host):
+        self.__set_option(KEY_PROXY_HOST, proxy_host)
+
+    proxy_host = property(get_proxy_host, set_proxy_host)
+
+    # Proxy port
+    def get_proxy_port(self, use_cache=True):
+        if use_cache:
+            return self.option_cache[KEY_PROXY_PORT]
+        else:
+            return self.__get_option(KEY_PROXY_PORT)
+
+    def set_proxy_port(self, proxy_port):
+        self.__set_option(KEY_PROXY_PORT, proxy_port)
+
+    proxy_port = property(get_proxy_port, set_proxy_port)
+
+    # Proxy auth
+    def get_proxy_auth(self, use_cache=True):
+        if use_cache:
+            return self.option_cache[KEY_PROXY_AUTH]
+        else:
+            return self.__get_option(KEY_PROXY_AUTH)
+
+    def set_proxy_auth(self, proxy_auth):
+        self.__set_option(KEY_PROXY_AUTH, proxy_auth)
+
+    proxy_auth = property(get_proxy_auth, set_proxy_auth)
+
+    # Proxy user
+    def get_proxy_user(self, use_cache=True):
+        if use_cache:
+            return self.option_cache[KEY_PROXY_USER]
+        else:
+            return self.__get_option(KEY_PROXY_USER)
+
+    def set_proxy_user(self, proxy_user):
+        self.__set_option(KEY_PROXY_USER, proxy_user)
+
+    proxy_user = property(get_proxy_user, set_proxy_user)
+
+    # Proxy password
+    def get_proxy_password(self, use_cache=True):
+        if use_cache:
+            return self.option_cache[KEY_PROXY_PASSWORD]
+        else:
+            return self.__get_option(KEY_PROXY_PASSWORD)
+
+    def set_proxy_password(self, proxy_password):
+        self.__set_option(KEY_PROXY_PASSWORD, proxy_password)
+
+    proxy_password = property(get_proxy_password, set_proxy_password)
+
+    # Toolbar style
+    def get_toolbar_style(self, use_cache=True):
+        if use_cache:
+            return self.option_cache[KEY_TOOLBAR_STYLE]
+        else:
+            return self.__get_option(KEY_TOOLBAR_STYLE)
+
+    def set_toolbar_style(self, toolbar_style):
+        self.__set_option(KEY_TOOLBAR_STYLE, toolbar_style)
+
+    toolbar_style = property(get_toolbar_style, set_toolbar_style)
+
 # vim: set sw=4 et sts=4 tw=79 fo+=l:

Modified: trunk/gget/DownloadManager.py
==============================================================================
--- trunk/gget/DownloadManager.py	(original)
+++ trunk/gget/DownloadManager.py	Fri Jul  4 22:56:22 2008
@@ -55,10 +55,17 @@
 
         metalink.USER_AGENT = "%s %s" % (NAME, VERSION)
 
-        # TODO: Get this from system wide settings
-        # metalink.HTTP_PROXY = ""
-        # metalink.HTTPS_PROXY = ""
-        # metalink.FTP_PROXY = ""
+        if self.config.proxy_mode == "gnome":
+            # TODO: Get this from system wide settings
+            # metalink.HTTP_PROXY = ""
+            # metalink.HTTPS_PROXY = ""
+            # metalink.FTP_PROXY = ""
+            pass
+        elif self.config.proxy_mode == "manual":
+            if self.config.proxy_auth:
+                metalink.HTTP_PROXY = "http://%s:%s %s:%s" % (self.config.proxy_user, self.config.proxy_password, self.config.proxy_host, self.config.proxy_port)
+            else:
+                metalink.HTTP_PROXY = "http://%s:%s"; % (self.config.proxy_host, self.config.proxy_port)
 
     def start_download(self, uri, path=None):
         if path is None:

Modified: trunk/gget/MainWindow.py
==============================================================================
--- trunk/gget/MainWindow.py	(original)
+++ trunk/gget/MainWindow.py	Fri Jul  4 22:56:22 2008
@@ -267,7 +267,7 @@
         cell.props.text = "N/A"
 
     def __connect_widgets(self):
-        """Connect widgets to various signals."""
+        """Connect to the widget signals we are interested in."""
         self.window.connect("destroy", self.quit)
         self.window.connect("configure-event", self.__window_configure_event)
         self.window.connect("drag_data_received",

Modified: trunk/gget/PreferencesDialog.py
==============================================================================
--- trunk/gget/PreferencesDialog.py	(original)
+++ trunk/gget/PreferencesDialog.py	Fri Jul  4 22:56:22 2008
@@ -64,7 +64,22 @@
                 self.config.extension_folders):
             self.extensions_model.append((extension, folder))
 
+        if self.config.proxy_mode == "gnome":
+            self.gnome_radiobutton.set_active(True)
+        elif self.config.proxy_mode == "manual":
+            self.manual_radiobutton.set_active(True)
+        else:
+            self.direct_radiobutton.set_active(True)
+
+        self.proxy_entry.set_text(self.config.proxy_host)
+        self.proxy_port_spinbutton.set_value(self.config.proxy_port)
+        self.proxy_auth_checkbutton.set_active(self.config.proxy_auth)
+        self.proxy_auth_hbox.set_sensitive(self.config.proxy_auth)
+        self.proxy_user_entry.set_text(self.config.proxy_user)
+        self.proxy_password_entry.set_text(self.config.proxy_password)
+
     def __get_widgets(self):
+        """Get widgets from the glade file."""
         xml = gtk.glade.XML(GUI.glade_file, domain=NAME.lower())
 
         self.dialog = xml.get_widget("preferences_dialog")
@@ -86,6 +101,18 @@
         self.add_extension_button = xml.get_widget("add_extension_button")
         self.remove_extension_button = xml.get_widget("remove_extension_button")
 
+        # Network tab
+        self.direct_radiobutton = xml.get_widget("direct_radiobutton")
+        self.gnome_radiobutton = xml.get_widget("gnome_radiobutton")
+        self.manual_radiobutton = xml.get_widget("manual_radiobutton")
+        self.manual_proxy_vbox = xml.get_widget("manual_proxy_vbox")
+        self.proxy_entry = xml.get_widget("proxy_entry")
+        self.proxy_port_spinbutton = xml.get_widget("proxy_port_spinbutton")
+        self.proxy_auth_checkbutton = xml.get_widget("proxy_auth_checkbutton")
+        self.proxy_auth_hbox = xml.get_widget("proxy_auth_hbox")
+        self.proxy_user_entry = xml.get_widget("proxy_user_entry")
+        self.proxy_password_entry = xml.get_widget("proxy_password_entry")
+
         # Buttons
         self.close_button = xml.get_widget("close_button")
 
@@ -140,6 +167,7 @@
         self.extensions_model[path][1] = new_text
 
     def __connect_widgets(self):
+        """Connect to the widget signals we are interested in."""
         # General tab
         self.status_icon_checkbutton.connect("toggled",
                 self.__status_icon_checkbutton_toggled)
@@ -167,10 +195,30 @@
         selection.connect("changed",
                 self.__extensions_treeview_selection_changed)
 
+        # Network tab
+        self.direct_radiobutton.connect("toggled",
+                self.__direct_radiobutton_toggled)
+        self.gnome_radiobutton.connect("toggled",
+                self.__gnome_radiobutton_toggled)
+        self.manual_radiobutton.connect("toggled",
+                self.__manual_radiobutton_toggled)
+        self.proxy_entry.connect("changed",
+                self.__proxy_entry_changed)
+        self.proxy_port_spinbutton.connect("value-changed",
+                self.__proxy_port_spinbutton_value_changed)
+        self.proxy_auth_checkbutton.connect("toggled",
+                self.__proxy_auth_checkbutton_toggled)
+        self.proxy_user_entry.connect("changed",
+                self.__proxy_user_entry_changed)
+        self.proxy_password_entry.connect("changed",
+                self.__proxy_password_entry_changed)
+
         # Buttons
         self.close_button.connect("clicked", self.__close_button_clicked)
 
     def __add_config_notifications(self):
+        """Adds callbacks which gets called when configuration keys changes
+        in gconf."""
         self.config.add_notify(Configuration.KEY_SHOW_STATUS_ICON,
                 self.__show_status_icon_key_changed)
         self.config.add_notify(Configuration.KEY_SHOW_MAIN_WINDOW,
@@ -185,6 +233,18 @@
                 self.__default_folder_key_changed)
         self.config.add_notify(Configuration.KEY_CHECK_EXTENSIONS,
                 self.__check_extensions_key_changed)
+        self.config.add_notify(Configuration.KEY_PROXY_MODE,
+                self.__proxy_mode_key_changed)
+        self.config.add_notify(Configuration.KEY_PROXY_HOST,
+                self.__proxy_host_key_changed)
+        self.config.add_notify(Configuration.KEY_PROXY_PORT,
+                self.__proxy_port_key_changed)
+        self.config.add_notify(Configuration.KEY_PROXY_AUTH,
+                self.__proxy_auth_key_changed)
+        self.config.add_notify(Configuration.KEY_PROXY_USER,
+                self.__proxy_user_key_changed)
+        self.config.add_notify(Configuration.KEY_PROXY_PASSWORD,
+                self.__proxy_password_key_changed)
 
     def __show_status_icon_key_changed(self, client, cnxn_id, entry, data):
         if not entry.value:
@@ -281,6 +341,41 @@
             self.extensions_checkbutton.set_active(True)
             self.extensions_alignment.set_sensitive(True)
 
+    def __proxy_mode_key_changed(self, client, cnxn_id, entry, data):
+        if entry.value.type == gconf.VALUE_STRING:
+            mode = entry.value.to_string()
+            if mode == "direct":
+                self.direct_radiobutton.set_active(True)
+                self.manual_proxy_vbox.set_sensitive(False)
+            elif mode == "gnome":
+                self.gnome_radiobutton.set_active(True)
+                self.manual_proxy_vbox.set_sensitive(False)
+            elif mode == "manual":
+                self.manual_radiobutton.set_active(True)
+                self.manual_proxy_vbox.set_sensitive(True)
+
+    def __proxy_host_key_changed(self, client, cnxn_id, entry, data):
+        if entry.value.type == gconf.VALUE_STRING:
+            self.proxy_entry.set_text(entry.value.to_string())
+
+    def __proxy_port_key_changed(self, client, cnxn_id, entry, data):
+        if entry.value.type == gconf.VALUE_INT:
+            self.proxy_port_spinbutton.set_value(entry.value.get_int())
+
+    def __proxy_auth_key_changed(self, client, cnxn_id, entry, data):
+        if entry.value.type == gconf.VALUE_BOOL:
+            auth = entry.value.get_bool()
+            self.proxy_auth_checkbutton.set_active(auth)
+            self.proxy_auth_hbox.set_sensitive(auth)
+
+    def __proxy_user_key_changed(self, client, cnxn_id, entry, data):
+        if entry.value.type == gconf.VALUE_STRING:
+            self.proxy_user_entry.set_text(entry.value.to_string())
+
+    def __proxy_password_key_changed(self, client, cnxn_id, entry, data):
+        if entry.value.type == gconf.VALUE_STRING:
+            self.proxy_password_entry.set_text(entry.value.to_string())
+
     def __status_icon_checkbutton_toggled(self, checkbutton):
         self.config.show_status_icon = checkbutton.get_active()
 
@@ -347,6 +442,33 @@
                 extension_folders.remove(extension_folder)
                 self.config.extension_folders = extension_folders
 
+    def __direct_radiobutton_toggled(self, radiobutton):
+        if radiobutton.get_active():
+            self.config.proxy_mode = "direct"
+
+    def __gnome_radiobutton_toggled(self, radiobutton):
+        if radiobutton.get_active():
+            self.config.proxy_mode = "gnome"
+
+    def __manual_radiobutton_toggled(self, radiobutton):
+        if radiobutton.get_active():
+            self.config.proxy_mode = "manual"
+
+    def __proxy_entry_changed(self, entry):
+        self.config.proxy_host = entry.get_text()
+
+    def __proxy_port_spinbutton_value_changed(self, spinbutton):
+        self.config.proxy_port = spinbutton.get_value_as_int()
+
+    def __proxy_auth_checkbutton_toggled(self, checkbutton):
+        self.config.proxy_auth = checkbutton.get_active()
+
+    def __proxy_user_entry_changed(self, entry):
+        self.config.proxy_user = entry.get_text()
+
+    def __proxy_password_entry_changed(self, entry):
+        self.config.proxy_password = entry.get_text()
+
     def __close_button_clicked(self, button):
         self.dialog.hide()
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]