[nanny] New dialog for update custom filters. Check empty fields in custom filters.



commit fa716cbef517e9c57f2ef2dc39e87e26ec71021d
Author: Cesar Garcia Tapia <cesar garcia tapia openshine com>
Date:   Mon Feb 1 11:26:51 2010 +0100

    New dialog for update custom filters. Check empty fields in custom filters.

 client/common/src/DBusClient.py                    |   16 +-
 client/gnome/admin/data/glade/nac_wcf_dialog.glade |   95 ++++++-
 .../admin/data/glade/nac_wcf_edit_dialog.glade     |   60 ++---
 client/gnome/admin/src/ConfigureProxyDialog.py     |  298 ++++++++++++--------
 daemon/src/FilterManager.py                        |    2 +-
 daemon/src/NannyDBus.py                            |   18 +-
 6 files changed, 309 insertions(+), 180 deletions(-)
---
diff --git a/client/common/src/DBusClient.py b/client/common/src/DBusClient.py
index e77b96e..3e0be87 100644
--- a/client/common/src/DBusClient.py
+++ b/client/common/src/DBusClient.py
@@ -124,20 +124,24 @@ class DBusClient(gobject.GObject):
     def list_WCF (self):
         return self.nanny_admin.ListWCF ()
 
+    def list_custom_filters (self, uid):
+        return self.nanny_wcf.ListCustomFilters (uid)
+
     def add_custom_filter (self, user_id, color, name, description, url):
+        print name
         return self.nanny_wcf.AddCustomFilter (user_id, color, name, description, url)
 
+    def update_custom_filter (self, filter_id, name, description, url):
+        return self.nanny_wcf.UpdateCustomFilter (filter_id, name, description, url)
+
+    def remove_custom_filter (self, filter_id, reply_handler, error_handler):
+        return self.nanny_wcf.RemoveCustomFilter (filter_id, reply_handler=reply_handler, error_handler=error_handler, timeout=2000000)
+
     def add_dansguardian_list (self, uid, name, description, list_url, reply_handler, error_handler):
         self.nanny_wcf.AddDansGuardianList (uid, name, description, list_url, reply_handler=reply_handler, error_handler=error_handler, timeout=2000000)
 
     def check_web_access (self, uid, url):
         return self.nanny_wcf.CheckWebAccess (uid, url)
 
-    def list_filters (self, uid):
-        return self.nanny_wcf.ListFilters (uid)
-
-    def remove_filter (self, filter_id, reply_handler, error_handler):
-        return self.nanny_wcf.RemoveFilter (filter_id, reply_handler=reply_handler, error_handler=error_handler, timeout=2000000)
-
     def __on_user_notification_cb (self, block_status, user_id, app_id, next_change, available_time):
         self.emit ('user-notification', block_status, user_id, app_id, next_change, available_time)
diff --git a/client/gnome/admin/data/glade/nac_wcf_dialog.glade b/client/gnome/admin/data/glade/nac_wcf_dialog.glade
index 567c88f..528dead 100644
--- a/client/gnome/admin/data/glade/nac_wcf_dialog.glade
+++ b/client/gnome/admin/data/glade/nac_wcf_dialog.glade
@@ -20,9 +20,18 @@
                 <property name="visible">True</property>
                 <property name="spacing">5</property>
                 <child>
-                  <object class="GtkTreeView" id="wcfd_blacklist_treeview">
+                  <object class="GtkScrolledWindow" id="scrolledwindow1">
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
+                    <property name="hscrollbar_policy">never</property>
+                    <property name="vscrollbar_policy">automatic</property>
+                    <property name="shadow_type">etched-in</property>
+                    <child>
+                      <object class="GtkTreeView" id="wcfd_custom_blacklist_treeview">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                      </object>
+                    </child>
                   </object>
                   <packing>
                     <property name="position">0</property>
@@ -35,7 +44,7 @@
                     <property name="spacing">5</property>
                     <property name="layout_style">start</property>
                     <child>
-                      <object class="GtkButton" id="wcfd_blacklist_add_button">
+                      <object class="GtkButton" id="wcfd_custom_blacklist_add_button">
                         <property name="label">gtk-add</property>
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
@@ -49,7 +58,7 @@
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkButton" id="wcfd_blacklist_edit_button">
+                      <object class="GtkButton" id="wcfd_custom_blacklist_edit_button">
                         <property name="label">gtk-edit</property>
                         <property name="can_focus">True</property>
                         <property name="receives_default">True</property>
@@ -62,7 +71,7 @@
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkButton" id="wcfd_blacklist_remove_button">
+                      <object class="GtkButton" id="wcfd_custom_blacklist_remove_button">
                         <property name="label">gtk-remove</property>
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
@@ -106,9 +115,18 @@
                 <property name="visible">True</property>
                 <property name="spacing">5</property>
                 <child>
-                  <object class="GtkTreeView" id="wcfd_whitelist_treeview">
+                  <object class="GtkScrolledWindow" id="scrolledwindow2">
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
+                    <property name="hscrollbar_policy">never</property>
+                    <property name="vscrollbar_policy">automatic</property>
+                    <property name="shadow_type">etched-in</property>
+                    <child>
+                      <object class="GtkTreeView" id="wcfd_custom_whitelist_treeview">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                      </object>
+                    </child>
                   </object>
                   <packing>
                     <property name="position">0</property>
@@ -121,7 +139,7 @@
                     <property name="spacing">5</property>
                     <property name="layout_style">start</property>
                     <child>
-                      <object class="GtkButton" id="wcfd_whitelist_add_button">
+                      <object class="GtkButton" id="wcfd_custom_whitelist_add_button">
                         <property name="label">gtk-add</property>
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
@@ -135,7 +153,7 @@
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkButton" id="wcfd_whitelist_edit_button">
+                      <object class="GtkButton" id="wcfd_custom_whitelist_edit_button">
                         <property name="label">gtk-edit</property>
                         <property name="can_focus">True</property>
                         <property name="receives_default">True</property>
@@ -148,7 +166,7 @@
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkButton" id="wcfd_whitelist_remove_button">
+                      <object class="GtkButton" id="wcfd_custom_whitelist_remove_button">
                         <property name="label">gtk-remove</property>
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
@@ -184,6 +202,67 @@
             <property name="tab_fill">False</property>
           </packing>
         </child>
+        <child>
+          <object class="GtkAlignment" id="alignment3">
+            <property name="visible">True</property>
+            <property name="top_padding">5</property>
+            <property name="bottom_padding">5</property>
+            <property name="left_padding">5</property>
+            <property name="right_padding">5</property>
+            <child>
+              <object class="GtkVBox" id="vbox1">
+                <property name="visible">True</property>
+                <property name="orientation">vertical</property>
+                <property name="spacing">10</property>
+                <child>
+                  <object class="GtkLabel" id="label4">
+                    <property name="visible">True</property>
+                    <property name="xalign">0</property>
+                    <property name="yalign">0</property>
+                    <property name="label" translatable="yes">Here you can apply the available blacklists for the selected user. If you want to add new blacklists please go to System &gt; Administration &gt; Blacklists.</property>
+                    <property name="justify">fill</property>
+                    <property name="wrap">True</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkScrolledWindow" id="scrolledwindow3">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="hscrollbar_policy">never</property>
+                    <property name="vscrollbar_policy">automatic</property>
+                    <property name="shadow_type">etched-in</property>
+                    <child>
+                      <object class="GtkTreeView" id="wcfd_packaged_blacklist_treeview">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="position">2</property>
+          </packing>
+        </child>
+        <child type="tab">
+          <object class="GtkLabel" id="label3">
+            <property name="visible">True</property>
+            <property name="label" translatable="yes">Blacklists</property>
+          </object>
+          <packing>
+            <property name="position">2</property>
+            <property name="tab_fill">False</property>
+          </packing>
+        </child>
       </object>
     </child>
   </object>
diff --git a/client/gnome/admin/data/glade/nac_wcf_edit_dialog.glade b/client/gnome/admin/data/glade/nac_wcf_edit_dialog.glade
index 119d61f..5b2ff38 100644
--- a/client/gnome/admin/data/glade/nac_wcf_edit_dialog.glade
+++ b/client/gnome/admin/data/glade/nac_wcf_edit_dialog.glade
@@ -13,9 +13,21 @@
         <property name="orientation">vertical</property>
         <property name="spacing">2</property>
         <child>
+          <object class="GtkLabel" id="wcfed_warning_label">
+            <property name="visible">True</property>
+            <property name="xalign">0</property>
+            <property name="yalign">0</property>
+            <property name="label" translatable="yes">&lt;span color="red"&gt;All the fields are mandatory. Please fill all of them.&lt;/span&gt;</property>
+            <property name="use_markup">True</property>
+          </object>
+          <packing>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
           <object class="GtkTable" id="table2">
             <property name="visible">True</property>
-            <property name="n_rows">4</property>
+            <property name="n_rows">3</property>
             <property name="n_columns">2</property>
             <property name="column_spacing">12</property>
             <property name="row_spacing">5</property>
@@ -28,8 +40,8 @@
               <packing>
                 <property name="left_attach">1</property>
                 <property name="right_attach">2</property>
-                <property name="top_attach">3</property>
-                <property name="bottom_attach">4</property>
+                <property name="top_attach">2</property>
+                <property name="bottom_attach">3</property>
                 <property name="y_options"></property>
               </packing>
             </child>
@@ -40,8 +52,8 @@
                 <property name="label" translatable="yes">URL:</property>
               </object>
               <packing>
-                <property name="top_attach">3</property>
-                <property name="bottom_attach">4</property>
+                <property name="top_attach">2</property>
+                <property name="bottom_attach">3</property>
                 <property name="x_options">GTK_FILL</property>
                 <property name="y_options"></property>
               </packing>
@@ -53,8 +65,8 @@
                 <property name="label" translatable="yes">Description:</property>
               </object>
               <packing>
-                <property name="top_attach">2</property>
-                <property name="bottom_attach">3</property>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
                 <property name="x_options">GTK_FILL</property>
                 <property name="y_options"></property>
               </packing>
@@ -68,30 +80,8 @@
               <packing>
                 <property name="left_attach">1</property>
                 <property name="right_attach">2</property>
-                <property name="top_attach">2</property>
-                <property name="bottom_attach">3</property>
-                <property name="y_options"></property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="wcfed_type_label">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">Type of filter:</property>
-              </object>
-              <packing>
-                <property name="x_options">GTK_FILL</property>
-                <property name="y_options"></property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkComboBox" id="wcfed_type_combobox">
-                <property name="visible">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="x_options">GTK_FILL</property>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
                 <property name="y_options"></property>
               </packing>
             </child>
@@ -102,8 +92,7 @@
                 <property name="label" translatable="yes">Name:</property>
               </object>
               <packing>
-                <property name="top_attach">1</property>
-                <property name="bottom_attach">2</property>
+                <property name="y_options"></property>
               </packing>
             </child>
             <child>
@@ -115,13 +104,12 @@
               <packing>
                 <property name="left_attach">1</property>
                 <property name="right_attach">2</property>
-                <property name="top_attach">1</property>
-                <property name="bottom_attach">2</property>
+                <property name="y_options"></property>
               </packing>
             </child>
           </object>
           <packing>
-            <property name="position">1</property>
+            <property name="position">2</property>
           </packing>
         </child>
         <child internal-child="action_area">
diff --git a/client/gnome/admin/src/ConfigureProxyDialog.py b/client/gnome/admin/src/ConfigureProxyDialog.py
index e514cdd..330510c 100644
--- a/client/gnome/admin/src/ConfigureProxyDialog.py
+++ b/client/gnome/admin/src/ConfigureProxyDialog.py
@@ -47,26 +47,24 @@ class ConfigureProxyDialog (gtk.Dialog):
         self.main_notebook.unparent()
         self.get_content_area().add (self.main_notebook)
 
-        self.blacklist_edit_button.set_no_show_all(True)
-        self.whitelist_edit_button.set_no_show_all(True)
-
-        self.blacklist_add_button.connect ('clicked', self.__on_blacklist_add_button_clicked)
-        self.blacklist_edit_button.connect ('clicked', self.__on_blacklist_edit_button_clicked)
-        self.blacklist_remove_button.connect ('clicked', self.__on_blacklist_remove_button_clicked)
-        self.whitelist_add_button.connect ('clicked', self.__on_whitelist_add_button_clicked)
-        self.whitelist_edit_button.connect ('clicked', self.__on_whitelist_edit_button_clicked)
-        self.whitelist_remove_button.connect ('clicked', self.__on_whitelist_remove_button_clicked)
-
-        self.__init_treeview (self.blacklist_treeview)
-        self.__init_treeview (self.whitelist_treeview)
+        self.custom_blacklist_add_button.connect ('clicked', self.__on_custom_blacklist_add_button_clicked)
+        self.custom_blacklist_edit_button.connect ('clicked', self.__on_custom_blacklist_edit_button_clicked)
+        self.custom_blacklist_remove_button.connect ('clicked', self.__on_custom_blacklist_remove_button_clicked)
+        self.custom_whitelist_add_button.connect ('clicked', self.__on_custom_whitelist_add_button_clicked)
+        self.custom_whitelist_edit_button.connect ('clicked', self.__on_custom_whitelist_edit_button_clicked)
+        self.custom_whitelist_remove_button.connect ('clicked', self.__on_custom_whitelist_remove_button_clicked)
+
+        self.__init_treeview (self.custom_blacklist_treeview)
+        self.__init_treeview (self.custom_whitelist_treeview)
+        self.__init_treeview (self.packaged_blacklist_treeview)
         self.__fill_treeviews ()
 
-        selection = self.blacklist_treeview.get_selection()
-        selection.connect ('changed', self.__on_blacklist_selection_changed)
-        self.__on_blacklist_selection_changed (selection)
-        selection = self.whitelist_treeview.get_selection()
-        selection.connect ('changed', self.__on_whitelist_selection_changed)
-        self.__on_whitelist_selection_changed (selection)
+        selection = self.custom_blacklist_treeview.get_selection()
+        selection.connect ('changed', self.__on_custom_blacklist_selection_changed)
+        self.__on_custom_blacklist_selection_changed (selection)
+        selection = self.custom_whitelist_treeview.get_selection()
+        selection.connect ('changed', self.__on_custom_whitelist_selection_changed)
+        self.__on_custom_whitelist_selection_changed (selection)
 
         self.resize (700, 460)
 
@@ -89,85 +87,81 @@ class ConfigureProxyDialog (gtk.Dialog):
             base_id = base_id + 1
 
         store = gtk.ListStore (gobject.TYPE_INT,
+                               gobject.TYPE_STRING,
+                               gobject.TYPE_STRING,
+                               gobject.TYPE_STRING,
                                gobject.TYPE_STRING)
 
         treeview.set_model (store)
 
     def __fill_treeviews (self):
-        blacklist_model = self.blacklist_treeview.get_model()
-        blacklist_model.clear()
+        custom_blacklist_model = self.custom_blacklist_treeview.get_model()
+        custom_blacklist_model.clear()
 
-        whitelist_model = self.whitelist_treeview.get_model()
-        whitelist_model.clear()
+        custom_whitelist_model = self.custom_whitelist_treeview.get_model()
+        custom_whitelist_model.clear()
 
-        filters = self.dbus_client.list_filters (self.__selected_user_id)
-        for filter_id, filter_name, filter_description, is_black in filters:
+        filters = self.dbus_client.list_custom_filters (self.__selected_user_id)
+        for filter_id, filter_name, filter_description, filter_regex, is_black in filters:
             if is_black:
-                blacklist_model.append ((filter_id, "<b>%s</b>\n   %s" % (filter_name, filter_description)))
+                custom_blacklist_model.append ((filter_id, "<b>%s</b>\n   %s" % (filter_name, filter_description), filter_name, filter_description, filter_regex))
             else:
-                whitelist_model.append ((filter_id, "<b>%s</b>\n   %s" % (filter_name, filter_description)))
+                custom_whitelist_model.append ((filter_id, "<b>%s</b>\n   %s" % (filter_name, filter_description), filter_name, filter_description, filter_regex))
 
-    def __on_blacklist_add_button_clicked (self, widget, data=None):
+    def __on_custom_blacklist_add_button_clicked (self, widget, data=None):
         xml = self.__load_dialog ()
         self.proxy_rule_dialog = xml.get_object ('wcfed_dialog')
-        ret = self.proxy_rule_dialog.run()
-        if ret == 2:
-            combobox = xml.get_object ('wcfed_type_combobox')
-            name_entry = xml.get_object ('wcfed_name_entry')
-            description_entry = xml.get_object ('wcfed_description_entry')
-            url_entry = xml.get_object ('wcfed_url_entry')
-
-            name = name_entry.get_text()
-            type = combobox.get_active ()
-            description = description_entry.get_text()
-            url = url_entry.get_text()
-
-            if type == 0:
-                self.progress_dialog = ProgressDialog (_("Downloading the list. Please, wait..."))
-                self.dbus_client.add_dansguardian_list (self.__selected_user_id,
-                                                        name,
-                                                        description,
-                                                        url,
-                                                        self.__on_add_dansguardian_list_reply,
-                                                        self.__on_add_dansguardian_list_error)
-                self.proxy_rule_dialog.destroy()
-                self.proxy_rule_dialog = None
-            elif type == 1:
+        warning_label = xml.get_object ("wcfed_warning_label")
+        warning_label.hide ()
+        while True:
+            ret = self.proxy_rule_dialog.run()
+            if ret == 2:
+                name_entry = xml.get_object ('wcfed_name_entry')
+                description_entry = xml.get_object ('wcfed_description_entry')
+                url_entry = xml.get_object ('wcfed_url_entry')
+
+                name = name_entry.get_text().strip()
+                description = description_entry.get_text().strip()
+                url = url_entry.get_text().strip()
+
+                if name == "" or description == "" or url == "":
+                    warning_label.show()
+                    continue
+
                 self.dbus_client.add_custom_filter (self.__selected_user_id, True, name, description, url)
                 self.__fill_treeviews ()
                 self.proxy_rule_dialog.destroy()
-                self.proxy_rule_dialog = None
-        else:
-            self.proxy_rule_dialog.destroy()
-            self.proxy_rule_dialog = None
-        
+                break
+            else:
+                self.proxy_rule_dialog.destroy()
+                break
         
-    def __on_whitelist_add_button_clicked (self, widget, data=None):
+    def __on_custom_whitelist_add_button_clicked (self, widget, data=None):
         xml = self.__load_dialog ()
         dialog = xml.get_object ('wcfed_dialog')
+        warning_label = xml.get_object ("wcfed_warning_label")
+        warning_label.hide ()
 
-        type_label = xml.get_object ('wcfed_type_label')
-        type_label.hide()
-        combobox = xml.get_object ('wcfed_type_combobox')
-        combobox.hide()
+        while True:
+            ret = dialog.run()
+            if ret == 2:
+                name_entry = xml.get_object ('wcfed_name_entry')
+                description_entry = xml.get_object ('wcfed_description_entry')
+                url_entry = xml.get_object ('wcfed_url_entry')
 
-        dialog = xml.get_object ('wcfed_dialog')
-        ret = dialog.run()
-        if ret == 2:
-            name_entry = xml.get_object ('wcfed_name_entry')
-            description_entry = xml.get_object ('wcfed_description_entry')
-            url_entry = xml.get_object ('wcfed_url_entry')
+                name = name_entry.get_text().strip()
+                description = description_entry.get_text().strip()
+                url = url_entry.get_text().strip()
 
-            name = name_entry.get_text()
-            description = description_entry.get_text()
-            url = url_entry.get_text()
-            dialog.destroy()
+                if name == "" or description == "" or url == "":
+                    warning_label.show()
+                    continue
 
-            self.dbus_client.add_custom_filter (self.__selected_user_id, False, name, description, url)
-
-            self.__fill_treeviews ()
-        else:
-            dialog.destroy()
+                self.dbus_client.add_custom_filter (self.__selected_user_id, False, name, description, url)
+                self.__fill_treeviews ()
+                dialog.destroy()
+            else:
+                dialog.destroy()
 
     def __on_add_dansguardian_list_reply (self, value):
         self.progress_dialog.destroy()
@@ -197,13 +191,91 @@ class ConfigureProxyDialog (gtk.Dialog):
         dlg.run()
         dlg.destroy()
 
-    def __on_blacklist_edit_button_clicked (self, widget, data=None):
-        pass
+    def __on_custom_blacklist_edit_button_clicked (self, widget, data=None):
+        xml = self.__load_dialog ()
+        self.proxy_rule_dialog = xml.get_object ('wcfed_dialog')
+        warning_label = xml.get_object ("wcfed_warning_label")
+        warning_label.hide ()
+
+        name_entry = xml.get_object ('wcfed_name_entry')
+        description_entry = xml.get_object ('wcfed_description_entry')
+        url_entry = xml.get_object ('wcfed_url_entry')
 
-    def __on_whitelist_edit_button_clicked (self, widget, data=None):
-        pass
+        selection = self.custom_blacklist_treeview.get_selection()
+        if selection.count_selected_rows () > 0:
+            model, iter = selection.get_selected()
+            if iter:
+                filter_id = model.get_value (iter, 0)
+                filter_name = model.get_value (iter, 2)
+                filter_description = model.get_value (iter, 3)
+                filter_regex = model.get_value (iter, 4)
+
+                name_entry.set_text (filter_name)
+                description_entry.set_text (filter_description)
+                url_entry.set_text (filter_regex)
+
+        while True:
+            ret = self.proxy_rule_dialog.run()
+            if ret == 2:
+                filter_name = name_entry.get_text().strip()
+                filter_description = description_entry.get_text().strip()
+                filter_url = url_entry.get_text().strip()
+
+                if filter_name == "" or filter_description == "" or filter_url == "":
+                    warning_label.show()
+                    continue
+
+                self.dbus_client.update_custom_filter (filter_id, filter_name, filter_description, filter_url)
+                self.__fill_treeviews ()
+                self.proxy_rule_dialog.destroy()
+                break
+            else:
+                self.proxy_rule_dialog.destroy()
+                break
+
+    def __on_custom_whitelist_edit_button_clicked (self, widget, data=None):
+        xml = self.__load_dialog ()
+        self.proxy_rule_dialog = xml.get_object ('wcfed_dialog')
+        warning_label = xml.get_object ("wcfed_warning_label")
+        warning_label.hide ()
+
+        name_entry = xml.get_object ('wcfed_name_entry')
+        description_entry = xml.get_object ('wcfed_description_entry')
+        url_entry = xml.get_object ('wcfed_url_entry')
 
-    def __on_blacklist_remove_button_clicked (self, widget, data=None):
+        selection = self.custom_whitelist_treeview.get_selection()
+        if selection.count_selected_rows () > 0:
+            model, iter = selection.get_selected()
+            if iter:
+                filter_id = model.get_value (iter, 0)
+                filter_name = model.get_value (iter, 2)
+                filter_description = model.get_value (iter, 3)
+                filter_regex = model.get_value (iter, 4)
+
+                name_entry.set_text (filter_name)
+                description_entry.set_text (filter_description)
+                url_entry.set_text (filter_regex)
+
+        while True:
+            ret = self.proxy_rule_dialog.run()
+            if ret == 2:
+                filter_name = name_entry.get_text().strip()
+                filter_description = description_entry.get_text().strip()
+                filter_url = url_entry.get_text().strip()
+
+                if filter_name == "" or filter_description == "" or filter_url == "":
+                    warning_label.show()
+                    continue
+
+                self.dbus_client.update_custom_filter (filter_id, filter_name, filter_description, filter_url)
+                self.__fill_treeviews ()
+                self.proxy_rule_dialog.destroy()
+                break
+            else:
+                self.proxy_rule_dialog.destroy()
+                break
+
+    def __on_custom_blacklist_remove_button_clicked (self, widget, data=None):
         dlg = gtk.MessageDialog(type=gtk.MESSAGE_WARNING, buttons=gtk.BUTTONS_OK_CANCEL)
         dlg.set_property("icon-name", "nanny")
         dlg.set_markup(_("<b>Are you sure you want to delete this filter?</b>"))
@@ -215,18 +287,16 @@ class ConfigureProxyDialog (gtk.Dialog):
             return
 
         self.progress_dialog = ProgressDialog (_("Removing filter. Please, wait..."))
-        selection = self.blacklist_treeview.get_selection()
+        selection = self.custom_blacklist_treeview.get_selection()
         if selection.count_selected_rows () > 0:
-            model, paths = selection.get_selected_rows()
-            if paths:
-                for path in paths:
-                    id = model.get_value (model.get_iter(path), 0)
-                    self.dbus_client.remove_filter (id,
-                                                    self.__on_remove_filter_reply,
-                                                    self.__on_remove_filter_error)
-                    
-
-    def __on_whitelist_remove_button_clicked (self, widget, data=None):
+            model, iter = selection.get_selected()
+            if iter:
+                id = model.get_value (iter, 0)
+                self.dbus_client.remove_custom_filter (id,
+                                                       self.__on_remove_filter_reply,
+                                                       self.__on_remove_filter_error)
+
+    def __on_custom_whitelist_remove_button_clicked (self, widget, data=None):
         dlg = gtk.MessageDialog(type=gtk.MESSAGE_WARNING, buttons=gtk.BUTTONS_OK_CANCEL)
         dlg.set_property("icon-name", "nanny")
         dlg.set_markup(_("<b>Are you sure you want to delete this filter?</b>"))
@@ -238,15 +308,14 @@ class ConfigureProxyDialog (gtk.Dialog):
             return
 
         self.progress_dialog = ProgressDialog (_("Removing filter. Please, wait..."))
-        selection = self.whitelist_treeview.get_selection()
+        selection = self.custom_whitelist_treeview.get_selection()
         if selection.count_selected_rows () > 0:
-            model, paths = selection.get_selected_rows()
-            if paths:
-                for path in paths:
-                    id = model.get_value (model.get_iter(path), 0)
-                    self.dbus_client.remove_filter (id,
-                                                    self.__on_remove_filter_reply,
-                                                    self.__on_remove_filter_error)
+            model, iter = selection.get_selected()
+            if iter:
+                id = model.get_value (iter, 0)
+                self.dbus_client.remove_custom_filter (id,
+                                                       self.__on_remove_filter_reply,
+                                                       self.__on_remove_filter_error)
 
     def __on_remove_filter_reply (self, value):
         self.progress_dialog.destroy()
@@ -273,38 +342,27 @@ class ConfigureProxyDialog (gtk.Dialog):
         dlg.run()
         dlg.destroy()
 
-    def __on_blacklist_selection_changed (self, selection, data=None):
+    def __on_custom_blacklist_selection_changed (self, selection, data=None):
         if selection.count_selected_rows () > 0:
-            self.blacklist_edit_button.set_sensitive (True)
-            self.blacklist_remove_button.set_sensitive (True)
+            self.custom_blacklist_edit_button.set_sensitive (True)
+            self.custom_blacklist_remove_button.set_sensitive (True)
         else:
-            self.blacklist_edit_button.set_sensitive (False)
-            self.blacklist_remove_button.set_sensitive (False)
+            self.custom_blacklist_edit_button.set_sensitive (False)
+            self.custom_blacklist_remove_button.set_sensitive (False)
 
-    def __on_whitelist_selection_changed (self, selection, data=None):
+    def __on_custom_whitelist_selection_changed (self, selection, data=None):
         if selection.count_selected_rows () > 0:
-            self.whitelist_edit_button.set_sensitive (True)
-            self.whitelist_remove_button.set_sensitive (True)
+            self.custom_whitelist_edit_button.set_sensitive (True)
+            self.custom_whitelist_remove_button.set_sensitive (True)
         else:
-            self.whitelist_edit_button.set_sensitive (False)
-            self.whitelist_remove_button.set_sensitive (False)
+            self.custom_whitelist_edit_button.set_sensitive (False)
+            self.custom_whitelist_remove_button.set_sensitive (False)
 
     def __load_dialog (self):
         glade_file = os.path.join (nanny.client.gnome.admin.glade_files_dir, "nac_wcf_edit_dialog.glade")
         xml = gtk.Builder ()
         xml.add_from_file (glade_file)
 
-        store = gtk.ListStore (gobject.TYPE_INT, gobject.TYPE_STRING)
-        store.append ((0, _("Download list from the Internet")))
-        store.append ((1, _("Insert manual domain or URL")))
-
-        combobox = xml.get_object ('wcfed_type_combobox')
-        cell = gtk.CellRendererText()
-        combobox.pack_start(cell, True)
-        combobox.add_attribute(cell, 'text', 1)
-        combobox.set_model (store)
-        combobox.set_active (0)
-
         return xml
 
 class ProgressDialog (gtk.Window):
diff --git a/daemon/src/FilterManager.py b/daemon/src/FilterManager.py
index 761938d..7121ec2 100644
--- a/daemon/src/FilterManager.py
+++ b/daemon/src/FilterManager.py
@@ -107,7 +107,7 @@ class FilterManager (gobject.GObject) :
             qr = block_d.blockOn()
             
             for f in qr :
-                ret.append([ int(f[0]), str(f[3]), str(f[4]), bool(f[2]) ])
+                ret.append([ int(f[0]), unicode(f[3]), unicode(f[4]), unicode(f[5]), bool(f[2]) ])
 
             return ret
         except:
diff --git a/daemon/src/NannyDBus.py b/daemon/src/NannyDBus.py
index 7618541..74d27e1 100644
--- a/daemon/src/NannyDBus.py
+++ b/daemon/src/NannyDBus.py
@@ -109,11 +109,11 @@ class NannyDBus(dbus.service.Object):
     @dbus.service.method("org.gnome.Nanny.WebDatabase",
                          in_signature='sbsss', out_signature='b')
     def AddCustomFilter(self, uid, is_black, name, description, regex):
-        return self.quarterback.filter_manager.add_custom_filter(str(uid), bool(is_black), str(name),
-                                                                          str(description), str(regex))
+        return self.quarterback.filter_manager.add_custom_filter(str(uid), bool(is_black), unicode(name),
+                                                                          unicode(description), unicode(regex))
 
     @dbus.service.method("org.gnome.Nanny.WebDatabase",
-                         in_signature='s', out_signature='a(issb)')
+                         in_signature='s', out_signature='a(isssb)')
     def ListCustomFilters(self, uid):
         return self.quarterback.filter_manager.list_custom_filters(int(uid))
 
@@ -127,9 +127,9 @@ class NannyDBus(dbus.service.Object):
                          in_signature='isss', out_signature='b')
     def UpdateCustomFilter(self, list_id, name, description, regex):
         return self.quarterback.filter_manager.update_custom_filter(int(list_id),
-                                                                    str(name),
-                                                                    str(description),
-                                                                    str(regex))
+                                                                    unicode(name),
+                                                                    unicode(description),
+                                                                    unicode(regex))
     
     #DEPRECATED
     @dbus.service.method("org.gnome.Nanny.WebDatabase",
@@ -148,6 +148,6 @@ class NannyDBus(dbus.service.Object):
                          in_signature='ssss', out_signature='b')
     def AddDansGuardianList(self, uid, name, description, list_url):
         return self.quarterback.webcontent_filter.webdb.add_dans_guardian_list(str(uid),
-                                                                               str(name),
-                                                                               str(description),
-                                                                               str(list_url))
+                                                                               unicode(name),
+                                                                               unicode(description),
+                                                                               unicode(list_url))



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