def launch(): """ launches the 'real' gui system, the one we interact with """ #names new databases that we will use now that the application is launched share_hist = db.share_hist display = db.display point_total = db.point_total shared_source = db.shared_source shared_viewer = db.shared_viewer #clears the databases upon running script #IMPORTANT: leave the shared_viewer.remove() shared_viewer.remove() def initialize(): """ upon running the script, gets data from the database and updates the gui displays """ global count global share_count global username try: for thing in point_total.distinct(username): amount = thing points.config(text = str(amount)) except: point_total.insert({username:10}) for thing in point_total.distinct(username): amount = thing points.config(text = str(amount)) for thing in display.distinct(username): share_history.canvas.text([0,count], text = thing['friend'] + ' ' + thing['share'] + ' ' + str(thing['date'])) count -= 12 for thing in shared_viewer.distinct(username): link = new_shared_list.canvas.text([0,share_count], text = str(thing[username]['link']), activefill = 'blue') link.bind('<Double-1>', onObjectClick) share_count -= 12 def update(): """ when the update button is pushed, this looks at the database, and will print things not already in the display, as well as log displayed data (meaning that if the gui closes before update is pressed, the data is still saved, and will be displayed the next time update will be pressed) """ global count global username for log in share_hist.find(): if log not in display.find(): display.insert(log) share_history.canvas.text([0,count], text = log[username]['friend'] + ' ' + log[username]['share'] + ' ' + str(log[username]['date'])) count -= 12 get_new_shares() def print_entry(): """ Allows shares to be made, will check to make sure nothing is a repeat, will log the data. Interactive with the user. """ global count global username res = [] text = en.get() connection = friend.get() for user in users.find(): res.append(user['user']) if connection not in res: label.config(text = 'Sorry, user not in our records') return follower = ' was shared with ' message = text + follower + connection + '!' for thing in point_total.distinct(username): existing = thing point_total.update({username: existing}, {'$inc': {username:(-1)}}) points.config(text = str(existing-1)) if count == 1: t = datetime.datetime.now() if t.minute < 10: minute = '0'+str(t.minute) else: minute = str(t.minute) timestamp = str(t.month) + '/' + str(t.day) +'/' + str(t.year) + ',' +str(t.hour) + ':' + minute share_hist.insert({username:{'friend':connection,'share':text, 'date': timestamp}}) shared_source.insert({connection:{'link': text, 'friend':username}}) label.config(text = message) count -= 12 else: instance_count = 0 for instance in share_hist.distinct(username): if text == instance['share'] and connection == instance['friend']: label.config(text = 'That is a repeat!') return instance_count += 1 if instance_count == len(share_hist.distinct(username)): t = datetime.datetime.now() if t.minute < 10: minute = '0'+str(t.minute) else: minute = str(t.minute) timestamp = str(t.month) + '/' + str(t.day) +'/' + str(t.year) + ',' +str(t.hour) + ':' + minute share_hist.insert({username:{'friend':connection,'share':text, 'date': timestamp}}) shared_source.insert({connection:{'link': text, 'friend':username}}) label.config(text = message) def url_display(url): """ downloads a youtube video into a file, then plays that file within the gui space url - raw string url from gui input """ myfile="playingvid.mp4" try: os.remove(myfile) except OSError: k=2 os.system('youtube-dl -o playingvid.mp4 %s'%url) gobject.threads_init() window_id = canvas.winfo_id() player = gst.element_factory_make('playbin2', 'player') player.set_property('video-sink', None) x=os.path.dirname(os.path.realpath(__file__)) player.set_property('uri', 'file://%s/playingvid.mp4'%(x)) player.set_state(gst.STATE_PLAYING) bus = player.get_bus() bus.add_signal_watch() bus.enable_sync_message_emission() bus.connect('sync-message::element', on_sync_message, window_id) def on_sync_message(bus, message, window_id): if not message.structure is None: if message.structure.get_name() == 'prepare-xwindow-id': image_sink = message.src image_sink.set_property('force-aspect-ratio', True) image_sink.set_xwindow_id(window_id) def add_link(new_link): """ adds a link to the shared_viewer display """ return shared_viewer.insert(new_link) def get_new_shares(): """ will update the recieved, or shared_viewer display """ global share_count global username for i in shared_source.distinct(username): if i['link'] not in shared_viewer.distinct('link'): add_link(i) link = new_shared_list.canvas.text([0,share_count], text = str(i['link']), activefill = 'blue') link.bind('<Double-1>', onObjectClick) share_count -= 12 def onObjectClick(event): """ allows us to double click on a link and show it, as well as remove it from the list of need to view links """ global username for thing in point_total.find(): for key in thing: if key == username: existing = thing[username] point_total.update({username: existing}, {'$inc': {username:1}}) points.config(text = str(existing + 1)) index = event.widget.find_closest(event.x, event.y) i = shared_viewer.find() access = i[index[0] - 1] link = access['link'] url_display(link) shared_source.remove({username: {'link':access['link'], 'friend':access['friend']}}) #General set-up pretty = 'light cyan' gui = Gui() gui.title('MusicswAPPer') gui.row() gui.la(text = 'Welcome to the swAPP', bg = 'black', fg='cyan', justify = 'left', font = ('Times', 20, 'bold italic'), height = 2, relief = 'groove') gui.endrow() gui.row(bg=pretty) gui.col(bg=pretty) gui.bu(text = 'Refresh', fg = 'forest green', font = ('Times', 15, 'bold'), bg=pretty, activeforeground='forest green', activebackground='powder blue', command = update) gui.row([0,1], pady = 10, bg=pretty) gui.endrow() gui.la(text = 'Share a link', bg = pretty, font = ('Times', 13, 'italic'), anchor = 'left', justify='left') friend = gui.en(text = 'Who do you want to share with?', disabledforeground = 'light gray', fg = 'black', font = ('Times', 12)) en = gui.en(text = 'Insert URL here', font = ('Times', 12)) gui.bu(text = 'Share', font = ('Times', 15, 'bold'), bg = pretty, fg = 'forest green', activebackground = 'powder blue', activeforeground = 'forest green', command = print_entry) label = gui.la(bg=pretty, font=('Times', 11)) gui.row([0,1], pady = 10, bg=pretty) gui.endrow() gui.la(text = 'Share history', bg=pretty, font=('Times',13, 'italic')) share_history = gui.sc(width = 500, height = 300) share_history.canvas.configure(confine = False, scrollregion = (0,0,1000,1000)) gui.endcol() gui.col(bg=pretty) gui.ca(height = 100, width = 5, bg=pretty, bd=0) gui.endcol() gui.col(bg=pretty) gui.ca(height = 10, width = 5, bg=pretty, bd=0) gui.ca(height = 10, width = 5, bg='black',bd=0) gui.ca(height = 10, width = 5, bg=pretty,bd=0) gui.ca(height = 10, width = 5, bg='black',bd=0) gui.ca(height = 10, width = 5, bg=pretty,bd=0) gui.ca(height = 10, width = 5, bg='black',bd=0) gui.ca(height = 10, width = 5, bg=pretty,bd=0) gui.ca(height = 10, width = 5, bg='black',bd=0) gui.ca(height = 10, width = 5, bg=pretty,bd=0) gui.endcol() gui.col(bg=pretty) gui.ca(height = 100, width = 5, bg=pretty) gui.endcol() gui.col(bg=pretty) gui.la(text = 'New Shares from Friends', bg = pretty, font=('Times', 13, 'italic')) new_shared_list = gui.sc(width = 500, height = 100) new_shared_list.canvas.configure(confine = False, scrollregion = (0,0,1000,1000)) gui.row([0,1], pady = 30, bg=pretty) gui.endrow() gui.la(text = 'Viewer', bg=pretty, font = ('Times', 13, 'italic')) canvas = gui.ca(width = 500, height = 300, bg='black') canvas.configure(confine = False, scrollregion = (0,0,2000, 2000)) points = gui.la(bg=pretty) gui.endcol() gui.col(bg=pretty) gui.ca(height = 100, width = 5, bg=pretty) gui.endcol() gui.endrow() initialize() gui.mainloop()
g.la(text = 'Welcome to musicswAPPer') g.bu(text = 'Update Data', command = MediaShare.update()) g.row([0,1], pady = 10) g.endrow() g.la(text = 'Share a link!') friend = g.en(text = 'Who do you want to share with?') en = g.en(text = 'Insert URL here') g.bu(text = 'Share', command = MediaShare.print_entry()) label = g.la() g.row([0,1], pady = 10) g.endrow() g.la(text = 'Share History') share_history = g.sc(width = 500, height = 300) share_history.canvas.configure(confine = False, scrollregion = (0,0,1000,1000)) g.endcol() g.col() g.ca(height = 100, width = 50) g.endcol() g.col() g.la(text = 'New Shares from Friends') new_shared_list = g.sc(width = 500, height = 100) new_shared_list.canvas.configure(confine = False, scrollregion = (0,0,1000,1000)) g.row([0,1], pady = 30)