Advertisement
Guest User

Untitled

a guest
Feb 27th, 2013
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.54 KB | None | 0 0
  1. from gi.repository import GtkClutter
  2. GtkClutter.init([])
  3. from gi.repository import Clutter, GObject, Gtk, Gdk
  4. import sys
  5. from urllib import urlopen
  6. from datetime import datetime, timedelta
  7. from elementtree.ElementTree import parse
  8. #from xml.etree.ElementTree import parse
  9. class GenericStage(GtkClutter.Embed):
  10.  
  11.     def __init__(self):
  12.         super(GenericStage, self).__init__()
  13.         self.stage = self.get_stage()
  14.         self.stage.set_size(320, 240)
  15.         self.stage.connect('destroy', lambda x: Clutter.main_quit())
  16.  
  17. class TimeStage(GenericStage):
  18.  
  19.     def __init__(self):
  20.         super(TimeStage, self).__init__()
  21.         self.stage.connect('key-press-event', self.keypress)
  22.         self.stage.set_color(Clutter.Color.new(0, 43, 54, 255)) # red,green,blue,alpha
  23.         self.timefont = "Roboto Light 64"
  24.         self.datefont = "Roboto Light 40"
  25.         self.eventfont = "Roboto Light 35"
  26.         self.staticfont = "Roboto Light 20"
  27.         current_time = datetime.now()
  28.         self.textcolor = Clutter.Color.new(147, 161, 161, 255) # red,green,blue,alpha
  29.         self.eventcolor = Clutter.Color.new(42, 161, 152, 255)
  30.         self.datecolor = Clutter.Color.new(203, 75, 22, 255)
  31.         self.timecolor = Clutter.Color.new(38, 139, 210, 255)
  32.         self.timetext = Clutter.Text.new_full(self.timefont, '{0:02d}:{1:02d}:{2:02d}'.format(current_time.hour, current_time.minute, current_time.second), self.timecolor)
  33.         self.datetext = Clutter.Text.new_full(self.datefont, '{0}.{1}'.format(current_time.month, current_time.day), self.datecolor)
  34.         self.eventtitletext = Clutter.Text.new_full(self.eventfont, '', self.eventcolor)
  35.         self.eventtimetext = Clutter.Text.new_full(self.eventfont, '', self.textcolor)
  36.         self.eventstatic1text = Clutter.Text.new_full(self.staticfont, 'Next event is...', self.textcolor)
  37.         self.eventstatic2text = Clutter.Text.new_full(self.staticfont, '...in', self.textcolor)
  38.         self.timetext.set_position(0, 0) # x,y
  39.         self.datetext.set_position(214, 83) # x,y
  40.         self.eventtitletext.set_position(0,140) # x,y
  41.         self.eventtimetext.set_position(200,187) # x,y
  42.         self.eventstatic1text.set_position(2,113) # x,y
  43.         self.eventstatic2text.set_position(158,206) # x,y
  44.         Clutter.Container.add_actor(self.stage, self.timetext)
  45.         Clutter.Container.add_actor(self.stage, self.datetext)
  46.         Clutter.Container.add_actor(self.stage, self.eventtitletext)
  47.         Clutter.Container.add_actor(self.stage, self.eventtimetext)
  48.         Clutter.Container.add_actor(self.stage, self.eventstatic1text)
  49.         Clutter.Container.add_actor(self.stage, self.eventstatic2text)
  50.  
  51.         self.clock_timeline = Clutter.Timeline()
  52.         self.clock_timeline.set_duration(1000) # timeline lasts one second
  53.         self.clock_timeline.add_marker_at_time("one_second", 1000)
  54.         self.clock_timeline.connect('marker-reached', self.update_time) # when marker reached, call update_time
  55.         self.clock_timeline.set_loop(True) # update every second
  56.         self.clock_timeline.start()
  57.  
  58.         self.pull_calendar_update()
  59.         self.update_calendar()
  60.  
  61.         self.calendar_pull_timeline = Clutter.Timeline()
  62.         self.calendar_pull_timeline.set_duration(3600000) # timeline lasts 1 hr
  63.         self.calendar_pull_timeline.add_marker_at_time("one_hour", 3600000)
  64.         self.calendar_pull_timeline.connect('marker-reached', self.pull_calendar_update)  # when marker reached, call pull_calendar_update
  65.         self.calendar_pull_timeline.set_loop(True) # repeat the update timer
  66.         self.calendar_pull_timeline.start()
  67.  
  68.         self.calendar_update_timeline = Clutter.Timeline()
  69.         self.calendar_update_timeline.set_duration(60000) # timeline lasts one second
  70.         self.calendar_update_timeline.add_marker_at_time("one_minute", 60000)
  71.         self.calendar_update_timeline.connect('marker-reached', self.update_calendar) # when marker reached, call update_calendar
  72.         self.calendar_update_timeline.set_loop(True) # update every minute
  73.         self.calendar_update_timeline.start()
  74.  
  75.     def pull_calendar_update(self, timeline = None, marker_name = None, frame_num = None):
  76.         self.xmlresponse = urlopen('###INSERT GOOGLE CALENDAR PRIVATE XML LINK HERE###')
  77.  
  78.     def update_calendar(self, timeline = None, marker_name = None, frame_num = None):
  79.         xmltree = parse(self.xmlresponse)
  80.         min_delta = timedelta.max
  81.         for entry in xmltree.getroot().findall('{http://www.w3.org/2005/Atom}entry'):
  82.             start_time = entry.find('{http://schemas.google.com/g/2005}when').attrib['startTime']
  83.             if len(start_time) == 10:
  84.                 continue
  85.             event_time = datetime.strptime(entry.find('{http://schemas.google.com/g/2005}when').attrib['startTime'][:-6], '%Y-%m-%dT%H:%M:%S.%f')
  86.             event_delta = event_time - datetime.now()
  87.             print entry.find('{http://www.w3.org/2005/Atom}title').text + ' ' + str(event_time)
  88.             if (event_delta > timedelta(hours=0)) & (event_delta < min_delta):
  89.                 self.soonest_event = entry
  90.                 self.soonest_event_time = event_time
  91.                 self.soonest_event_name = entry.find('{http://www.w3.org/2005/Atom}title').text
  92.                 min_delta = event_delta
  93.         self.eventtitletext.set_text(self.soonest_event_name)
  94.         self.eventtimetext.set_text(str(min_delta)[:-10])
  95.  
  96.     def update_time(self, timeline = None, marker_name = None, frame_num = None):
  97.         current_time = datetime.now()
  98.         self.timetext.set_text('{0:02d}:{1:02d}:{2:02d}'.format(current_time.hour, current_time.minute, current_time.second))
  99.         self.datetext = Clutter.Text.new_full(self.timefont, '{0}.{1}'.format(current_time.month, current_time.day), self.textcolor)
  100.  
  101.     def keypress(self, stage, event):
  102.         if event.keyval == 120:#Clutter.keysyms.x:
  103.             Clutter.main_quit()
  104.             Gtk.main_quit()
  105.  
  106. class Window(Gtk.Window):
  107.  
  108.     def __init__(self):
  109.         super(Window, self).__init__()
  110.         self.window = Gtk.Window()  # make a new Gtk window
  111.         self.window.set_default_size(320, 240)  # set the size
  112.         self.window.connect('destroy', Gtk.main_quit)
  113.         self.embed = TimeStage()  # make a new timestage
  114.         self.window.add(self.embed)  # add the timestage to the window
  115.         self.window.fullscreen()  # set fullscreen mode
  116.  
  117.         self.embed.show_all()  # show all the stage actors
  118.  
  119.         self.set_events(Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.BUTTON1_MOTION_MASK)
  120.  
  121.     def run(self):
  122.         self.window.show()
  123.         Gtk.main()
  124.  
  125.  
  126. def main():
  127.     myapp = Window()
  128.     myapp.run()
  129.  
  130. if __name__ == "__main__":
  131.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement