]> git.meshlink.io Git - catta/blobdiff - avahi-python/avahi-discover.in
add GTK properties
[catta] / avahi-python / avahi-discover.in
index 00a56023cd1712921648915a7337aa882491ffd1..bb02dcd60406f18bc5a19a4b3579e1629b996be6 100755 (executable)
@@ -24,11 +24,16 @@ import os, sys
 try:
     import avahi, gtk, gobject, dbus, avahi.ServiceTypeDatabase
     from avahi.SimpleGladeApp import SimpleGladeApp
-except ImportError:
-    print "Sorry, to use this tool you need to install Avahi, pygtk and python-dbus."
+except ImportError, e:
+    print "Sorry, to use this tool you need to install Avahi, pygtk and python-dbus.\n Error: %s" % e
     sys.exit(1)
 
+
+## !!NOTE!! ##
+# It's really important to do this, else you won't see any events
+##
 try:
+    from dbus.dbus_bindings import DBusException
     import dbus.glib
 except ImportError, e:
     pass
@@ -36,6 +41,14 @@ except ImportError, e:
 service_type_browsers = {}
 service_browsers = {}
 
+def error_msg(msg):
+    d = gtk.MessageDialog(parent=None, flags=gtk.DIALOG_MODAL,
+                          type=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK)
+    d.set_markup(msg)
+    d.show_all()
+    d.run()
+    d.destroy()
+
 glade_dir = "@interfacesdir@"
 
 service_type_db = avahi.ServiceTypeDatabase.ServiceTypeDatabase()
@@ -43,6 +56,7 @@ service_type_db = avahi.ServiceTypeDatabase.ServiceTypeDatabase()
 class Main_window(SimpleGladeApp):
     def __init__(self, path="avahi-discover.glade", root="main_window", domain=None, **kwargs):
         path = os.path.join(glade_dir, path)
+        gtk.window_set_default_icon_name("gnome-networktool")
         SimpleGladeApp.__init__(self, path, root, domain, **kwargs)
 
     def on_tree_view_cursor_changed(self, widget, *args):
@@ -54,19 +68,24 @@ class Main_window(SimpleGladeApp):
         #Asynchronous resolving
         self.server.ResolveService( int(interface), int(protocol), name, stype, domain, avahi.PROTO_UNSPEC, dbus.UInt32(0), reply_handler=self.service_resolved, error_handler=self.print_error)
 
-
     def protoname(self,protocol):
         if protocol == avahi.PROTO_INET:
             return "IPv4"
         if protocol == avahi.PROTO_INET6:
             return "IPv6"
-            
+        return "n/a"
             
     def siocgifname(self, interface):
         if interface <= 0:
-            return "any"
+            return "n/a"
         else:
             return self.server.GetNetworkInterfaceNameByIndex(interface)
+
+    def get_interface_name(self, interface, protocol):
+        if interface == avahi.IF_UNSPEC and protocol == avahi.PROTO_UNSPEC:
+            return "Wide Area"
+        else:
+            return str(self.siocgifname(interface)) + " " + str(self.protoname(protocol))
                         
     def service_resolved(self, interface, protocol, name, stype, domain, host, aprotocol, address, port, txt, flags):
         print "Service data for service '%s' of type '%s' in domain '%s' on %i.%i:" % (name, stype, domain, interface, protocol)
@@ -91,7 +110,10 @@ class Main_window(SimpleGladeApp):
     def new_service(self, interface, protocol, name, stype, domain, flags):
         print "Found service '%s' of type '%s' in domain '%s' on %i.%i." % (name, stype, domain, interface, protocol)
         if self.zc_ifaces.has_key((interface,protocol)) == False:
-            self.zc_ifaces[(interface,protocol)] = self.insert_row(self.treemodel, None, str(self.siocgifname(interface))+" "+str(self.protoname(protocol)),None,interface,protocol,None,domain)
+
+            ifn = self.get_interface_name(interface, protocol)
+            
+            self.zc_ifaces[(interface,protocol)] = self.insert_row(self.treemodel, None, ifn, None,interface,protocol,None,domain)
         if self.zc_domains.has_key((interface,protocol,domain)) == False:
             self.zc_domains[(interface,protocol,domain)] = self.insert_row(self.treemodel, self.zc_ifaces[(interface,protocol)], domain,None,interface,protocol,None,domain)
         if self.zc_types.has_key((interface,protocol,stype,domain)) == False:
@@ -102,7 +124,6 @@ class Main_window(SimpleGladeApp):
         # expand the tree of this path
         self.tree_view.expand_to_path(self.treemodel.get_path(treeiter))
 
-
     def remove_service(self, interface, protocol, name, stype, domain, flags):
         print "Service '%s' of type '%s' in domain '%s' on %i.%i disappeared." % (name, stype, domain, interface, protocol)
         self.info_label.set_markup("")
@@ -125,7 +146,6 @@ class Main_window(SimpleGladeApp):
                     parent = self.treemodel.iter_parent(treeiter)
                     self.treemodel.remove(treeiter)
                     del self.zc_ifaces[(interface,protocol)]
-
  
     def new_service_type(self, interface, protocol, stype, domain, flags):
         global service_browsers
@@ -151,8 +171,14 @@ class Main_window(SimpleGladeApp):
 
         if self.stype is None:
             print "Browsing domain '%s' on %i.%i ..." % (domain, interface, protocol)
-        
-            b = dbus.Interface(self.bus.get_object(avahi.DBUS_NAME, self.server.ServiceTypeBrowserNew(interface, protocol, domain, dbus.UInt32(0))),  avahi.DBUS_INTERFACE_SERVICE_TYPE_BROWSER)
+
+            try:
+                b = dbus.Interface(self.bus.get_object(avahi.DBUS_NAME, self.server.ServiceTypeBrowserNew(interface, protocol, domain, dbus.UInt32(0))),  avahi.DBUS_INTERFACE_SERVICE_TYPE_BROWSER)
+            except DBusException, e:
+                print e
+                error_msg("You should check that the avahi daemon is running.\n\nError : %s" % e)
+                sys.exit(0)
+                
             b.connect_to_signal('ItemNew', self.new_service_type)
 
             service_type_browsers[(interface, protocol, domain)] = b
@@ -161,7 +187,8 @@ class Main_window(SimpleGladeApp):
 
     def new_domain(self,interface, protocol, domain, flags):
         if self.zc_ifaces.has_key((interface,protocol)) == False:
-            self.zc_ifaces[(interface,protocol)] = self.insert_row(self.treemodel, None, str(self.siocgifname(interface))+" "+str(self.protoname(protocol)),None,interface,protocol,None,domain)
+            ifn = self.get_interface_name(interface, protocol)
+            self.zc_ifaces[(interface,protocol)] = self.insert_row(self.treemodel, None, ifn,None,interface,protocol,None,domain)
         if self.zc_domains.has_key((interface,protocol,domain)) == False:
             self.zc_domains[(interface,protocol,domain)] = self.insert_row(self.treemodel, self.zc_ifaces[(interface,protocol)], domain,None,interface,protocol,None,domain)
         if domain != "local":