diff --git a/db.py b/db.py index 4477ada..0a2c46c 100755 --- a/db.py +++ b/db.py @@ -19,13 +19,14 @@ except sqlite3.Error as error: def create_transmissions_table(): scheme = """ CREATE TABLE IF NOT EXISTS transmissions ( - date TEXT NOT NULL, - author TEXT NOT NULL, - title TEXT NOT NULL, - transmission_text TEXT NOT NULL, - timeslots TEXT NOT NULL, - transmission_order INT NOT NULL, - play BOOLEAN NOT NULL + uid TEXT NOT NULL UNIQUE, + date TEXT, + author TEXT, + title TEXT, + transmission_text TEXT, + timeslots TEXT, + transmission_order INT, + play BOOLEAN ); """ if cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='transmissions';").fetchall() == []: @@ -33,7 +34,8 @@ def create_transmissions_table(): cursor.execute(scheme) log.info("Successfully created database transmissions") except sqlite3.Error as error: - log.critical("Couldn't create transmissions table: ", error) + log.critical("Couldn't create transmissions table") + log.critical(error) exit(1) else: log.debug('DB transmissions exists, not creating.') @@ -41,16 +43,24 @@ def create_transmissions_table(): def get_transmissions(date=None, timeslot=None): return cursor.execute("SELECT * FROM transmissions").fetchall() -def create_transmission(date, author, title, transmission_text, timeslots, transmission_order, play=True): - command=""" - INSERT INTO transmissions VALUES(?, ?, ?, ?, ?, %d, %d); - """%(transmission_order, (1 if play else 0)) +def add_transmission(uid): + command="INSERT INTO transmissions(uid, play) VALUES(?, 0)" try: - cursor.execute(command, (date, author, title, transmission_text, timeslots)) + cursor.execute(command, (uid,)) sqliteConnection.commit() - log.debug("Created a transmission with date %s, author %s, timeslots %s"%(date, author, timeslots)) + log.debug("Created a transmission uid %s"%(uid)) except sqlite3.Error as error: - log.error("Couldn't create a transmission with date %s, author %s, timeslots %s"%(date, author, bin(timeslots))) + log.error("Couldn't create a transmission with uid: %s"%(uid)) + log.error(error) + +def edit_transmission(uid, date, author, title, transmission_text, timeslots, transmission_order, play): + command="UPDATE transmissions set date=?, author=?, title=?, transmission_text=?, timeslots=?, transmission_order=?, play=? WHERE uid=?" + try: + cursor.execute(command, date, author, title, transmission_text, timeslots, transmission_order, play, uid) + sqliteConnection.commit() + log.debug("Updated a transmission with uid %s (date %s, author %s)"%(uid, date, author)) + except sqlite3.Error as error: + log.error("Couldn't create a transmission with uid %s (date %s, author %s)"%uid, (date, author)) log.error(error) diff --git a/main.py b/main.py index e1a37d6..de6846b 100755 --- a/main.py +++ b/main.py @@ -4,6 +4,8 @@ import gi import config import logging from datetime import datetime +from random import choice +from string import ascii_lowercase, digits gi.require_version("Gtk", "3.0") from gi.repository import Gtk @@ -63,12 +65,8 @@ class MainWindow(Gtk.Window): self.transmission_list = Gtk.ListBox() self.transmission_list.connect("row-activated", self.on_picked_transmission) - transmissions = db.get_transmissions() - for trx in transmissions: - trxID = "%s %s %s" % (trx[0], trx[2], trx[1]) - label = Gtk.Label() - label.set_text("%s" % trxID) - self.transmission_list.add(label) + self.transmissions = None + self.update_transmission_list() self.add_transmission_button = Gtk.Button(label="Add transmission") self.add_transmission_button.connect("clicked", self.on_add_transmission) @@ -158,15 +156,7 @@ class MainWindow(Gtk.Window): self.clear_save_box.pack_start(self.clear_button, True, True, 0) self.clear_save_box.pack_start(self.save_button, True, True, 0) - def on_picked_transmission(self, row, user_data): - log.debug("row %i activated" % user_data.get_index()) - - def on_add_transmission(self, user_data): - log.debug("new transmission %s"%(datetime.now().isoformat())) - - def on_delete_transmission(self, user_data): - log.debug("transmission %s deleted" % self.transmission_list.get_selected_row().get_index()) - +############################## Helper functions ############################# # The save button should be greyed out until all the data is input def update_save_button(self, user_data): messageBuffer = self.message.get_buffer() @@ -191,18 +181,44 @@ class MainWindow(Gtk.Window): selected += "%d " % i return selected + def update_transmission_list(self): + self.transmissions = db.get_transmissions() + print(self.transmissions) + for child in self.transmission_list.get_children(): + self.transmission_list.remove(child) + for trx in self.transmissions: + trxID = "%s %s %s" % (trx[0], trx[1], trx[3]) + print(trxID) + label = Gtk.Label() + label.set_text("%s" % trxID) + self.transmission_list.insert(label, -1) + +############################ Button functions ############################### + def on_add_transmission(self, user_data): + uid = "".join(choice(ascii_lowercase + digits) for char in range(8)) + log.debug(uid) + db.add_transmission(uid) + self.update_transmission_list() + + def on_picked_transmission(self, row, user_data): + log.debug("row %i activated" % user_data.get_index()) + + def on_delete_transmission(self, user_data): + log.debug("transmission %s deleted" % self.transmission_list.get_selected_row().get_index()) + def on_transmission_saved(self, user_data): messageBuffer = self.message.get_buffer() startIter, endIter = messageBuffer.get_bounds() message = messageBuffer.get_text(startIter, endIter, False) - #(date, author, title, transmission_text, timeslots, transmission_order, play) - db.create_transmission( self.picked_date,\ - self.author.get_buffer().get_text(),\ - self.title.get_buffer().get_text(),\ - message, - self.get_selected_timeslots(),\ - 1,\ - True) + print(message, " saved") + #(uid, date, author, title, transmission_text, timeslots, transmission_order, play) + #db.create_transmission( self.picked_date,\ + # self.author.get_buffer().get_text(),\ + # self.title.get_buffer().get_text(),\ + # message, + # self.get_selected_timeslots(),\ + # 1,\ + # True) win = MainWindow()