Advertisement
Guest User

Untitled

a guest
Sep 26th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.39 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding=utf-8 -*-
  3. # Semplice Network Manager GTK applet 1.0-alpha1
  4. # Copyright © 2011 Semplice Team
  5.  
  6. import libsmc, ConfigParser, pygtk, gtk, subprocess, gobject, os, sys, dbus, gobject, threading
  7. from dbus.mainloop.glib import DBusGMainLoop
  8. import t9n.library
  9. pygtk.require('2.0')
  10.  
  11. __author__ = "Semplice Team"
  12. __copyright__ = "Copyright © 2011 Semplice Team."
  13. __credits__ = ["Luca «tuxpenguin» B."]
  14. __license__ = "GNU GPL v3"
  15. __version__ = "0.1"
  16. __status__ = "Prototype"
  17.  
  18. #_ = t9n.library.translation_init("semplicenm-applet")
  19.  
  20. # Read the configuration file (at the moment it's only a list of connections).
  21. config = ConfigParser.ConfigParser()
  22. config.read('~/.config/smc/conn.conf')
  23.  
  24.  
  25. class MainGTK:
  26.     def __init__(self): # That's the main part, which starts the main window and the tray icon.
  27.         # Needed to check the key status in the background.
  28.         self.libmodem = libsmc.MobileBroadband()
  29.        
  30.         # The UI
  31.         self.builder = gtk.Builder()
  32.         self.builder.add_from_file("smc.ui")
  33.         # The main window
  34.         self.window = self.builder.get_object("SmcMain")
  35.  
  36.         self.window.connect("delete-event",  self.window.hide_on_delete)
  37.        
  38.         self.menubar_quit = self.builder.get_object("menubar_quit")
  39.         self.menubar_about = self.builder.get_object("menubar_about")
  40.         self.menubar_quit.connect("activate", self.quit)
  41.         self.menubar_about.connect("activate", self.about_window)
  42.        
  43.         self.lb_currentnet = self.builder.get_object("currentnet_label")
  44.         self.cb_connlist = self.builder.get_object("connlist_cbox")
  45.         self.cb_connlist.set_sensitive(False)
  46.  
  47.         self.btn_connect = self.builder.get_object("connect_btn")  
  48.         self.btn_connect.connect("clicked", self.connect)      
  49.         self.btn_connect.set_sensitive(False)
  50.  
  51.         # The tray icon
  52.         self.statusicon = gtk.StatusIcon()
  53.         self.statusicon.set_from_icon_name("network-offline")
  54.         self.statusicon.connect("activate", self.left_click_event)
  55.         self.statusicon.connect("popup-menu", self.right_click_event)
  56.        
  57.         self.modem_check()
  58.        
  59.     # Connect!
  60.     def connect(self, obj):
  61.         print("Clicked!")
  62.        
  63.     def modem_check(self):
  64.         # Check if and how many internet keys are present
  65.         if self.libmodem.search_modems() == 0:
  66.             # If more than one, let the user choose which key the program should use.
  67.             if len(libsmc.modems) > 1:
  68.                 self.internetkey_chooser_dialog()
  69.                 self.libmodem.enable_modem(self.modem_n)
  70.             # Else, enable the first key.
  71.             else:
  72.                 self.modem_n = 0
  73.                 self.libmodem.enable_modem(self.modem_n)
  74.             self.modemstatus = self.libmodem.gsm_inspect(self.modem_n)
  75.             # Get the current network the key is registered to.
  76.             if self.modemstatus['statusn'] == 5:
  77.                 self.lb_currentnet.set_label("%s %s (%s)" % (self.modemstatus['accesstech'], self.modemstatus['carrier'], self.modemstatus['status']))
  78.                 self.statusicon.set_tooltip("Registered on %s. Signal quality: %s" % (self.modemstatus['carrier'], self.modemstatus['quality'], self.modemstatus['status']))
  79.             else:
  80.                 self.lb_currentnet.set_label("%s %s" % (self.modemstatus['accesstech'], self.modemstatus['carrier']))
  81.                 self.statusicon.set_tooltip("Registered on %s. Signal quality: %s" % (self.modemstatus['carrier'], self.modemstatus['quality']))
  82.         # Else, warn the user that there isn't any key.
  83.         else:
  84.             self.modem_n = None
  85.             self.err_nomodem_dialog()
  86.             self.lb_currentnet.set_label("No modem")
  87.  
  88.     # Hide the main window and restore the window.
  89.     def left_click_event(self, obj):
  90.         if self.window.get_visible():
  91.             self.window.hide()
  92.         else:
  93.             self.window.show()
  94.  
  95.     # The right click menu for the applet.
  96.     def right_click_event(self, icon, button, time):
  97.         self.applet_menu = gtk.Menu()
  98.         self.applet_info_btn = gtk.ImageMenuItem(stock_id=gtk.STOCK_QUIT)
  99.         self.applet_info_btn.connect("activate", self.quit)
  100.         self.applet_menu.append(self.applet_info_btn)
  101.         self.applet_menu.show_all()
  102.         self.applet_menu.popup(None, None, gtk.status_icon_position_menu, button, time, self.statusicon)
  103.  
  104.     # The 'no internet key' error dialog.
  105.     def err_nomodem_dialog(self):
  106.         self.about = self.builder.get_object("SmcNoKey")
  107.         self.about.show()
  108.         result = self.about.run()
  109.         self.about.hide()
  110.  
  111.     # This is the dialog which appears when there are multiple internet keys plugged-in.
  112.     def internetkey_chooser_dialog(self):
  113.         self.multikey_dlg = self.builder.get_object("SmcMultiKey")
  114.         self.multikey_dlg_vbox = self.builder.get_object("dialog-vbox2")
  115.         self.cb_modemlist = gtk.combo_box_new_text()
  116.         cm = 0
  117.         for i in libsmc.modems:
  118.             self.cb_modemlist.append_text("%s %s" % (self.libmodem.get_modem_info(cm)['vendor'], self.libmodem.get_modem_info(cm)['model']))
  119.             cm = cm + 1
  120.         self.multikey_dlg_vbox.pack_start(self.cb_modemlist, True)
  121.         self.multikey_dlg_vbox.reorder_child(self.cb_modemlist, 2)
  122.         self.cb_modemlist.show()
  123.         self.multikey_dlg.show()
  124.         result = self.multikey_dlg.run()
  125.         self.multikey_dlg.hide()
  126.         self.modem_n = self.cb_modemlist.get_active()
  127.  
  128.     # Just an about window
  129.     def about_window(self, obj):
  130.         self.about = self.builder.get_object("SmcAbout")
  131.         self.about.show()
  132.         result = self.about.run()
  133.         self.about.hide()
  134.        
  135.     def quit(self, obj):
  136.         sys.exit(0)
  137.        
  138. class DbusLoop(threading.Thread):
  139.     def run(self):
  140.  
  141.         DBusGMainLoop(set_as_default=True)
  142.         loop = gobject.MainLoop()
  143.  
  144.         bus = dbus.SystemBus()
  145.         manager_proxy = bus.get_object('org.freedesktop.ModemManager', '/org/freedesktop/ModemManager')
  146.         manager_iface = dbus.Interface(manager_proxy, dbus_interface='org.freedesktop.ModemManager')
  147.  
  148.         manager_iface.connect_to_signal('DeviceAdded',MainGTK().modem_check)
  149.         manager_iface.connect_to_signal('DeviceRemoved',MainGTK().modem_check)
  150.         loop.run()
  151.  
  152. main = MainGTK()
  153. dbus_loop = DbusLoop()
  154. dbus_loop.start()
  155. main.window.show()
  156. gtk.main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement