def recordProgram(chID, chName, programID, name, startTime, endTime): command = 'SetTimer|{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}|{8}|{9}|{10}|{11}|{12}'.format( '-1', # => epg based timer chID, # Channel ID startTime, # Start date and time of listing endTime, # End date and time of listing str(pvr_time_state.pvr_timer_state_new), name, # name of listing '0', #XBMc Priotiry (not used) '2', # pre padding in minutes '3', # post padding in minutes 'false', # XBMC bIsRepeating (not used) u.getEntryID(programID=programID), # ScheduleEntry ID 'False', # force prepad bool 'False' # force postpad bool ) message = 'You have successfully scheduled {0} to be recorded on {1} at {2} on {3}.'.format( name, chName, u.getDateTime12(startTime, format='time'), u.getDateTime12(startTime, format='date') ) responses = socketClient(command, '') if DEBUG == 'Verbose': Log.Debug('----------recordProgram----------') Log.Debug('Send Command:' + command) Log.Debug(responses) Log.Debug(message) return ObjectContainer(header='Recording', message=message)
def recordProgram(chID, chName, programID, name, startTime, endTime): command = 'SetTimer|{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}|{8}|{9}|{10}|{11}|{12}'.format( '-1', # => epg based timer chID, # Channel ID startTime, # Start date and time of listing endTime, # End date and time of listing str(pvr_time_state.pvr_timer_state_new), name, # name of listing '0', #XBMc Priotiry (not used) '2', # pre padding in minutes '3', # post padding in minutes 'false', # XBMC bIsRepeating (not used) u.getEntryID(programID=programID), # ScheduleEntry ID 'False', # force prepad bool 'False' # force postpad bool ) message = 'You have successfully scheduled {0} to be recorded on {1} at {2} on {3}.'.format( name, chName, u.getDateTime12(startTime, format='time'), u.getDateTime12(startTime, format='date')) responses = socketClient(command, '') if DEBUG == 'Verbose': Log.Debug('----------recordProgram----------') Log.Debug('Send Command:' + command) Log.Debug(responses) Log.Debug(message) return ObjectContainer(header='Recording', message=message)
def GetTimers(): oc = ObjectContainer(title2='Scheduled Recordings', no_cache=True) # Connect and Get list of recordings resultsArray = socketClient('GetTimers', '') if DEBUG == 'Verbose': Log.Debug('----------GetTimers----------') Log.Debug(resultsArray) for result in resultsArray: infoArray = result.split('|') timerID = infoArray[0] chID = infoArray[1] startDateTime = infoArray[2] endDateTime = infoArray[3] pvr_timer_state = infoArray[4] if not 'series' in infoArray[5]: programName = infoArray[5] else: programName = infoArray[5].split(':')[1] programID = infoArray[15] SeriesTimerID = infoArray[16] programImage = getListingInfo(chID=chID, progItem='programImage', infoType='singleItem', startDt=startDateTime, endDt=endDateTime) if len(SeriesTimerID) > 1: programName = programName + ' (Series)' programInfo = '{0} - Airing : {1} - {2}'.format( programName, u.getDateTime12(startDateTime, format='datetime'), u.getDateTime12(endDateTime)) programSummary = unicode(infoArray[7], 'UTF-8') if DEBUG == 'Verbose': Log.Debug(infoArray) oc.add( DirectoryObject(key=Callback(cancelTimer, timerID=timerID, programName=programInfo, startTime=startDateTime), title=programInfo, summary=programSummary, thumb=programImage)) return oc
def GetTimers(): oc = ObjectContainer(title2='Scheduled Recordings', no_cache=True) # Connect and Get list of recordings resultsArray = socketClient('GetTimers', '') if DEBUG == 'Verbose': Log.Debug('----------GetTimers----------') Log.Debug(resultsArray) for result in resultsArray: infoArray = result.split('|') timerID = infoArray[0] chID = infoArray[1] startDateTime = infoArray[2] endDateTime = infoArray[3] pvr_timer_state = infoArray[4] if not 'series' in infoArray[5]: programName = infoArray[5] else: programName = infoArray[5].split(':')[1] programID = infoArray[15] SeriesTimerID = infoArray[16] programImage = getListingInfo( chID=chID, progItem='programImage', infoType='singleItem', startDt=startDateTime, endDt=endDateTime ) if len(SeriesTimerID) > 1: programName = programName + ' (Series)' programInfo = '{0} - Airing : {1} - {2}'.format( programName, u.getDateTime12(startDateTime, format='datetime'), u.getDateTime12(endDateTime) ) programSummary = unicode(infoArray[7], 'UTF-8') if DEBUG == 'Verbose': Log.Debug(infoArray) oc.add(DirectoryObject( key=Callback(cancelTimer, timerID=timerID, programName=programInfo, startTime=startDateTime), title=programInfo, summary=programSummary, thumb=programImage ) ) return oc
def cancelTimer(timerID, programName, startTime): command = 'CancelTimer|{0}'.format(timerID) message = 'You have successfully cancelled the scheduled recording for {0} on {1}.'.format( programName, u.getDateTime12(startTime, format='date')) responses = socketClient(command, '') if DEBUG == 'Verbose': Log.Debug('----------cancelTimer----------') Log.Debug('Send Command:' + command) Log.Debug(responses) Log.Debug(message) return ObjectContainer(header='Cancelled', message=message)
def GetRecordings(): oc = ObjectContainer(title2='Recorded TV', no_cache=True) # Connect and Get list of recordings resultsArray = socketClient('GetRecordings', '') Log.Debug('----------GetRecordings Function----------') if DEBUG == 'Verbose': Log.Debug(resultsArray) for result in resultsArray: infoArray = result.split('|') programID = infoArray[0] programName = infoArray[1] programURL = infoArray[2] programSummary = infoArray[5].decode(encoding='UTF-8', errors='strict') programChannel = infoArray[6] programImage = infoArray[7] startDtTime = infoArray[9] endDtTime = int(infoArray[9]) + int(infoArray[10]) duration = int(infoArray[11]) airedDate = u.getDateTime12(infoArray[21], format='date') if DEBUG == 'Verbose': Log.Debug(programName + ', ' + programImage + ', ' + programSummary + ', ' + programChannel + ', ' + programImage) Log.Debug(str(startDtTime) + ' - ' + str(endDtTime)) oc.add( DirectoryObject(key=Callback(getProgramPage, chID='', chName=programChannel, programID=programID, title=programName, name=programName, summary=programSummary, startTime=startDtTime, endTime=endDtTime, url=programURL, itemType='recordings'), title=programName, summary='(Aired: ' + str(airedDate) + ') ' + programSummary, thumb=programImage)) if DEBUG == 'Verbose': Log.Debug(infoArray) return oc
def cancelTimer(timerID, programName, startTime): command = 'CancelTimer|{0}'.format( timerID ) message = 'You have successfully cancelled the scheduled recording for {0} on {1}.'.format( programName, u.getDateTime12(startTime, format='date') ) responses = socketClient(command, '') if DEBUG == 'Verbose': Log.Debug('----------cancelTimer----------') Log.Debug('Send Command:' + command) Log.Debug(responses) Log.Debug(message) return ObjectContainer(header='Cancelled', message=message)
def GetRecordings(): oc = ObjectContainer(title2='Recorded TV', no_cache=True) # Connect and Get list of recordings resultsArray = socketClient('GetRecordings', '') Log.Debug('----------GetRecordings Function----------') if DEBUG == 'Verbose': Log.Debug(resultsArray) for result in resultsArray: infoArray = result.split('|') programID = infoArray[0] programName = infoArray[1] programURL = infoArray[2] programSummary = infoArray[5].decode(encoding='UTF-8', errors='strict') programChannel = infoArray[6] programImage = infoArray[7] startDtTime = infoArray[9] endDtTime = int(infoArray[9]) + int(infoArray[10]) duration = int(infoArray[11]) airedDate = u.getDateTime12(infoArray[21], format='date') if DEBUG=='Verbose': Log.Debug(programName + ', ' + programImage +', ' + programSummary +', ' + programChannel + ', ' + programImage) Log.Debug(str(startDtTime) + ' - ' + str(endDtTime)) oc.add(DirectoryObject( key=Callback(getProgramPage, chID='', chName=programChannel, programID=programID, title=programName, name=programName, summary=programSummary, startTime=startDtTime, endTime=endDtTime, url=programURL, itemType='recordings' ), title=programName, summary='(Aired: ' + str(airedDate) + ') ' + programSummary, thumb=programImage )) if DEBUG == 'Verbose': Log.Debug(infoArray) return oc
def getListingInfo(chID, progItem, infoType='Upcoming', startDt='', endDt=''): # Get Start and end datetime and convert to seconds if infoType != 'singleItem': startDt = u.getTimeS(datetime.datetime.utcnow()) endDt = int(startDt + (timedelta( days=int(Prefs['serverwmc_epg_days']))).total_seconds()) # build request string sendCommand = 'GetEntries|{0}|{1}|{2}'.format(chID, startDt, endDt) # Connect and get channel/program info resultsArray = socketClient(sendCommand, '') if DEBUG == 'Verbose': Log.Debug('----------getListingInfo Function----------') Log.Debug(resultsArray) # Loop through results array and build Channel info objects if len(resultsArray) > 1: count = 0 for result in resultsArray: count += 1 infoArray = result.split('|') # only get now playing item if count in (1, 2) and infoType in ('nowPlaying', 'upNext'): programID = infoArray[0] + '-' + infoArray[16] programName = infoArray[1] programStartDt = u.getDateTime12(infoArray[3], format='datetime') programEndDt = u.getDateTime12(infoArray[4], format='time') programAirTime = '(' + programStartDt + ' - ' + programEndDt + ') ' programOverview = infoArray[5] programImage = infoArray[14] programEpisodeTitle = infoArray[15] try: programRating = getRating(infoArray[8]) except: programRating = 'NR' programName = programAirTime + programName if DEBUG == 'Verbose': Log.Debug(programID + ',' + programName + ',' + programStartDt + ',' + programEndDt + ',' + programOverview + ',' + programRating) if progItem == 'programID': progData = programID, elif progItem == 'programName': progData = programName, elif progItem == 'programStartDt': progData = programStartDt, elif progItem == 'programEndDt': progData = programEndDt, elif progItem == 'programOverview': progData = programOverview, elif progItem == 'programImage': progData = programImage, elif progItem == 'programEpisodeTitle': progData = programEpisodeTitle else: progItem = '' break elif infoType == 'singleItem': programID = infoArray[0] + '-' + infoArray[16] programName = infoArray[1] programStartDt = u.getDateTime12(infoArray[3], format='datetime') programEndDt = u.getDateTime12(infoArray[4], format='time') programAirTime = '(' + programStartDt + ' - ' + programEndDt + ') ' programOverview = infoArray[5] programImage = infoArray[14] programEpisodeTitle = infoArray[15] try: programRating = u.getRating(infoArray[8]) except: programRating = 'NR' programName = programAirTime + programName if DEBUG == 'Verbose': Log.Debug(programID + ',' + programName + ',' + programStartDt + ',' + programEndDt + ',' + programOverview + ',' + programRating) if progItem == 'programID': progData = programID, elif progItem == 'programName': progData = programName, elif progItem == 'programStartDt': progData = programStartDt, elif progItem == 'programEndDt': progData = programEndDt, elif progItem == 'programOverview': progData = programOverview, elif progItem == 'programImage': progData = programImage, elif progItem == 'programEpisodeTitle': progData = programEpisodeTitle else: progItem = '' break elif count > 2: break else: pass progData = str(progData[0]) else: progData = 'No Listing Info : Update WMC Guide Data and/or check WMC logs for details.' if DEBUG == 'Normal' or DEBUG == 'Verbose': Log.Debug(progData) return progData
def CreateChannel(url, chID, title, thumb): oc = ObjectContainer(title2=title, no_cache=True) #closeLiveStream() # Get Start and end datetime and convert to seconds startDt = u.getTimeS(datetime.datetime.utcnow()) endDt = int(startDt + (timedelta( days=int(Prefs['serverwmc_epg_days']))).total_seconds()) # build request string sendCommand = 'GetEntries|{0}|{1}|{2}'.format(chID, startDt, endDt) # Connect and get channel/program info resultsArray = socketClient(sendCommand, '') if DEBUG == 'Verbose': Log.Debug('----------CreateChannel Function----------') Log.Debug('Full resultsArray : ' + str(resultsArray)) Log.Debug('--------Array list Itemized--------') # Loop through resultsArray to build Channel objects if len(resultsArray) > 1: for result in resultsArray: infoArray = result.split('|') programID = infoArray[0] + '-' + infoArray[16] programName = infoArray[1] programStartDt24 = u.getDateTime24(infoArray[3]) programEndDt24 = u.getDateTime24(infoArray[4]) programStartDt12 = u.getDateTime12(infoArray[3], format='datetime') programEndDt12 = u.getDateTime12(infoArray[4], format='time') programAirTime = '(' + programStartDt12 + ' - ' + programEndDt12 + ') ' programOverview = infoArray[5].decode(encoding='UTF-8', errors='strict') if infoArray[14] == 'None': programImage = R(thumb) else: programImage = infoArray[14] programEpisodeTitle = infoArray[15] try: programRating = u.getRating(infoArray[8]) except: programRating = 'NR' programTitle = programAirTime + programName if DEBUG == 'Verbose': Log.Debug('infoArray : ' + str(infoArray)) Log.Debug(programID + ',' + programTitle + ',' + programStartDt24 + ',' + programEndDt24 + ',' + programOverview + ',' + programRating) if programStartDt24 <= u.getDateTime24(startDt) <= programEndDt24: oc.add( CreateListing(url=url, chID=chID, chName=title, programID=programID, title=programTitle, name=programName, summary=programOverview, startTime=infoArray[3], endTime=infoArray[4], thumb=programImage, nowPlaying=True)) else: oc.add( CreateListing(url=url, chID=chID, chName=title, programID=programID, title=programTitle, name=programName, summary=programOverview, startTime=infoArray[3], endTime=infoArray[4], thumb=programImage)) else: oc.add( CreateListing( url=url, chID=chID, chName=title, programID='99', title='No EPG Info Available', name='No EPG Info Available', summary='No EPG Info Available. Check WMC for more info.', startTime=1423072800, endTime=1423072800 + DURATION, thumb=R(PLAY_ICON), nowPlaying=True)) return oc
def getListingInfo(chID, progItem, infoType='Upcoming', startDt='', endDt=''): # Get Start and end datetime and convert to seconds if infoType != 'singleItem': startDt = u.getTimeS(datetime.datetime.utcnow()) endDt = int(startDt + (timedelta(days=int(Prefs['serverwmc_epg_days']))).total_seconds()) # build request string sendCommand = 'GetEntries|{0}|{1}|{2}'.format(chID, startDt, endDt) # Connect and get channel/program info resultsArray = socketClient(sendCommand, '') if DEBUG=='Verbose': Log.Debug('----------getListingInfo Function----------') Log.Debug(resultsArray) # Loop through results array and build Channel info objects if len(resultsArray) > 1: count = 0 for result in resultsArray: count += 1 infoArray = result.split('|') # only get now playing item if count in (1,2) and infoType in ('nowPlaying', 'upNext'): programID = infoArray[0] + '-' + infoArray[16] programName = infoArray[1] programStartDt = u.getDateTime12(infoArray[3], format='datetime') programEndDt = u.getDateTime12(infoArray[4], format='time') programAirTime = '(' + programStartDt + ' - ' + programEndDt + ') ' programOverview = infoArray[5] programImage = infoArray[14] programEpisodeTitle = infoArray[15] try: programRating = getRating(infoArray[8]) except: programRating = 'NR' programName = programAirTime + programName if DEBUG == 'Verbose': Log.Debug(programID + ',' + programName + ',' + programStartDt + ',' + programEndDt + ',' + programOverview + ',' + programRating) if progItem == 'programID' : progData=programID, elif progItem == 'programName' : progData=programName, elif progItem == 'programStartDt' : progData=programStartDt, elif progItem == 'programEndDt' : progData=programEndDt, elif progItem == 'programOverview' : progData=programOverview, elif progItem == 'programImage' : progData=programImage, elif progItem == 'programEpisodeTitle' : progData=programEpisodeTitle else : progItem = '' break elif infoType == 'singleItem': programID = infoArray[0] + '-' + infoArray[16] programName = infoArray[1] programStartDt = u.getDateTime12(infoArray[3], format='datetime') programEndDt = u.getDateTime12(infoArray[4], format='time') programAirTime = '(' + programStartDt + ' - ' + programEndDt + ') ' programOverview = infoArray[5] programImage = infoArray[14] programEpisodeTitle = infoArray[15] try: programRating = u.getRating(infoArray[8]) except: programRating = 'NR' programName = programAirTime + programName if DEBUG == 'Verbose': Log.Debug(programID + ',' + programName + ',' + programStartDt + ',' + programEndDt + ',' + programOverview + ',' + programRating) if progItem == 'programID' : progData=programID, elif progItem == 'programName' : progData=programName, elif progItem == 'programStartDt' : progData=programStartDt, elif progItem == 'programEndDt' : progData=programEndDt, elif progItem == 'programOverview' : progData=programOverview, elif progItem == 'programImage' : progData=programImage, elif progItem == 'programEpisodeTitle' : progData=programEpisodeTitle else : progItem = '' break elif count>2: break else: pass progData = str(progData[0]) else: progData = 'No Listing Info : Update WMC Guide Data and/or check WMC logs for details.' if DEBUG == 'Normal' or DEBUG == 'Verbose': Log.Debug(progData) return progData
def CreateChannel(url, chID, title, thumb): oc = ObjectContainer(title2=title, no_cache=True) #closeLiveStream() # Get Start and end datetime and convert to seconds startDt = u.getTimeS(datetime.datetime.utcnow()) endDt = int(startDt + (timedelta(days=int(Prefs['serverwmc_epg_days']))).total_seconds()) # build request string sendCommand = 'GetEntries|{0}|{1}|{2}'.format(chID, startDt, endDt) # Connect and get channel/program info resultsArray = socketClient(sendCommand, '') if DEBUG=='Verbose': Log.Debug('----------CreateChannel Function----------') Log.Debug('Full resultsArray : ' + str(resultsArray)) Log.Debug('--------Array list Itemized--------') # Loop through resultsArray to build Channel objects if len(resultsArray) > 1: for result in resultsArray: infoArray = result.split('|') programID = infoArray[0] + '-' + infoArray[16] programName = infoArray[1] programStartDt24 = u.getDateTime24(infoArray[3]) programEndDt24 = u.getDateTime24(infoArray[4]) programStartDt12 = u.getDateTime12(infoArray[3], format='datetime') programEndDt12 = u.getDateTime12(infoArray[4], format='time') programAirTime = '(' + programStartDt12 + ' - ' + programEndDt12 + ') ' programOverview = infoArray[5].decode(encoding='UTF-8', errors='strict') if infoArray[14]=='None': programImage = R(thumb) else: programImage = infoArray[14] programEpisodeTitle = infoArray[15] try: programRating = u.getRating(infoArray[8]) except: programRating = 'NR' programTitle = programAirTime + programName if DEBUG=='Verbose': Log.Debug('infoArray : ' + str(infoArray)) Log.Debug(programID + ',' + programTitle + ',' + programStartDt24 + ',' + programEndDt24 + ',' + programOverview + ',' + programRating) if programStartDt24 <= u.getDateTime24(startDt) <= programEndDt24: oc.add( CreateListing( url=url, chID=chID, chName=title, programID=programID, title=programTitle, name=programName, summary=programOverview, startTime = infoArray[3], endTime = infoArray[4], thumb=programImage, nowPlaying=True )) else: oc.add( CreateListing( url=url, chID=chID, chName=title, programID=programID, title=programTitle, name=programName, summary=programOverview, startTime = infoArray[3], endTime = infoArray[4], thumb=programImage )) else: oc.add( CreateListing( url=url, chID=chID, chName=title, programID='99', title='No EPG Info Available', name='No EPG Info Available', summary='No EPG Info Available. Check WMC for more info.', startTime = 1423072800, endTime = 1423072800 + DURATION, thumb=R(PLAY_ICON), nowPlaying=True )) return oc