Author: dmeyer
Date: Sun Oct 16 14:26:55 2005
New Revision: 7717
Added:
trunk/freevo-tvserver/
trunk/freevo-tvserver/bin/
trunk/freevo-tvserver/bin/recordserver.py
- copied, changed from r7709, /trunk/freevo/src/helpers/recordserver.py
trunk/freevo-tvserver/setup.py
trunk/freevo-tvserver/share/
trunk/freevo-tvserver/share/config/
trunk/freevo-tvserver/share/config/tvserver.conf
trunk/freevo-tvserver/src/
trunk/freevo-tvserver/src/__init__.py
- copied unchanged from r7699, /trunk/freevo/src/record/__init__.py
trunk/freevo-tvserver/src/config.py
trunk/freevo-tvserver/src/conflict.py
- copied unchanged from r7699, /trunk/freevo/src/record/conflict.py
trunk/freevo-tvserver/src/favorite.py
- copied, changed from r7701, /trunk/freevo/src/record/favorite.py
trunk/freevo-tvserver/src/record_types.py
- copied, changed from r7699, /trunk/freevo/src/record/record_types.py
trunk/freevo-tvserver/src/recorder.py
- copied, changed from r7709, /trunk/freevo/src/record/recorder.py
trunk/freevo-tvserver/src/recording.py
- copied, changed from r7699, /trunk/freevo/src/record/recording.py
trunk/freevo-tvserver/src/server.py
- copied, changed from r7699, /trunk/freevo/src/record/server.py
Log:
create extra package for recordserver
Copied: trunk/freevo-tvserver/bin/recordserver.py (from r7709,
/trunk/freevo/src/helpers/recordserver.py)
==============================================================================
--- /trunk/freevo/src/helpers/recordserver.py (original)
+++ trunk/freevo-tvserver/bin/recordserver.py Sun Oct 16 14:26:55 2005
@@ -1,3 +1,4 @@
+#! /usr/bin/python
# -*- coding: iso-8859-1 -*-
# -----------------------------------------------------------------------------
# recordserver.py - start script for the recordserver
@@ -32,6 +33,7 @@
# python imports
import os
+import sys
import pwd
import logging
@@ -39,8 +41,14 @@
import kaa
import kaa.notifier
-# create logger objects in sysconfig
-import sysconfig
+# insert freevo path information
+__site__ = '../lib/python%s.%s/site-packages' % sys.version_info[:2]
+__site__ = os.path.normpath(os.path.join(os.path.dirname(__file__), __site__))
+if not __site__ in sys.path:
+ sys.path.insert(0, __site__)
+
+# create logger objects in conf
+import freevo.tvserver.config
# get logging object
log = logging.getLogger('record')
@@ -49,7 +57,8 @@
log.setLevel(logging.INFO)
# import freevo config
-import config
+# FIXME:
+# import config
# change uid
try:
@@ -61,15 +70,21 @@
except Exception, e:
log.warning('unable to set uid: %s' % e)
+# FIXME: create kaa.epg
+import kaa.epg
+kaa.epg.connect('sqlite2', freevo.conf.datafile('epgdb2'))
+kaa.epg.load()
+
# import recordserver
-import record.server
+from freevo.tvserver.server import RecordServer
# start recordserver
-server = record.server.RecordServer()
+server = RecordServer()
# start recorder for this machine
-if config.TV_RECORD_START_RECORDER:
- kaa.notifier.Process('freevo-tvdev').start()
+# FIXME:
+# if config.TV_RECORD_START_RECORDER:
+# kaa.notifier.Process('freevo-tvdev').start()
try:
Added: trunk/freevo-tvserver/setup.py
==============================================================================
--- (empty file)
+++ trunk/freevo-tvserver/setup.py Sun Oct 16 14:26:55 2005
@@ -0,0 +1,21 @@
+# Python distutils stuff
+import os
+import sys
+from distutils.core import setup, Extension
+
+share_files = [( 'share/freevo/config/', ['share/config/tvserver.conf'])]
+
+# now start the python magic
+setup (name = "freevo",
+ version = "2.0",
+ description = "Freevo",
+ author = "Krister Lagerstrom, et al.",
+ author_email = "[email protected]",
+ url = "http://www.freevo.org",
+ license = "GPL",
+
+ package_dir = { 'freevo.tvserver': 'src' },
+ packages = [ 'freevo.tvserver', 'freevo.tvserver' ],
+ scripts = [ 'bin/recordserver.py' ],
+ data_files = share_files
+ )
Added: trunk/freevo-tvserver/share/config/tvserver.conf
==============================================================================
--- (empty file)
+++ trunk/freevo-tvserver/share/config/tvserver.conf Sun Oct 16 14:26:55 2005
@@ -0,0 +1,41 @@
+# The general section defines same basic settings for the
+# recordserver
+
+[general]
+
+# the recordserver will start with that uid if started as root
+uid = 0
+
+# streaming url for live tv
+livetv_url = 224.224.224.10
+
+# The recordings sections defines same basic settings for
+# recordings. They can be set individualy for each recording
+
+[record]
+
+# try to start all recordings before their time with the given padding
+start_padding = 10
+
+# try to keep the recording running for the given padding
+stop_padding = 10
+
+# default filemask for recordings
+filemask = %%m-%%d %%H:%%M %(progname)s - %(title)s
+
+# directory where to store recordings
+dir =
+
+
+# The epg section defines the epg database to use
+
+[epg]
+backend = sqlite
+filename = $(DATADIR)/epgdb
+
+# Mapping for epg. All channels need a correct mapping. On first start,
+# this section has no data. When you start the server and the tvdev clients
+# report the channels, Freevo will store the information including a guess
+# here.
+
+[epg mapping]
Added: trunk/freevo-tvserver/src/config.py
==============================================================================
--- (empty file)
+++ trunk/freevo-tvserver/src/config.py Sun Oct 16 14:26:55 2005
@@ -0,0 +1,27 @@
+import os
+import sys
+import logging
+
+from freevo.conf import *
+
+# get logging object
+log = logging.getLogger()
+
+schema = { 'RECORDINGS_START_PADDING': int,
+ 'RECORDINGS_STOP_PADDING' : int,
+ 'GENERAL_UID' : int }
+
+conf = Config('tvserver.conf', schema)
+
+for key, value in conf.normalize():
+ if key.find(' ') == -1:
+ globals()[key] = value
+
+if not RECORD_DIR:
+ conf.save()
+ log.error('Error: record_dir not set')
+ log.error('Please check the config file: %s' % conf.filename)
+ sys.exit(0)
+
+EPG_FILENAME.replace('$(DATADIR)', DATADIR)
+EPG_MAPPING = conf['epg mapping']
Copied: trunk/freevo-tvserver/src/favorite.py (from r7701,
/trunk/freevo/src/record/favorite.py)
==============================================================================
--- /trunk/freevo/src/record/favorite.py (original)
+++ trunk/freevo-tvserver/src/favorite.py Sun Oct 16 14:26:55 2005
@@ -37,7 +37,8 @@
import logging
# freevo imports
-import util.fxdparser as fxdparser
+import config
+from freevo import fxdparser
# record imports
from record_types import *
@@ -71,8 +72,8 @@
start = int(m[0])*100 + int(m[1])
stop = int(m[2])*100 + int(m[3])
self.times.append((start, stop))
- self.start_padding = TV_RECORD_START_PADDING
- self.stop_padding = TV_RECORD_STOP_PADDING
+ self.start_padding = config.RECORD_START_PADDING
+ self.stop_padding = config.RECORD_STOP_PADDING
def short_list(self):
Copied: trunk/freevo-tvserver/src/record_types.py (from r7699,
/trunk/freevo/src/record/record_types.py)
==============================================================================
--- /trunk/freevo/src/record/record_types.py (original)
+++ trunk/freevo-tvserver/src/record_types.py Sun Oct 16 14:26:55 2005
@@ -11,10 +11,3 @@
# Time when to schedule the recording on a recorder
# (only next hour, update every 30 minutes)
SCHEDULE_TIMER = 60 * 60
-
-# multicast url for live tv
-LIVETV_URL = '224.224.224.10'
-
-# Stuff from freevo config
-from config import TV_RECORD_START_PADDING, TV_RECORD_STOP_PADDING, \
- TV_RECORD_FILEMASK, TV_RECORD_DIR
Copied: trunk/freevo-tvserver/src/recorder.py (from r7709,
/trunk/freevo/src/record/recorder.py)
==============================================================================
--- /trunk/freevo/src/record/recorder.py (original)
+++ trunk/freevo-tvserver/src/recorder.py Sun Oct 16 14:26:55 2005
@@ -31,6 +31,7 @@
# python imports
import os
+import sys
import time
import string
import copy
@@ -42,10 +43,8 @@
from kaa.notifier import OneShotTimer, Callback
import kaa.epg
-# freevo imports
-import config
-
# record imports
+import config
from record_types import *
# get logging object
@@ -58,8 +57,6 @@
# recording daemon
DAEMON = {'type': 'home-theatre', 'module': 'tvdev'}
-config.detect('channels')
-
class RecorderList(object):
def __init__(self, server):
self.recorder = []
@@ -195,6 +192,7 @@
self.livetv = {}
self.entity.call('device.describe', self.describe_cb, device)
self.rating = 0
+ self.mapping = config.EPG_MAPPING
self.channel2epg = {}
self.epg2channel = {}
@@ -202,6 +200,16 @@
return '<Recorder for %s>' % (self.name)
+ def sys_exit(self):
+ config.conf.save()
+ log.error('Unknown channels detected on device %s.' % self.device)
+ log.error('Please check %s' % config.conf.filename)
+ log.error('Freevo guessed some settings, so maybe a new start will
work\n')
+ sys.exit(0)
+
+ def normalize_name(self, name):
+ return String(name.replace('.', '').replace(' ', '')).upper().strip()
+
def describe_cb(self, result):
"""
RPC return for device.describe()
@@ -217,27 +225,38 @@
self.possible_bouquets = []
- # FIXME: this can take a while
- # Make this less ugly
+ error = False
for bouquet in result.arguments[2]:
self.possible_bouquets.append([])
for channel in bouquet:
- for c in kaa.epg.channels:
- if channel == c.access_id:
- epgid = c.id
- break
+ if channel in self.mapping:
+ epgid = self.mapping[channel] or channel
+ if epgid in self.epg2channel:
+ # duplicate id, skip it
+ continue
+ self.possible_bouquets[-1].append(epgid)
+ self.epg2channel[epgid] = channel
+ self.channel2epg[channel] = epgid
else:
- normchannel = String(channel.replace('.', '').replace(' ',
''))
+ error = True
+ # ok, new channel, try to guess mapping
for c in kaa.epg.channels:
- if normchannel == String(c.name.replace('.',
'').replace(' ', '')):
+ if channel == c.access_id:
epgid = c.id
break
else:
- epgid = channel
- self.possible_bouquets[-1].append(epgid)
- self.epg2channel[epgid] = channel
- self.channel2epg[channel] = epgid
+ normchannel = self.normalize_name(channel)
+ for c in kaa.epg.channels:
+ if normchannel == self.normalize_name(c.name):
+ epgid = c.id
+ break
+ else:
+ epgid = ''
+ self.mapping[channel] = epgid
+ if error:
+ OneShotTimer(self.sys_exit).start(1)
+ return
self.rating = result.arguments[1]
self.update()
@@ -261,7 +280,7 @@
filename_array = { 'progname': String(rec.name),
'title' : String(rec.subtitle) }
- filemask = TV_RECORD_FILEMASK % filename_array
+ filemask = config.RECORD_FILEMASK % filename_array
filename = ''
for letter in time.strftime(filemask, time.localtime(rec.start)):
if letter in string.ascii_letters + string.digits:
@@ -269,11 +288,11 @@
elif filename and filename[-1] != '_':
filename += '_'
filename = filename.rstrip(' -_:') + '.mpg'
- filename = 'file:' + os.path.join(TV_RECORD_DIR, filename)
+ filename = 'file:' + os.path.join(config.RECORD_DIR, filename)
else:
# check filename
if rec.url.startswith('file:'):
- filename = os.path.join(TV_RECORD_DIR, rec.url[5:])
+ filename = os.path.join(config.RECORD_DIR, rec.url[5:])
if filename.endswith('.suffix'):
filename = os.path.splitext(filename)[0] + '.mpg'
filename = 'file:' + filename
Copied: trunk/freevo-tvserver/src/recording.py (from r7699,
/trunk/freevo/src/record/recording.py)
==============================================================================
--- /trunk/freevo/src/record/recording.py (original)
+++ trunk/freevo-tvserver/src/recording.py Sun Oct 16 14:26:55 2005
@@ -40,10 +40,11 @@
import os
# freevo imports
-import util.fxdparser as fxdparser
-from util.fxdimdb import FxdImdb, makeVideo
+from freevo import fxdparser
+# FIXME: from util.fxdimdb import FxdImdb, makeVideo
# record imports
+import config
from record_types import *
# get logging object
@@ -90,8 +91,8 @@
self.scheduled_start = 0
self.scheduled_stop = 0
- self.start_padding = TV_RECORD_START_PADDING
- self.stop_padding = TV_RECORD_STOP_PADDING
+ self.start_padding = config.RECORD_START_PADDING
+ self.stop_padding = config.RECORD_STOP_PADDING
for i in info:
if i == 'subtitle':
self.subtitle = Unicode(info[i])
@@ -276,6 +277,10 @@
"""
if not self.url.startswith('file:'):
return
+
+ # FIXME:
+ return
+
filename = self.url[5:]
fxd = FxdImdb()
Copied: trunk/freevo-tvserver/src/server.py (from r7699,
/trunk/freevo/src/record/server.py)
==============================================================================
--- /trunk/freevo/src/record/server.py (original)
+++ trunk/freevo-tvserver/src/server.py Sun Oct 16 14:26:55 2005
@@ -45,14 +45,11 @@
from kaa.notifier import Timer, OneShotTimer
# freevo imports
-import sysconfig
-import config
-import util.fxdparser
-
-# mbus support
-from mcomm import RPCServer, RPCError, RPCReturn
+import freevo.fxdparser
+from freevo.mcomm import RPCServer, RPCError, RPCReturn
# record imports
+import config
import recorder
from record_types import *
@@ -76,7 +73,6 @@
self.clients = []
self.last_listing = []
self.live_tv_map = {}
- config.detect('channels')
# add port for channels and check if they are in live-tv mode
port = 6000
for index, channel in enumerate(kaa.epg.channels):
@@ -84,7 +80,7 @@
channel.registered = []
# file to load / save the recordings and favorites
- self.fxdfile = sysconfig.datafile('recordserver.fxd')
+ self.fxdfile = freevo.conf.datafile('recordserver.fxd')
# load the recordings file
self.load(True)
@@ -378,7 +374,7 @@
self.recordings = []
self.favorites = []
try:
- fxd = util.fxdparser.FXD(self.fxdfile)
+ fxd = freevo.fxdparser.FXD(self.fxdfile)
fxd.set_handler('recording', self.__load_recording)
fxd.set_handler('favorite', self.__load_favorite)
fxd.parse()
@@ -409,7 +405,7 @@
log.info('save fxd file')
if os.path.isfile(self.fxdfile):
os.unlink(self.fxdfile)
- fxd = util.fxdparser.FXD(self.fxdfile)
+ fxd = freevo.fxdparser.FXD(self.fxdfile)
for r in self.recordings:
fxd.add(r)
for r in self.favorites:
@@ -624,7 +620,7 @@
if not rec:
return RPCError('no recorder for %s found' % channel.id)
- url = 'udp://%s:%s' % (LIVETV_URL, channel.port)
+ url = 'udp://%s:%s' % (conf.LIVETV_URL, channel.port)
# no app is watching this channel right now, start recorder
rec_id = rec.start_livetv(channel.id, url)
-------------------------------------------------------
This SF.Net email is sponsored by:
Power Architecture Resource Center: Free content, downloads, discussions,
and more. http://solutions.newsforge.com/ibmarch.tmpl
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog