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