Пример #1
0
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()))
Пример #2
0
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
Пример #4
0
    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
Пример #5
0
 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()
Пример #6
0
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()))