def __init__(self, *args, **kwargs): self.isRunning = True self.standalone = kwargs["standalone"] self.teamObjs = {} self.cache_object = AddonCache()
def __init__( self, *args, **kwargs ): self.isRunning = True self.standalone = kwargs["standalone"] self.teamObjs = {} self.cache_object = AddonCache()
class Main(xbmcgui.WindowXMLDialog): def __init__(self, *args, **kwargs): self.isRunning = True self.standalone = kwargs["standalone"] self.teamObjs = {} self.cache_object = AddonCache() def onInit(self): xbmc.log(msg="[Match Center] Script started", level=xbmc.LOGDEBUG) if os.path.exists(ignored_league_list_file): self.ignored_leagues = [ league.lower() for league in eval(FileIO.fileread(ignored_league_list_file)) if league ] else: self.ignored_leagues = [] xbmc.executebuiltin("ClearProperty(no-games,Home)") self.getControl(32540).setImage( os.path.join(addon_path, "resources", "img", "goal.png")) xbmc.executebuiltin( "SetProperty(loading-script-matchcenter-livescores,1,home)") self.livescoresThread() xbmc.executebuiltin( "ClearProperty(loading-script-matchcenter-livescores,Home)") i = 0 while self.isRunning: if (float(i * 200) / (livescores_update_time * 60 * 1000)).is_integer() and ( (i * 200) / (3 * 60 * 1000)) != 0: self.livescoresThread() xbmc.sleep(200) i += 1 xbmc.log(msg="[Match Center] Script stopped", level=xbmc.LOGDEBUG) def updateCacheTimes(self): self.t2 = datetime.datetime.now() self.hoursList = [168, 336, 504, 672, 840] self.interval = int(addon.getSetting("new_request_interval")) return def livescoresThread(self): self.getLivescores() self.updateCacheTimes() self.setLivescores() return def getLivescores(self): self.livescoresdata = api.Livescores().Basketball() return def set_no_games(self): xbmc.executebuiltin( "ClearProperty(loading-script-matchcenter-livescores,Home)") self.getControl(32541).setImage( os.path.join(addon_path, "resources", "img", "baliza.png")) xbmc.executebuiltin("SetProperty(no-games,1,home)") return def setLivescores(self): items = [] self.livecopy = [] if self.livescoresdata: for livegame in self.livescoresdata: if removeNonAscii(livegame.League).strip().lower() not in str( self.ignored_leagues): #decide to add the match or not if (livegame.Time.lower() != "not started") and ( livegame.Time.lower() != "finished") and ( livegame.Time.lower() != "postponed"): add = True else: if livegame.Time.lower( ) == "not started" and hide_notstarted == "true": add = False elif livegame.Time.lower( ) == "postponed" and hide_notstarted == "true": add = False elif livegame.Time.lower( ) == "finished" and hide_finished == "true": add = False else: add = True if not livegame.HomeGoals.strip( ) and not livegame.AwayGoals.strip(): add = False #Get only the team objects for the games that will be added (avoid unecessary requests) #Append to self.teamObjs if add == True: id_teams = [] if livegame.HomeTeam_Id: id_teams.append(livegame.HomeTeam_Id) else: id_teams.append(None) if livegame.AwayTeam_Id: id_teams.append(livegame.AwayTeam_Id) else: id_teams.append(None) index = 0 #To distinguish home (0) from away team (1) for id_team in id_teams: if id_team: update_team_data = True if self.cache_object.isCachedTeam(id_team): update_team_data = abs( self.t2 - self.cache_object. getCachedTeamTimeStamp(id_team) ) > datetime.timedelta( hours=self.hoursList[self.interval]) if update_team_data: try: teamobject = api.Lookups().Team( teamid=id_team)[0] self.cache_object.cacheTeam( teamid=id_team, team_obj=teamobject) xbmc.log( msg= "[Match Center] Timedelta was reached for team %s new request to be made..." % (str(id_team)), level=xbmc.LOGDEBUG) except: teamobject = None else: teamobject = self.cache_object.getcachedTeam( id_team) xbmc.log( msg= "[Match Center] Used cached data for team %s..." % (str(id_team)), level=xbmc.LOGDEBUG) if index == 0: livegame.setHomeTeamObj(obj=teamobject) else: livegame.setAwayTeamObj(obj=teamobject) index += 1 #if livegame.HomeTeamObj and livegame.AwayTeamObj: item = xbmcgui.ListItem(livegame.HomeTeam + livegame.AwayTeam) item.setProperty( 'result', str(livegame.HomeGoals) + "-" + str(livegame.AwayGoals)) #Set team name label hometeamName = livegame.HomeTeam awayteamName = livegame.AwayTeam if show_alternative == "true": if livegame.HomeTeamObj: hometeamName = livegame.HomeTeamObj.AlternativeNameFirst if livegame.AwayTeamObj: awayteamName = livegame.AwayTeamObj.AlternativeNameFirst #Choose between textbox (long names) or label (short names) if len(hometeamName) >= 14 and " " in hometeamName: item.setProperty('hometeam_long', hometeamName) else: item.setProperty('hometeam_short', hometeamName) if len(awayteamName) >= 14 and " " in awayteamName: item.setProperty('awayteam_long', awayteamName) else: item.setProperty('awayteam_short', awayteamName) #set team badge if livegame.HomeTeamObj and livegame.HomeTeamObj.strTeamBadge: item.setProperty('home_team_logo', livegame.HomeTeamObj.strTeamBadge) else: item.setProperty( 'home_team_logo', os.path.join(addon_path, "resources", "img", "nobadge_placeholder.png")) if livegame.AwayTeamObj and livegame.AwayTeamObj.strTeamBadge: item.setProperty('away_team_logo', livegame.AwayTeamObj.strTeamBadge) else: item.setProperty( 'away_team_logo', os.path.join(addon_path, "resources", "img", "nobadge_placeholder.png")) if livegame.HomeGoals and bool( int(livegame.HomeGoals) > 0): item.setProperty( 'has_home_goals', os.path.join(addon_path, "resources", "img", "goal.png")) if livegame.AwayGoals and bool( int(livegame.AwayGoals) > 0): item.setProperty( 'has_away_goals', os.path.join(addon_path, "resources", "img", "goal.png")) if livegame.HomeGoalDetails: item.setProperty('home_goal_details', livegame.HomeGoalDetails) if livegame.AwayGoalDetails: item.setProperty('away_goal_details', livegame.AwayGoalDetails) item.setProperty( 'league_and_round', livegame.League + ' - ' + translate(32017) + ' ' + livegame.Round) #red cards if livegame.HomeTeamRedCardDetails: home_redcards = livegame.HomeTeamRedCardDetails.split( ";") for redcard in home_redcards: if not redcard: home_redcards.remove(redcard) if len(home_redcards) == 1: item.setProperty( 'home_redcard1', os.path.join(addon_path, "resources", "img", "redcard.png")) elif len(home_redcards) > 1: item.setProperty( 'home_redcard1', os.path.join(addon_path, "resources", "img", "redcard.png")) item.setProperty( 'home_redcard2', os.path.join(addon_path, "resources", "img", "redcard.png")) if livegame.AwayTeamRedCardDetails: away_redcards = livegame.AwayTeamRedCardDetails.split( ";") for redcard in away_redcards: if not redcard: away_redcards.remove(redcard) if len(away_redcards) == 1: item.setProperty( 'away_redcard2', os.path.join(addon_path, "resources", "img", "redcard.png")) elif len(away_redcards) > 1: item.setProperty( 'away_redcard1', os.path.join(addon_path, "resources", "img", "redcard.png")) item.setProperty( 'away_redcard2', os.path.join(addon_path, "resources", "img", "redcard.png")) #Convert event time to user timezone if livegame.Time.lower() == "not started": try: db_time = pytz.timezone( str(pytz.timezone("Etc/UTC"))).localize( livegame.DateTime) my_location = pytz.timezone( pytz.all_timezones[int(my_timezone)]) converted_time = db_time.astimezone( my_location) starttime = converted_time.strftime("%H:%M") item.setProperty('starttime', starttime) except Exception, e: xbmc.log(msg="[Match Center] Exception: %s" % (str(e)), level=xbmc.LOGDEBUG) #set match progress matchpercent = "0" if "'" in livegame.Time.lower(): try: matchpercent = str( int((float(livegame.Time.replace("'", "")) / 90) * 100)) except: pass else: if livegame.Time.lower() == "halftime": matchpercent = "50" elif livegame.Time.lower( ) == "postponed" or livegame.Time.lower( ) == "not started": matchpercent = "0" elif livegame.Time.lower() == "finished": matchpercent = "100" item.setProperty("matchpercent", matchpercent) #check match status item.setProperty( 'minute', str(ssutils.translatematch(livegame.Time))) if livegame.Time.lower() == "finished": status = os.path.join(addon_path, "resources", "img", "redstatus.png") elif "'" in livegame.Time.lower(): status = os.path.join(addon_path, "resources", "img", "greenstatus.png") else: status = os.path.join(addon_path, "resources", "img", "yellowstatus.png") item.setProperty('status', status) items.append(item) self.livecopy.append(livegame) if items: #grab items selected first to select the one selected later match_identifier = None if self.getControl(32500).size() > 0: current_focused_item = self.getControl(32500).getSelectedItem() match_identifier = current_focused_item.getLabel() self.getControl(32500).reset() xbmc.executebuiltin("ClearProperty(no-games,Home)") self.items = items self.getControl(32500).addItems(items) #Resize dialog if no scrollbar is showing if len(items) <= 4: self.getControl(32502).setWidth(955) self.setFocusId(32500) #Set focus on previously focused match if match_identifier: index = 0 for item in items: if item.getLabel() == match_identifier: self.getControl(32500).selectItem(index) break index += 1 else: self.getControl(32500).reset() self.set_no_games() return
class Main(xbmcgui.WindowXMLDialog): def __init__( self, *args, **kwargs ): self.isRunning = True self.standalone = kwargs["standalone"] self.teamObjs = {} self.cache_object = AddonCache() def onInit(self): xbmc.log(msg="[Match Center] Script started", level=xbmc.LOGDEBUG) if os.path.exists(ignored_league_list_file): self.ignored_leagues = [league.lower() for league in eval(FileIO.fileread(ignored_league_list_file)) if league] else: self.ignored_leagues = [] xbmc.executebuiltin("ClearProperty(no-games,Home)") self.getControl(32540).setImage(os.path.join(addon_path,"resources","img","goal.png")) xbmc.executebuiltin("SetProperty(loading-script-matchcenter-livescores,1,home)") self.livescoresThread() xbmc.executebuiltin("ClearProperty(loading-script-matchcenter-livescores,Home)") i = 0 while self.isRunning: if (float(i*200)/(livescores_update_time*60*1000)).is_integer() and ((i*200)/(3*60*1000)) != 0: self.livescoresThread() xbmc.sleep(200) i += 1 xbmc.log(msg="[Match Center] Script stopped", level=xbmc.LOGDEBUG) def updateCacheTimes(self): self.t2 = datetime.datetime.now() self.hoursList = [168, 336, 504, 672, 840] self.interval = int(addon.getSetting("new_request_interval")) return def livescoresThread(self): self.getLivescores() self.updateCacheTimes() self.setLivescores() return def getLivescores(self): self.livescoresdata = api.Livescores().Soccer() return def set_no_games(self): xbmc.executebuiltin("ClearProperty(loading-script-matchcenter-livescores,Home)") self.getControl(32541).setImage(os.path.join(addon_path,"resources","img","baliza.png")) xbmc.executebuiltin("SetProperty(no-games,1,home)") return def setLivescores(self): items = [] self.livecopy = [] if self.livescoresdata: for livegame in self.livescoresdata: if removeNonAscii(livegame.League).strip().lower() not in str(self.ignored_leagues): #decide to add the match or not if (livegame.Time.lower() != "not started") and (livegame.Time.lower() != "finished") and (livegame.Time.lower() != "postponed"): add = True else: if livegame.Time.lower() == "not started" and hide_notstarted == "true": add = False elif livegame.Time.lower() == "postponed" and hide_notstarted == "true": add = False elif livegame.Time.lower() == "finished" and hide_finished == "true": add = False else: add = True if not livegame.HomeGoals.strip() and not livegame.AwayGoals.strip(): add = False #Get only the team objects for the games that will be added (avoid unecessary requests) #Append to self.teamObjs if add == True: id_teams = [] if livegame.HomeTeam_Id: id_teams.append(livegame.HomeTeam_Id) else: id_teams.append(None) if livegame.AwayTeam_Id: id_teams.append(livegame.AwayTeam_Id) else: id_teams.append(None) index = 0 #To distinguish home (0) from away team (1) for id_team in id_teams: if id_team: update_team_data = True if self.cache_object.isCachedTeam(id_team): update_team_data = abs(self.t2 - self.cache_object.getCachedTeamTimeStamp(id_team)) > datetime.timedelta(hours=self.hoursList[self.interval]) if update_team_data: try: teamobject = api.Lookups().Team(teamid=id_team)[0] self.cache_object.cacheTeam(teamid=id_team,team_obj=teamobject) xbmc.log(msg="[Match Center] Timedelta was reached for team %s new request to be made..." % (str(id_team)), level=xbmc.LOGDEBUG) except: teamobject = None else: teamobject = self.cache_object.getcachedTeam(id_team) xbmc.log(msg="[Match Center] Used cached data for team %s..." % (str(id_team)), level=xbmc.LOGDEBUG) if index == 0: livegame.setHomeTeamObj(obj=teamobject) else: livegame.setAwayTeamObj(obj=teamobject) index += 1 #if livegame.HomeTeamObj and livegame.AwayTeamObj: item = xbmcgui.ListItem(livegame.HomeTeam+livegame.AwayTeam) item.setProperty('result',str(livegame.HomeGoals)+"-"+str(livegame.AwayGoals)) #Set team name label hometeamName = livegame.HomeTeam awayteamName = livegame.AwayTeam if show_alternative == "true": if livegame.HomeTeamObj: hometeamName = livegame.HomeTeamObj.AlternativeNameFirst if livegame.AwayTeamObj: awayteamName = livegame.AwayTeamObj.AlternativeNameFirst #Choose between textbox (long names) or label (short names) if len(hometeamName) >= 14 and " " in hometeamName: item.setProperty('hometeam_long',hometeamName) else: item.setProperty('hometeam_short',hometeamName) if len(awayteamName) >= 14 and " " in awayteamName: item.setProperty('awayteam_long',awayteamName) else: item.setProperty('awayteam_short',awayteamName) #set team badge if livegame.HomeTeamObj and livegame.HomeTeamObj.strTeamBadge: item.setProperty('home_team_logo',livegame.HomeTeamObj.strTeamBadge) else: item.setProperty('home_team_logo',os.path.join(addon_path,"resources","img","nobadge_placeholder.png")) if livegame.AwayTeamObj and livegame.AwayTeamObj.strTeamBadge: item.setProperty('away_team_logo',livegame.AwayTeamObj.strTeamBadge) else: item.setProperty('away_team_logo',os.path.join(addon_path,"resources","img","nobadge_placeholder.png")) if livegame.HomeGoals and bool(int(livegame.HomeGoals)>0): item.setProperty('has_home_goals',os.path.join(addon_path,"resources","img","goal.png")) if livegame.AwayGoals and bool(int(livegame.AwayGoals)>0): item.setProperty('has_away_goals',os.path.join(addon_path,"resources","img","goal.png")) if livegame.HomeGoalDetails: item.setProperty('home_goal_details',livegame.HomeGoalDetails) if livegame.AwayGoalDetails: item.setProperty('away_goal_details',livegame.AwayGoalDetails) item.setProperty('league_and_round',livegame.League+' - ' + translate(32017) + ' '+livegame.Round) #red cards if livegame.HomeTeamRedCardDetails: home_redcards = livegame.HomeTeamRedCardDetails.split(";") for redcard in home_redcards: if not redcard: home_redcards.remove(redcard) if len(home_redcards) == 1: item.setProperty('home_redcard1',os.path.join(addon_path,"resources","img","redcard.png")) elif len(home_redcards) > 1: item.setProperty('home_redcard1',os.path.join(addon_path,"resources","img","redcard.png")) item.setProperty('home_redcard2',os.path.join(addon_path,"resources","img","redcard.png")) if livegame.AwayTeamRedCardDetails: away_redcards = livegame.AwayTeamRedCardDetails.split(";") for redcard in away_redcards: if not redcard: away_redcards.remove(redcard) if len(away_redcards) == 1: item.setProperty('away_redcard2',os.path.join(addon_path,"resources","img","redcard.png")) elif len(away_redcards) > 1: item.setProperty('away_redcard1',os.path.join(addon_path,"resources","img","redcard.png")) item.setProperty('away_redcard2',os.path.join(addon_path,"resources","img","redcard.png")) #Convert event time to user timezone if livegame.Time.lower() == "not started": try: db_time = pytz.timezone(str(pytz.timezone("Etc/UTC"))).localize(livegame.DateTime) my_location=pytz.timezone(pytz.all_timezones[int(my_timezone)]) converted_time=db_time.astimezone(my_location) starttime=converted_time.strftime("%H:%M") item.setProperty('starttime',starttime) except Exception, e: xbmc.log(msg="[Match Center] Exception: %s" % (str(e)), level=xbmc.LOGDEBUG) #set match progress matchpercent = "0" if "'" in livegame.Time.lower(): try: matchpercent = str(int((float(livegame.Time.replace("'",""))/90)*100)) except: pass else: if livegame.Time.lower() == "halftime": matchpercent = "50" elif livegame.Time.lower() == "postponed" or livegame.Time.lower() == "not started": matchpercent = "0" elif livegame.Time.lower() == "finished": matchpercent = "100" item.setProperty("matchpercent",matchpercent) #check match status item.setProperty('minute',str(ssutils.translatematch(livegame.Time))) if livegame.Time.lower() == "finished": status = os.path.join(addon_path,"resources","img","redstatus.png") elif "'" in livegame.Time.lower(): status = os.path.join(addon_path,"resources","img","greenstatus.png") else: status = os.path.join(addon_path,"resources","img","yellowstatus.png") item.setProperty('status',status) items.append(item) self.livecopy.append(livegame) if items: #grab items selected first to select the one selected later match_identifier = None if self.getControl(32500).size() > 0: current_focused_item = self.getControl(32500).getSelectedItem() match_identifier = current_focused_item.getLabel() self.getControl(32500).reset() xbmc.executebuiltin("ClearProperty(no-games,Home)") self.items = items self.getControl(32500).addItems(items) #Resize dialog if no scrollbar is showing if len(items) <= 4: self.getControl(32502).setWidth(955) self.setFocusId(32500) #Set focus on previously focused match if match_identifier: index = 0 for item in items: if item.getLabel() == match_identifier: self.getControl(32500).selectItem(index) break index += 1 else: self.getControl(32500).reset() self.set_no_games() return