Index: /trunk/src/KitInstaller.py
===================================================================
--- /trunk/src/KitInstaller.py (revision 59)
+++ /trunk/src/KitInstaller.py (revision 60)
@@ -13,6 +13,6 @@
 import sys
 import gobject
-import threading
 import copy
+#import threading
 
 from util import util, aptutil, xmlutil
@@ -27,7 +27,7 @@
 __license__ = "GNU GPL v3"
 
-gtk.gdk.threads_init()
-
-class KitInstallerGTK(threading.Thread):
+#gtk.gdk.threads_init()
+
+class KitInstallerGTK:#(threading.Thread):
     
     def delete(self, widget, event, data=None):
@@ -50,5 +50,5 @@
          dialog.set_markup("<big><b>%s</b></big>\n\n%s" % (header, msg))
          dialog.realize()
-         dialog.window.set_functions(gtk.gdk.FUNC_MOVE)
+         #dialog.window.set_functions(gtk.gdk.FUNC_MOVE)
          dialog.run()
          dialog.destroy()
@@ -66,7 +66,26 @@
         dialog.set_markup("<big><b>%s</b></big>\n\n%s" % (header, msg))
         dialog.realize()
-        dialog.window.set_functions(gtk.gdk.FUNC_MOVE)
+        #dialog.window.set_functions(gtk.gdk.FUNC_MOVE)
         dialog.run()
         dialog.destroy()
+    
+    def choiceDialog(self, header, msg):
+        dialog = gtk.MessageDialog(parent=self.window,
+                               flags=gtk.DIALOG_MODAL,
+                               type=gtk.MESSAGE_QUESTION,
+                               buttons=gtk.BUTTONS_YES_NO)
+        dialog.set_title("")
+        dialog.set_markup("<big><b>%s</b></big>\n\n%s" % (header, msg))
+        #cdialog.window.set_functions(gtk.gdk.FUNC_MOVE)
+        response = dialog.run()
+    
+        if response == gtk.RESPONSE_YES:
+            dialog.destroy()
+            return True
+        else:
+            dialog.destroy()
+            return False
+            
+        
     #
     # aboutdialog
@@ -213,35 +232,58 @@
     def setupPackageList(self):
         #init progress dialog
-        self.cpbar = util.ProgressBar(self.dialogProgress, self.pbar, self.window)
-        self.cpbar.show()
-        
-        gtk.gdk.threads_enter()
+        #self.cpbar = util.ProgressBar(self.dialogProgress, self.pbar, self.window)
+        #self.cpbar.show()
+        self.dialogProgress.realize()
+        self.dialogProgress.set_transient_for(self.window)
+        self.pbar.set_fraction(0)
+        self.dialogProgress.show()
+        
+        #gtk.gdk.threads_enter()
         self.window.set_sensitive(False)
-        self.cpbar.active()
-        
-        rep = repHandler.rephandle(self.sourcelist, self.tmpDir)
-        result = rep.update()
+        #self.cpbar.active()
+        
+        self.pbar.set_fraction(0.1)
+        while gtk.events_pending():
+                    gtk.main_iteration()
+                    
+        result = self.rep.update()
         
         if not result:
-            pass
+            #TODO: adicionar dialog de erro
             return False
         
-        result = rep.loadPackages()
+        self.pbar.set_fraction(0.5)
+        while gtk.events_pending():
+                    gtk.main_iteration()
+        result = self.rep.loadPackages()
                     
         if not result:
-            pass
+            #TODO: adicionar dialog de erro
             return False
         
-        rep.checkInstalled()
-        
-        #o bug ta aki
-        self.packageList = rep.getPackages()     
+        self.pbar.set_fraction(0.7)
+        while gtk.events_pending():
+                    gtk.main_iteration()
+                    
+        self.rep.checkInstalled()
+        
+        while gtk.events_pending():
+                    gtk.main_iteration()
+        self.pbar.set_fraction(0.8)
+        self.packageList = self.rep.getPackages()   
+        self.storePackages.clear()  
         for pkg in self.packageList:
             self.storePackages.append([pkg['Installed'], pkg['Package'], pkg['Version'], pkg['ShortDesc']])
+            
+                    
         self.treeviewPackages.set_model(self.storePackages)
         self.treeviewPackages.set_search_column(1)        
-        #end bug
-        
-        self.sections = rep.getSections()
+        
+        while gtk.events_pending():
+                    gtk.main_iteration()
+        self.pbar.set_fraction(0.95)
+        
+        self.sections = self.rep.getSections()
+        self.storeSections.clear()
         for stn in self.sections:
             if stn == "all":
@@ -255,10 +297,15 @@
         self.origPkgList = copy.deepcopy(self.packageList)
             
-        gtk.gdk.threads_leave()
-        self.stopthread.set()
-        self.cpbar.close()
+        #gtk.gdk.threads_leave()
+        #self.cpbar.close()
+        self.dialogProgress.hide()
         self.window.set_sensitive(True)
         
         return True
+    
+    def updateRepository(self, widget, data=None):
+        self.rep.clean()
+        self.setupPackageList()
+        
     
     def getInstallRemove(self, widget, data=None):
@@ -266,4 +313,5 @@
         pkgs_rm = []
         cache = ""
+        
         for pkg in self.packageList:
             for opkg in self.origPkgList:
@@ -279,7 +327,71 @@
                                                    pkgs_rm)
         
-        #verificar se o pacote foi instalado
-        
-        #modificar as listas
+        #verificar se os pacotes foram instalados
+        erroInst = ""
+        for pkg in pkgs_add:
+            print aptutil.isInstalled(pkg, False)
+            if not aptutil.isInstalled(pkg, False):
+                if not erroInst:
+                    erroInst += pkg
+                else:
+                    erroInst += ", " + pkg
+                    
+                for val in self.packageList:
+                    if val['Package'] == pkg:
+                        val['Installed'] = False
+                        break
+                    
+                item = self.storePackages.get_iter_first()
+                while ( item != None ):
+                    if self.storePackages.get_value(item, 1,) == pkg:
+                        self.storePackages.set_value(item, 0, False)
+                        break
+                    item = self.storePackages.iter_next(item)
+            else:
+                for val in self.origPkgList:
+                    if val['Package'] == pkg:
+                        val['Installed'] = True
+                        break
+        
+        
+        #TODO: verificar os removidos
+        erroRm = ""
+        for pkg in pkgs_rm:
+            if aptutil.isInstalled(pkg, False):
+                if not erroRm:
+                    erroRm += pkg
+                else:
+                    erroRm += ", " + pkg
+                
+                for val in self.packageList:
+                    if val['Package'] == pkg:
+                        val['Installed'] = True
+                        break
+                    
+                item = self.storePackages.get_iter_first()
+                while ( item != None ):
+                    if self.storePackages.get_value(item, 1,) == pkg:
+                        self.storePackages.set_value(item, 0, True)
+                        break
+                    item = self.storePackages.iter_next(item)
+            else:
+                for val in self.origPkgList:
+                    if val['Package'] == pkg:
+                        val['Installed'] = False
+                        break
+                
+                
+        if erroInst and erroRm:
+            self.errorDialog("Erro", "Erro ao instalar o(s) pacote(s) <b>%s</b> e a remover o(s) pacote(s) <b>%s</b>." 
+                             % erroInst, erroRm)
+        elif erroInst:
+            self.errorDialog("Erro", "Erro ao instalar o(s) pacote(s) <b>%s</b>." % erroInst)
+        elif erroRm:
+            self.errorDialog("Erro", "Erro ao remover o(s) pacote(s) <b>%s</b>." % erroRm)
+        else:
+            self.sucessDialog("Sucesso", "Os pacotes foram instalados/removidos com sucesso.")
+        
+        return True  
+        
         
     def openKit(self, widget, data=None):
@@ -310,42 +422,46 @@
                 else:
                     print "error"
-        elif response == gtk.RESPONSE_CANCEL:
+        else:
             dialog.destroy()
             return
-        else:
-            dialog.destroy()
-            return
         
         dialog.destroy()
         
-        filename = (tmpKitFile[0] +  tmpKitFile[1]).replace(" ", "\ ")
-        print filename
-        print aptutil.pkgInfo(filename, 'Package')
+        filename = (tmpKitFile[0] +  tmpKitFile[1])#.replace(" ", "\ ")
+        
         if aptutil.isInstalled(filename):
             if aptutil.upgradable(filename):
+                upgrade = self.choiceDialog("Actualizar o Kit",
+                                            "O Kit <b>%s</b> jÃ¡ se encontra instalado, no entanto Ã© uma versÃ£o mais antiga. Deseja Actualizar?" 
+                                            % aptutil.pkgInfo(filename, "Package"))
+                
+                if upgrade:
+                    result = aptutil.install(filename)
+                
+                    if result:
+                        self.sucessDialog("Kit actualizado",
+                                          "Kit <b>%s</b> actualizado com sucesso." % aptutil.pkgInfo(filename, "Package"))
+                        return True
+                    else:
+                        self.errorDialog("erro",
+                                         "Erro ao actualizar o Kit <b>%s</b>." % aptutil.pkgInfo(filename, "Package"))
+                        return False
+            else:
+                self.sucessDialog("Kit actualizado",
+                                  "O Kit <b>%s</b> jÃ¡ se encontra na versÃ£o mais recente." % aptutil.pkgInfo(filename, "Package"))
+                return True
+        else:
+            install = self.choiceDialog("Instalar o Kit",
+                                            "Deseja instalar o Kit <b>%s</b>" % aptutil.pkgInfo(filename, "Package"))
+            if install:
                 result = aptutil.install(filename)
-            
                 if result:
-                    self.sucessDialog("pacote actualizado",
-                                      "Kit actualizado com sucesso.")
+                    self.sucessDialog("Kit instalado",
+                                      "O Kit <b>%s</b> foi instalado com sucesso." % aptutil.pkgInfo(filename, "Package"))
                     return True
                 else:
                     self.errorDialog("erro",
-                                     "Erro ao actualizar o Kit.")
+                                     "Erro ao instalar o Kit <b>%s</b>." % aptutil.pkgInfo(filename, "Package"))
                     return False
-            else:
-                self.sucessDialog("pacote actualizado",
-                                  "O Kit jÃ¡ se encontra na versÃ£o mais recente.")
-                return True
-        else:
-            result = aptutil.install(filename)
-            if result:
-                self.sucessDialog("pacote instalado",
-                                  "O Kit foi instalado com sucesso.")
-                return True
-            else:
-                self.errorDialog("erro",
-                                 "Erro ao instalar o Kit.")
-                return False
     #
     # __init__
@@ -353,5 +469,5 @@
     
     def __init__(self):
-        self.stopthread = threading.Event()
+        #gtk.gdk.threads_init()
         
         self.tmpDir = "/tmp/kitsalinex/sourcelist"
@@ -372,4 +488,6 @@
         self.searchPackageList = []
         
+        self.rep = repHandler.rephandle(self.sourcelist, self.tmpDir)
+        
         self.gladefile = "installkits.glade"
         self.wTree = gtk.glade.XML(self.gladefile)
@@ -380,4 +498,5 @@
         self.aboutMenu = self.wTree.get_widget("aboutMenu")
         self.openMenu = self.wTree.get_widget("openMenu")
+        self.updateRepMenu = self.wTree.get_widget("updateRepMenu")
         
         self.buttonAplicar = self.wTree.get_widget("buttonAplicar")
@@ -425,9 +544,11 @@
             self.aboutMenu.connect('activate', self.showAbout)
             self.openMenu.connect('activate', self.openKit)
+            self.updateRepMenu.connect('activate', self.updateRepository)
             
             self.treeviewPackages.connect("cursor-changed", self.rowCickedPackages)
             self.treeviewSections.connect("cursor-changed", self.rowSection)
             
-            threading.Thread(name="self.setupPackageList", target=self.setupPackageList).start()
+            #threading.Thread(name="self.setupPackageList", target=self.setupPackageList).start()
+            self.setupPackageList()
             self.packageWorker = PackageWorker()
             
@@ -440,2 +561,3 @@
     hwg = KitInstallerGTK()
     main()
+    
Index: /trunk/src/installkits.glade
===================================================================
--- /trunk/src/installkits.glade (revision 56)
+++ /trunk/src/installkits.glade (revision 60)
@@ -72,4 +72,39 @@
 
 	  <child>
+	    <widget class="GtkMenuItem" id="opÃ§Ãµes1">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">OpÃ§Ãµes</property>
+	      <property name="use_underline">True</property>
+	      <signal name="activate" handler="on_opÃ§Ãµes1_activate" last_modification_time="Sat, 04 Oct 2008 00:27:56 GMT"/>
+
+	      <child>
+		<widget class="GtkMenu" id="opÃ§Ãµes1_menu">
+
+		  <child>
+		    <widget class="GtkImageMenuItem" id="updateRepMenu">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Actualizar _RepositÃ³rios</property>
+		      <property name="use_underline">True</property>
+		      <signal name="activate" handler="on_menuUpdateRep_activate" last_modification_time="Sat, 04 Oct 2008 00:28:12 GMT"/>
+
+		      <child internal-child="image">
+			<widget class="GtkImage" id="image15">
+			  <property name="visible">True</property>
+			  <property name="stock">gtk-refresh</property>
+			  <property name="icon_size">1</property>
+			  <property name="xalign">0.5</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			</widget>
+		      </child>
+		    </widget>
+		  </child>
+		</widget>
+	      </child>
+	    </widget>
+	  </child>
+
+	  <child>
 	    <widget class="GtkMenuItem" id="menuitem4">
 	      <property name="visible">True</property>
@@ -88,5 +123,5 @@
 
 		      <child internal-child="image">
-			<widget class="GtkImage" id="image11">
+			<widget class="GtkImage" id="image16">
 			  <property name="visible">True</property>
 			  <property name="stock">gtk-about</property>
@@ -230,6 +265,6 @@
 		      <property name="visible">True</property>
 		      <property name="can_focus">True</property>
-		      <property name="hscrollbar_policy">GTK_POLICY_ALWAYS</property>
-		      <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
+		      <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+		      <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
 		      <property name="shadow_type">GTK_SHADOW_IN</property>
 		      <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
@@ -259,6 +294,6 @@
 		      <property name="visible">True</property>
 		      <property name="can_focus">True</property>
-		      <property name="hscrollbar_policy">GTK_POLICY_ALWAYS</property>
-		      <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
+		      <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+		      <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
 		      <property name="shadow_type">GTK_SHADOW_IN</property>
 		      <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
Index: /trunk/src/repositoryhandler/repHandler.py
===================================================================
--- /trunk/src/repositoryhandler/repHandler.py (revision 56)
+++ /trunk/src/repositoryhandler/repHandler.py (revision 60)
@@ -22,6 +22,15 @@
         self._localKits = []
         
-    def update(self):
-        try:     
+    def update(self, deleteFiles=False):
+        try:
+            if deleteFiles:
+                for root, dirs, files in os.walk(self._tmpDir):
+                    for name in files:
+                        filename = os.path.join(root, name)
+                        if os.path.isfile(filename):
+                            os.remove(filename)
+                            
+                util.rmdir(self._tmpDir)
+            
             util.mkdir(self._tmpDir)
             util.mkdir(self._tmpDir + '/partial')
@@ -41,5 +50,20 @@
             return True
         except IOError:
-            print "error\n"
+            print "update: error\n"
+            return False
+    
+    def clean(self):
+        try:
+            for root, dirs, files in os.walk(self._tmpDir):
+                for name in files:
+                    filename = os.path.join(root, name)
+                    if os.path.isfile(filename):
+                        os.remove(filename)
+                            
+            util.rmdir(self._tmpDir)
+            
+            return True
+        except IOError:
+            print "clean: error\n"
             return False
         
@@ -84,5 +108,5 @@
             return True
         except IOError:
-            print "error\n"
+            print "loadPackages: error\n"
             return False
     
Index: /trunk/src/util/aptutil.py
===================================================================
--- /trunk/src/util/aptutil.py (revision 59)
+++ /trunk/src/util/aptutil.py (revision 60)
@@ -73,7 +73,10 @@
         return ""
 
-def isInstalled(package):
-    try:
-        pkg = pkgInfo(package, 'Package')
+def isInstalled(package, file=True):
+    try:
+        if file:
+            pkg = pkgInfo(package, 'Package')
+        else:
+            pkg = package
 
         dpkg_query  = commands.getoutput('dpkg-query --show ' + pkg)
@@ -121,6 +124,8 @@
         return False
 
-def install(package):    
-    dpkg_install = commands.getoutput("gksu 'gdebi -n -q %s'" %(package))
+#TODO: fix white spaces
+def install(package):
+    #dpkg_install = commands.getoutput("gksu 'gdebi -n -q %s'" %(package.replace(" ", "\ ")))
+    dpkg_install = commands.getoutput("gksu 'dpkg -i %s' " %(package.replace(" ", "\ ")))
     if len(dpkg_install.split("\n")) > 1:
         isSuccess = isInstalled(package)
@@ -234,5 +239,5 @@
         print 'usage: python test.py infile.xml'
         sys.exit(-1)
-    print install(args[0])
+    print isInstalled(args[0], False)
 
 if __name__ == '__main__':
