Home | Trees | Indices | Help |
---|
|
1 # -*- coding: utf-8 -*- 2 # Elisa - Home multimedia server 3 # Copyright (C) 2006-2008 Fluendo Embedded S.L. (www.fluendo.com). 4 # All rights reserved. 5 # 6 # This file is available under one of two license agreements. 7 # 8 # This file is licensed under the GPL version 3. 9 # See "LICENSE.GPL" in the root of this distribution including a special 10 # exception to use Elisa with Fluendo's plugins. 11 # 12 # The GPL part of Elisa is also available under a commercial licensing 13 # agreement from Fluendo. 14 # See "LICENSE.Elisa" in the root directory of this distribution package 15 # for details on that license. 16 17 18 __maintainer__ = 'Florian Boucault <florian@fluendo.com>' 19 __maintainer2__ = 'Philippe Normand <philippe@fluendo.com>' 20 21 22 from elisa.base_components.view import View 23 from elisa.core import common 24 from elisa.core import player 25 from twisted.internet import reactor, defer 26 import gst 27 import os 2830 """ 31 This class implements a view which can create a 32 Player instance and manage it. 33 This class can be inherited to provide the 34 toolkit dependent display, as well as the 35 GStreamer video and audio sinks 36 """ 37 38 supported_controllers = ('base:player_controller',) 3917641 super(PlayerView, self).__init__() 42 self.player = common.application.player_registry.create_player()4345 super(PlayerView, self).initialize() 46 bus = common.application.bus 47 bus.register(self._is_playing, player.PlayerPlaying) 48 bus.register(self._stopped, player.PlayerStopping) 49 bus.register(self._error, player.PlayerError)5052 if sender == self.player: 53 self.player.volume = self.controller.model.volume 54 self.controller.model.state = player.STATES.PLAYING5557 self._stopped(message, sender)5860 if sender == self.player: 61 if self.controller.model.state != player.STATES.STOPPED: 62 self.controller.model.state = player.STATES.STOPPED6365 super(PlayerView, self).attribute_set(origin, key, old_value, new_value) 66 self.debug("attribute %r set to %r", key, new_value) 67 if key == 'state': 68 69 if new_value == player.STATES.PLAYING: 70 self.player.volume = self.controller.model.volume 71 self.state_changed(new_value) 72 self.player.play() 73 elif new_value == player.STATES.PAUSED: 74 self.state_changed(new_value) 75 self.player.pause() 76 elif new_value == player.STATES.STOPPED: 77 self.state_changed(new_value) 78 if self.player.state != player.STATES.STOPPED: 79 self.player.stop() 80 elif key == 'uri': 81 self.player.uri = new_value 82 self.uri_changed(new_value) 83 elif key == 'seek_to': 84 self.seek_to_changed(new_value) 85 elif key == 'volume': 86 self.volume_changed(new_value) 87 elif key == 'muted': 88 self.player.muted = new_value 89 elif key == 'pause_requested': 90 self.pause_requested_changed(new_value) 91 elif key == 'focused': 92 self.focused_changed(new_value) 93 elif key == 'media_type': 94 self.media_type_changed(new_value)95 99101 self.player.volume = self.controller.model.volume 102 if self.controller.model.muted: 103 self.player.muted = True 104 else: 105 self.player.muted = False 106 107 self.controller.model.duration = self.player.duration 108 self._update_model_position()109111 if self.controller.model.duration != self.player.duration: 112 self.controller.model.duration = self.player.duration 113 self.controller.model.position = self.player.position 114 if self.controller.model.state == player.STATES.PLAYING: 115 reactor.callLater(0.5, self._update_model_position)116 119 122 125 128130 state = self.controller.state 131 if state == player.STATES.PLAYING: 132 self.player.play() 133 elif state == player.STATES.PAUSED: 134 self.player.pause() 135 elif state == player.STATES.STOPPED: 136 self.player.stop()137139 """ 140 We only support text 141 """ 142 self.player.subtitle_uri = None 143 144 SUBTITLE_FORMATS = ("asc", "txt", "srt", "smi", "ssa") 145 146 if uri and self.controller.model.media_type == 'video': 147 self.debug("Searching subtitles for %s", uri) 148 149 media_manager = common.application.media_manager 150 filename = uri.filename 151 try: 152 ext_index = filename.index(uri.extension) 153 except ValueError: 154 # extension given but not found 155 self.debug("Extension of %r not found, skipping subtitles "\ 156 " detection", uri) 157 else: 158 basename = uri.filename[:ext_index-1] 159 parent = uri.parent 160 161 def got_children(children, uri): 162 found = False 163 for child_uri, metadata in children: 164 child_basename, dummy = os.path.splitext(child_uri.filename) 165 if child_basename == basename and \ 166 child_uri.extension in SUBTITLE_FORMATS: 167 self.player.subtitle_uri = child_uri 168 self.info("Found subtitles in file: %s", child_uri) 169 found = True 170 break 171 if not found: 172 self.info("No subtitles found for %r", uri)173 174 dfr = media_manager.get_direct_children(uri.parent, []) 175 dfr.addCallback(got_children, uri.parent)
Home | Trees | Indices | Help |
---|
Generated by Epydoc 3.0beta1 on Wed Jan 16 19:10:35 2008 | http://epydoc.sourceforge.net |