Update of /cvsroot/freevo/freevo/src/tv
In directory sc8-pr-cvs1:/tmp/cvs-serv8709/tv
Modified Files:
tv.py
Added Files:
tvguide.py
Removed Files:
tvmenu.py
Log Message:
Added new tv main menu for the new skin. This includes the tv guide
(file is now called tvguide and not tvmenu) and DIR_RECORD. This
directory is sort by date and can have a different menu style in the skin.
See blue_round2 as example: there is a tv watermark, no view area and
the listing area is larger.
--- NEW FILE: tvguide.py ---
# Configuration file. Determines where to look for AVI/MP3 files, etc
# Logging is initialized here, so it should be imported first
import config
import sys
import os
import time
import copy
# Various utilities
import util
import gui
import skin
# The RemoteControl class, sets up a UDP daemon that the remote control client
# sends commands to
import rc
# The Electronic Program Guide
import epg_xmltv as epg, epg_types
import record_video
rc = rc.get_singleton() # Create the remote control object
skin = skin.get_singleton() # Create the Skin object
DEBUG = config.DEBUG
TRUE = 1
FALSE = 0
CHAN_NO_DATA = 'This channel has no data loaded'
class TVGuide:
def __init__(self):
self.n_cols = 4
self.col_time = 30 # each col represents 30 minutes
self.all_channels = epg.get_guide().chan_list
self.n_items = skin.DrawTVGuide_ItemsPerPage(self)
def eventhandler(self, event):
if hasattr(self, 'event_%s' % event):
eval('self.event_%s()' % event)
elif event == rc.CHUP:
self.event_PageUp()
elif event == rc.CHDOWN:
self.event_PageDown()
elif event == rc.REC:
record_video.main_menu(self.selected)
else:
print 'No action defined to event: "%s"' % (event)
return None
def refresh(self):
skin.DrawTVGuide(self)
def rebuild(self, start_time, stop_time, start_channel, selected):
self.guide = epg.get_guide()
channels = self.guide.GetPrograms(start=start_time+1, stop=stop_time-1)
table = [ ]
self.start_time = start_time
self.stop_time = stop_time
self.start_channel = start_channel
self.selected = selected
self.display_up_arrow = FALSE
self.display_down_arrow = FALSE
# table header
table += [ ['Chan'] ]
for i in range(self.n_cols):
table[0] += [ start_time + self.col_time * i* 60 ]
table += [ self.selected ] # the selected program
found_1stchannel = 0
if stop_time == None:
found_1stchannel = 1
flag_selected = 0
n = 0
for chan in channels:
if n >= self.n_items:
self.display_down_arrow = TRUE
break
if start_channel != None and chan.id == start_channel:
found_1stchannel = 1
if not found_1stchannel:
self.display_up_arrow = TRUE
if found_1stchannel:
if not chan.programs:
prg = epg_types.TvProgram()
prg.channel_id = chan.id
prg.start = 0
prg.stop = 2147483647 # Year 2038
prg.title = CHAN_NO_DATA
prg.desc = ''
chan.programs = [ prg ]
for i in range(len(chan.programs)):
if selected:
if chan.programs[i] == selected:
flag_selected = 1
table += [ chan ]
n += 1
if flag_selected == 0:
for i in range(2, len(table)):
if flag_selected == 1:
break
else:
if table[i].programs:
for j in range(len(table[i].programs)):
if table[i].programs[j].stop > start_time:
self.selected = table[i].programs[j]
table[1] = table[i].programs[j]
flag_selected = 1
break
self.table = table
skin.DrawTVGuide(self)
def event_RIGHT(self):
start_time = self.start_time
stop_time = self.stop_time
start_channel = self.start_channel
last_prg = self.selected
if last_prg.stop >= stop_time:
start_time += (self.col_time * 60)
stop_time += (self.col_time * 60)
channel = self.guide.chan_dict[last_prg.channel_id]
all_programs = self.guide.GetPrograms(start_time+1, stop_time-1, [ channel.id
])
# Current channel programs
programs = all_programs[0].programs
if programs:
for i in range(len(programs)):
if programs[i].title == last_prg.title and \
programs[i].start == last_prg.start and \
programs[i].stop == last_prg.stop and \
programs[i].channel_id == last_prg.channel_id:
break
prg = None
if i < len(programs) - 1:
prg = programs[i+1]
else:
prg = programs[i]
if prg.sub_title:
procdesc = '"' + prg.sub_title + '"\n' + prg.desc
else:
procdesc = prg.desc
to_info = (prg.title, procdesc)
else:
prg = epg_types.TvProgram()
prg.channel_id = channel.id
prg.start = 0
prg.stop = 2147483647 # Year 2038
prg.title = CHAN_NO_DATA
prg.desc = ''
to_info = CHAN_NO_DATA
self.rebuild(start_time, stop_time, start_channel, prg)
def event_LEFT(self):
start_time = self.start_time
stop_time = self.stop_time
start_channel = self.start_channel
last_prg = self.selected
if last_prg.start <= start_time:
start_time -= (self.col_time * 60)
stop_time -= (self.col_time * 60)
channel = self.guide.chan_dict[last_prg.channel_id]
programs = self.guide.GetPrograms(start_time+1, stop_time-1, [ channel.id ])
programs = programs[0].programs
if programs:
for i in range(len(programs)):
if programs[i].title == last_prg.title and \
programs[i].start == last_prg.start and \
programs[i].stop == last_prg.stop and \
programs[i].channel_id == last_prg.channel_id:
break
prg = None
if i > 0:
prg = programs[i-1]
else:
prg = programs[i]
if prg.sub_title:
procdesc = '"' + prg.sub_title + '"\n' + prg.desc
else:
procdesc = prg.desc
to_info = (prg.title, procdesc)
else:
prg = epg_types.TvProgram()
prg.channel_id = channel.id
prg.start = 0
prg.stop = 2147483647 # Year 2038
prg.title = CHAN_NO_DATA
prg.desc = ''
to_info = CHAN_NO_DATA
self.rebuild(start_time, stop_time, start_channel, prg)
def event_DOWN(self):
start_time = self.start_time
stop_time = self.stop_time
start_channel = self.start_channel
last_prg = self.selected
n = 1
flag_start_channel = 0
for i in range(len(self.guide.chan_list)):
if self.guide.chan_list[i].id == start_channel:
flag_start_channel = 1
if self.guide.chan_list[i].id == last_prg.channel_id:
break
if flag_start_channel == 1:
n += 1
if n >= self.n_items and (i-self.n_items+2) < len(self.guide.chan_list):
start_channel = self.guide.chan_list[i-self.n_items+2].id
else:
channel = self.guide.chan_list[i]
channel = None
if i < len(self.guide.chan_list) - 1:
channel = self.guide.chan_list[i+1]
else:
channel = self.guide.chan_list[i]
programs = self.guide.GetPrograms(start_time+1, stop_time-1, [ channel.id ])
programs = programs[0].programs
prg = None
if programs and len(programs) > 0:
for i in range(len(programs)):
if programs[i].stop > last_prg.start and programs[i].stop > start_time:
break
prg = programs[i]
if prg.sub_title:
procdesc = '"' + prg.sub_title + '"\n' + prg.desc
else:
procdesc = prg.desc
to_info = (prg.title, procdesc)
else:
prg = epg_types.TvProgram()
prg.channel_id = channel.id
prg.start = 0
prg.stop = 2147483647 # Year 2038
prg.title = CHAN_NO_DATA
prg.desc = ''
to_info = CHAN_NO_DATA
self.rebuild(start_time, stop_time, start_channel, prg)
def event_UP(self):
start_time = self.start_time
stop_time = self.stop_time
start_channel = self.start_channel
last_prg = self.selected
if last_prg == None:
last_prg = epg_types.TvProgram()
n = 0
flag_start_channel = 0
for i in range(len(self.guide.chan_list)):
if self.guide.chan_list[i].id == start_channel:
flag_start_channel = 1
if self.guide.chan_list[i].id == last_prg.channel_id:
break
if flag_start_channel == 1:
n += 1
channel = None
if i > 0:
channel = self.guide.chan_list[i-1]
if n == 0:
start_channel = self.guide.chan_list[i-1].id
else:
channel = self.guide.chan_list[i]
programs = self.guide.GetPrograms(start_time+1, stop_time-1, [ channel.id ])
programs = programs[0].programs
if programs and len(programs) > 0:
for i in range(len(programs)):
if programs[i].stop > last_prg.start and programs[i].stop > start_time:
break
prg = programs[i]
if prg.sub_title:
procdesc = '"' + prg.sub_title + '"\n' + prg.desc
else:
procdesc = prg.desc
to_info = (prg.title, procdesc)
else:
prg = epg_types.TvProgram()
prg.channel_id = channel.id
prg.start = 0
prg.stop = 2147483647 # Year 2038
prg.title = 'This channel has no data loaded'
prg.desc = ''
to_info = 'This channel has no data loaded'
self.rebuild(start_time, stop_time, start_channel, prg)
def event_PageUp(self):
start_time = self.start_time
stop_time = self.stop_time
start_channel = self.start_channel
last_prg = self.selected
for i in range(len(self.guide.chan_list)):
if self.guide.chan_list[i].id == last_prg.channel_id:
break
channel = None
if i-self.n_items > 0:
channel = self.guide.chan_list[i-self.n_items]
start_channel = self.guide.chan_list[i-self.n_items].id
else:
channel = self.guide.chan_list[0]
start_channel = self.guide.chan_list[0].id
programs = self.guide.GetPrograms(start_time+1, stop_time-1, [ channel.id ])
programs = programs[0].programs
prg = None
if programs and len(programs) > 0:
for i in range(len(programs)):
if programs[i].stop > last_prg.start and programs[i].stop > start_time:
break
prg = programs[i]
if prg.sub_title:
procdesc = '"' + prg.sub_title + '"\n' + prg.desc
else:
procdesc = prg.desc
to_info = (prg.title, procdesc)
else:
prg = epg_types.TvProgram()
prg.channel_id = channel.id
prg.start = 0
prg.stop = 2147483647 # Year 2038
prg.title = CHAN_NO_DATA
prg.desc = ''
to_info = CHAN_NO_DATA
self.rebuild(start_time, stop_time, start_channel, prg)
def event_PageDown(self):
start_time = self.start_time
stop_time = self.stop_time
start_channel = self.start_channel
last_prg = self.selected
n = 1
flag_start_channel = 0
for i in range(len(self.guide.chan_list)):
if self.guide.chan_list[i].id == start_channel:
flag_start_channel = 1
if self.guide.chan_list[i].id == last_prg.channel_id:
break
if flag_start_channel == 1:
n += 1
channel = None
if i+self.n_items < len(self.guide.chan_list):
channel = self.guide.chan_list[i+self.n_items]
start_channel = self.guide.chan_list[i+self.n_items].id
else:
channel = self.guide.chan_list[i]
start_channel = self.guide.chan_list[i].id
programs = self.guide.GetPrograms(start_time+1, stop_time-1, [ channel.id ])
programs = programs[0].programs
prg = None
if programs and len(programs) > 0:
for i in range(len(programs)):
if programs[i].stop > last_prg.start and programs[i].stop > start_time:
break
prg = programs[i]
if prg.sub_title:
procdesc = '"' + prg.sub_title + '"\n' + prg.desc
else:
procdesc = prg.desc
to_info = (prg.title, procdesc)
else:
prg = epg_types.TvProgram()
prg.channel_id = channel.id
prg.start = 0
prg.stop = 2147483647 # Year 2038
prg.title = CHAN_NO_DATA
prg.desc = ''
to_info = CHAN_NO_DATA
self.rebuild(start_time, stop_time, start_channel, prg)
Index: tv.py
===================================================================
RCS file: /cvsroot/freevo/freevo/src/tv/tv.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** tv.py 8 Mar 2003 17:40:42 -0000 1.2
--- tv.py 29 Mar 2003 21:49:54 -0000 1.3
***************
*** 10,13 ****
--- 10,20 ----
# -----------------------------------------------------------------------
# $Log$
+ # Revision 1.3 2003/03/29 21:49:54 dischi
+ # Added new tv main menu for the new skin. This includes the tv guide
+ # (file is now called tvguide and not tvmenu) and DIR_RECORD. This
+ # directory is sort by date and can have a different menu style in the skin.
+ # See blue_round2 as example: there is a tv watermark, no view area and
+ # the listing area is larger.
+ #
# Revision 1.2 2003/03/08 17:40:42 dischi
# integration of the tv guide
***************
*** 71,74 ****
--- 78,83 ----
import epg_xmltv as epg
+ from item import Item
+
# The Skin
import skin
***************
*** 79,83 ****
import ExtendedMenu_TV
else:
! from tvmenu import TVmenu
# Set to 1 for debug output
--- 88,93 ----
import ExtendedMenu_TV
else:
! from tvguide import TVGuide
! from mediamenu import DirItem
# Set to 1 for debug output
***************
*** 104,107 ****
--- 114,134 ----
+ class TVMenu(Item):
+
+ def __init__(self):
+ Item.__init__(self)
+ self.type = 'tv'
+
+ def main_menu(self, arg, menuw):
+ items = [ menu.MenuItem('TV Guide', action=start_tvguide),
+ DirItem(config.DIR_RECORD, None, name = 'Recorded Shows',
+ display_type='tv') ]
+
+ menuw.pushmenu(menu.Menu('TV MAIN MENU', items, item_types = 'tv'))
+
+
+
+
+
# Set up the extended menu
if not config.NEW_SKIN:
***************
*** 109,115 ****
info = ExtendedMenu_TV.ExtendedMenuInfo_TV()
listing = ExtendedMenu_TV.ExtendedMenuListing_TV()
! em = ExtendedMenu_TV.ExtendedMenu_TV(view, info, listing)
else:
! tvmenu = TVmenu()
def get_start_time():
--- 136,142 ----
info = ExtendedMenu_TV.ExtendedMenuInfo_TV()
listing = ExtendedMenu_TV.ExtendedMenuListing_TV()
! tvguide = ExtendedMenu_TV.ExtendedMenu_TV(view, info, listing)
else:
! tvguide = TVGuide()
def get_start_time():
***************
*** 126,133 ****
return time.mktime(stime)
- # Set up some global variables
- start_time = get_start_time()
- stop_time = get_start_time()
-
def start_tv(mode=None, channel_id=None):
--- 153,156 ----
***************
*** 161,180 ****
skin.Clear()
if not config.NEW_SKIN:
! start_tv('tv', em.listing.last_to_listing[3].channel_id)
else:
! start_tv('tv', tvmenu.selected.channel_id)
else:
! if not config.NEW_SKIN:
! em.eventhandler(event)
! else:
! tvmenu.eventhandler(event)
def refresh():
! if not config.NEW_SKIN:
! em.refresh()
! else:
! tvmenu.refresh()
def main_menu(arg, menuw):
# Check that the TV channel list is not None
--- 184,202 ----
skin.Clear()
if not config.NEW_SKIN:
! start_tv('tv', tvguide.listing.last_to_listing[3].channel_id)
else:
! start_tv('tv', tvguide.selected.channel_id)
else:
! tvguide.eventhandler(event)
def refresh():
! tvguide.refresh()
!
def main_menu(arg, menuw):
+ start_tvguide(arg, menuw)
+
+
+ def start_tvguide(arg, menuw):
# Check that the TV channel list is not None
***************
*** 217,223 ****
if not config.NEW_SKIN:
listing.ToListing([start_time, stop_time, guide.chan_list[0].id, prg])
! em.eventhandler(rc.UP)
! em.refresh()
else:
! tvmenu.rebuild(start_time, stop_time, guide.chan_list[0].id, prg)
! tvmenu.refresh()
--- 239,245 ----
if not config.NEW_SKIN:
listing.ToListing([start_time, stop_time, guide.chan_list[0].id, prg])
! tvguide.eventhandler(rc.UP)
! tvguide.refresh()
else:
! tvguide.rebuild(start_time, stop_time, guide.chan_list[0].id, prg)
! tvguide.refresh()
--- tvmenu.py DELETED ---
-------------------------------------------------------
This SF.net email is sponsored by:
The Definitive IT and Networking Event. Be There!
NetWorld+Interop Las Vegas 2003 -- Register today!
http://ads.sourceforge.net/cgi-bin/redirect.pl?keyn0001en
_______________________________________________
Freevo-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog