[nanny] AddPkgFilter exported to Dbus



commit 57a5188e9bfa483943c67222a423edd170ef06f8
Author: Roberto Majadas <roberto majadas openshine com>
Date:   Mon Feb 1 13:59:53 2010 +0100

    AddPkgFilter exported to Dbus

 daemon/src/FilterManager.py |   49 ++++++++++++++++++++++++++++++++++++++----
 daemon/src/NannyDBus.py     |    6 +++++
 2 files changed, 50 insertions(+), 5 deletions(-)
---
diff --git a/daemon/src/FilterManager.py b/daemon/src/FilterManager.py
index 09da7b2..f2af154 100644
--- a/daemon/src/FilterManager.py
+++ b/daemon/src/FilterManager.py
@@ -24,11 +24,14 @@
 # USA
 
 import gobject
+import gio
 import os
+import shutil
 import pickle
+import tempfile
 from glob import glob
 
-from twisted.internet import reactor
+from twisted.internet import reactor, threads
 from twisted.enterprise import adbapi
 
 import nanny.gregex
@@ -193,8 +196,44 @@ class FilterManager (gobject.GObject) :
             print "Something goes wrong getting categories from %s" % db
             return []
         
-    def add_pkg_filter(self, path, name, description):
-        pass
+    def add_pkg_filter(self, name, description, 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"))
+            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:
+                shutil.rmtree(temp_dir)
+                return False
+                
+            self.db_pools[os.path.join(temp_dir, "filters.db")] = adbapi.ConnectionPool('sqlite3',
+                                                                                        os.path.join(temp_dir, "filters.db"),
+                                                                                        check_same_thread=False,
+                                                                                        cp_openfun=on_db_connect)
+            self.pkg_filters_conf[os.path.join(temp_dir, "filters.db")] = {"categories" : [],
+                                                                           "users_info" : {}
+                                                                           }
+            self.__save_pkg_filters_conf()
+            return True
+        except:
+            print "Something goes wrong Adding PKG Filter"
+            shutil.rmtree(temp_dir)
+            return False
+        
+    def __copy_pkg_filter(self, orig, dest):
+        try:
+            print "Coping %s" % orig
+            gio.File(orig).copy(gio.File(dest))
+            print "Copied %s in %s" % (orig, dest)
+            return True
+        except:
+            print "Copy failed! (%s, %s)" % (orig, dest)
+            return False
 
     def remove_pkg_filter(self):
         pass
@@ -210,8 +249,8 @@ class FilterManager (gobject.GObject) :
             
     def get_pkg_filter_user_categories(self, pkg_id, uid):
         try:
-            name = "Here the name"
-            description = "Here the description"
+            name = ""
+            description = ""
             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]
diff --git a/daemon/src/NannyDBus.py b/daemon/src/NannyDBus.py
index e8e73de..bac72b8 100644
--- a/daemon/src/NannyDBus.py
+++ b/daemon/src/NannyDBus.py
@@ -130,6 +130,12 @@ class NannyDBus(dbus.service.Object):
                                                                     unicode(name),
                                                                     unicode(description),
                                                                     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(name, description, path)
+    
     @dbus.service.method("org.gnome.Nanny.WebDatabase",
                          in_signature='', out_signature='as')
     def ListPkgFilters(self):



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