BTW guys I am still actively using VDR w/ Freevo 2, although I haven't SVN updated that machine since Dischi changed some menu properties (which broke the vdrmain plugin). I am using xinelibout to remotely access the VDR server and it works awesome.
I am about to get a new job so maybe I can justify spending some "free" time on updating it. -Rob mike lewis wrote: > On 4/23/07, Juha Pahkala <[EMAIL PROTECTED]> wrote: >> mike lewis wrote: >> > On 4/12/07, Juha Pahkala <[EMAIL PROTECTED]> wrote: >> > >> >> I was excited to see your patch on the devel list today, but it >> awfully >> >> much resembles something more for CD burning than VDR, might be the >> >> wrong patch.... :) >> >> >> >> >> > Doh! Sorry. I'll have a look over the weekend.. >> > >> > M >> A friendly reminder... i'm (and probably others as well) still >> interested in the patch if you find it.... >> > Here tis, in all it's glory.. > > local_conf excerpt: > --- > #plugin.activate('vdr_interface') > plugin.activate('vdrtv', level=5) > VDR_VIEWER_PLUGIN = 'xine' > VDR_XINE_FIFO_PATH = 'vdr:/tmp/vdr-xine/stream#demux:mpeg_pes' > --- > > Note, vdr_interface no longer required.. this new version works on > vdr-xine only when installed to allow xine to issue commands to vdr. > Can't what compile option that is though... vdr_interface is the > reason why the other versions of the plugin no longer work.. > > Let me know how it goes... I'm happy to help you get it running. > Sorry for taking so long. Been studying. > > Mike > >> tia, juhis >> >> >> ------------------------------------------------------------------------- >> This SF.net email is sponsored by DB2 Express >> Download DB2 Express C - the FREE version of DB2 express and take >> control of your XML. No limits. Just data. Click to get it now. >> http://sourceforge.net/powerbar/db2/ >> _______________________________________________ >> Freevo-users mailing list >> Freevo-users@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/freevo-users >> > > ------------------------------------------------------------------------ > > #if 0 /* > # ----------------------------------------------------------------------- > # vdrtv.py - A VDR (DVB) plugin for freevo > # ----------------------------------------------------------------------- > # Se README for documentation > # ----------------------------------------------------------------------- > # Revision history > # see the file HISTORY > # ----------------------------------------------------------------------- > # Freevo - A Home Theater PC framework > # Copyright (C) 2003 Krister Lagerstrom, et al. > # Please see the file freevo/Docs/CREDITS for a complete list of authors. > # > # This program is free software; you can redistribute it and/or modify > # it under the terms of the GNU General Public License as published by > # the Free Software Foundation; either version 2 of the License, or > # (at your option) any later version. > # > # This program is distributed in the hope that it will be useful, but > # WITHOUT ANY WARRANTY; without even the implied warranty of MER- > # CHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General > # Public License for more details. > # > # You should have received a copy of the GNU General Public License along > # with this program; if not, write to the Free Software Foundation, Inc., > # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA > # > # ----------------------------------------------------------------------- */ > #endif > > #python modules > import re > > #freevo modules > import config, menu, rc, plugin, util > from item import Item > import childapp > import pygame.locals as key > from event import * > > #vdrpy modules > #from vdr.svdrp import SVDRP > import time > > VDR_EVENTS = { > 'PLAY' : PLAY, > 'PAUSE' : PAUSE, > 'STOP' : STOP, > 'EXIT' : Event('EXIT'), > 'UP' : Event('UP'), > 'DOWN' : Event('DOWN'), > 'LEFT' : Event('LEFT'), > 'RIGHT' : Event('RIGHT'), > '0' : INPUT_0, > '1' : INPUT_1, > '2' : INPUT_2, > '3' : INPUT_3, > '4' : INPUT_4, > '5' : INPUT_5, > '6' : INPUT_6, > '7' : INPUT_7, > '8' : INPUT_8, > '9' : INPUT_9, > 'RED' : Event('RED'), > 'GREEN' : Event('GREEN'), > 'YELLOW' : Event('YELLOW'), > 'BLUE' : Event('BLUE'), > 'POWER' : Event('POWER'), > 'MENU' : MENU, > # 'BACK' : Event('BACK'), > #michaell > 'ENTER' : Event('BACK'), > 'SELECT' : Event('SELECT'), > 'VOL+' : Event('VOL+'), > 'VOL-' : Event('VOL-'), > 'MUTE' : Event('MUTE'), > 'CH+' : Event('CH+'), > 'CH-' : Event('CH-'), > 'FFWD' : Event('FFWD'), > 'REW' : Event('REW'), > 'REC' : Event('REC'), > 'ASPECT' : Event('ASPECT'), > 'ZOOM' : Event('ZOOMIN'), > 'DVHS' : Event('ZOOMOUT'), > 'RECORDINGS' : Event('RECORDINGS'), > 'CHANNELS' : Event('CHANNELS'), > 'AUDIO' : Event('LANG'), > 'SCHEDULE' : Event('GUIDE'), > 'TIMERS' : Event('TIMERS'), > 'SETUP' : Event('SETUP'), > 'COMMANDS' : Event('EJECT'), > } > > class PluginInterface(plugin.MainMenuPlugin): > """ > A plugin to run vdr in freevo > To activate, put the following lines in local_conf.py: > > plugin.activate('vdrtv', level=5) > > You may configure the plugin by following variables in your local_conf.py > > VDR_VIEWER_PLUGIN='tvtime' # Wich Viewer? Use either tvtime or xine. > VDR_XINE_FIFO_PATH='vdr://var/vdr/xine/stream#demux:mpeg_pes' > # path to your vdr-xine fifo, only if > different > # than this one > # support for the networked version of > vdr-xine > # is planned for future releases > """ > def __init__(self): > plugin.MainMenuPlugin.__init__(self) > # check for plugin dependencies > #self.vdrinterface=plugin.getbyname('VDRINTERFACE'); > #if self.vdrinterface==None: > # raise Exception,"VDR Interface Plugin not loaded!" > > def items(self, parent): > return [ VDRXineMainMenuItem(parent) ] > > > class FooSenderPlugin(plugin.DaemonPlugin): > """ > Sending foo events > """ > def __init__(self): > DaemonPlugin.__init__(self) > self.poll_interval = 1000 > #self.vdrinterface=plugin.getbyname('VDRINTERFACE'); > > def poll(self): > print "trying to close svdrp" > print dir(self.vdrinterface) > > class VDRXineMainMenuItem(Item): > """ > This is the item for the main menu > """ > def __init__(self, parent): > try: > config.XINE_COMMAND > except: > print String(_( 'ERROR' )) + ': ' + \ > String(_("'XINE_COMMAND' not defined, plugin 'xine' > deactivated.\n" \ > 'please check the xine section in > freevo_config.py' )) > return > > Item.__init__(self, parent, skin_type='tv') > self.tcp= False > self.viewer=config.VDR_VIEWER_PLUGIN > self.app = True > self.name = _('Watch TV (VDR)') > self.app_mode = 'vdr' > if not config.EVENTS.has_key('vdr'): > config.EVENTS['vdr'] = VDR_EVENTS > config.KEYMAP[key.K_F9] = 'RED' > config.KEYMAP[key.K_F10] = 'GREEN' > config.KEYMAP[key.K_F11] = 'YELLOW' > config.KEYMAP[key.K_F12] = 'BLUE' > config.KEYMAP[key.K_BACKSPACE] = 'BACK' > self.vdrhasfreevoplugin = None > > def actions(self): > """ > Start VDR plugin > """ > items = [ ( self.start_vdr_plugin , _('Start VDR plugin' )) ] > return items > > def start_vdr_plugin(self, arg=None, menuw=None): > if plugin.getbyname('MIXER'): > mixer=plugin.getbyname('MIXER') > mixer.reset() > > if self.viewer=='xine': > command = [ '--prio=%s' % config.MPLAYER_NICE ] + \ > config.XINE_COMMAND.split(' ') + \ > [ '--stdctl', '-V', config.XINE_VO_DEV, > '-A', config.XINE_AO_DEV ] + \ > config.XINE_ARGS_DEF.split(' ') > command.append('-D') > > if not rc.PYLIRC and '--no-lirc' in command: > command.remove('--no-lirc') > > if config.VDR_XINE_FIFO_PATH: > command.append(config.VDR_XINE_FIFO_PATH) > else: > command.append('vdr://var/vdr/xine/stream#demux:mpeg_pes') > else: > self.tcp=1 > if self.viewer=='tvtime': > command = config.TVTIME_CMD + " " + config.TVTIME_ARGS > else: > command = self.viewer > > if self.tcp: > self.svdrp = > SVDRP(config.VDR_SVDRP_HOST,port=config.VDR_SVDRP_PORT,close_connection=config.VDR_SVDRP_ALWAYSCLOSE) > # let's see if the freevo plugin is loaded in freevo > result = self.svdrp.write_cmd('plug freevo' + '\n') > if result[0:3] == '214': > self.vdrhasfreevoplugin = True > # turn off VDR remotes > self.svdrp.write_cmd('plug freevo rctl off' + '\n') > print result > else: > print "\n#####################################" > print "VDR has no plugin named 'freevo' loaded" > print "Most likely you'll experience key-hit conflicts in VDR" > print "#####################################\n" > # switch vdr to the last used channel > channel=self.vdrinterface.getVar('CURRENT_TV_CHANNEL') > if channel: > print "switching to "+channel > self.svdrp.chan(channel) > if self.viewer!='xine': > mixer.setLineinVolume(100) > > if not self.menuw: > self.menuw = menuw > > self.menuw.hide() > > self.app = childapp.ChildApp2(command) > rc.app(self) > > return None > > def hitk(self, key): > if self.vdrhasfreevoplugin: > # temporarily turn on VDR remotes > self.svdrp.write_cmd('plug freevo rctl on' + '\n') > self.svdrp.hitk(key) > if self.vdrhasfreevoplugin: > # turn off VDR remotes > self.svdrp.write_cmd('plug freevo rctl off' + '\n') > > def stop(self): > if self.app: > if self.viewer=='xine': > self.app.stop('quit\n') > else: > self.app.stop() > rc.app(None) > if self.tcp: > # retrieve and store the current channel > channel=self.svdrp.current_chan() > self.vdrinterface.putVar('CURRENT_TV_CHANNEL',channel) > self.vdrinterface.saveVars() > if self.vdrhasfreevoplugin: > # turn on VDR remotes > self.svdrp.write_cmd('plug freevo rctl on' + '\n') > self.hitk('stop') > self.svdrp.close() > self.svdrp=0 > if plugin.getbyname('MIXER'): > plugin.getbyname('MIXER').reset() > self.menuw.show() > > def eventhandler(self, event, menuw=None): > """ > eventhandler for xine control. > """ > if not self.app: > return False > > print "VDR_XINE: EVENT %s" % event > > if event == PLAY_START: > print "VDR_XINE: PLAY_START" > return True > > if event == PLAY_END: > print "VDR_XINE: PLAY_END" > self.stop() > return True > > if event == VIDEO_START: > print "VDR_XINE: VIDEO_START" > return False > > if event == VIDEO_END: > print "VDR_XINE: VIDEO_END" > return False > > if event == INPUT_0: > if self.tcp: > self.hitk('0') > else: > self.app.write('number0\n') > return True > > if event == INPUT_1: > if self.tcp: > self.hitk('1') > else: > self.app.write('number1\n') > return True > > if event == INPUT_2: > if self.tcp: > self.hitk('2') > else: > self.app.write('number2\n') > return True > > if event == INPUT_3: > if self.tcp: > self.hitk('3') > else: > self.app.write('number3\n') > return True > > if event == INPUT_4: > if self.tcp: > self.hitk('4') > else: > self.app.write('number4\n') > return True > > if event == INPUT_5: > if self.tcp: > self.hitk('5') > else: > self.app.write('number5\n') > return True > > if event == INPUT_6: > if self.tcp: > self.hitk('6') > else: > self.app.write('number6\n') > return True > > if event == INPUT_7: > if self.tcp: > self.hitk('7') > else: > self.app.write('number7\n') > return True > > if event == INPUT_8: > if self.tcp: > self.hitk('8') > else: > self.app.write('number8\n') > return True > > if event == INPUT_9: > if self.tcp: > self.hitk('9') > else: > self.app.write('number9\n') > return True > > if event == Event('RED'): > if self.tcp: > self.hitk('Red') > else: > self.app.write('VDRButtonRed\n') > return True > > if event == Event('GREEN'): > if self.tcp: > self.hitk('Green') > else: > self.app.write('VDRButtonGreen\n') > return True > > if event == Event('YELLOW'): > if self.tcp: > self.hitk('Yellow') > else: > self.app.write('VDRButtonYellow\n') > return True > > if event == Event('BLUE'): > if self.tcp: > self.hitk('Blue') > else: > self.app.write('VDRButtonBlue\n') > return True > > if event == PLAY: > if self.tcp: > self.hitk('Play') > else: > self.app.write('VDRPlay\n') > return True > > if event == PAUSE: > if self.tcp: > self.hitk('Pause') > else: > self.app.write('VDRPause\n') > return True > > if event == Event('BACK'): > if self.tcp: > self.hitk('back') > else: > self.app.write('VDRBack\n') > return True > > > if event == STOP: > if self.tcp: > self.hitk('Stop') > else: > self.app.write('VDRStop\n') > return True > > if event == Event('EXIT'): > if self.tcp: > self.hitk('Back') > self.stop() > else: > self.stop() > return True > > if event == Event('POWER'): > if self.tcp: > self.stop() > return True > > if event == Event('UP'): > if self.tcp: > self.hitk('Up') > else: > self.app.write('EventUp\n') > return True > > if event == Event('DOWN'): > if self.tcp: > self.hitk('Down') > else: > self.app.write('EventDown\n') > return True > > if event == Event('LEFT'): > if self.tcp: > self.hitk('Left') > else: > self.app.write('EventLeft\n') > return True > > if event == Event('RIGHT'): > if self.tcp: > self.hitk('Right') > else: > self.app.write('EventRight\n') > return True > > if event == Event('VOL+'): > if self.tcp: > self.hitk('Volume+') > else: > self.app.write('VDRVolumePlus\n') > return True > > if event == Event('VOL-'): > if self.tcp: > self.hitk('Volume-') > else: > self.app.write('VDRVolumeMinus\n') > return True > > if event == Event('MUTE'): > if self.tcp: > self.hitk('MUTE') > else: > self.app.write('VDRMute\n') > return True > > if event == Event('CH+'): > if self.tcp: > self.hitk('Channel+') > else: > self.app.write('VDRChannelPlus\n') > return True > > if event == Event('CH-'): > if self.tcp: > self.hitk('Channel-') > else: > self.app.write('VDRChannelMinus\n') > return True > > if event == Event('FFWD'): > if self.tcp: > self.hitk('FastFwd') > else: > self.app.write('VDRFastFwd\n') > return True > > if event == Event('REW'): > if self.tcp: > self.hitk('FastRew') > else: > self.app.write('VDRFastRew\n') > return True > > if event == Event('REC'): > if self.tcp: > self.hitk('Record') > else: > self.app.write('VDRRecord\n') > return True > > if event == Event('ZOOMIN'): > if self.tcp: > self.app.write('z\n') > #self.hitk('z') > else: > self.app.write('z\n') > return True > > if event == Event('ZOOMOUT'): > if self.tcp: > self.app.write('Z\n') > #self.hitk('Z') > else: > self.app.write('Z\n') > return True > > if event == Event('ASPECT'): > if self.tcp: > self.app.write('ToggleAspectRatio\n') > else: > self.app.write('ToggleAspectRatio\n') > return True > > if event == Event('SELECT'): > if self.tcp: > self.hitk('Ok') > else: > self.app.write('EventSelect\n') > return True > > if event == MENU: > if self.tcp: > self.hitk('Menu') > else: > self.app.write('Menu\n') > return True > > if event == Event('RECORDINGS'): > if self.tcp: > self.hitk('Recordings') > else: > self.app.write('VDRRecordings\n') > return True > > if event == Event('CHANNELS'): > if self.tcp: > self.hitk('Channels') > else: > self.app.write('VDRChannels\n') > return True > > if event == Event('AUDIO'): > if self.tcp: > self.hitk('Audio') > else: > none # fixme > return True > > if event == Event('SCHEDULE'): > if self.tcp: > self.hitk('Schedule') > else: > self.app.write('VDRSchedule\n') > return True > > if event == Event('TIMERS'): > if self.tcp: > self.hitk('Timers') > else: > self.app.write('VDRTimers\n') > return True > > if event == Event('SETUP'): > if self.tcp: > self.hitk('Setup') > else: > self.app.write('VDRSetup\n') > return True > > if event == Event('COMMANDS'): > if self.tcp: > self.hitk('Commands') > else: > self.app.write('VDRCommands\n') > return True > > # nothing found? > return False > > > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > > > ------------------------------------------------------------------------ > > _______________________________________________ > Freevo-users mailing list > Freevo-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/freevo-users ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ Freevo-users mailing list Freevo-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freevo-users