[nanny] Update checker client/server



commit 5abedba86d9af1f2ddd1a3be388542a8e44769db
Author: Roberto Majadas <roberto majadas openshine com>
Date:   Sun Jan 16 19:28:23 2011 +0100

    Update checker client/server

 client/gnome/admin/src/ConfigureProxyDialog.py |   34 +++++++++++++++++++----
 daemon/src/FilterManager.py                    |   32 ++++++++++++++++++++++
 2 files changed, 60 insertions(+), 6 deletions(-)
---
diff --git a/client/gnome/admin/src/ConfigureProxyDialog.py b/client/gnome/admin/src/ConfigureProxyDialog.py
index 3a0e8ea..db4f2ad 100644
--- a/client/gnome/admin/src/ConfigureProxyDialog.py
+++ b/client/gnome/admin/src/ConfigureProxyDialog.py
@@ -182,18 +182,19 @@ class ConfigureProxyDialog (gtk.Dialog):
     def __update_packaged_blacklist_model(self):
         try:
             list_store =  self.packaged_blacklist_treeview.get_model()
-
             server_list =  self.dbus_client.list_pkg_filters () 
-
-                
+            
             for filter_id in server_list:
                 included = False
                 for row in list_store:
                     if row[0] == filter_id :
                         metadata = self.dbus_client.get_pkg_filter_metadata(filter_id)
                         filter_name = _("Unknown Blacklist Name") if not metadata.has_key("name") else metadata["name"]
-                        filter_description = "" if not metadata.has_key("provider") else metadata["provider"]                            
+                        filter_description = "" if not metadata.has_key("provider") else metadata["provider"]
+                        filter_description = filter_description + " " + _("(version : %s)" % metadata["release-number"])
                         if metadata.has_key("status") and  metadata.has_key("progress") :
+                            if metadata["status"] == 1:
+                                filter_description = "<b>" + _("There is an update available") + "</b>"
                             if metadata["status"] == 2:
                                 filter_description = _("Downloading information, please wait")
                             elif metadata["status"] == 3:
@@ -201,7 +202,7 @@ class ConfigureProxyDialog (gtk.Dialog):
                             elif metadata["status"] == 4:
                                 filter_description = _("Updating blacklist (%s%%)" % metadata["progress"])
 
-                        row[1] = "<b>%s</b>\n   %s" % (filter_name, filter_description)
+                        row[1] = "<b>%s</b>\n   <small>%s</small>" % (filter_name, filter_description)
                         included = True
                         break
                 
@@ -232,6 +233,20 @@ class ConfigureProxyDialog (gtk.Dialog):
 
                 iter = list_store.iter_next(iter)
 
+            selection = self.packaged_blacklist_treeview.get_selection()
+            if selection.count_selected_rows () > 0:
+                self.del_bl_button.set_sensitive(True)
+                model, iter = selection.get_selected()
+                pkg_id = model.get_value (iter, 0)
+                metadata = self.dbus_client.get_pkg_filter_metadata(pkg_id)
+                if metadata.has_key("status") and metadata["status"] == 1 :
+                    self.update_bl_button.set_sensitive(True)
+                else:
+                    self.update_bl_button.set_sensitive(False)
+            else:
+                self.del_bl_button.set_sensitive(False)
+                self.update_bl_button.set_sensitive(False)   
+
             gobject.timeout_add(2000, self.__update_packaged_blacklist_model)
             return False
         except:
@@ -505,7 +520,13 @@ class ConfigureProxyDialog (gtk.Dialog):
 
             model, iter = selection.get_selected()
             if iter:
-                self.selected_packaged_filter_id = model.get_value (iter, 0)
+                pkg_id = model.get_value (iter, 0)
+                self.selected_packaged_filter_id = pkg_id
+                metadata = self.dbus_client.get_pkg_filter_metadata(pkg_id)
+                if metadata.has_key("status") and metadata["status"] == 1 :
+                    self.update_bl_button.set_sensitive(True)
+                else:
+                    self.update_bl_button.set_sensitive(False)
 
                 categories = self.dbus_client.get_pkg_filter_user_categories (self.selected_packaged_filter_id, self.__selected_user_id) 
                 if len (categories) > 0:
@@ -521,6 +542,7 @@ class ConfigureProxyDialog (gtk.Dialog):
                 self.selected_packaged_filter_id = None
         else:
             self.del_bl_button.set_sensitive(False)
+            self.update_bl_button.set_sensitive(False)
             self.selected_packaged_filter_id = None
     
     def __on_packaged_blacklist_categories_toggled (self, cell, path, data=None):
diff --git a/daemon/src/FilterManager.py b/daemon/src/FilterManager.py
index fcd5cae..927b9cb 100644
--- a/daemon/src/FilterManager.py
+++ b/daemon/src/FilterManager.py
@@ -26,6 +26,7 @@
 import gobject
 import gio
 import os
+import time
 import hashlib
 import sys
 import copy
@@ -116,6 +117,7 @@ class FilterManager (gobject.GObject) :
         
         self.custom_filters_db = self.__get_custom_filters_db()
         self.__start_packaged_filters()
+        gobject.timeout_add(5000, self.__update_pkg_checker_timeout)
 
     def stop(self):
         print "Stop Filter Manager"
@@ -367,6 +369,36 @@ class FilterManager (gobject.GObject) :
     def update_pkg_filter(self, pkg_id, new_db):
         pass
 
+    def __update_pkg_checker_timeout(self):
+        reactor.callInThread(self.__update_pkg_checker, self)
+        gobject.timeout_add(5*60*1000, self.__update_pkg_checker_timeout)
+        return False
+
+    def __update_pkg_checker(self, fm):
+        import urllib2
+        
+        for pkg_id in fm.pkg_filters_conf.keys() :
+            try:
+                if fm.pkg_filters_conf[pkg_id]["status"] == PKG_STATUS_READY :
+                    url = fm.pkg_filters_conf[pkg_id]["update_url"]
+                    pkg_info = json.load(urllib2.urlopen(url))
+
+                    orig_t = fm.pkg_filters_conf[pkg_id]["pkg_info"]["metadata"]["orig-timestamp"]
+                    release_n = fm.pkg_filters_conf[pkg_id]["pkg_info"]["metadata"]["release-number"]
+
+                    on_server_orig_t = pkg_info["metadata"]["orig-timestamp"]
+                    on_server_release_n = pkg_info["metadata"]["release-number"]
+
+                    if orig_t == on_server_orig_t and release_n == on_server_release_n :
+                        print "Nothing to update (pkg : %s)!" % pkg_id
+                    else:
+                        print "Seems there is and update (pkg: %s)" % pkg_id
+                        fm.pkg_filters_conf[pkg_id]["status"] = PKG_STATUS_READY_UPDATE_AVAILABLE
+                        threads.blockingCallFromThread(reactor, 
+                                                       fm._save_pkg_filters_conf)
+            except:
+                print "I can't update pkgs info (no network conn??? )"
+        
     def list_pkg_filter(self):
         ret = []
         for x in self.pkg_filters_conf.keys():



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