class sms_sender: def __init__(self): self.history = History(db_name=DATABASE) self.contacts = Contacts(db_name=DATABASE) self.builder = gtk.Builder() self.builder.add_from_file("ui.glade") window = self.builder.get_object("window") self.message = self.builder.get_object("text") ### # Menu --> Connect self.builder.get_object("history").connect("activate", self.history_browsing) self.builder.get_object("contact").connect("activate", self.contact_browsing) ### window.show_all() window.connect("destroy", gtk.main_quit) ### cancel = self.builder.get_object("cancel") cancel.connect("clicked", gtk.main_quit) self.builder.get_object("exit").connect("activate", gtk.main_quit) ### ok = self.builder.get_object("ok") ok.connect("clicked", self.ok_clicked) ### self.check_box = self.builder.get_object("history_check") ### self.number = self.builder.get_object("number") self.number.connect("changed", self.on_number_changed) # Počítání znaků self.charcounter = self.builder.get_object("charcounter") self.message.get_buffer().connect("changed", self.on_message_changed) # Doplňování self.completion = gtk.EntryCompletion() self.store = gtk.TreeStore(str, str) self.completion.set_model(self.store) # Model creating self.completion.set_text_column(0) name_cell = gtk.CellRendererText() self.completion.pack_start(name_cell) self.completion.add_attribute(name_cell, 'text', 1) self.number.set_completion(self.completion) # About dialog self.about_dialog = self.builder.get_object("aboutdialog") self.builder.get_object("about").connect("activate", self.on_about_activate) # Progress dialog self.progress_dialog = self.builder.get_object("progressdialog") self.progress_ok = self.builder.get_object("progressok") self.progress_ok.connect("clicked", self.on_progressok_clicked) self.progress_bar = self.builder.get_object("progressbar") #gtkmainloop gtk.main() def send(self, target, what): test = 0 ##Commend next row for production use test = 1 if test == 1: return True print "Odesílám %s do %d" % (what, target) self.progress_dialog.hide() self.progress_dialog.show() self.progress_ok.set_sensitive(False) self.progress_bar.set_fraction(0.33) self.progress_bar.set_text("Kontaktuji web") timestamp = int(time.time()) data = { 'timestamp' : timestamp, 'action' : 'send', 'sendingProfile1' : 11, 'sendingProfile2' : 20, 'sendingProfile3' : 32, 'textsms' : what, 'cislo-prijemce' : target } data = urllib.urlencode(data) print('http://www.poslatsms.cz/', data) try: req = urllib2.Request('http://www.poslatsms.cz/', data) self.progress_bar.set_fraction(0.66) self.progress_bar.set_text("Odesílám data") response = urllib2.urlopen(req) the_page = str(response.read()) except urllib2.error as e: print "error", e self.progress_bar.hide() print the_page if 'SMS zprávy přijaty k odeslání!' in the_page: self.progress_bar.set_text("Hotovo") self.progress_ok.set_sensitive(True) self.progress_bar.set_fraction(1.00) return True return False def on_message_changed(self, model): text = self.message.get_buffer().get_text(self.message.get_buffer().get_start_iter(), self.message.get_buffer().get_end_iter()) chars = len(text) colour = "darkgreen" if chars > 625: self.message.get_buffer().set_text(text[:625]) self.alert(self.message, "Překročena maximální délka zprávy!") text = self.message.get_buffer().get_text(self.message.get_buffer().get_start_iter(), self.message.get_buffer().get_end_iter()) chars = len(text) colour = "red" label = "Napsáno %d/125" % (chars % 125) if chars > 125: label += "Počet zpráv %d/5" % (((chars - 1) / 125) + 1) preformat = '<span foreground="%s">' % colour postformat= '</span>' label = preformat + label + postformat self.charcounter.set_markup(label) def on_number_changed(self, model): cislo = True try: text = int(self.number.get_text()) except ValueError: cislo = False self.store.clear() self.update_model(self.store, cislo) def update_model(self, model, number): #GET FROM CONTACTS try: for i in self.contacts.list_all(): if number: model.append(None, [i[0], i[1]]) else: model.append(None, [i[1], i[0]]) except TypeError: print "No contacts stored" #GET FROM HISTORY try: for i in self.history.disctinct_contacts(): model.append(None, [i[0], ""]) except TypeError: print "History doesnt contain \"non-contact\" numbers" return model def info(self, msg): dialog = gtk.MessageDialog(None, 0, gtk.MESSAGE_INFO, gtk.BUTTONS_OK, msg) choice = dialog.run() if choice != None: dialog.hide() def alert(self, what, msg): #call alert from "what" with message "msg" dialog = gtk.MessageDialog(None, 0, gtk.MESSAGE_WARNING, gtk.BUTTONS_OK, msg) choice = dialog.run() if choice != None: dialog.hide() if what: what.grab_focus() def on_about_activate(self, widget): self.about_dialog.run() self.about_dialog.hide() def history_browsing(self, widget): self.history_window = History_UI(parent=self) self.history_window.builder.get_object("history_dialog").show() if self.history_window.result: self.number.set_text(str(self.history_window.result[0])) self.message.get_buffer().set_text(self.history_window.result[1]) def contact_browsing(self, widget): self.contact_window = Contacts_UI(parent=self) def ok_clicked(self, widget): if isInteger(self.number.get_text()): cislo = int(self.number.get_text()) if (len(self.number.get_text()) != 9): self.alert(self.nubmer, "Číslo příjemce není 9 místné číslo") return 1 else: cislo = self.contacts.get_num(self.number.get_text()) if cislo == None: self.alert(self.number, "Uvedený kontakt nebyl nalezen") return 1 text = self.message.get_buffer().get_text(self.message.get_buffer().get_start_iter(), self.message.get_buffer().get_end_iter()) if (text == ""): self.alert(self.message, "Nelze odeslat prázdnou zprávu!") return 1 while text <> "": if not(self.send(cislo, text[:125])): self.alert(None, "Chyba při odesílání! Změna enginu poskytovatele?") text = text[125:] else: # ukládání do historie if (self.check_box.get_active()): self.history.add(cislo, text[:125]) text = text[125:] self.message.get_buffer().set_text("") self.number.set_text("") def on_progressok_clicked(self,widget): self.progress_dialog.hide()