[nanny] Changes in the add/remove/update packaged filters API



commit 423450006b0eb4aa7b795971e6a3074bef3432fb
Author: Cesar Garcia Tapia <cesar garcia tapia openshine com>
Date:   Mon Feb 1 23:26:58 2010 +0100

    Changes in the add/remove/update packaged filters API

 client/gnome/admin/src/ConfigureProxyDialog.py |    2 +
 daemon/src/FilterManager.py                    |   53 +++++++++++++++--------
 daemon/src/NannyDBus.py                        |    6 +-
 3 files changed, 39 insertions(+), 22 deletions(-)
---
diff --git a/client/gnome/admin/src/ConfigureProxyDialog.py b/client/gnome/admin/src/ConfigureProxyDialog.py
index 54149b1..308534d 100644
--- a/client/gnome/admin/src/ConfigureProxyDialog.py
+++ b/client/gnome/admin/src/ConfigureProxyDialog.py
@@ -222,8 +222,10 @@ class ConfigureProxyDialog (gtk.Dialog):
                 self.dbus_client.add_custom_filter (self.__selected_user_id, False, name, description, url)
                 self.__fill_treeviews ()
                 dialog.destroy()
+                break
             else:
                 dialog.destroy()
+                break
 
     def __on_add_dansguardian_list_reply (self, value):
         self.progress_dialog.destroy()
diff --git a/daemon/src/FilterManager.py b/daemon/src/FilterManager.py
index b023d62..19c956f 100644
--- a/daemon/src/FilterManager.py
+++ b/daemon/src/FilterManager.py
@@ -29,6 +29,7 @@ import os
 import shutil
 import pickle
 import tempfile
+import tarfile
 from glob import glob
 
 from twisted.internet import reactor, threads
@@ -241,18 +242,18 @@ class FilterManager (gobject.GObject) :
             print "Something goes wrong getting categories from %s" % db
             return []
         
-    def add_pkg_filter(self, name, description, path):
+    def add_pkg_filter(self, path):
         temp_dir = tempfile.mkdtemp(prefix="filter_", dir="/var/lib/nanny/pkg_filters/")
         try:
-            d = threads.deferToThread(self.__copy_pkg_filter, path, os.path.join(temp_dir, "filters.db"))
+            if not tarfile.is_tarfile (path): 
+                print "The file has not in the correct format"
+                shutil.rmtree(temp_dir)
+                return False
+
+            d = threads.deferToThread(self.__copy_pkg_filter, path, os.path.join(temp_dir, "filters.tgz"))
             block_d = BlockingDeferred(d)
             qr = block_d.blockOn()
-            if qr == True :
-                fd = open(os.path.join(temp_dir, "filters.metadata"), "w")
-                fd.write("Name=%s\n" % name)
-                fd.write("Comment=%s\n" % description)
-                fd.close()
-            else:
+            if qr != True :
                 shutil.rmtree(temp_dir)
                 return False
                 
@@ -272,23 +273,36 @@ class FilterManager (gobject.GObject) :
         
     def __copy_pkg_filter(self, orig, dest):
         try:
-            print "Coping %s" % orig
-            if os.path.exists(dest) :
-                print "Making Backup file"
-                gio.File(dest).move(gio.File(dest + ".bak"))
+            basedir = os.path.dirname (dest)
+            if os.path.exists(basedir) :
+                files = os.listdir (basedir)
+                for file in files:
+                    file_name = os.path.join (basedir, file)
+                    gio.File(file_name).move(gio.File(file_name + ".bak"))
                 
             gio.File(orig).copy(gio.File(dest))
             print "Copied %s in %s" % (orig, dest)
+
+            tfile = tarfile.open (dest, 'r')
+            tfile.extractall (path=os.path.dirname(dest))
+            os.unlink(dest)
             
-            if os.path.exists(dest + ".bak") :
-                print "Removing Backup file"
-                os.unlink(dest + ".bak")
+            print "Removing Backup files"
+            files = os.listdir (basedir)
+            for file in files:
+                if file.endswith ('.bak'):
+                    file_name = os.path.join (basedir, file)
+                    os.unlink(file_name)
+
             return True
         except:
             print "Copy failed! (%s, %s)" % (orig, dest)
-            if os.path.exists(dest + ".bak") :
-                print "Revert to backup file"
-                gio.File(dest + ".bak").move(gio.File(dest))
+            print "Revert to backup files"
+            files = os.listdir (basedir)
+            for file in files:
+                if file.endswith ('.bak'):
+                    gio.File(file).move(gio.File(file[:-4]))
+
             return False
 
     def remove_pkg_filter(self, pkg_id):
@@ -308,7 +322,8 @@ class FilterManager (gobject.GObject) :
     def update_pkg_filter(self, pkg_id, new_db):
         for id, ro in self.list_pkg_filter() :
             if id == pkg_id and ro == False:
-                d = threads.deferToThread(self.__copy_pkg_filter, new_db, pkg_id)
+                basedir = os.path.dirname (pkg_id)
+                d = threads.deferToThread(self.__copy_pkg_filter, new_db, os.path.join(basedir, "filters.tgz"))
                 block_d = BlockingDeferred(d)
                 qr = block_d.blockOn()
                 if qr == True :
diff --git a/daemon/src/NannyDBus.py b/daemon/src/NannyDBus.py
index deb6752..9c96f7c 100644
--- a/daemon/src/NannyDBus.py
+++ b/daemon/src/NannyDBus.py
@@ -132,9 +132,9 @@ class NannyDBus(dbus.service.Object):
                                                                     unicode(regex))
 
     @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(unicode(name), unicode(description), str(path))
+                         in_signature='s', out_signature='b')
+    def AddPkgFilter(self, path):
+        return self.quarterback.filter_manager.add_pkg_filter(str(path))
 
     @dbus.service.method("org.gnome.Nanny.WebDatabase",
                          in_signature='s', out_signature='b')



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