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-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-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()
|
|
|
|
|
|
|
|
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
|
|
|
|