2007-08-14 18:10:53 -07:00
import pygtk
import gtk
2007-08-26 06:15:05 -07:00
import pygst
import gst
import gobject
2007-09-04 05:19:21 -07:00
import pango
2007-08-14 18:10:53 -07:00
import clutter
2007-08-26 06:15:05 -07:00
from clutter import cluttergst
2007-09-05 03:16:17 -07:00
from VideoController import VideoController
2007-11-19 03:38:15 -08:00
from modules . video_player . cover_viewer import coverViewer
2007-08-14 18:10:53 -07:00
2007-11-19 03:38:15 -08:00
class Module ( ) :
title = " Videos "
menu_image = " videos.png "
2007-08-14 18:10:53 -07:00
2007-11-19 03:38:15 -08:00
def __init__ ( self , MenuMgr , dbMgr ) :
self . stage = MenuMgr . get_stage ( )
2007-11-22 02:41:29 -08:00
self . MenuMgr = MenuMgr
2007-11-15 00:36:01 -08:00
self . cover_viewer = coverViewer ( self . stage , 800 , 600 )
2007-11-19 03:38:15 -08:00
self . videoController = VideoController ( self . stage )
2007-08-14 18:10:53 -07:00
self . is_playing = False
#This block can be moved to begin() but causes a performance hit when loading the module *shrug*
results = dbMgr . get_videos ( )
2007-08-26 06:15:05 -07:00
if results == None :
print " VideoPlayer: No connection to DB or no videos found in DB "
return None
2007-09-04 05:19:21 -07:00
#Load the videos into the cover viewer
2007-08-14 18:10:53 -07:00
for record in results :
tempVideo = videoItem ( )
tempVideo . importFromMythObject ( record )
2007-08-29 06:35:13 -07:00
self . cover_viewer . add_video ( tempVideo )
2007-09-03 06:13:34 -07:00
2007-11-19 03:38:15 -08:00
#Action to take when menu item is selected
def action ( self ) :
return self
2007-09-03 06:13:34 -07:00
2007-08-14 18:10:53 -07:00
def on_key_press_event ( self , stage , event ) :
2007-09-05 03:16:17 -07:00
if self . is_playing :
if event . keyval == clutter . keysyms . Escape :
self . videoController . stop_video ( )
self . is_playing = False
else :
self . videoController . on_key_press_event ( event )
return False
2007-08-14 18:10:53 -07:00
if event . keyval == clutter . keysyms . p :
if self . paused :
self . unpause ( )
else :
self . pause ( )
if event . keyval == clutter . keysyms . q :
clutter . main_quit ( )
2007-08-29 06:35:13 -07:00
up = clutter . keysyms . Up
down = clutter . keysyms . Down
left = clutter . keysyms . Left
right = clutter . keysyms . Right
if ( event . keyval == up ) or ( event . keyval == down ) or ( event . keyval == left ) or ( event . keyval == right ) :
2007-11-13 05:03:39 -08:00
self . cover_viewer . on_key_press_event ( event )
2007-08-29 06:35:13 -07:00
2007-09-05 03:16:17 -07:00
if event . keyval == clutter . keysyms . Return :
2007-11-15 00:36:01 -08:00
self . play_video ( )
2007-09-05 03:16:17 -07:00
if event . keyval == clutter . keysyms . Escape :
return True
2007-08-29 06:35:13 -07:00
2007-08-14 18:10:53 -07:00
def begin ( self , MenuMgr ) :
2007-11-22 02:41:29 -08:00
#Check that the library actually contains something
if self . cover_viewer . num_covers == 0 :
self . MenuMgr . display_msg ( " Error: No videos " , " There are no videos available in the library. This maybe caused by an empty library or a failed connection to the server. " )
self . stop ( )
return
2007-09-03 06:13:34 -07:00
2007-08-14 18:10:53 -07:00
#Create a backdrop for the player. In this case we just use the same background as the menus
self . backdrop = clutter . CloneTexture ( MenuMgr . get_skinMgr ( ) . get_Background ( ) )
self . backdrop . set_size ( self . stage . get_width ( ) , self . stage . get_height ( ) )
self . backdrop . set_opacity ( 0 )
self . backdrop . show ( )
self . stage . add ( self . backdrop )
#Fade the backdrop in
timeline_begin = clutter . Timeline ( 10 , 40 )
alpha = clutter . Alpha ( timeline_begin , clutter . ramp_inc_func )
2007-11-05 04:51:39 -08:00
self . begin_behaviour = clutter . BehaviourOpacity ( alpha , 0 , 255 )
self . begin_behaviour . apply ( self . backdrop )
2007-08-14 18:10:53 -07:00
self . cover_viewer . set_opacity ( 0 )
self . cover_viewer . show_all ( )
self . cover_viewer . show ( )
self . stage . add ( self . cover_viewer )
2007-09-04 05:19:21 -07:00
cover_x = self . stage . get_width ( ) - self . cover_viewer . get_width ( )
2007-11-15 00:36:01 -08:00
#self.cover_viewer.set_position(cover_x, 40)
self . cover_viewer . set_position ( 50 , 40 )
2007-09-04 16:14:46 -07:00
self . cover_viewer . toggle_details ( ) #Turns the details group on
self . cover_viewer . select_first ( )
2007-11-05 04:51:39 -08:00
self . begin_behaviour . apply ( self . cover_viewer )
2007-08-14 18:10:53 -07:00
timeline_begin . start ( )
def stop ( self ) :
2007-08-15 07:23:45 -07:00
#Fade everything out
timeline_stop = clutter . Timeline ( 10 , 30 )
alpha = clutter . Alpha ( timeline_stop , clutter . ramp_inc_func )
2007-11-05 04:51:39 -08:00
self . stop_behaviour = clutter . BehaviourOpacity ( alpha , 255 , 0 )
self . stop_behaviour . apply ( self . cover_viewer )
self . stop_behaviour . apply ( self . backdrop )
2007-08-15 07:23:45 -07:00
timeline_stop . connect ( ' completed ' , self . destroyPlugin )
timeline_stop . start ( )
2007-11-22 02:41:29 -08:00
self . MenuMgr . currentPlugin = None
2007-08-15 07:23:45 -07:00
def destroyPlugin ( self , data ) :
self . stage . remove ( self . cover_viewer )
self . backdrop . hide ( )
#self.stage.remove(self.overlay)
2007-11-15 00:36:01 -08:00
def play_video ( self ) :
vid = self . cover_viewer . get_current_video ( )
uri = " file:// " + str ( vid . filename )
self . videoController . play_video ( uri , self )
self . is_playing = True
self . stage . remove ( self . cover_viewer )
2007-08-15 07:23:45 -07:00
2007-11-13 05:03:39 -08:00
def stop_video ( self ) :
if not self . is_playing :
return
self . is_playing = False
2007-08-14 18:10:53 -07:00
2007-11-19 03:38:15 -08:00
timeline = clutter . Timeline ( 15 , 25 )
self . cover_viewer . set_opacity ( 0 )
alpha = clutter . Alpha ( timeline , clutter . ramp_inc_func )
self . behaviour = clutter . BehaviourOpacity ( alpha , 0 , 255 )
self . behaviour . apply ( self . cover_viewer )
self . stage . add ( self . cover_viewer )
self . cover_viewer . show ( )
timeline . start ( )
2007-08-14 18:10:53 -07:00
def pause ( self ) :
pass
def unpause ( self ) :
2007-08-26 06:15:05 -07:00
pass
2007-08-14 18:10:53 -07:00
class videoItem ( ) :
def __init ( self ) :
self . mythID = None
def importFromMythObject ( self , mythObject ) :
self . mythID = mythObject [ 0 ]
self . title = mythObject [ 1 ]
self . director = mythObject [ 2 ]
self . plot = mythObject [ 3 ]
self . rating = mythObject [ 4 ]
self . inetRef = mythObject [ 5 ]
self . year = mythObject [ 6 ]
self . userRating = mythObject [ 7 ]
self . length = mythObject [ 8 ]
self . showLevel = mythObject [ 9 ]
self . filename = mythObject [ 10 ]
self . coverfile = mythObject [ 11 ]
self . childID = mythObject [ 12 ]
self . browse = mythObject [ 13 ]
self . playCommand = mythObject [ 14 ]
self . category = mythObject [ 15 ]
def getTitle ( self ) :
return self . title
def getCoverfile ( self ) :
return self . coverfile
2007-11-13 05:03:39 -08:00