← Back to team overview

pyneighborhood team mailing list archive

[Branch ~pyneighborhood/pyneighborhood/devel] Rev 553: Browsing is now triggered through events. This avoids some nasty import workarounds.

 

------------------------------------------------------------
revno: 553
committer: Stefan J. Betz <info@xxxxxxxxxxxxxxx>
branch nick: pyneighborhood
timestamp: Mon 2011-01-03 22:20:19 +0100
message:
  Browsing is now triggered through events. This avoids some nasty import workarounds.
modified:
  pyNeighborhood
  pyneighborhood/browsing.py
  pyneighborhood/mainwindow.py


--
lp:pyneighborhood
https://code.launchpad.net/~pyneighborhood/pyneighborhood/devel

Your team pyNeighborhood is subscribed to branch lp:pyneighborhood.
To unsubscribe from this branch go to https://code.launchpad.net/~pyneighborhood/pyneighborhood/devel/+edit-subscription
=== modified file 'pyNeighborhood'
--- pyNeighborhood	2010-10-22 12:25:27 +0000
+++ pyNeighborhood	2011-01-03 21:20:19 +0000
@@ -20,11 +20,13 @@
 import gobject
 import gettext
 from pyneighborhood.mainwindow import MainWindow
+from pyneighborhood.browsing import BrowsingThread
 
 gettext.bindtextdomain('pyNeighborhood')
 gettext.textdomain('pyNeighborhood')
 
 # Start pyNeighborhood:
-MainWindow()
+mainwindow = MainWindow()
 gobject.threads_init()
+BrowsingThread(mainwindow).start()
 gtk.main()

=== modified file 'pyneighborhood/browsing.py'
--- pyneighborhood/browsing.py	2010-09-18 18:20:10 +0000
+++ pyneighborhood/browsing.py	2011-01-03 21:20:19 +0000
@@ -24,6 +24,7 @@
 from pyneighborhood.misc import push_notification
 from pyneighborhood.nmblookup import query_masters, query_workgroup, query_workgroup_hosts, query_host
 from pyneighborhood.smbclient import scan_shares
+from pyneighborhood.events import browsingevent
 
 _ = gettext.gettext
 
@@ -38,41 +39,44 @@
         """
         Thread.__init__(self)
         self.mainwindow = mainwindow
+        self.daemon = True
 
     def run(self):
         """
         Browse me...
         """
-        push_notification(_("Starting browsing...\n"))
-        dblock.acquire()
-        cursor = db.cursor()
-        cursor.execute("""UPDATE workgroups SET validated = 0 WHERE manual = 0""")
-        cursor.execute("""UPDATE hosts SET validated = 0 WHERE manual = 0""")
-        cursor.execute("""UPDATE shares SET validated = 0 WHERE manual = 0""")
-        dblock.release()
-        for master in query_masters():
-            push_notification(_("Found Master Browser: %s\n") % master)
-            workgroup, workgroupid = query_workgroup(master)
-            push_notification(_("Master Browser %(master)s is member of workgroup %(workgroup)s\n") % { "master": master, "workgroup": workgroup })
-            for host in query_workgroup_hosts(workgroup):
-                query_host(host)
-        cur = db.cursor()
-        workgroups_result = cur.execute("""SELECT name FROM workgroups WHERE manual = 0""").fetchall()
-        for result in workgroups_result:
-            push_notification(_("Found workgroup: %s\n") % result[0])
-        hosts_result = cur.execute("""SELECT id,name,ip FROM hosts WHERE manual = 0""").fetchall()
-        for result in hosts_result:
-            push_notification(_("Scanning host %s for shares...\n") % result[1] )
-            scan_shares(result[2])
-            shares_result = cur.execute("""SELECT * FROM shares WHERE host = ? AND manual = 0""", (result[0],)).fetchall()
-            for share in shares_result:
-                push_notification(_("Found share: %s\n") % str(share[1]))
-        if self.mainwindow != None:
-            threads_enter()
-            self.mainwindow.sync_treeview()
-            threads_leave()
+        while browsingevent.wait():
+            push_notification(_("Starting browsing...\n"))
             dblock.acquire()
-            cur.execute("""DELETE FROM shares WHERE validated = 0 AND manual = 0""")
-            cur.execute("""DELETE FROM hosts WHERE validated = 0 AND manual = 0""")
-            cur.execute("""DELETE FROM workgroups WHERE validated = 0 AND manual = 0""")
+            cursor = db.cursor()
+            cursor.execute("""UPDATE workgroups SET validated = 0 WHERE manual = 0""")
+            cursor.execute("""UPDATE hosts SET validated = 0 WHERE manual = 0""")
+            cursor.execute("""UPDATE shares SET validated = 0 WHERE manual = 0""")
             dblock.release()
+            for master in query_masters():
+                push_notification(_("Found Master Browser: %s\n") % master)
+                workgroup, workgroupid = query_workgroup(master)
+                push_notification(_("Master Browser %(master)s is member of workgroup %(workgroup)s\n") % { "master": master, "workgroup": workgroup })
+                for host in query_workgroup_hosts(workgroup):
+                    query_host(host)
+            cur = db.cursor()
+            workgroups_result = cur.execute("""SELECT name FROM workgroups WHERE manual = 0""").fetchall()
+            for result in workgroups_result:
+                push_notification(_("Found workgroup: %s\n") % result[0])
+            hosts_result = cur.execute("""SELECT id,name,ip FROM hosts WHERE manual = 0""").fetchall()
+            for result in hosts_result:
+                push_notification(_("Scanning host %s for shares...\n") % result[1] )
+                scan_shares(result[2])
+                shares_result = cur.execute("""SELECT * FROM shares WHERE host = ? AND manual = 0""", (result[0],)).fetchall()
+                for share in shares_result:
+                    push_notification(_("Found share: %s\n") % str(share[1]))
+            if self.mainwindow != None:
+                threads_enter()
+                self.mainwindow.sync_treeview()
+                threads_leave()
+                dblock.acquire()
+                cur.execute("""DELETE FROM shares WHERE validated = 0 AND manual = 0""")
+                cur.execute("""DELETE FROM hosts WHERE validated = 0 AND manual = 0""")
+                cur.execute("""DELETE FROM workgroups WHERE validated = 0 AND manual = 0""")
+                dblock.release()
+            browsingevent.clear()

=== modified file 'pyneighborhood/mainwindow.py'
--- pyneighborhood/mainwindow.py	2010-10-22 12:11:16 +0000
+++ pyneighborhood/mainwindow.py	2011-01-03 21:20:19 +0000
@@ -30,7 +30,7 @@
 # pyNeighborhood Imports
 from pyneighborhood import config, db
 from pyneighborhood.misc import sharepath, events, push_notification, INFO
-from pyneighborhood.browsing import BrowsingThread
+from pyneighborhood.events import browsingevent
 
 _ = gettext.gettext
 
@@ -63,10 +63,7 @@
         Reloades the Browser TreeView
         """
         self.reload_browser_button.set_sensitive(False)
-        if self.browsing_thread.isAlive() == False:
-            self.browsing_thread = BrowsingThread(self)
-            self.browsing_thread.start()
-        self.reload_browser_button.set_sensitive(True)
+        browsingevent.set()
 
     def reload_mounts(self, event=None, widget=None):
         """
@@ -226,6 +223,7 @@
         for workgroup in workgroups:
             workgroup_iter = self.treestore.get_iter_from_string(workgroup[0])
             self.treestore.remove(workgroup_iter)
+        self.reload_browser_button.set_sensitive(True)
 
     def process_events(self):
         """
@@ -336,8 +334,7 @@
         self.host_objects = {}
         # Autoreload Mount's View
         self.reload_mounts()
-        # Autostart first Scanning
-        self.browsing_thread = BrowsingThread(self)
-        self.browsing_thread.start()
         # Start Events Processing
         timeout_add(50,self.process_events)
+        # Start frist Browsing
+        browsingevent.set()