[nanny] First code for the packaged filters configuration



commit e01d43fb14328bfe7d15f0fe34caec7b3e7f6ef6
Author: Cesar Garcia Tapia <cesar garcia tapia openshine com>
Date:   Mon Feb 1 18:52:15 2010 +0100

    First code for the packaged filters configuration

 client/common/src/DBusClient.py                    |   24 ++++++
 client/gnome/admin/data/glade/nac_wcf_dialog.glade |   45 ++++++++++-
 client/gnome/admin/src/ConfigureProxyDialog.py     |   79 +++++++++++++++++++-
 daemon/src/FilterManager.py                        |   16 +++-
 daemon/src/NannyDBus.py                            |   12 ++--
 5 files changed, 156 insertions(+), 20 deletions(-)
---
diff --git a/client/common/src/DBusClient.py b/client/common/src/DBusClient.py
index 3e0be87..413f8bc 100644
--- a/client/common/src/DBusClient.py
+++ b/client/common/src/DBusClient.py
@@ -137,6 +137,30 @@ class DBusClient(gobject.GObject):
     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_pkg_filter (self, name, description, path):
+        return self.nanny_wcf.AddPkgFilter(name, description, path)
+
+    def remove_pkg_filter (self, pkg_id):
+        return self.nanny_wcf.RemovePkgFilter(pkg_id)
+    
+    def update_pkg_filter (self, pkg_id, new_db_path):
+        return self.nanny_wcf.UpdatePkgFilter(pkg_id, new_db_path)
+    
+    def list_pkg_filters (self):
+        return self.nanny_wcf.ListPkgFilters()
+    
+    def get_pkg_filter_metadata (self, pkg_id):
+        return self.nanny_wcf.GetPkgFilterMetadata(pkg_id)
+
+    def set_pkg_filter_metadata (self, pkg_id, name, description):
+        return self.nanny_wcf.SetPkgFilterMetadata(pkg_id, name, description)
+    
+    def get_pkg_filter_user_categories (self, pkg_id, uid):
+        return self.nanny_wcf.GetPkgFilterUserCategories(pkg_id, uid)
+
+    def set_pkg_filter_user_categories (self, pkg_id, uid, list_categories):
+        return self.nanny_wcf.SetPkgFilterUserCategories(pkg_id, uid, list_categories)
+
     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)
 
diff --git a/client/gnome/admin/data/glade/nac_wcf_dialog.glade b/client/gnome/admin/data/glade/nac_wcf_dialog.glade
index 528dead..65884d3 100644
--- a/client/gnome/admin/data/glade/nac_wcf_dialog.glade
+++ b/client/gnome/admin/data/glade/nac_wcf_dialog.glade
@@ -30,6 +30,7 @@
                       <object class="GtkTreeView" id="wcfd_custom_blacklist_treeview">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
+                        <property name="headers_visible">False</property>
                       </object>
                     </child>
                   </object>
@@ -125,6 +126,7 @@
                       <object class="GtkTreeView" id="wcfd_custom_whitelist_treeview">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
+                        <property name="headers_visible">False</property>
                       </object>
                     </child>
                   </object>
@@ -229,17 +231,50 @@
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkScrolledWindow" id="scrolledwindow3">
+                  <object class="GtkHPaned" id="hpaned1">
                     <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>
+                    <property name="position">300</property>
+                    <property name="position_set">True</property>
+                    <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>
+                            <property name="headers_visible">False</property>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="resize">False</property>
+                        <property name="shrink">True</property>
+                      </packing>
+                    </child>
                     <child>
-                      <object class="GtkTreeView" id="wcfd_packaged_blacklist_treeview">
+                      <object class="GtkScrolledWindow" id="scrolledwindow4">
                         <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_categories_treeview">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="headers_visible">False</property>
+                          </object>
+                        </child>
                       </object>
+                      <packing>
+                        <property name="resize">True</property>
+                        <property name="shrink">True</property>
+                      </packing>
                     </child>
                   </object>
                   <packing>
diff --git a/client/gnome/admin/src/ConfigureProxyDialog.py b/client/gnome/admin/src/ConfigureProxyDialog.py
index 330510c..09ad949 100644
--- a/client/gnome/admin/src/ConfigureProxyDialog.py
+++ b/client/gnome/admin/src/ConfigureProxyDialog.py
@@ -54,23 +54,29 @@ class ConfigureProxyDialog (gtk.Dialog):
         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.__init_custom_treeview (self.custom_blacklist_treeview)
+        self.__init_custom_treeview (self.custom_whitelist_treeview)
+        self.__init_pkg_treeview (self.packaged_blacklist_treeview)
+        self.__init_pkg_categories_treeview (self.packaged_blacklist_categories_treeview)
         self.__fill_treeviews ()
 
         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)
 
+        selection = self.packaged_blacklist_treeview.get_selection()
+        selection.connect ('changed', self.__on_packaged_blacklist_selection_changed)
+        self.__on_packaged_blacklist_selection_changed (selection)
+
         self.resize (700, 460)
 
         self.show_all ()
 
-    def __init_treeview (self, treeview):
+    def __init_custom_treeview (self, treeview):
         base_id = 0
         for field in ["id", "description"]:
             col = gtk.TreeViewColumn(field)
@@ -94,6 +100,50 @@ class ConfigureProxyDialog (gtk.Dialog):
 
         treeview.set_model (store)
 
+    def __init_pkg_treeview (self, treeview):
+        base_id = 0
+        for field in ["id", "description"]:
+            col = gtk.TreeViewColumn(field)
+            treeview.append_column(col)
+            cell = gtk.CellRendererText()
+            cell.set_property("ellipsize", pango.ELLIPSIZE_END)
+            col.pack_start(cell, True)
+            col.add_attribute(cell, 'markup', base_id)
+            if field != "id":
+                col.set_visible (True)
+            else:
+                col.set_visible (False)
+            
+            base_id = base_id + 1
+
+        store = gtk.ListStore (gobject.TYPE_STRING,
+                               gobject.TYPE_STRING)
+
+        treeview.set_model (store)
+
+    def __init_pkg_categories_treeview (self, treeview):
+        base_id = 0
+        for field in ["selected", "description"]:
+            col = gtk.TreeViewColumn(field)
+            treeview.append_column(col)
+            if field == "description":
+                cell = gtk.CellRendererText()
+                cell.set_property("ellipsize", pango.ELLIPSIZE_END)
+                col.pack_start(cell, True)
+                col.add_attribute(cell, 'markup', base_id)
+            else:
+                cell = gtk.CellRendererToggle()
+                col.pack_start(cell, True)
+                col.add_attribute(cell, 'active', base_id)
+            col.set_visible (True)
+            
+            base_id = base_id + 1
+
+        store = gtk.ListStore (gobject.TYPE_BOOLEAN,
+                               gobject.TYPE_STRING)
+
+        treeview.set_model (store)
+
     def __fill_treeviews (self):
         custom_blacklist_model = self.custom_blacklist_treeview.get_model()
         custom_blacklist_model.clear()
@@ -101,6 +151,9 @@ class ConfigureProxyDialog (gtk.Dialog):
         custom_whitelist_model = self.custom_whitelist_treeview.get_model()
         custom_whitelist_model.clear()
 
+        packaged_blacklist_model = self.packaged_blacklist_treeview.get_model()
+        packaged_blacklist_model.clear()
+
         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:
@@ -108,6 +161,11 @@ class ConfigureProxyDialog (gtk.Dialog):
             else:
                 custom_whitelist_model.append ((filter_id, "<b>%s</b>\n   %s" % (filter_name, filter_description), filter_name, filter_description, filter_regex))
 
+        pkg_filters = self.dbus_client.list_pkg_filters ()
+        for filter_id, readonly in pkg_filters:
+            filter_name, filter_description = self.dbus_client.get_pkg_filter_metadata(filter_id)
+            packaged_blacklist_model.append ((filter_id, "<b>%s</b>\n   %s" % (filter_name, filter_description)))
+
     def __on_custom_blacklist_add_button_clicked (self, widget, data=None):
         xml = self.__load_dialog ()
         self.proxy_rule_dialog = xml.get_object ('wcfed_dialog')
@@ -358,6 +416,19 @@ class ConfigureProxyDialog (gtk.Dialog):
             self.custom_whitelist_edit_button.set_sensitive (False)
             self.custom_whitelist_remove_button.set_sensitive (False)
 
+    def __on_packaged_blacklist_selection_changed (self, selection, data=None):
+        packaged_blacklist_categories_model = self.packaged_blacklist_categories_treeview.get_model()
+        packaged_blacklist_categories_model.clear()
+
+        if selection.count_selected_rows () > 0:
+            model, iter = selection.get_selected()
+            if iter:
+                filter_id = model.get_value (iter, 0)
+
+                categories = self.dbus_client.get_pkg_filter_user_categories (filter_id, self.__selected_user_id) 
+                for category, user_category in categories:
+                    packaged_blacklist_categories_model.append ((user_category, category))
+
     def __load_dialog (self):
         glade_file = os.path.join (nanny.client.gnome.admin.glade_files_dir, "nac_wcf_edit_dialog.glade")
         xml = gtk.Builder ()
diff --git a/daemon/src/FilterManager.py b/daemon/src/FilterManager.py
index bf20877..280932e 100644
--- a/daemon/src/FilterManager.py
+++ b/daemon/src/FilterManager.py
@@ -372,8 +372,8 @@ class FilterManager (gobject.GObject) :
             
     def get_pkg_filter_user_categories(self, pkg_id, uid):
         try:
-            name = ""
-            description = ""
+            return_categories = []
+
             categories = self.__get_categories_from_db(pkg_id)
             if self.pkg_filters_conf[pkg_id]["users_info"].has_key(uid) :
                 user_categories = self.pkg_filters_conf[pkg_id]["users_info"][uid]
@@ -388,11 +388,17 @@ class FilterManager (gobject.GObject) :
                 user_categories = tmp_user_categories
                 self.pkg_filters_conf[pkg_id]["users_info"][uid] = user_categories
                 self.__save_pkg_filters_conf()
+
+            for category in categories:
+                if category in user_categories:
+                    return_categories.append ((category, True))
+                else:
+                    return_categories.append ((category, False))
+
+            return return_categories
             
         except:
-            return [[], []]
-            
-        return [categories, user_categories]
+            return []
 
     def set_pkg_filter_user_categories(self, pkg_id, uid, user_categories):
         categories = self.__get_categories_from_db(pkg_id)
diff --git a/daemon/src/NannyDBus.py b/daemon/src/NannyDBus.py
index 1847b3b..3d8e7a3 100644
--- a/daemon/src/NannyDBus.py
+++ b/daemon/src/NannyDBus.py
@@ -134,17 +134,17 @@ class NannyDBus(dbus.service.Object):
     @dbus.service.method("org.gnome.Nanny.WebDatabase",
                          in_signature='sss', out_signature='b')
     def AddPkgFilter(self, name, description, path):
-        return self.quarterback.filter_manager.add_pkg_filter(name, description, path)
+        return self.quarterback.filter_manager.add_pkg_filter(unicode(name), unicode(description), str(path))
 
     @dbus.service.method("org.gnome.Nanny.WebDatabase",
                          in_signature='s', out_signature='b')
     def RemovePkgFilter(self, pkg_id):
-        return self.quarterback.filter_manager.remove_pkg_filter(pkg_id)
+        return self.quarterback.filter_manager.remove_pkg_filter(str(pkg_id))
 
     @dbus.service.method("org.gnome.Nanny.WebDatabase",
                          in_signature='ss', out_signature='b')
     def UpdatePkgFilter(self, pkg_id, new_db_path):
-        return self.quarterback.filter_manager.update_pkg_filter(pkg_id, new_db_path)
+        return self.quarterback.filter_manager.update_pkg_filter(str(pkg_id), str (new_db_path))
     
     @dbus.service.method("org.gnome.Nanny.WebDatabase",
                          in_signature='', out_signature='a(sb)')
@@ -154,15 +154,15 @@ class NannyDBus(dbus.service.Object):
     @dbus.service.method("org.gnome.Nanny.WebDatabase",
                          in_signature='s', out_signature='ss')
     def GetPkgFilterMetadata(self, pkg_id):
-        return self.quarterback.filter_manager.get_pkg_filter_metadata(pkg_id)
+        return self.quarterback.filter_manager.get_pkg_filter_metadata(str(pkg_id))
 
     @dbus.service.method("org.gnome.Nanny.WebDatabase",
                          in_signature='sss', out_signature='b')
     def SetPkgFilterMetadata(self, pkg_id, name, description):
-        return self.quarterback.filter_manager.set_pkg_filter_metadata(pkg_id, name, description)
+        return self.quarterback.filter_manager.set_pkg_filter_metadata(str(pkg_id), unicode(name), unicode(description))
 
     @dbus.service.method("org.gnome.Nanny.WebDatabase",
-                         in_signature='ss', out_signature='asas')
+                         in_signature='ss', out_signature='a(sb)')
     def GetPkgFilterUserCategories(self, pkg_id, uid):
         return self.quarterback.filter_manager.get_pkg_filter_user_categories(unicode(pkg_id),
                                                                               str(uid)



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