- Further work on changing channels
This commit is contained in:
parent
bb5aa589ba
commit
b53e422fbf
53
SplashScr.py
53
SplashScr.py
|
@ -7,28 +7,30 @@ import pango
|
|||
import clutter
|
||||
from Spinner import Spinner
|
||||
|
||||
class SplashScr():
|
||||
class SplashScr(clutter.Group):
|
||||
font = "Lucida Grande "
|
||||
message_font_size = 30
|
||||
detail_font_size = 22
|
||||
|
||||
def __init__(self, stage):
|
||||
clutter.Group.__init__ (self)
|
||||
self.stage = stage
|
||||
|
||||
self.backdrop = clutter.Rectangle()
|
||||
self.backdrop.set_color(clutter.color_parse('Black'))
|
||||
self.backdrop.set_width(self.stage.get_width())
|
||||
self.backdrop.set_height(self.stage.get_height())
|
||||
|
||||
|
||||
self.main_group = clutter.Group()
|
||||
self.add(self.backdrop)
|
||||
|
||||
self.centre_group = clutter.Group()
|
||||
self.add(self.centre_group)
|
||||
|
||||
pixbuf = gtk.gdk.pixbuf_new_from_file("ui/splash_box.png")
|
||||
self.box = clutter.Texture()
|
||||
self.box.set_pixbuf(pixbuf)
|
||||
self.box.set_opacity(int(255 * 0.75))
|
||||
self.box.set_height(int(self.stage.get_height()* 0.15))
|
||||
self.main_group.add(self.box)
|
||||
self.centre_group.add(self.box)
|
||||
|
||||
self.spinner = Spinner()
|
||||
height = int(self.box.get_height() * 0.90)
|
||||
|
@ -36,7 +38,7 @@ class SplashScr():
|
|||
self.spinner.set_height(height)
|
||||
self.spinner.set_width(height)
|
||||
self.spinner.set_position(5, int(self.box.get_height() * 0.05 ) )
|
||||
self.main_group.add(self.spinner)
|
||||
self.centre_group.add(self.spinner)
|
||||
|
||||
self.message = clutter.Label()
|
||||
self.message.set_font_name(self.font + str(self.message_font_size))
|
||||
|
@ -45,30 +47,47 @@ class SplashScr():
|
|||
pos_x = pos_x + int (self.spinner.get_width() * 1.1)
|
||||
self.message.set_position(pos_x, 0)
|
||||
self.message.set_text("Loading...")
|
||||
self.main_group.add(self.message)
|
||||
self.centre_group.add(self.message)
|
||||
|
||||
self.detail = clutter.Label()
|
||||
self.detail.set_font_name(self.font + str(self.detail_font_size))
|
||||
self.detail.set_color(clutter.color_parse('White'))
|
||||
self.main_group.add(self.detail)
|
||||
|
||||
|
||||
self.centre_group.add(self.detail)
|
||||
|
||||
def display(self):
|
||||
self.stage.add(self.backdrop)
|
||||
self.stage.add(self)
|
||||
self.backdrop.show()
|
||||
|
||||
self.stage.add(self.main_group)
|
||||
self.main_group.show_all()
|
||||
|
||||
group_x = (self.stage.get_width()/2) - (self.box.get_width()/2)
|
||||
group_y = (self.stage.get_height()/2) - (self.box.get_height()/2)
|
||||
self.main_group.set_position(group_x, group_y)
|
||||
self.main_group.show()
|
||||
self.centre_group.set_position(group_x, group_y)
|
||||
self.centre_group.show_all()
|
||||
self.centre_group.show()
|
||||
|
||||
self.show()
|
||||
self.spinner.start()
|
||||
|
||||
|
||||
def display_elegant(self):
|
||||
self.set_opacity(0)
|
||||
self.stage.add(self)
|
||||
self.show_all()
|
||||
|
||||
group_x = (self.stage.get_width()/2) - (self.box.get_width()/2)
|
||||
group_y = (self.stage.get_height()/2) - (self.box.get_height()/2)
|
||||
self.centre_group.set_position(group_x, group_y)
|
||||
self.show()
|
||||
|
||||
timeline_opacity = clutter.Timeline(20, 25)
|
||||
alpha_opacity = clutter.Alpha(timeline_opacity, clutter.ramp_inc_func)
|
||||
self.behaviour_opacity = clutter.BehaviourOpacity(opacity_start=0, opacity_end=255, alpha=alpha_opacity)
|
||||
self.behaviour_opacity.apply(self)
|
||||
timeline_opacity.start()
|
||||
self.spinner.start()
|
||||
|
||||
def remove(self):
|
||||
self.stage.remove(self.main_group)
|
||||
self.stage.remove(self.backdrop)
|
||||
self.stage.remove(self)
|
||||
self.spinner.stop()
|
||||
|
||||
|
||||
|
|
|
@ -5,6 +5,8 @@ import thread
|
|||
import os
|
||||
|
||||
class MythBackendConnection(threading.Thread):
|
||||
pipe_rfd = None
|
||||
pipe_wfd = None
|
||||
|
||||
def __init__(self, videoPlayer, server, port):
|
||||
self.protocolVersion = 31
|
||||
|
@ -111,7 +113,10 @@ class MythBackendConnection(threading.Thread):
|
|||
result = self.receive_reply(self.sock)
|
||||
if not result == spawn_receive_string:
|
||||
print "TV_PLAYER: failed to spawn live tv. Result: "+str(result)
|
||||
|
||||
self.setup_recording()
|
||||
|
||||
def setup_recording(self):
|
||||
#Check the recording
|
||||
check_string = "QUERY_RECORDER "+str(self.recorder)+"[]:[]IS_RECORDING"
|
||||
self.send_cmd(self.sock, check_string)
|
||||
|
@ -181,9 +186,10 @@ class MythBackendConnection(threading.Thread):
|
|||
max_request_size = 270000
|
||||
request_size_step = 16384
|
||||
|
||||
#Data is sent through a pipe to GStreamer
|
||||
(pipe_rfd, pipe_wfd) = os.pipe()
|
||||
self.videoPlayer.begin_playback(pipe_rfd)
|
||||
if self.pipe_rfd is None:
|
||||
#Data is sent through a pipe to GStreamer
|
||||
(self.pipe_rfd, self.pipe_wfd) = os.pipe()
|
||||
self.videoPlayer.begin_playback(self.pipe_rfd)
|
||||
|
||||
print "BEGINNING PLAYBACK!"
|
||||
self.Playing = True
|
||||
|
@ -192,7 +198,7 @@ class MythBackendConnection(threading.Thread):
|
|||
self.send_cmd(cmd_sock, transfer_cmd)
|
||||
num_bytes = int(self.receive_reply(cmd_sock))
|
||||
data = data_sock.recv(num_bytes)
|
||||
os.write(pipe_wfd, data)
|
||||
os.write(self.pipe_wfd, data)
|
||||
|
||||
|
||||
#This tries to optimise the request size
|
||||
|
@ -205,8 +211,7 @@ class MythBackendConnection(threading.Thread):
|
|||
|
||||
|
||||
print "Ending playback"
|
||||
os.close(pipe_wfd)
|
||||
os.close(pipe_rfd)
|
||||
|
||||
|
||||
def message_socket_mgr(self, msg_socket):
|
||||
#Do the protocol version check
|
||||
|
@ -238,21 +243,30 @@ class MythBackendConnection(threading.Thread):
|
|||
|
||||
def change_channel(self, chanName):
|
||||
if self.Playing:
|
||||
self.Playing = False
|
||||
#First check its a valid channel ID
|
||||
validate_cmd = "QUERY_RECORDER "+str(self.recorder) +"[]:[]CHECK CHANNEL[]:[]"+str(chanName)
|
||||
self.send_cmd(self.sock, validate_cmd)
|
||||
result = self.receive_reply(self.sock)
|
||||
print "Recorder Result: " + result
|
||||
|
||||
if result == "ok":
|
||||
self.Playing = False
|
||||
|
||||
change_cmd = "QUERY_RECORDER "+str(self.recorder) +"[]:[]SET CHANNEL[]:[]"+str(chanName)
|
||||
self.send_cmd(self.sock, change_cmd)
|
||||
result = self.receive_reply(self.sock)
|
||||
print "Change result: " + result
|
||||
|
||||
#Reset the data socket
|
||||
self.data_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
self.data_socket_id = None
|
||||
self.data_sock.connect((self.server, self.server_port))
|
||||
|
||||
#Start a recording thread
|
||||
self.buffer_live(self.sock, self.data_sock, self.data_socket_id)
|
||||
self.setup_recording()
|
||||
#self.buffer_live(self.sock, self.data_sock, self.data_socket_id)
|
||||
else:
|
||||
print "TV_PLAYER: Invalid channel selected"
|
||||
|
||||
def end_stream(self):
|
||||
self.stream = False
|
||||
|
@ -264,6 +278,14 @@ class MythBackendConnection(threading.Thread):
|
|||
self.send_cmd(self.sock, stop_cmd)
|
||||
result = self.receive_reply(self.sock)
|
||||
|
||||
#Close the pipe
|
||||
if not self.pipe_wfd is None:
|
||||
os.close(self.pipe_wfd)
|
||||
self.pipe_wfd = None
|
||||
if not self.pipe_rfd is None:
|
||||
os.close(self.pipe_rfd)
|
||||
self.pipe_rfd = None
|
||||
|
||||
if not self.data_socket_id is None:
|
||||
end_transfer_cmd = "QUERY_FILETRANSFER "+str(self.data_socket_id) +"[]:[]DONE"
|
||||
self.send_cmd(self.sock, end_transfer_cmd)
|
||||
|
|
|
@ -8,6 +8,7 @@ import gobject
|
|||
from clutter import cluttergst
|
||||
from modules.myth_tv_player.MythBackendConn import MythBackendConnection
|
||||
from modules.myth_tv_player.tv_db_controller import tv_db_controller
|
||||
from SplashScr import SplashScr
|
||||
#from Menu import Menu
|
||||
from VideoController import VideoController
|
||||
|
||||
|
@ -67,10 +68,16 @@ class Module:
|
|||
def on_key_press_event (self, stage, event):
|
||||
if self.isRunning:
|
||||
#Handle up/down presses for OSD
|
||||
if (event.keyval == clutter.keysyms.Up) or (event.keyval == clutter.keysyms.Down) or (event.keyval == clutter.keysyms.Return):
|
||||
if (event.keyval == clutter.keysyms.Up) or (event.keyval == clutter.keysyms.Down):
|
||||
self.osd.on_key_press_event(self.stage, event, self)
|
||||
|
||||
self.videoController.on_key_press_event(event)
|
||||
|
||||
if (event.keyval == clutter.keysyms.Return):
|
||||
if self.osd.on_screen:
|
||||
self.loading_scr = SplashScr(self.stage)
|
||||
self.myConn.change_channel(self.currentChannel.name)
|
||||
|
||||
if event.keyval == clutter.keysyms.Escape:
|
||||
return True
|
||||
#print event.hardware_keycode
|
||||
|
@ -122,8 +129,6 @@ class osd:
|
|||
elif (event.keyval == clutter.keysyms.Down):
|
||||
self.channelOffset -= 1
|
||||
|
||||
if (event.keyval == clutter.keysyms.Return):
|
||||
tv_player.myConn.change_channel(self.currentChannel.name)
|
||||
else:
|
||||
stage.add(self.text)
|
||||
self.channelOffset = 0
|
||||
|
|
Loading…
Reference in New Issue