Improved user interface
[wifihood] / wifimap / wifiscan.py
1
2 import osso
3
4 import time
5
6 import gps
7
8 import gobject
9
10 class Scanner ( gps.GPSObject ) :
11
12     def __init__ ( self , widget=None , ifname="wlan0" ) :
13         gps.GPSObject.__init__( self , widget )
14         self.osso_context = osso.Context("wifi_scanner", "2.0", False)
15         osso_rpc = osso.Rpc(self.osso_context)
16         scan_out = osso_rpc.rpc_run("org.javiplx.wifiscan", "/org/javiplx/wifiscan", "org.javiplx.wifiscan", "wakeup", wait_reply = True)
17         self._timer = None
18         self.nscan = 0
19         self.nfp = 0
20         self.scanlist = None
21         self.aplist = {}
22
23     def start ( self ) :
24         osso_rpc = osso.Rpc(self.osso_context)
25         scan_out = osso_rpc.rpc_run("org.javiplx.wifiscan", "/org/javiplx/wifiscan", "org.javiplx.wifiscan", "start")
26
27     def stop ( self ) :
28         osso_rpc = osso.Rpc(self.osso_context)
29         scan_out = osso_rpc.rpc_run("org.javiplx.wifiscan", "/org/javiplx/wifiscan", "org.javiplx.wifiscan", "stop")
30
31     def scan ( self ) :
32         osso_rpc = osso.Rpc(self.osso_context)
33         try :
34             scan_out = osso_rpc.rpc_run("org.javiplx.wifiscan", "/org/javiplx/wifiscan", "org.javiplx.wifiscan", "scan", wait_reply = True)
35             self.nscan +=1
36         except Exception , ex :
37             osso.SystemNote(self.osso_context).system_note_infoprint("Exception scanning %s" % ex )
38             return True
39         out_str = ""
40         if self.scanlist :
41             start, end = self.scanlist.get_bounds()
42             self.scanlist.delete( start , end )
43         for net in scan_out.split() :
44             self.nfp += 1
45             items = net.rsplit(":", 1)
46             out_str += " %s %s" % ( items[0] , items[1] )
47             if self.scanlist :
48                 self.scanlist.insert_at_cursor( "%s %5d\n" % ( items[0] , int(items[1]) ) )
49             self.aplist[ items[0] ] = 1
50         self.refresh_infowin()
51         if self._debug :
52         # Use osso or hildon for notes ???
53             osso.SystemNote(self.osso_context).system_note_infoprint("Found %d APs" % len(scan_out) )
54         #    hildon.hildon_banner_show_information( self._parent , "icon_path" , "Found %d APs" % len(scan_out) )
55         else :
56             fd = open( "/home/user/MyDocs/wiscan_gui.info" , 'a' )
57             fd.write( "%s %s%s\n" % ( time.time() , self.gps_info , out_str ) )
58             fd.close()
59             if self.satellites :
60                 loclist = open( "/home/user/MyDocs/location.info" , 'a' )
61                 loclist.write ( "%s\n" % ( self.satellites ,) )
62                 loclist.close()
63             if self.cell_info :
64                 celllist = open( "/home/user/MyDocs/cell.info" , 'a' )
65                 celllist.write ( "%s\n" % ( self.cell_info ,) )
66                 celllist.close()
67
68         return True
69
70     def set_infowin ( self , statuswin , listwin ) :
71         gps.GPSObject.set_infowin( self , statuswin )
72         self.scanlist = listwin
73
74     def refresh_infowin ( self ) :
75         if self.status :
76             self.status.set_text( "%d gps\t%d scan\t%d fp\t%d ap" % ( self.ngps , self.nscan , self.nfp , len(self.aplist.keys()) ) )
77
78
79 gobject.type_register(Scanner)
80