Package elisa :: Package plugins :: Package bad :: Package coherence_plugin :: Module upnp_media_renderer
[hide private]
[frames] | no frames]

Source Code for Module elisa.plugins.bad.coherence_plugin.upnp_media_renderer

  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  UPnP MediaRenderer 
 19  """ 
 20   
 21  __maintainer__ = "Philippe Normand <philippe@fluendo.com>" 
 22   
 23  from elisa.base_components import service_provider 
 24  from elisa.core import common, component 
 25  from elisa.core.bus.bus_message import PlayerModel, ComponentsLoaded, \ 
 26       PBReferenceable, CoherencePlugin 
 27  from elisa.core import player, media_uri 
 28   
 29  from twisted.spread import pb 
 30   
31 -class UPnPMediaRenderer(pb.Referenceable, service_provider.ServiceProvider):
32 """ 33 DOCME 34 """ 35
36 - def initialize(self):
37 self._player_model = None 38 common.application.bus.register(self._bus_message_received, 39 PlayerModel, ComponentsLoaded)
40
41 - def _bus_message_received(self, msg, sender):
42 if isinstance(msg, PlayerModel): 43 self._player_model = msg.player_model 44 else: 45 # register myself to the PB service 46 msg = PBReferenceable('get_player', self) 47 common.application.bus.send_message(msg) 48 49 args = {}#'host':'internal'} 50 msg = CoherencePlugin('ElisaPlayer', args) 51 common.application.bus.send_message(msg)
52 53
54 - def remote_set_uri(self, uri):
55 if not self._player_model: 56 return 57 if uri: 58 uri = media_uri.MediaUri(uri) 59 self.debug("Playing %r", uri) 60 self._player_model.uri = uri 61 else: 62 self.warning("Not usable URI: %r", uri)
63
65 state = 'STOPPED' 66 if self._player_model and self._player_model.state: 67 state = str(self._player_model.state) 68 69 return state
70
71 - def remote_get_volume(self):
72 volume = 0 73 if self._player_model: 74 volume = self._player_model.volume 75 volume = (volume * 100) / 10. 76 return int(volume)
77 78
79 - def remote_set_volume(self, volume):
80 if self._player_model: 81 if int(volume) in range(101): 82 volume = int(volume) 83 self.info("Setting volume to %s" % volume) 84 volume = (volume * 10) / 100. 85 if volume < 0.: 86 volume = 0. 87 elif volume > 10.: 88 volume = 10. 89 self._player_model.volume = volume
90
91 - def remote_get_status(self):
92 position, duration = 0, 0 93 if self._player_model: 94 position = self._player_model.position 95 duration = self._player_model.duration 96 return (position, duration)
97
98 - def remote_get_mute(self):
99 muted = False 100 if self._player_model: 101 muted = self._player_model.muted 102 return muted
103
104 - def remote_mute(self):
105 if self._player_model: 106 self._player_model.muted = True
107
108 - def remote_un_mute(self):
109 if self._player_model: 110 self._player_model.muted = False
111
112 - def remote_play(self):
113 if self._player_model: 114 self._player_model.state = player.STATES.PLAYING 115 return True
116
117 - def remote_pause(self):
118 if self._player_model: 119 self._player_model.state = player.STATES.PAUSED 120 return True
121
122 - def remote_stop(self):
123 if self._player_model: 124 self._player_model.state = player.STATES.STOPPED 125 return True
126 127 128 """ 129 remote_play_uri = play_uri_once 130 remote_toggle_play_pause = toggle_play_pause 131 remote_seek_forward = seek_forward 132 remote_seek_backward = seek_backward 133 remote_increment_playback_speed = increment_playback_speed 134 remote_decrement_playback_speed = decrement_playback_speed 135 remote_next = next 136 remote_get_current_item = get_current_item 137 remote_get_status_informations = get_status_informations 138 """ 139