#!/usr/bin/env python # -*- coding: utf-8 -*- # Little SMS-Application # Was a project to learn and could be better # Author: Vinzenz Hersche # This code has GPL 2 as license import gtk import dbus import sys class sms: currentsmsarrayindex = 0 def dbusInit(self): bus = dbus.SystemBus() try: gsm = bus.get_object('org.freesmartphone.ogsmd', '/org/freesmartphone/GSM/Device') self.sim = dbus.Interface(gsm,'org.freesmartphone.GSM.SIM') if(self.sim.GetSimReady()==1): # sim is ready self.refreshsmsnr() else: self.window.add(gtk.Label("simcard is still not ready, exit")) self.window.show_all() sys.exit("simcard is still not ready, exit") except: errorlabel = gtk.Label("framework doens't work, close the programm") self.window.add(errorlabel) self.window.show_all() #sys.exit("frameworkd doesn't work") def initSMSList(self): try: self.sim.RetrieveMessagebook('read') self.smsList = gtk.ListStore(int, str, str, str, str) for result in self.sim.RetrieveMessagebook('unread'): self.smsList.append([result[0], result[1], result[2], result[3], result[4]]) for result in self.sim.RetrieveMessagebook('read'): self.smsList.append([result[0], result[1], result[2], result[3], result[4]]) except Exception as error: print error #must be fixed count = 1 self.smsList = [] # +2 isn't clean.. :s while count < self.lastsms+2: try: self.smsList.append(self.sim.RetrieveMessage(count)) except Exception as error: print error count += 1 def refreshsmsnr(self): self.smsinfo = self.sim.GetMessagebookInfo() self.firstsms = self.smsinfo['first'] self.usedsms = self.smsinfo['used'] self.lastsms = self.smsinfo['last'] def refreshLabels(self): self.absender.set_text(self.smsList[self.currentsmsarrayindex][2]) self.text.set_text(self.smsList[self.currentsmsarrayindex][3]) def forward(self, widget, data=None): if (len(self.smsList)-1) == self.currentsmsarrayindex: self.currentsmsarrayindex = 0 else: self.currentsmsarrayindex += 1 self.refreshLabels() def backward(self, widget, data=None): if self.currentsmsarrayindex == 0: self.currentsmsarrayindex = len(self.smsList)-1 else: self.currentsmsarrayindex -= 1 self.refreshLabels() def deletesmsfromlist(self, widgets): i = self.listcontainer[self.tree.get_selection().get_selected()[1]][2] self.smsList.pop(i) self.listcontainer.remove(self.tree.get_selection().get_selected()[1]) self.sim.DeleteMessage(i+1) self.refreshsmsnr() self.refreshLabels() def deletesmsfromsingle(self, widgets): self.smsmList.pop(self.currentsmsarrayindex) self.sim.DeleteMessage(self.currentsmsarrayindex) self.refreshsmsnr() self.refreshLabels() def mksinglesmsgui(self): self.absender = gtk.Label(self.smsList[self.currentsmsarrayindex][2]) self.text = gtk.Label(self.smsList[self.currentsmsarrayindex][3]) self.text.set_line_wrap(True) scrolltext = gtk.ScrolledWindow() scrolltext.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) scrolltext.add_with_viewport(self.text) last = gtk.Button('Last') last.connect("clicked", self.backward) next = gtk.Button('Next') next.connect("clicked", self.forward) buttonBox = gtk.HButtonBox() #delete = gtk.Button('Delete') buttonBox.pack_start(last, True, 0) #buttonBox.pack_start(delete, True, 0) buttonBox.pack_start(next, True, 0) #delete.connect("clicked", self.sim.DeleteMessage(self.currentsmsarrayindex)) vbox = gtk.VBox(True, 0) vbox.pack_start(self.absender) vbox.pack_start(scrolltext, True, True, 10) vbox.pack_start(buttonBox, False, False, 0) return vbox def doubleclicksms(self, treeview, two, tree): self.currentsmsarrayindex = self.smsList[treeview.get_selection().get_selected()[1]][0]-1 self.refreshLabels() self.tabs.set_current_page(1) self.tabs.next_page() def mksmslistgui(self): self.smsList count = 0 self.tree = gtk.TreeView(self.smsList) self.tree.connect("row-activated", self.doubleclicksms) nrcolumn = gtk.TreeViewColumn('Nr') #timecolumn = gtk.TreeViewColumn('Timestamp') textcolumn = gtk.TreeViewColumn('Text') nrcolumn.set_sort_column_id(0) nrcell = gtk.CellRendererText() #timecell = gtk.CellRendererText() textcell = gtk.CellRendererText() textcell.set_property('wrap-width' , 200) nrcolumn.pack_start(nrcell, False) #timecolumn.pack_start(timecell, True) textcolumn.pack_start(textcell, True) nrcolumn.set_attributes(nrcell, text=2) #timecolumn.set_attributes(timecell, text=3) textcolumn.set_attributes(textcell, text=3) nrcolumn.set_sort_column_id(0) textcolumn.set_sort_column_id(1) #timecolumn.set_sort_column_id(1) self.tree.append_column(nrcolumn) #self.tree.append_column(timecolumn) self.tree.append_column(textcolumn) scroll = gtk.ScrolledWindow() scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) scroll.add_with_viewport(self.tree) buttonBox = gtk.HButtonBox() delete = gtk.Button('Delete') delete.connect("clicked", self.deletesmsfromlist) buttonBox.pack_start(delete) allBox = gtk.VBox(False, 0) allBox.pack_start(scroll, True, True, 10) allBox.pack_start(buttonBox, False, False, 0) return allBox def mkwindow(self): self.window = gtk.Window() self.window.connect("destroy", lambda wid: gtk.main_quit()) self.window.set_title("SMS-Reader") def smsListGuiTest(self): self.tabs = gtk.Notebook() self.tabs.insert_page(self.mksmslistgui(), gtk.Label("List"), 1) self.tabs.insert_page(self.mksinglesmsgui(), gtk.Label("Einzeln"), 2) self.window.add(self.tabs) def __init__(self): self.mkwindow() self.dbusInit() self.initSMSList() self.smsListGuiTest() self.window.show_all() gtk.main() test = sms() #test.main()