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

Reply via email to