Author: dmeyer
Date: Thu Aug 30 14:05:22 2007
New Revision: 9852

Log:
Patch by Tanja Part 3:
o adjust to core changes
o add code to modify a favorite


Modified:
   trunk/ui/src/tv/favorite.py

Modified: trunk/ui/src/tv/favorite.py
==============================================================================
--- trunk/ui/src/tv/favorite.py (original)
+++ trunk/ui/src/tv/favorite.py Thu Aug 30 14:05:22 2007
@@ -32,6 +32,7 @@
 # -----------------------------------------------------------------------------
 
 # python imports
+import re
 import time
 
 # kaa imports
@@ -47,11 +48,16 @@
 # freevo imports
 from freevo.ui.menu import Item, Action, ActionItem, Menu
 from freevo.ui.application import MessageWindow
+from freevo.ui.tv.program import ProgramItem
 
 # get tvserver interface
 tvserver = freevo.ipc.Instance('freevo').tvserver
 
-DAY_NAMES = (_('Sun'), _('Mon'), _('Tue'), _('Wed'), _('Thu'), _('Fri'), 
_('Sat'))
+DAY_NAMES = [_('Sun'), _('Mon'), _('Tue'), _('Wed'), _('Thu'), _('Fri'), 
_('Sat')]
+
+#Define the time slots (when chnaging the time) in minutes
+TIME_SLOTS = 10
+TIME_RANGE = (1440 / TIME_SLOTS)
 
 class FavoriteItem(Item):
     """
@@ -63,27 +69,31 @@
 
         self.new = True
         self.id = 0
-        if isinstance(fav, kaa.epg.Program):
-            # created with Program object
-            # Convert to 0=Sunday - 6=Saterday
-            day = min(time.localtime(fav.start)[6] + 1, 6)
-            self.days = [ day ]
-            self.name = self.title = fav.title
-            self.channels = [ fav.channel.name ]
+        self.start = float(0)
+        self.stop = float(1440*60)-1
+        
+        if isinstance(fav, ProgramItem):
             #check if already a favorite
-            for f in tvserver.favorites.list():
-                if fav.title == f.title:
-                    if fav.channel.name in f.channels:
-                        if day in f.days:
-                            self.new = False
-                            self.id = f.id
-        else:
+            f = tvserver.favorites.get(fav.title, fav.channel, fav.start, 
fav.stop)
+            if not f:
+                # create from ProgramItem
+                # Convert to 0=Sunday - 6=Saterday
+                day = min(time.localtime(fav.start)[6] + 1, 6)
+                self.days = [ day ]
+                self.name = self.title = fav.title
+                self.channels = [ fav.channel]
+            else:  
+                # there is already a existing ipc Favorite object 
+                fav = f      
+        if isinstance(fav, freevo.ipc.tvserver.Favorite):
             # created with ipc Favorite object
             self.name = self.title = fav.title
             self.days = fav.days
             self.channels = fav.channels
             self.new = False
             self.id = fav.id
+            for t in fav.times:
+                self.start, self.stop = self._str_to_time(t)
 
 
     def __getitem__(self, key):
@@ -102,6 +112,14 @@
             else:
                 channels = ', '.join(['%s' % chan for chan in self.channels])
                 return channels
+        if key == 'time':
+                return self['start'] + u' - ' + self['stop']
+        if key == 'start':
+            return unicode(time.strftime(config.tv.timeformat,
+                                         time.gmtime(self.start)))
+        if key == 'stop':
+            return unicode(time.strftime(config.tv.timeformat,
+                                         time.gmtime(self.stop)))
         return Item.__getitem__(self, key)
 
 
@@ -123,6 +141,15 @@
         else:
             items.append(ActionItem(_('Remove favorite'), self, self.remove))
         
+        items.append(ActionItem(_('Change day'), self, self.change_days))
+        items.append(ActionItem(_('Change channel'), self, 
self.change_channels))
+        action = ActionItem(_('Change start time'), self, self.change_time)
+        action.parameter('start')
+        items.append(action)
+        action = ActionItem(_('Change stop time'), self, self.change_time)
+        action.parameter('stop')
+        items.append(action)
+
         s = Menu(self, items, type = 'tv favorite menu')
         s.submenu = True
         s.infoitem = self
@@ -132,16 +159,16 @@
     @kaa.notifier.yield_execution()
     def add(self):
         result = tvserver.favorites.add(self.title, self.channels, self.days,
-                                        'ANY', 50, False)
+                                        [self._time_to_str()], 50, False)
         if isinstance(result, kaa.notifier.InProgress):
             yield result
             result = result()
         if result != tvserver.favorites.SUCCESS:
             text = _('Adding favorite Failed')+(': %s' % result)
         else:
-            text = _('"%s" has been scheduled as favorite') % self.title
+            text = _('"%s" has been added to your favorites') % self.title
         MessageWindow(text).show()
-        self.get_menustack().delete_submenu()
+        self.get_menustack().back_one_menu()
 
 
     @kaa.notifier.yield_execution()
@@ -152,5 +179,129 @@
             result = result()
         if result != tvserver.favorites.SUCCESS:
             text = _('Remove favorite Failed')+(': %s' % result)
+        else:
+            text = _('"%s" has been removed from you favorites') % self.title  
  
+            MessageWindow(text).show()    
+        self.get_menustack().back_one_menu()
+
+    @kaa.notifier.yield_execution()
+    def modify(self, info):
+        result = tvserver.favorites.modify(self.id, info)
+        if isinstance(result, kaa.notifier.InProgress):
+            yield result
+            result = result()
+        if result != tvserver.favorites.SUCCESS:
+            text = _('Modified favorite Failed')+(': %s' % result)
             MessageWindow(text).show()
-        self.get_menustack().delete_submenu()
+
+    def change_days(self):
+        items = []
+        action = ActionItem('ANY', self, self.handle_change)
+        action.parameter('days', 'ANY')
+        items.append(action)
+        for dayname in DAY_NAMES:
+            action = ActionItem(dayname, self, self.handle_change)
+            action.parameter('days', dayname)
+            items.append(action)
+            
+        s = Menu(self, items, type = 'tv favorite menu')
+        s.submenu = True
+        s.infoitem = self
+        self.get_menustack().pushmenu(s)
+
+    def change_channels(self):
+        items = []
+        action = ActionItem('ANY', self, self.handle_change)
+        action.parameter('channels', 'ANY')
+        items.append(action)
+        
+        list = kaa.epg.get_channels(sort=True)
+        for chan in list:
+            action = ActionItem(chan.name, self, self.handle_change)
+            action.parameter('channels', chan.name)
+            items.append(action)
+            
+        s = Menu(self, items, type = 'tv favorite menu')
+        s.submenu = True
+        s.infoitem = self
+        self.get_menustack().pushmenu(s)
+
+    def change_time(self, startstop):
+        items = []
+        action = ActionItem('ANY', self, self.handle_change)
+        action.parameter(startstop, 'ANY')
+        items.append(action)
+        if startstop == 'start':
+            starttime = self.start
+        else:
+            starttime = self.stop - (self.stop % (TIME_SLOTS * 60))
+        for i in range(TIME_RANGE):
+            newtime = float( (i * TIME_SLOTS * 60) + starttime) % (1440 * 60)
+            showtime = unicode(time.strftime(config.tv.timeformat,
+                                     time.gmtime(newtime)))
+            action = ActionItem(showtime, self, self.handle_change)
+            action.parameter(startstop, newtime)
+            items.append(action)
+            
+        s = Menu(self, items, type = 'tv favorite menu')
+        s.submenu = True
+        s.infoitem = self
+        self.get_menustack().pushmenu(s)
+
+    def handle_change(self, item, value):
+        
+        info = None
+        infovalue = None
+        if item == 'days':
+            info = 'days'
+            if value == 'ANY':
+                self.days = [0, 1, 2, 3, 4, 5, 6]
+            else:
+                self.days = [DAY_NAMES.index(value)]
+            infovalue = self.days
+        if item == 'channels':
+            info = 'channels'
+            if value == 'ANY':
+                self.channels = []
+                list = kaa.epg.get_channels(sort=True)
+                for chan in list:
+                    self.channels.append(chan.name)
+            else:
+                self.channels = [value]
+            infovalue = self.channels
+        if item == 'start':
+            info = 'times'
+            if value == 'ANY':
+                self.start = float(0)
+                self.stop = float(1440*60)-1
+            else:
+                self.start = value
+            infovalue = [self._time_to_str()]
+        if item == 'stop':
+            info = 'times'
+            if value == 'ANY':
+                self.start = float(0)
+                self.stop = float(1440*60)-1
+            else:
+                self.stop = value
+            infovalue = [self._time_to_str()]
+
+        if not self.new:
+            self.modify([(info, infovalue)])
+            
+        self.get_menustack().back_one_menu()
+
+    def _time_to_str(self):
+        start = time.strftime('%H:%M', time.gmtime(self.start))
+        stop = time.strftime('%H:%M', time.gmtime(self.stop))
+        return start + '-' + stop
+
+    def _str_to_time(self, t):
+        # internal regexp for time format
+        _time_re = re.compile('([0-9]*):([0-9]*)-([0-9]*):([0-9]*)')
+        
+        m = _time_re.match(t).groups()
+        start = float(m[0])*3600 + float(m[1])*60
+        stop  = float(m[2])*3600 + float(m[3])*60
+
+        return start, stop

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog

Reply via email to