def GetPlatform(returnName=False): """Returns the platform that XBMC returns as it's host: Keyword Arguments: returnName : boolean - If true a string value is returned Returns: A string representing the host OS: * linux - Normal Linux * Xbox - Native Xbox * OS X - Apple OS * Windows - Windows OS * unknown - in case it's undetermined """ if not EnvController.__CurrentPlatform: # let's cache the current environment as the call to the xbmc library is very slow. platform = Environments.Unknown # it's in the .\xbmc\GUIInfoManager.cpp if xbmc.getCondVisibility("system.platform.linux"): platform = Environments.Linux elif xbmc.getCondVisibility("system.platform.xbox"): platform = Environments.Xbox elif xbmc.getCondVisibility("system.platform.windows"): platform = Environments.Windows elif xbmc.getCondVisibility("system.platform.ios"): platform = Environments.IOS elif xbmc.getCondVisibility("system.platform.atv2"): platform = Environments.ATV2 elif xbmc.getCondVisibility("system.platform.tvos"): platform = Environments.TVOS elif xbmc.getCondVisibility("system.platform.osx"): platform = Environments.OSX elif xbmc.getCondVisibility("system.platform.android"): platform = Environments.Android EnvController.__CurrentPlatform = platform Logger.Info("Current platform determined to be: %s", Environments.Name(EnvController.__CurrentPlatform)) if returnName: return Environments.Name(EnvController.__CurrentPlatform) else: return EnvController.__CurrentPlatform
def __ValidateChannelInfo(self, channelInfo, platform): """ Checks if the value is valid for the current environment, if it is enabled and so on. @param channelInfo: The channel info meta data to check @param platform: The platform to validate against @rtype : Boolean indicating the channel is valid. It might still be disabled from the settings. """ if not channelInfo.guid: Logger.Error("Not loading: %s -> No guid present", channelInfo) return False if channelInfo in self.__allChannels: existingChannel = self.__allChannels[self.__allChannels.index(channelInfo)] Logger.Error("Not loading: %s -> a channel with the same guid already exist:\n%s.", channelInfo, existingChannel) return False # store all the channels except the out of date and duplicate ones, we might need them somewhere self.__allChannels.append(channelInfo) if not channelInfo.compatiblePlatforms & platform == platform: Logger.Warning("Not loading: %s -> platform '%s' is not compatible", channelInfo, Environments.Name(platform)) return False # now it is a valid channel for this platform. self.__validChannels.append(channelInfo) if not (AddonSettings.ShowChannel(channelInfo) and AddonSettings.ShowChannelWithLanguage( channelInfo.language)): Logger.Warning("Not loading: %s -> Channel was disabled from settings.", channelInfo) return True Logger.Debug("Loading: %s", channelInfo) # add to channelPath list self.__enabledChannels.append(channelInfo) return True
def GetChannels(self, includeDisabled=False, **kwargs): # type: (object) -> list """ Retrieves all enabled channels within Retrospect. If updated channels are found, the those channels are indexed and the channel index is rebuild. @type kwargs: here for backward compatibility @return: a list of ChannelInfo objects of enabled channels. """ sw = StopWatch("ChannelIndex.GetChannels Importer", Logger.Instance()) Logger.Info("Fetching all enabled channels.") self.__enabledChannels = [] self.__allChannels = [] self.__validChannels = [] # What platform are we platform = envcontroller.EnvController.GetPlatform() channelsUpdated = False for channelSet in self.__channelIndex[self.__CHANNEL_INDEX_CHANNEL_KEY]: channelSet = self.__channelIndex[self.__CHANNEL_INDEX_CHANNEL_KEY][channelSet] channelSetInfoPath = channelSet[self.__CHANNEL_INDEX_CHANNEL_INFO_KEY] channelSetVersion = channelSet[self.__CHANNEL_INDEX_CHANNEL_VERSION_KEY] # Check if file exists. If not, rebuild index if not os.path.isfile(channelSetInfoPath) and not self.__reindexed: Logger.Warning("Missing channelSet file: %s.", channelSetInfoPath) self.__RebuildIndex() return self.GetChannels() channelInfos = ChannelInfo.FromJson(channelSetInfoPath, channelSetVersion) # Check if the channel was updated if self.__IsChannelSetUpdated(channelInfos[0]): # let's see if the index has already been updated this section, of not, do it and # restart the ChannelRetrieval. if not self.__reindexed: # rebuild and restart Logger.Warning("Re-index channel index due to channelSet update: %s.", channelSetInfoPath) self.__RebuildIndex() return self.GetChannels() else: Logger.Warning("Found updated channelSet: %s.", channelSetInfoPath) if not channelsUpdated: # this was the first update found (otherwise channelsUpdated was True) show a message: title = LanguageHelper.GetLocalizedString(LanguageHelper.InitChannelTitle) text = LanguageHelper.GetLocalizedString(LanguageHelper.InitChannelText) XbmcWrapper.ShowNotification(title, text, displayTime=15000, logger=Logger.Instance()) channelsUpdated |= True # Initialise the channelset. self.__InitialiseChannelSet(channelInfos[0]) # And perform all first actions for the included channels in the set for channelInfo in channelInfos: self.__InitialiseChannel(channelInfo) # Check the channel validity for channelInfo in channelInfos: if not self.__ChannelIsCorrect(channelInfo): continue self.__allChannels.append(channelInfo) # valid channel for this platform ? if not channelInfo.compatiblePlatforms & platform == platform: Logger.Warning("Not loading: %s -> platform '%s' is not compatible.", channelInfo, Environments.Name(platform)) continue self.__validChannels.append(channelInfo) # was the channel disabled? if not (AddonSettings.ShowChannel( channelInfo) and AddonSettings.ShowChannelWithLanguage( channelInfo.language)): Logger.Warning("Not loading: %s -> Channel was disabled from settings.", channelInfo) continue self.__enabledChannels.append(channelInfo) Logger.Debug("Loading: %s", channelInfo) if channelsUpdated: Logger.Info("New or updated channels found. Updating add-on configuration for all channels and user agent.") AddonSettings.UpdateAddOnSettingsWithChannels(self.__validChannels, Config) AddonSettings.UpdateUserAgent() else: Logger.Debug("No channel changes found. Skipping add-on configuration for channels.") # TODO: perhaps we should check that the settings.xml is correct and not broken? self.__enabledChannels.sort() Logger.Info("Fetch a total of %d channels of which %d are enabled.", len(self.__allChannels), len(self.__enabledChannels)) sw.Stop() if includeDisabled: return self.__validChannels return self.__enabledChannels