From 7b021b489ac11fbcd449e294cbec08dc75b17ece Mon Sep 17 00:00:00 2001 From: Raymond Wagner Date: Sun, 1 Jan 2012 03:41:05 -0500 Subject: [PATCH] Alternate status information script for perl script of same name --- python/myth_upcoming_recordings.py | 136 +++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100755 python/myth_upcoming_recordings.py diff --git a/python/myth_upcoming_recordings.py b/python/myth_upcoming_recordings.py new file mode 100755 index 0000000..784b5d5 --- /dev/null +++ b/python/myth_upcoming_recordings.py @@ -0,0 +1,136 @@ +#!/usr/bin/env python + +from datetime import timedelta, datetime +from optparse import OptionParser +from MythTV import MythBE, Program + +class MyProgram( Program ): + @property + def is_scheduled(self): + return self.recstatus in (self.rsWillRecord, + self.rsRecording, + self.rsRecorded) + @property + def is_duplicate(self): + return self.recstatus in (self.rsRepeat, + self.rsPreviousRecording, + self.rsCurrentRecording) + @property + def is_deactivated(self): + return self.recstatus in (self.rsInactive, + self.rsTooManyRecordings, + self.rsCancelled, + self.rsAborted, + self.rsNotListed, + self.rsDontRecord, + self.rsLowDiskSpace, + self.rsTunerBusy, + self.rsNeverRecord, + self.rsEarlierShowing, + self.rsLaterShowing) + @property + def is_conflict(self): + return self.recstatus == self.rsConflict + +def main(opts): + MythBE.getPendingRecordings.handler = MyProgram + be = MythBE() + now = datetime.now() + + if not opts.plaintext: + print '

Upcoming Recordings:

' + print '
' + + count = 0 + for rec in be.getPendingRecordings(): + if not ((opts.filter&2**0 and rec.is_scheduled) or + (opts.filter&2**1 and rec.is_duplicate) or + (opts.filter&2**2 and rec.is_deactivated) or + (opts.filter&2**3 and rec.is_conflict)): + continue + if opts.time and (opts.time < rec.recstartts): + continue + if now > rec.recendts: + continue + if opts.count and (opts.count <= count): + break + count += 1 + + if opts.plaintext: + print '{0} - {1}'.format(rec.starttime.strftime('%m/%d, %I:%M %p'), + rec.callsign) + if rec.subtitle: + print '{0.title} - {0.subtitle}'.format(rec) + else: + print '{0.title}'.format(rec) + print rec.description + print '' + else: + print '{0} - {1} - {2}'.format(rec.starttime.strftime('%m/%d, %I:%M %p'), + rec.callsign, + rec.title), + if rec.subtitle: + print rec.subtitle, + print '
{0.title}'.format(rec), + print rec.starttime.strftime('%m/%d, %I:%M %p'), + print '
{0.description}

' + + if not opts.plaintext: + print '
' + + +if __name__ == '__main__': + parser = OptionParser(usage="usage: %prog [options]") + + parser.add_option('-n', "--count", action="store", type="int", + default=0, dest="count", + help="Outputs information on the next shows to be recorded.") + parser.add_option("--hours", action="store", type="int", + default=-1, dest="hours", + help="Outputs information for recordings starting within the next "+\ + "specified hours.") + parser.add_option("--minutes", action="store", type="int", + default=-1, dest="minutes", + help="Outputs information for recordings starting within the next "+\ + "specified minutes.") + parser.add_option("--show-scheduled", action="store_true", default=False, + dest="scheduled", + help="Outputs information about recordings MythTV plans to actually "+\ + "record.") + parser.add_option("--show-duplicates", action="store_true", default=False, + dest="duplicate", + help="Outputs information about recordings MythTV will not record "+\ + "because of the specified duplicate matching policy for that rule") + parser.add_option("--show-deactivated", action="store_true", default=False, + dest="deactivated", + help="Outputs information on shows that are deactivated and will not "+\ + "be recorded by MythTV. This may be due to the schedule being "+\ + "inactive, being set to never record, because the show will be "+\ + "recorded at an earlier or later date, because there are too many "+\ + "recordings on that rule, because there is insufficient disk space, "+\ + "or because the show is not in the time slot listed by the rule.") + parser.add_option("--show-conflicts", action="store_true", default=False, + dest="conflicts", + help="Outputs information on shows that will not be recorded due to "+\ + "higher priority conflicts.") + parser.add_option("--plain-text", action="store_true", default=False, + dest="plaintext", help="Output data in plain text format.") + + opts, args = parser.parse_args() + + if opts.scheduled or opts.duplicate or opts.deactivated or opts.conflicts: + opts.filter = opts.scheduled*2**0 | \ + opts.duplicate*2**1 | \ + opts.deactivated*2**2 | \ + opts.conflicts*2**3 + else: + opts.filter = 2**0 or 2**3 + + if (opts.hours >= 0) or (opts.minutes >= 0): + opts.time = datetime.now() + timedelta( + hours=opts.hours if (opts.hours >= 0) else 0, + minutes=opts.minutes if (opts.minutes >= 0) else 0) + else: + opts.time = None + + main(opts)