def goSettings(self): from . import settings mywin = settings.settingsDialog('nextpvr_settings.xml', WHERE_AM_I, settings=self.settings, xnewa=self.xnewa) mywin.doModal() if self.settings.Reload: self.xnewa = XNEWA_Connect(settings=self.settings) if self.xnewa.offline == False: self.win.setProperty('recent', 'true') self.win.setProperty('scheduled', 'true') self.win.setProperty('upcoming', 'true') self.refreshButton()
def __init__(self, *args, **kwargs): self.win = None self.busy = False self.progressDialog = None self.settings = XNEWA_Settings() self.offline = False self.xnewa = XNEWA_Connect(self.settings.NextPVR_HOST, self.settings.NextPVR_PORT)
def goSettings(self): from . import settings mywin = settings.settingsDialog('nextpvr_settings.xml', WHERE_AM_I, settings=self.settings,xnewa=self.xnewa) mywin.doModal() if self.settings.Reload: print("Reloading") self.xnewa = XNEWA_Connect(settings=self.settings) if self.xnewa.offline == False: self.win.setProperty('recent', 'true') self.win.setProperty('scheduled', 'true') self.win.setProperty('upcoming', 'true') self.refreshButton()
class HomeWindow(xbmcgui.WindowXML): def __init__(self, *args, **kwargs): self.win = None self.busy = False #self.progressDialog = None #self.settings = XNEWA_Settings() #self.xnewa = XNEWA_Connect(settings=self.settings) self.settings = kwargs['settings'] self.xnewa = kwargs['xnewa'] self.offline = self.xnewa.offline self.getChannels = True self.returnvalue = None def onFocus(self, controlId): pass def onInit(self): if not self.win: self.win = xbmcgui.Window(xbmcgui.getCurrentWindowId()) self.recentListBox = self.getControl(249) self.comingListBox = self.getControl(248) self.spaceGreen = self.getControl(247) self.spaceRed = self.getControl(246) self.spaceFree = self.getControl(245) self.spaceUsed = self.getControl(244) self.countPending = self.getControl(243) self.countProgress = self.getControl(242) self.countAvailable = self.getControl(241) self.countFailed = self.getControl(240) self.countConflict = self.getControl(239) self.countSeason = self.getControl(238) try: self.spacePercent = self.getControl(237) self.includePercentages = True except RuntimeError: self.includePercentages = False if self.settings.XNEWA_READONLY == True: self.win.setProperty('readonly', 'true') print('invisible') # button ids -> funtion ptr self.dispatcher = { 248 : self.goUpcomingDetails, 249 : self.goRecentDetails, 250 : self.goWatchRecordings, 251 : self.goTvGuide, 252 : self.goRecordingSchedules, 253 : self.goUpcomingRecordings, 254 : self.goSearch, 256 : self.refreshButton, 257 : self.goExit, 258 : self.goRecentRecordings, 259 : self.goOnline, 260 : self.goNextPVR } self.winOnline() if self.offline == True: self.win.setProperty('offline', 'true') else: self.goOnline() else: self.refresh() if self.offline == True: self.win.setProperty('offline', 'true') def onAction(self, action): if action.getId() in (EXIT_SCRIPT) or action.getButtonCode() in EXIT_SCRIPT: self.closed = True self.close() def onClick(self, controlId): try: self.dispatcher[controlId]() if self.xnewa.changedRecordings: self.xnewa.cleanOldCache('guideListing-*.p') self.xnewa.cleanCache('*.p') self.xnewa.changedRecordings = False self.refreshOnInit() except KeyError: debug('onClick') def goSearch(self): from . import search mywin = search.SearchWindow('nextpvr_search.xml', WHERE_AM_I,self.settings.XNEWA_SKIN, settings=self.settings, xnewa=self.xnewa) mywin.doModal() def goExit(self): self.xnewa.cleanCoverCache() self.closed = True self.close() return def goOnline(self): self.refreshOnInit() if self.offline == False: self.win.setProperty('recent', 'true') self.win.setProperty('scheduled', 'true') self.win.setProperty('upcoming', 'true') self.win.setProperty('offline', 'false') xbmc.sleep(100) return try: self.getControl(999) self.win.setFocusId(999) except RuntimeError: self.win.setFocusId(251) def goRecentDetails(self): from . import details oid = self.recentData[self.recentListBox.getSelectedPosition()]['recording_oid'] detailDialog = details.DetailDialog("nextpvr_recording_details.xml", WHERE_AM_I,self.settings.XNEWA_SKIN, settings=self.settings, xnewa=self.xnewa, oid=oid, type="R" ) detailDialog.doModal() print(detailDialog.returnvalue) if detailDialog.shouldRefresh: #self.xnewa.changedRecordings = False #self.recentData = self.xnewa.getRecentRecordings(self.settings.NextPVR_USER, self.settings.NextPVR_PW, 10) self.xnewa.cleanCache('*.p') self.refresh() def goUpcomingDetails(self): from . import details oid = self.upcomingData[self.comingListBox.getSelectedPosition()]['recording_oid'] detailDialog = details.DetailDialog("nextpvr_recording_details.xml", WHERE_AM_I,self.settings.XNEWA_SKIN, settings=self.settings, xnewa=self.xnewa, oid=oid, type="R") detailDialog.doModal() if detailDialog.shouldRefresh: self.xnewa.cleanCache('*.p') self.refresh() def goTvGuide(self): from . import epg mywin = epg.EpgWindow('nextpvr_epg.xml', WHERE_AM_I,self.settings.XNEWA_SKIN, xnewa=self.xnewa, settings=self.settings) mywin.doModal() if self.xnewa.changedRecordings: self.xnewa.cleanOldCache('guideListing-*.p') self.xnewa.cleanCache('*.p') self.xnewa.changedRecordings = False self.refreshOnInit() def goWatchRecordings(self): xbmc.executebuiltin('XBMC.ActivateWindow(videos,tvshowtitles)') def goNextPVR(self): from . import emulate emulateWindow = emulate.EmulateWindow("nextpvr_emulate.xml", WHERE_AM_I,self.settings.XNEWA_SKIN, settings=self.settings, xnewa=self.xnewa) emulateWindow.doModal() def goRecordingSchedules(self): from . import schedules mywin = schedules.SchedulesWindow('nextpvr_schedules.xml', WHERE_AM_I,self.settings.XNEWA_SKIN, settings=self.settings, xnewa=self.xnewa) mywin.doModal() def goUpcomingRecordings(self): from . import upcoming mywin = upcoming.UpcomingRecordingsWindow('nextpvr_upcoming.xml', WHERE_AM_I,self.settings.XNEWA_SKIN, settings=self.settings, xnewa=self.xnewa) mywin.doModal() def goRecentRecordings(self): from . import recent mywin = recent.RecentRecordingsWindow('nextpvr_recent.xml', WHERE_AM_I,self.settings.XNEWA_SKIN, settings=self.settings, xnewa=self.xnewa) mywin.doModal() #if mywin.shouldRefresh: # self.renderRecent() def goSettings(self): from . import settings mywin = settings.settingsDialog('nextpvr_settings.xml', WHERE_AM_I, settings=self.settings,xnewa=self.xnewa) mywin.doModal() if self.settings.Reload: print("Reloading") self.xnewa = XNEWA_Connect(settings=self.settings) if self.xnewa.offline == False: self.win.setProperty('recent', 'true') self.win.setProperty('scheduled', 'true') self.win.setProperty('upcoming', 'true') self.refreshButton() def refresh(self): self.renderStats() self.renderUpComing() self.renderRecent() def refreshButton(self): self.getChannels = True self.xnewa.cleanCache('channel.List') self.xnewa.cleanCache('summary.List') self.xnewa.cleanCache('guideListing-*.p') self.xnewa.cleanCache('*.p') self.refreshOnInit() def refreshOnInit(self): self.win.setProperty('busy', 'true') if self.xnewa.AreYouThere(self.settings.usewol(), self.settings.NextPVR_MAC, self.settings.NextPVR_BROADCAST): try: self.statusData = self.xnewa.GetNextPVRInfo(self.settings.NextPVR_USER, self.settings.NextPVR_PW,self.getChannels) self.getChannels = False if self.settings.XNEWA_INTERFACE != 'NextPVR': self.upcomingData = self.xnewa.getUpcomingRecordings(self.settings.NextPVR_USER, self.settings.NextPVR_PW, 10) self.recentData = self.xnewa.getRecentRecordings(self.settings.NextPVR_USER, self.settings.NextPVR_PW, 10) self.renderUpComing() self.renderRecent() self.renderStats() self.offline = False except: handleException() self.win.setProperty('busy', 'false') xbmcgui.Dialog().ok(smartUTF8(__language__(30108)), smartUTF8(__language__(30120))) self.offline = True else: self.offline = False self.win.setProperty('busy', 'false') self.winOnline(); xbmcgui.Dialog().ok(smartUTF8(__language__(30108)), '%s!' % smartUTF8(__language__(30109))) self.offline = True self.win.setFocusId(257) self.win.setProperty('busy', 'false') def renderUpComing(self): listItems = [] if self.upcomingData != None: self.comingListBox.reset() for i, t in enumerate(self.upcomingData): listItem = xbmcgui.ListItem('Row %d' % i) if t['season'] == 0: listItem.setProperty('title', t['title']) elif ( t['significance'] == ''): listItem.setProperty('title','{0} ({1}x{2})'.format(t['title'],t['season'],t['episode'])) else: listItem.setProperty('title', '{0} : {1}'.format(t['title'],t['significance'])) listItem.setProperty('channel', t['channel'][0]) listItem.setProperty('date', self.xnewa.formatDate(t['start'])) listItem.setProperty('date_long', self.xnewa.formatDate(t['start'], withyear=True)) listItem.setProperty('start', self.xnewa.formatTime(t['start'])) listItem.setProperty('end', self.xnewa.formatTime(t['end'])) listItem.setProperty('description', t['desc']) listItem.setProperty('status', t['status']) listItem.setProperty('oid', str(t['program_oid'])) listItems.append(listItem) if len(listItems) > 0: self.comingListBox.addItems(listItems) self.win.setFocus(self.comingListBox) else: self.win.setFocusId(999) def renderRecent(self): listItems = [] self.recentListBox.reset() if self.recentData != None: for i, t in enumerate(self.recentData): listItem = xbmcgui.ListItem('Row %d' % i) if t['season'] == 0: listItem.setProperty('title', t['title']) elif ( t['significance'] == ''): listItem.setProperty('title','{0} ({1}x{2})'.format(t['title'],t['season'],t['episode'])) else: listItem.setProperty('title', '{0} : {1}'.format(t['title'],t['significance'])) listItem.setProperty('channel', t['channel'][0]) listItem.setProperty('date', self.xnewa.formatDate(t['start'])) listItem.setProperty('date_long', self.xnewa.formatDate(t['start'], withyear=True)) listItem.setProperty('start', self.xnewa.formatTime(t['start'])) listItem.setProperty('end', self.xnewa.formatTime(t['end'])) listItem.setProperty('description', t['desc']) listItem.setProperty('status', t['status']) listItem.setProperty('oid', str(t['program_oid'])) listItems.append(listItem) if len(listItems) > 0: self.recentListBox.addItems(listItems) if self.comingListBox.size() == 0: self.win.setFocus(self.recentListBox) def renderStats(self): # Set up free-space indication # First, the text part # Todo: Make safe for other languages / sizes (GB/MB, etc.) if self.statusData['directory'] != None: tmp = self.statusData['directory'][0]['Total'].split(' ') uom = tmp[1] print(type(tmp[0].replace(',','.'))) lTotal = float(str(tmp[0].replace(',','.'))) tmp = self.statusData['directory'][0]['Free'].split(' ') if uom != tmp[1]: lTotal = lTotal * 1000 lFree = float(tmp[0].replace(',','.')) self.spaceFree.setLabel(str(lFree) + tmp[1]) lUsed = lTotal - lFree self.spaceUsed.setLabel(str(lUsed) + tmp[1]) # Then, the images part x, y = self.spaceGreen.getPosition() redWidth = int((250 // lTotal ) * lUsed) greenWidth = int(250 - redWidth) self.spaceGreen.setWidth(greenWidth) self.spaceRed.setWidth(redWidth) self.spaceRed.setPosition(x+greenWidth, y) if self.includePercentages: self.spacePercent.setPercent((100*lUsed)//lTotal) # Set up display of counters self.countPending.setLabel(self.statusData['schedule']['Pending']) self.countProgress.setLabel(self.statusData['schedule']['InProgress']) self.countAvailable.setLabel(self.statusData['schedule']['Available']) self.countFailed.setLabel(self.statusData['schedule']['Failed']) self.countConflict.setLabel(self.statusData['schedule']['Conflict']) self.countSeason.setLabel(self.statusData['schedule']['Recurring']) def winOnline(self): if self.xnewa.offline: if self.xnewa.checkCache('recentRecordings-0.p') == False: self.win.setProperty('recent', 'false') if self.xnewa.checkCache('scheduledRecordings-0.p') == False: self.win.setProperty('scheduled', 'false') if self.xnewa.checkCache('upcomingRecordings-0.p') == False: self.win.setProperty('upcoming', 'false') self.win.setFocusId(257) if self.offline != self.xnewa.offline: self.offline = self.xnewa.offline if self.offline == True: self.win.setProperty('offline', 'true') self.win.setFocusId(257) else: self.win.setProperty('offline', 'false')
__language__ = Addon('script.kodi.knewc').getLocalizedString xbmc.log(DIR_HOME) sys.path.insert(0, os.path.join(DIR_HOME, 'resources', 'lib')) sys.path.insert(0, os.path.join(DIR_HOME, 'resources', 'src')) xbmc.log(str(sys.path)) from nextpvr.home import HomeWindow from nextpvr.emulate import EmulateWindow from XNEWAGlobals import * from XNEWA_Connect import XNEWA_Connect from XNEWA_Settings import XNEWA_Settings from fix_utf8 import smartUTF8 xbmc.executebuiltin(XBMC_DIALOG_BUSY_OPEN) try: # start script main my_settings = XNEWA_Settings() my_xnewa = XNEWA_Connect(settings=my_settings) xbmc.executebuiltin(XBMC_DIALOG_BUSY_CLOSE) if my_xnewa.offline == False: DIR_HOME = WHERE_AM_I debug("--> Home Directory is: " + DIR_HOME) if my_settings.XNEWA_WEBCLIENT == False: if len(sys.argv) > 1: xbmc.log("script parameters: %s" % sys.argv) my_xnewa.GetNextPVRInfo(my_settings.NextPVR_USER, my_settings.NextPVR_PW) if sys.argv[1] == "upcoming": from nextpvr.upcoming import UpcomingRecordingsWindow ur = UpcomingRecordingsWindow('nextpvr_upcoming.xml', WHERE_AM_I,my_settings.XNEWA_SKIN, settings=my_settings, xnewa=my_xnewa) ur.doModal() elif sys.argv[1] == "webclient": ew = EmulateWindow("nextpvr_emulate.xml", WHERE_AM_I,my_settings.XNEWA_SKIN, settings=my_settings, xnewa=my_xnewa) ew.doModal()
class HomeWindow(xbmcgui.WindowXML): def __init__(self, *args, **kwargs): self.win = None self.busy = False self.progressDialog = None self.settings = XNEWA_Settings() self.offline = False self.xnewa = XNEWA_Connect(self.settings.NextPVR_HOST, self.settings.NextPVR_PORT) def onFocus(self, controlId): pass def onInit(self): if not self.win: self.win = xbmcgui.Window(xbmcgui.getCurrentWindowId()) self.recentListBox = self.getControl(249) self.comingListBox = self.getControl(248) self.spaceGreen = self.getControl(247) self.spaceRed = self.getControl(246) self.spaceFree = self.getControl(245) self.spaceUsed = self.getControl(244) self.countPending = self.getControl(243) self.countProgress = self.getControl(242) self.countAvailable = self.getControl(241) self.countFailed = self.getControl(240) self.countConflict = self.getControl(239) self.countSeason = self.getControl(238) # button ids -> funtion ptr self.dispatcher = { 248 : self.goUpcomingDetails, 249 : self.goRecentDetails, 250 : self.goWatchRecordings, 251 : self.goTvGuide, 252 : self.goRecordingSchedules, 253 : self.goUpcomingRecordings, 254 : self.goSearch, 255 : self.goSettings, 256 : self.refreshButton, 257 : self.goExit, 258 : self.goRecentRecordings, 259 : self.goOnline } self.winOnline() self.refreshOnInit() else: self.refresh() if self.offline == True: self.win.setProperty('offline', 'true') def onAction(self, action): if action.getId() in (EXIT_SCRIPT): self.closed = True self.close() def onClick(self, controlId): try: self.dispatcher[controlId]() if self.xnewa.changedRecordings: self.xnewa.cleanOldCache('guideListing-*.p') self.xnewa.cleanCache('*.p') self.xnewa.changedRecordings = False; self.refreshOnInit() except KeyError: debug('onClick') def goSearch(self): import search mywin = search.SearchWindow('nextpvr_search.xml', WHERE_AM_I, settings=self.settings, xnewa=self.xnewa) mywin.doModal() def goExit(self): self.xnewa.cleanCoverCache() self.closed = True self.close() def goOnline(self): self.offline = False self.win.setProperty('recent', 'true') self.win.setProperty('scheduled', 'true') self.win.setProperty('upcoming', 'true') self.win.setProperty('offline', 'false') def goRecentDetails(self): import details oid = self.recentData[self.recentListBox.getSelectedPosition()]['recording_oid'] detailDialog = details.DetailDialog("nextpvr_recording_details.xml", WHERE_AM_I, settings=self.settings, xnewa=self.xnewa, oid=oid, type="R" ) detailDialog.doModal() if detailDialog.shouldRefresh: self.render() def goUpcomingDetails(self): import details oid = self.upcomingData[self.comingListBox.getSelectedPosition()]['recording_oid'] detailDialog = details.DetailDialog("nextpvr_recording_details.xml", WHERE_AM_I, settings=self.settings, xnewa=self.xnewa, oid=oid, type="R") detailDialog.doModal() if detailDialog.shouldRefresh: self.render() def goWatchRecordings(self): xbmc.executebuiltin('XBMC.ActivateWindow(videos,tvshowtitles)') def goTvGuide(self): import epg mywin = epg.EpgWindow('nextpvr_epg.xml', WHERE_AM_I, xnewa=self.xnewa, settings=self.settings) mywin.doModal() def goRecordingSchedules(self): import schedules mywin = schedules.SchedulesWindow('nextpvr_schedules.xml', WHERE_AM_I, settings=self.settings, xnewa=self.xnewa) mywin.doModal() def goUpcomingRecordings(self): import upcoming mywin = upcoming.UpcomingRecordingsWindow('nextpvr_upcoming.xml', WHERE_AM_I, settings=self.settings, xnewa=self.xnewa) mywin.doModal() def goRecentRecordings(self): import recent mywin = recent.RecentRecordingsWindow('nextpvr_recent.xml', WHERE_AM_I, settings=self.settings, xnewa=self.xnewa) mywin.doModal() def goSettings(self): import settings mywin = settings.settingsDialog('nextpvr_settings.xml', WHERE_AM_I, settings=self.settings,xnewa=self.xnewa) mywin.doModal() if self.settings.Reload: print "Reloading" self.xnewa = XNEWA_Connect(self.settings.NextPVR_HOST, self.settings.NextPVR_PORT) if self.xnewa.offline == False: self.win.setProperty('recent', 'true') self.win.setProperty('scheduled', 'true') self.win.setProperty('upcoming', 'true') self.refreshButton() def refresh(self): self.renderUpComing() self.renderRecent() self.renderStats() def refreshButton(self): self.xnewa.cleanOldCache('guideListing-*.p') self.xnewa.cleanCache('*.p') self.refreshOnInit() def refreshOnInit(self): self.win.setProperty('busy', 'true') if self.xnewa.AreYouThere(self.settings.usewol(), self.settings.NextPVR_MAC, self.settings.NextPVR_BROADCAST): self.goOnline() try: self.statusData = self.xnewa.GetNextPVRInfo(self.settings.NextPVR_USER, self.settings.NextPVR_PW) self.upcomingData = self.xnewa.getUpcomingRecordings(self.settings.NextPVR_USER, self.settings.NextPVR_PW, 10) self.recentData = self.xnewa.getRecentRecordings(self.settings.NextPVR_USER, self.settings.NextPVR_PW, 10) self.renderUpComing() self.renderRecent() self.renderStats() self.win.setProperty('busy', 'false') except: handleException() self.win.setProperty('busy', 'false') xbmcgui.Dialog().ok('Error', 'Unable load NEWA data') else: self.win.setProperty('busy', 'false') self.winOnline(); xbmcgui.Dialog().ok('Error', 'Unable to contact NextPVR Server!') def renderUpComing(self): listItems = [] for i, t in enumerate(self.upcomingData): listItem = xbmcgui.ListItem('Row %d' % i) listItem.setProperty('title', t['title']) listItem.setProperty('date', t['start'].strftime("%a, %b %d %H:%M")) listItem.setProperty('end', t['end'].strftime("%H:%M")) listItem.setProperty('description', t['desc']) listItem.setProperty('channel', t['channel'][0]) listItem.setProperty('oid', str(t['program_oid'])) listItems.append(listItem) self.comingListBox.addItems(listItems) def renderRecent(self): listItems = [] for i, t in enumerate(self.recentData): listItem = xbmcgui.ListItem('Row %d' % i) listItem.setProperty('title', t['title']) listItem.setProperty('date', t['start'].strftime("%a, %b %d %H:%M")) listItem.setProperty('end', t['end'].strftime("%H:%M")) listItem.setProperty('description', t['desc']) listItem.setProperty('status', t['status']) listItem.setProperty('oid', str(t['program_oid'])) listItems.append(listItem) self.recentListBox.addItems(listItems) def renderStats(self): # Set up free-space indication # First, the text part # Todo: Make safe for other languages / sizes (GB/MB, etc.) tmp = self.statusData['directory'][0]['Total'].split(' ') lTotal = float(tmp[0].replace(',','.')) tmp = self.statusData['directory'][0]['Free'].split(' ') lFree = float(tmp[0].replace(',','.')) lUsed = lTotal - lFree self.spaceFree.setLabel(str(lFree) + " Gb") self.spaceUsed.setLabel(str(lUsed) + " Gb") # Then, the images part x, y = self.spaceGreen.getPosition() redWidth = int((250 / (lTotal) ) * lUsed) greenWidth = 250 - redWidth self.spaceGreen.setWidth(greenWidth) self.spaceRed.setWidth(redWidth) self.spaceRed.setPosition(x+greenWidth, y) # Set up display of counters self.countPending.setLabel(self.statusData['schedule']['Pending']) self.countProgress.setLabel(self.statusData['schedule']['InProgress']) self.countAvailable.setLabel(self.statusData['schedule']['Available']) self.countFailed.setLabel(self.statusData['schedule']['Failed']) self.countConflict.setLabel(self.statusData['schedule']['Conflict']) self.countSeason.setLabel(self.statusData['schedule']['Recurring']) def winOnline(self): if self.xnewa.offline: if self.xnewa.checkCache('recentRecordings-0.p') == False: self.win.setProperty('recent', 'false') if self.xnewa.checkCache('scheduledRecordings-0.p') == False: self.win.setProperty('scheduled', 'false') if self.xnewa.checkCache('upcomingRecordings-0.p') == False: self.win.setProperty('upcoming', 'false') if self.offline != self.xnewa.offline: self.offline = self.xnewa.offline if self.offline == True: self.win.setProperty('offline', 'true') else: self.win.setProperty('offline', 'false')
class HomeWindow(xbmcgui.WindowXML): def __init__(self, *args, **kwargs): self.win = None self.busy = False #self.progressDialog = None #self.settings = XNEWA_Settings() #self.xnewa = XNEWA_Connect(settings=self.settings) self.settings = kwargs['settings'] self.xnewa = kwargs['xnewa'] self.offline = self.xnewa.offline self.getChannels = True self.returnvalue = None def onFocus(self, controlId): pass def onInit(self): if not self.win: self.win = xbmcgui.Window(xbmcgui.getCurrentWindowId()) self.recentListBox = self.getControl(249) self.comingListBox = self.getControl(248) self.spaceGreen = self.getControl(247) self.spaceRed = self.getControl(246) self.spaceFree = self.getControl(245) self.spaceUsed = self.getControl(244) self.countPending = self.getControl(243) self.countProgress = self.getControl(242) self.countAvailable = self.getControl(241) self.countFailed = self.getControl(240) self.countConflict = self.getControl(239) self.countSeason = self.getControl(238) try: self.spacePercent = self.getControl(237) self.includePercentages = True except RuntimeError: self.includePercentages = False if self.settings.XNEWA_READONLY == True: self.win.setProperty('readonly', 'true') # button ids -> funtion ptr self.dispatcher = { 248: self.goUpcomingDetails, 249: self.goRecentDetails, 250: self.goWatchRecordings, 251: self.goTvGuide, 252: self.goRecordingSchedules, 253: self.goUpcomingRecordings, 254: self.goSearch, 256: self.refreshButton, 257: self.goExit, 258: self.goRecentRecordings, 259: self.goOnline, 260: self.goNextPVR } self.winOnline() if self.offline == True: self.win.setProperty('offline', 'true') else: self.goOnline() else: self.refresh() if self.offline == True: self.win.setProperty('offline', 'true') def onAction(self, action): if action.getId() in ( EXIT_SCRIPT) or action.getButtonCode() in EXIT_SCRIPT: self.closed = True self.close() def onClick(self, controlId): try: self.dispatcher[controlId]() if self.xnewa.changedRecordings: self.xnewa.cleanOldCache('guideListing-*.p') self.xnewa.cleanCache('*.p') self.xnewa.changedRecordings = False self.refreshOnInit() except KeyError: debug('onClick') def goSearch(self): from . import search mywin = search.SearchWindow('nextpvr_search.xml', WHERE_AM_I, self.settings.XNEWA_SKIN, settings=self.settings, xnewa=self.xnewa) mywin.doModal() def goExit(self): self.xnewa.cleanCoverCache() self.closed = True self.close() return def goOnline(self): self.refreshOnInit() if self.offline == False: self.win.setProperty('recent', 'true') self.win.setProperty('scheduled', 'true') self.win.setProperty('upcoming', 'true') self.win.setProperty('offline', 'false') xbmc.sleep(100) return try: self.getControl(999) self.win.setFocusId(999) except RuntimeError: self.win.setFocusId(251) def goRecentDetails(self): from . import details oid = self.recentData[ self.recentListBox.getSelectedPosition()]['recording_oid'] detailDialog = details.DetailDialog("nextpvr_recording_details.xml", WHERE_AM_I, self.settings.XNEWA_SKIN, settings=self.settings, xnewa=self.xnewa, oid=oid, type="R") detailDialog.doModal() if detailDialog.shouldRefresh: #self.xnewa.changedRecordings = False #self.recentData = self.xnewa.getRecentRecordings(self.settings.NextPVR_USER, self.settings.NextPVR_PW, 10) self.xnewa.cleanCache('*.p') self.refresh() def goUpcomingDetails(self): from . import details oid = self.upcomingData[ self.comingListBox.getSelectedPosition()]['recording_oid'] detailDialog = details.DetailDialog("nextpvr_recording_details.xml", WHERE_AM_I, self.settings.XNEWA_SKIN, settings=self.settings, xnewa=self.xnewa, oid=oid, type="R") detailDialog.doModal() if detailDialog.shouldRefresh: self.xnewa.cleanCache('*.p') self.refresh() def goTvGuide(self): from . import epg mywin = epg.EpgWindow('nextpvr_epg.xml', WHERE_AM_I, self.settings.XNEWA_SKIN, xnewa=self.xnewa, settings=self.settings) mywin.doModal() if self.xnewa.changedRecordings: self.xnewa.cleanOldCache('guideListing-*.p') self.xnewa.cleanCache('*.p') self.xnewa.changedRecordings = False self.refreshOnInit() def goWatchRecordings(self): xbmc.executebuiltin('XBMC.ActivateWindow(videos,tvshowtitles)') def goNextPVR(self): from . import emulate emulateWindow = emulate.EmulateWindow("nextpvr_emulate.xml", WHERE_AM_I, self.settings.XNEWA_SKIN, settings=self.settings, xnewa=self.xnewa) emulateWindow.doModal() def goRecordingSchedules(self): from . import schedules mywin = schedules.SchedulesWindow('nextpvr_schedules.xml', WHERE_AM_I, self.settings.XNEWA_SKIN, settings=self.settings, xnewa=self.xnewa) mywin.doModal() def goUpcomingRecordings(self): from . import upcoming mywin = upcoming.UpcomingRecordingsWindow('nextpvr_upcoming.xml', WHERE_AM_I, self.settings.XNEWA_SKIN, settings=self.settings, xnewa=self.xnewa) mywin.doModal() def goRecentRecordings(self): from . import recent mywin = recent.RecentRecordingsWindow('nextpvr_recent.xml', WHERE_AM_I, self.settings.XNEWA_SKIN, settings=self.settings, xnewa=self.xnewa) mywin.doModal() #if mywin.shouldRefresh: # self.renderRecent() def goSettings(self): from . import settings mywin = settings.settingsDialog('nextpvr_settings.xml', WHERE_AM_I, settings=self.settings, xnewa=self.xnewa) mywin.doModal() if self.settings.Reload: self.xnewa = XNEWA_Connect(settings=self.settings) if self.xnewa.offline == False: self.win.setProperty('recent', 'true') self.win.setProperty('scheduled', 'true') self.win.setProperty('upcoming', 'true') self.refreshButton() def refresh(self): self.renderStats() self.renderUpComing() self.renderRecent() def refreshButton(self): self.getChannels = True self.xnewa.cleanCache('channel.List') self.xnewa.cleanCache('summary.List') self.xnewa.cleanCache('search.List') #self.xnewa.cleanCache('guideListing-*.p') self.xnewa.cleanCache('*.p') self.refreshOnInit() def refreshOnInit(self): self.win.setProperty('busy', 'true') if self.xnewa.AreYouThere(self.settings.usewol(), self.settings.NextPVR_MAC, self.settings.NextPVR_BROADCAST): try: self.statusData = self.xnewa.GetNextPVRInfo( self.settings.NextPVR_USER, self.settings.NextPVR_PW, self.getChannels) self.getChannels = False if self.settings.XNEWA_INTERFACE != 'NextPVR': self.upcomingData = self.xnewa.getUpcomingRecordings( self.settings.NextPVR_USER, self.settings.NextPVR_PW, 10) self.recentData = self.xnewa.getRecentRecordings( self.settings.NextPVR_USER, self.settings.NextPVR_PW, 10) self.renderUpComing() self.renderRecent() self.renderStats() self.offline = False except: handleException() self.win.setProperty('busy', 'false') xbmcgui.Dialog().ok(smartUTF8(__language__(30108)), smartUTF8(__language__(30120))) self.offline = True else: self.offline = False self.win.setProperty('busy', 'false') self.winOnline() xbmcgui.Dialog().ok(smartUTF8(__language__(30108)), '%s!' % smartUTF8(__language__(30109))) self.offline = True self.win.setFocusId(257) self.win.setProperty('busy', 'false') def renderUpComing(self): listItems = [] if self.upcomingData != None: self.comingListBox.reset() for i, t in enumerate(self.upcomingData): listItem = xbmcgui.ListItem('Row %d' % i) if t['season'] == 0: listItem.setProperty('title', t['title']) elif (t['significance'] == ''): listItem.setProperty( 'title', '{0} ({1}x{2})'.format(t['title'], t['season'], t['episode'])) else: listItem.setProperty( 'title', '{0} : {1}'.format(t['title'], t['significance'])) listItem.setProperty('channel', t['channel'][0]) listItem.setProperty('date', self.xnewa.formatDate(t['start'])) listItem.setProperty( 'date_long', self.xnewa.formatDate(t['start'], withyear=True)) listItem.setProperty('start', self.xnewa.formatTime(t['start'])) listItem.setProperty('end', self.xnewa.formatTime(t['end'])) listItem.setProperty('description', t['desc']) listItem.setProperty('status', t['status']) listItem.setProperty('oid', str(t['program_oid'])) listItems.append(listItem) if len(listItems) > 0: self.comingListBox.addItems(listItems) self.win.setFocus(self.comingListBox) else: self.win.setFocusId(999) def renderRecent(self): listItems = [] self.recentListBox.reset() if self.recentData != None: for i, t in enumerate(self.recentData): listItem = xbmcgui.ListItem('Row %d' % i) if t['season'] == 0: listItem.setProperty('title', t['title']) elif (t['significance'] == ''): listItem.setProperty( 'title', '{0} ({1}x{2})'.format(t['title'], t['season'], t['episode'])) else: listItem.setProperty( 'title', '{0} : {1}'.format(t['title'], t['significance'])) listItem.setProperty('channel', t['channel'][0]) listItem.setProperty('date', self.xnewa.formatDate(t['start'])) listItem.setProperty( 'date_long', self.xnewa.formatDate(t['start'], withyear=True)) listItem.setProperty('start', self.xnewa.formatTime(t['start'])) listItem.setProperty('end', self.xnewa.formatTime(t['end'])) listItem.setProperty('description', t['desc']) listItem.setProperty('status', t['status']) listItem.setProperty('oid', str(t['program_oid'])) listItems.append(listItem) if len(listItems) > 0: self.recentListBox.addItems(listItems) if self.comingListBox.size() == 0: self.win.setFocus(self.recentListBox) def renderStats(self): # Set up free-space indication # First, the text part # Todo: Make safe for other languages / sizes (GB/MB, etc.) if self.statusData['directory'] != None: tmp = self.statusData['directory'][0]['Total'].split(' ') uom = tmp[1] lTotal = float(str(tmp[0].replace(',', '.'))) tmp = self.statusData['directory'][0]['Free'].split(' ') if uom != tmp[1]: lTotal = lTotal * 1000 lFree = float(tmp[0].replace(',', '.')) lUsed = lTotal - lFree driveSpace = tmp[1] elif self.statusData['space'] != None: lFree = self.statusData['space']['free'] lTotal = self.statusData['space']['total'] lUsed = lTotal - lFree driveSpace = ' GB' pass else: lFree = 0 lTotal = 1 driveSpace = ' GB' lUsed = lTotal - lFree self.spaceFree.setLabel(str(lFree) + driveSpace) self.spaceUsed.setLabel(str(lUsed) + driveSpace) # Then, the images part x, y = self.spaceGreen.getPosition() redWidth = int((250 // lTotal) * lUsed) greenWidth = int(250 - redWidth) self.spaceGreen.setWidth(greenWidth) self.spaceRed.setWidth(redWidth) self.spaceRed.setPosition(x + greenWidth, y) if self.includePercentages: self.spacePercent.setPercent((100 * lUsed) // lTotal) # Set up display of counters if self.statusData['schedule'] != None: self.countPending.setLabel(self.statusData['schedule']['Pending']) self.countProgress.setLabel( self.statusData['schedule']['InProgress']) self.countAvailable.setLabel( self.statusData['schedule']['Available']) self.countFailed.setLabel(self.statusData['schedule']['Failed']) self.countConflict.setLabel( self.statusData['schedule']['Conflict']) self.countSeason.setLabel(self.statusData['schedule']['Recurring']) def winOnline(self): if self.xnewa.offline: if self.xnewa.checkCache('recentRecordings-0.p') == False: self.win.setProperty('recent', 'false') if self.xnewa.checkCache('scheduledRecordings-0.p') == False: self.win.setProperty('scheduled', 'false') if self.xnewa.checkCache('upcomingRecordings-0.p') == False: self.win.setProperty('upcoming', 'false') self.win.setFocusId(257) if self.offline != self.xnewa.offline: self.offline = self.xnewa.offline if self.offline == True: self.win.setProperty('offline', 'true') self.win.setFocusId(257) else: self.win.setProperty('offline', 'false')