From 6e2c210bfc01f87b44ba9d067c648cf6c5401573 Mon Sep 17 00:00:00 2001
From: Chris Couzens <ccouzens@gmail.com>
Date: Tue, 23 Mar 2010 21:34:58 +0000
Subject: [PATCH 2/2] added icons to avahi-discover

the icon database is currently part of avahi-discover
 - hopefully, in the future it will be moved to something like service-type-database

lots of changes to readability of the form:
 - if self.zc_ifaces.has_key((interface,protocol)) == False:
 + if not (interface,protocol) in self.zc_ifaces:

lots of changes to readability of the form:
 - service_browsers[(interface, protocol, stype, domain)] = b
 + service_browsers[interface, protocol, stype, domain] = b
---
 avahi-discover-standalone/avahi-discover.ui   |    8 ++
 avahi-python/avahi-discover/avahi-discover.in |   88 +++++++++++++++++--------
 2 files changed, 69 insertions(+), 27 deletions(-)

diff --git a/avahi-discover-standalone/avahi-discover.ui b/avahi-discover-standalone/avahi-discover.ui
index 5e6cd46..71984b6 100644
--- a/avahi-discover-standalone/avahi-discover.ui
+++ b/avahi-discover-standalone/avahi-discover.ui
@@ -16,6 +16,8 @@
       <column type="gchararray"/>
       <!-- column-name domain -->
       <column type="gchararray"/>
+      <!-- column-name icon_name -->
+      <column type="gchararray"/>
     </columns>
   </object>
   <object class="GtkWindow" id="main_window">
@@ -48,6 +50,12 @@
                     <property name="resizable">True</property>
                     <property name="expand">True</property>
                     <child>
+                      <object class="GtkCellRendererPixbuf" id="cellrendererpixbuf1"/>
+                      <attributes>
+                        <attribute name="icon-name">6</attribute>
+                      </attributes>
+                    </child>
+                    <child>
                       <object class="GtkCellRendererText" id="cellrenderertext1"/>
                       <attributes>
                         <attribute name="text">0</attribute>
diff --git a/avahi-python/avahi-discover/avahi-discover.in b/avahi-python/avahi-discover/avahi-discover.in
index 8941751..d9fec57 100755
--- a/avahi-python/avahi-discover/avahi-discover.in
+++ b/avahi-python/avahi-discover/avahi-discover.in
@@ -41,6 +41,40 @@ except ImportError, e:
 service_type_browsers = {}
 service_browsers = {}
 
+service_icons = {
+    '_http._tcp': 'web-browser',
+    '_ssh._tcp': 'terminal',
+    '_sftp-ssh._tcp': 'gnome-fs-ssh',
+    '_ftp._tcp': 'gnome-fs-ftp',
+    '_smb._tcp': 'gnome-fs-smb',
+    '_webdav._tcp': 'gnome-fs-share',
+    '_pdl-datastream._tcp': 'stock_network-printer', # could also use printer-remote
+    '_printer._tcp': 'stock_network-printer',
+    '_ipp._tcp': 'stock_network-printer',
+    '_daap._tcp': 'rhythmbox',
+    '_dacp._tcp': 'rhythmbox',
+    '_remote-jukebox._tcp': 'rhythmbox',
+    '_rfb._tcp': 'vinagre',
+    '_afpovertcp._tcp': 'gnome-fs-share',
+    '_presence._tcp': 'empathy',
+    #'_workstation._tcp': None,
+    '_odisk._tcp': 'drive-optical',
+    '_udisks-ssh._tcp': 'palimpsest',
+    '_eppc._tcp': 'apple-red',
+    '_touch-able._tcp': 'multimedia-player-ipod',
+    '_home-sharing._tcp': 'stock_home',
+    '_papers._tcp': 'gnome-mime-application-pdf',
+    '_net-assistant._udp': 'stock_web-support',
+    '_adisk._tcp': 'stock_timer',
+    '_pgpkey-hkp._tcp': 'stock_keyring',
+    '_pulse-sink._tcp': 'audio-card',
+    '_pulse-source._tcp': 'audio-input-microphone',
+    '_pulse-server._tcp': 'stock_line_in',
+    '_bzr._tcp': 'bzr-icon-64',
+    '_iTouch._tcp': 'multimedia-player-ipod',
+    '_couchdb_location._tcp': 'stock_database',
+}
+
 def error_msg(msg):
     d = gtk.MessageDialog(parent=None, flags=gtk.DIALOG_MODAL,
                           type=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK)
@@ -117,43 +151,43 @@ class Main_window:
             
     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:
+        if not (interface,protocol) in self.zc_ifaces:
 
             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:
-            thisDomain = self.zc_domains[(interface,protocol,domain)]
-            self.zc_types[(interface,protocol,stype,domain)] = self.insert_row(self.treemodel, thisDomain, self.lookup_type(stype), name, interface,None,None,None)
-        treeiter = self.insert_row(self.treemodel,self.zc_types[(interface,protocol,stype,domain)], name, name, interface,protocol,stype,domain)
-        self.services_browsed[(interface, protocol, name, stype, domain)] = treeiter
+            self.zc_ifaces[interface,protocol] = self.insert_row(self.treemodel, None, ifn, None,interface,protocol,None,domain,'network-wired')
+        if not (interface,protocol,domain) in self.zc_domains:
+            self.zc_domains[interface,protocol,domain] = self.insert_row(self.treemodel, self.zc_ifaces[interface,protocol], domain,None,interface,protocol,None,domain,None)
+        if not (interface,protocol,stype,domain) in self.zc_types:
+            thisDomain = self.zc_domains[interface,protocol,domain]
+            self.zc_types[interface,protocol,stype,domain] = self.insert_row(self.treemodel, thisDomain, self.lookup_type(stype), name, interface,None,None,None,service_icons.get(stype,'stock_unknown'))
+        treeiter = self.insert_row(self.treemodel,self.zc_types[interface,protocol,stype,domain], name, name, interface,protocol,stype,domain,service_icons.get(stype,'stock_unknown'))
+        self.services_browsed[interface, protocol, name, stype, domain] = treeiter
         # 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("")
-        treeiter=self.services_browsed[(interface, protocol, name, stype, domain)]
+        treeiter=self.services_browsed[interface, protocol, name, stype, domain]
         parent = self.treemodel.iter_parent(treeiter)
         self.treemodel.remove(treeiter)
-        del self.services_browsed[(interface, protocol, name, stype, domain)]
+        del self.services_browsed[interface, protocol, name, stype, domain]
         if self.treemodel.iter_has_child(parent) == False:
-            treeiter=self.zc_types[(interface,protocol,stype,domain)]
+            treeiter=self.zc_types[interface,protocol,stype,domain]
             parent = self.treemodel.iter_parent(treeiter)
             self.treemodel.remove(treeiter)
-            del self.zc_types[(interface,protocol,stype,domain)]
+            del self.zc_types[interface,protocol,stype,domain]
             if self.treemodel.iter_has_child(parent) == False:
-                treeiter=self.zc_domains[(interface,protocol,domain)]
+                treeiter=self.zc_domains[interface,protocol,domain]
                 parent = self.treemodel.iter_parent(treeiter)
                 self.treemodel.remove(treeiter)
-                del self.zc_domains[(interface,protocol,domain)]
+                del self.zc_domains[interface,protocol,domain]
                 if self.treemodel.iter_has_child(parent) == False:
-                    treeiter=self.zc_ifaces[(interface,protocol)]
+                    treeiter=self.zc_ifaces[interface,protocol]
                     parent = self.treemodel.iter_parent(treeiter)
                     self.treemodel.remove(treeiter)
-                    del self.zc_ifaces[(interface,protocol)]
+                    del self.zc_ifaces[interface,protocol]
  
     def new_service_type(self, interface, protocol, stype, domain, flags):
         global service_browsers
@@ -168,13 +202,13 @@ class Main_window:
         b.connect_to_signal('ItemNew', self.new_service)
         b.connect_to_signal('ItemRemove', self.remove_service)
 
-        service_browsers[(interface, protocol, stype, domain)] = b
+        service_browsers[interface, protocol, stype, domain] = b
 
     def browse_domain(self, interface, protocol, domain):
         global service_type_browsers
 
         # Are we already browsing this domain?
-        if service_type_browsers.has_key((interface, protocol, domain)):
+        if (interface, protocol, domain) in service_type_browsers:
             return
 
         if self.stype is None:
@@ -184,16 +218,16 @@ class Main_window:
                 
             b.connect_to_signal('ItemNew', self.new_service_type)
 
-            service_type_browsers[(interface, protocol, domain)] = b
+            service_type_browsers[interface, protocol, domain] = b
         else:
             new_service_type(interface, protocol, stype, domain)
 
     def new_domain(self,interface, protocol, domain, flags):
-        if self.zc_ifaces.has_key((interface,protocol)) == False:
+        if not (interface,protocol) in self.zc_ifaces:
             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)
+            self.zc_ifaces[interface,protocol] = self.insert_row(self.treemodel, None, ifn,None,interface,protocol,None,domain,'network-wired')
+        if not (interface,protocol,domain) in self.zc_domains:
+            self.zc_domains[interface,protocol,domain] = self.insert_row(self.treemodel, self.zc_ifaces[interface,protocol], domain,None,interface,protocol,None,domain,None)
         if domain != "local":
             self.browse_domain(interface, protocol, domain)
 
@@ -221,10 +255,10 @@ class Main_window:
         infos = "<b>Service Type:</b> %s\n<b>Service Name:</b> %s\n<b>Domain Name:</b> %s\n<b>Interface:</b> %s %s\n<b>Address:</b> %s/%s:%i\n%s" % (stype, name, domain, self.siocgifname(interface), self.protoname(protocol), host, address, port, txts.strip())
         self.info_label.set_markup(infos)
 
-    def insert_row(self, model,parent,
-                   content, name, interface,protocol,stype,domain):
+    def insert_row(self, model, parent,
+                   content, name, interface,protocol,stype,domain,icon_name):
         myiter=model.insert_after(parent,None)
-        model.set(myiter,0,content,1,name,2,interface,3,protocol,4,stype,5,domain)
+        model.set(myiter,0,content,1,name,2,interface,3,protocol,4,stype,5,domain,6,icon_name)
         return myiter
 
     def new(self, domain):
-- 
1.7.0

