def __init__( self, *args, **kwargs ): self.exit_monitor = self.ExitMonitor(self.stopRunning) if os.path.exists(ignored_league_list_file): self.ignored_leagues = eval(FileIO.fileread(ignored_league_list_file)) else: self.ignored_leagues = [] self.tables = ssutils.get_league_tables_ids() random.shuffle(self.tables) self.table_index = -1 self.teamObjs = {} self.cache_object = AddonCache()
class Main(xbmcgui.WindowXMLDialog): class ExitMonitor(xbmc.Monitor): def __init__(self, exit_callback): self.exit_callback = exit_callback def onAbortRequested(self): self.exit_callback() def onScreensaverDeactivated(self): self.exit_callback() def __init__( self, *args, **kwargs ): self.exit_monitor = self.ExitMonitor(self.stopRunning) if os.path.exists(ignored_league_list_file): self.ignored_leagues = eval(FileIO.fileread(ignored_league_list_file)) else: self.ignored_leagues = [] self.tables = ssutils.get_league_tables_ids() random.shuffle(self.tables) self.table_index = -1 self.teamObjs = {} self.cache_object = AddonCache() def onInit(self): xbmc.log(msg="[Football Panel] Script started", level=xbmc.LOGDEBUG) self.isRunning = True xbmc.executebuiltin("ClearProperty(no-games,Home)") xbmc.executebuiltin("ClearProperty(has-tables,Home)") xbmc.executebuiltin("ClearProperty(has-rss,Home)") xbmc.executebuiltin("SetProperty(loading,1,home)") t1 = threading.Thread(target=self.livescoresThread) t2 = threading.Thread(target=self.tablesThread) t3 = threading.Thread(target=self.rssThread) t1.start() t2.start() t3.start() t1.join() t2.join() t3.join() xbmc.executebuiltin("ClearProperty(loading,Home)") i = 0 while self.isRunning: if (float(i*200)/(livescores_update_time*60*1000)).is_integer() and i != 0: self.livescoresThread() if (float(i*200)/(tables_update_time*60*1000)).is_integer() and i != 0: self.tablesThread() if (float(i*200)/(rss_update_time*60*1000)).is_integer() and i != 0: self.rssThread() xbmc.sleep(200) i += 1 xbmc.log(msg="[Football Panel] Script stopped", level=xbmc.LOGDEBUG) def livescoresThread(self): self.getLivescores() self.setLivescores() return def tablesThread(self): self.getLeagueTable() return def rssThread(self): self.setRss() return def setRss(self): feed = feedparser.parse(addon.getSetting("rss-url")) rss_line = '' for entry in feed['entries']: rss_line = rss_line + entry['summary_detail']['value'] + " | " if rss_line: #cleanup html code from the rss line htmlstriper = ssutils.HTMLStripper() htmlstriper.feed(rss_line) rss_line = htmlstriper.get_data() self.getControl(RSS_FEEDS).setLabel("") self.getControl(RSS_FEEDS).setLabel(rss_line) xbmc.executebuiltin("SetProperty(has-rss,1,home)") def getLivescores(self): self.livescoresdata = api.Livescores().Soccer() return def set_no_games(self): images = [] self.updateCacheTimes() league_id = ssutils.get_league_id_no_games() update_team_data = True if self.cache_object.isCachedLeagueTeams(league_id): update_team_data = abs(self.t2 - self.cache_object.getCachedLeagueTeamsTimeStamp(league_id)) > datetime.timedelta(hours=self.hoursList[self.interval]) if update_team_data: xbmc.log(msg="[Football Panel] Timedelta was reached for teams in league %s new request to be made..." % (str(league_id)), level=xbmc.LOGDEBUG) teams_in_league = api.Lookups().Team(leagueid=league_id) self.cache_object.cacheLeagueTeams(leagueid=league_id,team_obj_list=teams_in_league) else: xbmc.log(msg="[Football Panel] Using cached object for teams in league %s" % (str(league_id)), level=xbmc.LOGDEBUG) teams_in_league = self.cache_object.getcachedLeagueTeams(league_id) for team in teams_in_league: if team.strTeamFanart3: images.append(team.strTeamFanart3) if team.strTeamFanart4: images.append(team.strTeamFanart4) if images: random_photo = images[random.randint(0,len(images)-1)] self.getControl(NO_GAMES).setImage(random_photo) xbmc.executebuiltin("SetProperty(no-games,1,home)") return def updateCacheTimes(self): self.t2 = datetime.datetime.now() self.hoursList = [24, 48, 96, 168, 336] self.interval = int(addon.getSetting("new_request_interval")) return def getLeagueTable(self): self.table_index += 1 if self.table_index > (len(self.tables)-1): self.table_index = 0 leagueid = self.tables[self.table_index] table = api.Lookups().Table(leagueid) #Look for cached data first self.updateCacheTimes() #league data update_league_data = True if self.cache_object.isCachedLeague(leagueid): update_league_data = abs(self.t2 - self.cache_object.getCachedLeagueTimeStamp(leagueid)) > datetime.timedelta(hours=self.hoursList[self.interval]) if update_league_data: xbmc.log(msg="[Football Panel] Timedelta was reached for league %s new request to be made..." % (str(leagueid)), level=xbmc.LOGDEBUG) league = api.Lookups().League(self.tables[self.table_index])[0] self.cache_object.cacheLeague(leagueid=leagueid,league_obj=league) else: xbmc.log(msg="[Football Panel] Using cached object for league %s" % (str(leagueid)), level=xbmc.LOGDEBUG) league = self.cache_object.getcachedLeague(leagueid) #team data update_team_data = True if self.cache_object.isCachedLeagueTeams(leagueid): update_team_data = abs(self.t2 - self.cache_object.getCachedLeagueTeamsTimeStamp(leagueid)) > datetime.timedelta(hours=self.hoursList[self.interval]) if update_team_data: xbmc.log(msg="[Football Panel] Timedelta was reached for teams in league %s new request to be made..." % (str(leagueid)), level=xbmc.LOGDEBUG) teams_in_league = api.Lookups().Team(leagueid=self.tables[self.table_index]) self.cache_object.cacheLeagueTeams(leagueid=leagueid,team_obj_list=teams_in_league) else: xbmc.log(msg="[Football Panel] Using cached object for teams in league %s" % (str(leagueid)), level=xbmc.LOGDEBUG) teams_in_league = self.cache_object.getcachedLeagueTeams(leagueid) #Finnaly set the table self.table = [] for tableentry in table: try: item = xbmcgui.ListItem(tableentry.name) for team in teams_in_league: if tableentry.teamid == team.idTeam: item.setArt({ 'thumb': team.strTeamBadge }) if show_alternative == "true": item.setLabel(team.AlternativeNameFirst) item.setProperty('points',str(tableentry.total)) self.table.append(item) except Exception, e: xbmc.log(msg="[Football Panel] Exception: %s" % (str(e)), level=xbmc.LOGDEBUG) self.getControl(LEAGUETABLES_LIST_CONTROL).reset() if league.strLogo: self.getControl(LEAGUETABLES_CLEARART).setImage(league.strLogo) self.getControl(LEAGUETABLES_LIST_CONTROL).addItems(self.table) xbmc.executebuiltin("SetProperty(has-tables,1,home)") return
if len(sys.argv) >= 2: params=sys.argv[1] pairsofparams=params.split('/') pairsofparams = [parm for parm in pairsofparams if parm] return pairsofparams params=get_params() if not params: main = Main( 'script-livescores-Main.xml', addon_path, 'default', '', ) main.doModal() del main else: if "ignoreleagues" in params: ignoreWindow = ignoreleagues.Select( 'DialogSelect.xml', addon_path, 'default', '', ) ignoreWindow.doModal() del ignoreWindow elif "removecache" in params: AddonCache.removeCachedData()