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
>> [email protected]
>> 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
> [email protected]
> 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-users