def check_for_addon_update(): """ Perform checks for addon updates and notify user of any available updates :return: None :rtype: None """ if not g.get_bool_setting("general.checkAddonUpdates"): return if "-" in g.VERSION: g.set_setting("addon.updateCheckTimeStamp", g.UNICODE(time.time())) return update_timestamp = g.get_float_setting("addon.updateCheckTimeStamp") if time.time() > (update_timestamp + (24 * (60 * 60))): repo_xml = requests.get( "https://github.com/Newf276/Newf276/raw/master/packages/addons.xml" ) if not repo_xml.status_code == 200: g.log( "Could not connect to repo XML, status: {}".format( repo_xml.status_code ), "error", ) return try: xml = tools.ElementTree.fromstring(repo_xml.text) for dir_tag in xml.iterfind("./addon[@id='repository.Newf276']/extension/dir"): minversion = dir_tag.get('minversion') maxversion = dir_tag.get('maxversion') if ( ( minversion is None and maxversion is None ) or ( minversion and maxversion and tools.compare_version_numbers(minversion, g.KODI_FULL_VERSION, include_same=True) and tools.compare_version_numbers(g.KODI_FULL_VERSION, maxversion, include_same=True) ) or ( maxversion is None and minversion and tools.compare_version_numbers(minversion, g.KODI_FULL_VERSION, include_same=True) ) or ( minversion is None and maxversion and tools.compare_version_numbers(g.KODI_FULL_VERSION, maxversion, include_same=True) ) ): repo_version = _get_latest_repo_version(dir_tag.find('info').text) if tools.compare_version_numbers(g.CLEAN_VERSION, repo_version): xbmcgui.Dialog().ok( g.ADDON_NAME, g.get_language_string(30199).format(repo_version) ) except tools.ElementTree.ParseError as pe: g.log("Could not parse repo XML", "error") finally: g.set_setting("addon.updateCheckTimeStamp", str(time.time()))
def _get_latest_repo_version(repo_url): repo_xml = requests.get(repo_url) if not repo_xml.status_code == 200: g.log( "Could not connect to repo XML, status: {}".format( repo_xml.status_code), "error", ) return try: xml = tools.ElementTree.fromstring(repo_xml.text) max_version = g.CLEAN_VERSION repo_versions = [ ver.get('version') for ver in xml.iterfind("./addon[@id='plugin.video.seren']") ] for version in repo_versions: if version: clean_version = g.SEMVER_REGEX.findall(version)[0] if clean_version and tools.compare_version_numbers( max_version, clean_version): max_version = clean_version except tools.ElementTree.ParseError as pe: g.log("Could not parse repo XML", "error") return max_version
def check_for_updates(self, silent=False, automatic=False): """ Check all packages for updates :param silent: Optional setting to disable user feedback :type silent: bool :param automatic: Optional argument to automatically process updates if available :type automatic: bool :return: None if automatic set to True else returns a list of available updates if set to False :rtype: [None,list] """ # Automatic "True" will update all packages with available updates # Silent "True" will prevent kodi from creating any dialogs except for a single notification if not silent: update_dialog = xbmcgui.DialogProgress() update_dialog.create(g.ADDON_NAME, g.get_language_string(30085)) update_dialog.update(-1) updates = [] update_dialog = None packages = self.known_packages if len(packages) == 0: return [] for package in packages: if not package["remote_meta"]: continue meta_file = requests.get(package["remote_meta"]) if meta_file.status_code != 200: continue meta_file = json.loads(meta_file.text) if not meta_file["name"] == package["pack_name"]: g.log( "Pack name check failure - {} : {}".format( meta_file["name"], package["pack_name"] ) ) continue if not tools.compare_version_numbers(package["version"], meta_file["version"]): continue if not automatic: updates.append(meta_file) else: ProviderInstallManager().update(meta_file, silent) if not silent and update_dialog: update_dialog.close() if not automatic: return updates
def _check_skin_for_update(skin_info): try: remote_meta = requests.get(skin_info["remote_meta"]).json() return tools.compare_version_numbers(skin_info["version"], remote_meta["version"]) except: g.log( "Failed to obtain remote meta information for skin: {}".format( skin_info["skin_name"])) return False
def _check_database_version(self): # If we are updating from a database prior to database versioning, we must clear the meta data # Migrate from older versions before trakt username tracking if tools.compare_version_numbers(self.activities["seren_version"], self.last_meta_update): g.log("Rebuilding Trakt Sync Database Version") xbmcgui.Dialog().ok(g.ADDON_NAME, g.get_language_string(30363)) try: self.re_build_database(True) except: self.rebuild_database()
def check_for_addon_update(): """ Perform checks for addon updates and notify uesr of any available updates :return: None :rtype: None """ if not g.get_bool_setting("general.checkAddonUpdates"): return local_verison = g.VERSION if "-" in local_verison: g.set_setting("addon.updateCheckTimeStamp", str(time.time())) return update_timestamp = g.get_float_setting("addon.updateCheckTimeStamp") if time.time() > (update_timestamp + (24 * (60 * 60))): repo_xml = requests.get( "https://raw.githubusercontent.com/nixgates/nixgates/master/packages/addons.xml" ) if not repo_xml.status_code == 200: g.log( "Could not connect to repo XML, status: {}".format( repo_xml.status_code), "error", ) return repo_version = re.findall( r"<addon id=\"plugin.video.seren\" version=\"(\d*.\d*.\d*)\"", repo_xml.text)[0] if tools.compare_version_numbers(local_verison, repo_version): xbmcgui.Dialog().ok( g.ADDON_NAME, g.get_language_string(30199).format(repo_version)) g.set_setting("addon.updateCheckTimeStamp", str(time.time()))