Beispiel #1
0
class Channel(DBDataWrite):
    """Channel(chanid=None, db=None) -> Channel object"""
    _defaults = {
        'icon': 'none',
        'videofilters': '',
        'callsign': u'',
        'xmltvid': '',
        'recpriority': 0,
        'contrast': 32768,
        'brightness': 32768,
        'colour': 32768,
        'hue': 32768,
        'tvformat': u'Default',
        'visible': 1,
        'outputfilters': '',
        'useonairguide': 0,
        'atsc_major_chan': 0,
        'tmoffset': 0,
        'default_authority': '',
        'commmethod': -1,
        'atsc_minor_chan': 0,
        'last_record': datetime(1900, 1, 1)
    }

    def __str__(self):
        if self._wheredat is None:
            return u"<Uninitialized Channel at %s>" % hex(id(self))
        return u"<Channel '%s','%s' at %s>" % \
                        (self.chanid, self.name, hex(id(self)))

    def __repr__(self):
        return str(self).encode('utf-8')
Beispiel #2
0
"""

from MythTV.static import *
from MythTV.exceptions import *
from MythTV.altdict import DictData, DictInvertCI
from MythTV.database import *
from MythTV.system import Grabber, InternetMetadata, VideoMetadata
from MythTV.mythproto import ftopen, FileOps, Program
from MythTV.utility import CMPRecord, CMPVideo, MARKUPLIST, datetime, ParseSet

import re
import locale
import xml.etree.cElementTree as etree
from datetime import date, time

_default_datetime = datetime(1900,1,1, tzinfo=datetime.UTCTZ())

from UserString import MutableString
class Artwork( MutableString ):
    _types = {'coverart':   'Coverart',
              'coverfile':  'Coverart',
              'fanart':     'Fanart',
              'banner':     'Banners',
              'screenshot': 'ScreenShots',
              'trailer':    'Trailers'}

    @property
    def data(self):
        try:
            val = self.parent[self.attr]
        except:
Beispiel #3
0
class Record(CMPRecord, DBDataWrite, RECTYPE):
    """
    Record(id=None, db=None) -> Record object
    """
    _defaults = {
        'type': RECTYPE.kAllRecord,
        'title': u'Unknown',
        'subtitle': '',
        'description': '',
        'category': '',
        'station': '',
        'seriesid': '',
        'search': 0,
        'last_record': datetime(1900, 1, 1),
        'inetref': '',
        'next_record': datetime(1900, 1, 1),
        'season': 0,
        'last_delete': datetime(1900, 1, 1),
        'episode': 0
    }
    _artwork = None

    def __str__(self):
        if self._wheredat is None:
            return u"<Uninitialized Record Rule at %s>" % hex(id(self))
        return u"<Record Rule '%s', Type %d at %s>" \
                                    % (self.title, self.type, hex(id(self)))

    def __repr__(self):
        return str(self).encode('utf-8')

    def create(self, data=None, wait=False):
        """Record.create(data=None) -> Record object"""
        DBDataWrite._create_autoincrement(self, data)
        FileOps(db=self._db).reschedule(self.recordid, wait)
        return self

    def delete(self, wait=False):
        DBDataWrite.delete(self)
        FileOps(db=self._db).reschedule(self.recordid, wait)

    def update(self, *args, **keywords):
        wait = keywords.get('wait', False)
        DBDataWrite.update(self, *args, **keywords)
        FileOps(db=self._db).reschedule(self.recordid, wait)

    def getUpcoming(self, deactivated=False):
        recstatus = None
        if not deactivated:
            recstatus = Program.rsWillRecord
        return FileOps(db=self._db)._getSortedPrograms('QUERY_GETALLPENDING',
                                                       header=1,
                                                       recordid=self.recordid,
                                                       recstatus=recstatus)

    @property
    def artwork(self):
        if self._artwork is None:
            if (self.inetref is None) or (self.inetref == ""):
                raise MythError("Record cannot have artwork without inetref")

            try:
                self._artwork = \
                    RecordedArtwork((self.inetref, self.season), self._db)
            except MythError:
                #artwork does not exist, create new
                self._artwork = RecordedArtwork(db=self._db)
                self._artwork.inetref = self.inetref
                self._artwork.season = self.season
                self._artwork.host = self._db.getMasterBackend()
                self._artwork.create()
        return self._artwork

    @classmethod
    def fromGuide(cls, guide, type=RECTYPE.kAllRecord, wait=False):
        if datetime.now() > guide.endtime:
            raise MythError('Cannot create recording rule for past recording.')
        rec = cls(None, db=guide._db)
        for key in ('chanid', 'title', 'subtitle', 'description', 'category',
                    'seriesid', 'programid'):
            rec[key] = guide[key]

        rec.startdate = guide.starttime.date()
        rec.starttime = guide.starttime - datetime.combine(
            rec.startdate, time())
        rec.enddate = guide.endtime.date()
        rec.endtime = guide.endtime - datetime.combine(rec.enddate, time())

        rec.station = Channel(guide.chanid, db=guide._db).callsign
        rec.type = type
        return rec.create(wait=wait)

    @classmethod
    def fromProgram(cls, program, type=RECTYPE.kAllRecord, wait=False):
        if datetime.now() > program.endtime:
            raise MythError('Cannot create recording rule for past recording.')
        rec = cls(None, db=program._db)
        for key in ('chanid', 'title', 'subtitle', 'description', 'category',
                    'seriesid', 'programid'):
            rec[key] = program[key]
        rec.station = program.callsign

        rec.startdate = program.starttime.date()
        rec.starttime = program.starttime - datetime.combine(
            rec.startdate, time())
        rec.enddate = program.endtime.date()
        rec.endtime = program.endtime - datetime.combine(rec.enddate, time())

        if program.recordid:
            rec.parentid = program.recordid
            if program.recstatus == RECTYPE.kNotRecording:
                rec.type = RECTYPE.kOverrideRecord
            else:
                rec.type = RECTYPE.kDontRecord
        else:
            rec.type = type
        return rec.create(wait=wait)

    @classmethod
    def fromPowerRule(cls,
                      title='unnamed (Power Search)',
                      where='',
                      args=None,
                      join='',
                      db=None,
                      type=RECTYPE.kAllRecord,
                      searchtype=RECSEARCHTYPE.kPowerSearch,
                      wait=False):

        if type not in (RECTYPE.kAllRecord, RECTYPE.kFindDailyRecord,
                        RECTYPE.kFindWeeklyRecord, RECTYPE.kFindOneRecord):
            raise MythDBError("Invalid 'type' set for power recording rule.")

        rec = cls(None, db=db)
        if args is not None:
            where = rec._db.literal(where, args)

        now = datetime.now()
        rec.starttime = now.time()
        rec.endtime = now.time()
        rec.startdate = now.date()
        rec.enddate = now.date()

        rec.title = title
        rec.description = where
        rec.subtitle = join
        rec.type = type
        rec.search = searchtype
        return rec.create(wait=wait)