Beispiel #1
0
def update_addons(quiet=True):
	from distutils.version import LooseVersion
	if not quiet: kodi.open_busy_dialog()
	sources = DB.query("SELECT addon_id, source FROM install_history")
	update_count = 0
	for source in sources:
		addon_id = source[0]
		source = json.loads(source[1])
		if kodi.get_condition_visiblity("System.HasAddon(%s)" % addon_id):
			if source['type'] == SOURCES.ZIP:
				url, filename, full_name, version = github.find_zip(source['user'], addon_id)
				current_version = kodi.get_addon(addon_id).getAddonInfo('version')
				if LooseVersion(version) > LooseVersion(current_version):
					GitHub_Installer(addon_id, url, full_name, kodi.vfs.join("special://home", "addons"), False, quiet)
					update_count += 1
			elif source['type'] == SOURCES.REPO:
				full_name = sources['user'] + '/' + sources['repo']
				xml_str = github.find_xml(full_name)
				xml = BeautifulSoup(xml_str)
				addon = xml.find('addon')
				current_version = kodi.get_addon(addon_id).getAddonInfo('version')
				if LooseVersion(addon['version']) > LooseVersion(current_version):
					GitHub_Installer(addon_id, source['url'], full_name, kodi.vfs.join("special://home", "addons"), True, quiet)
					update_count += 1

	if not quiet: kodi.close_busy_dialog()
	if update_count > 0:
		kodi.notify("Update complete",'Some addons may require restarting kodi.')
	else:
		kodi.notify("Update complete",'No updates found.')
Beispiel #2
0
		def user_resolver(user, unmet):
			dep_url, dep_filename, dep_full_name, version = github.find_zip(user, unmet)
			if dep_url:
				kodi.log("%s found in %s repo" % (unmet, user))
				self.met_addons.append(unmet)
				user, repo = dep_full_name.split("/")
				self.sources[unmet] = {"type": SOURCES.ZIP, "url": dep_url, "user": user, "repo": repo, "version": ""}
				kodi.log("%s dependency met in %s" % (unmet, dep_url))
				return True
			return False
def install_batch():
    import xbmcgui
    if kodi.mode == 'install_batch':
        url = kodi.arg('url')
        xml, zip_ref = github.batch_installer(url)
    else:
        url = kodi.dialog_browser('Select a install file',
                                  type=kodi.BROWSER_TYPES.FILE,
                                  mask='.zip')
        if not github.re_installer.search(url): return
        xml, zip_ref = github.batch_installer(url, True)
    if not kodi.dialog_confirm(
            'Batch Installer?', "Click YES to proceed.",
            "This will install a list of addons.",
            "Some configuration files and settings may be overwritten."):
        return
    if not xml: return
    # Install each addon as instructed
    installed_list = []
    failed_list = []
    count = 0
    for a in xml.findAll('addon'):
        count += 1
    PB = kodi.ProgressBar()
    PB.new('Batch Installer - Progress', count)

    for a in xml.findAll('addon'):
        addon_id = a.find('addon_id')
        username = a.find('username')
        if addon_id is None or username is None: continue
        username = username.text
        addon_id = addon_id.text
        PB.next(addon_id)
        if not kodi.has_addon(addon_id):
            if PB.is_canceled(): return
            kodi.log("Batch install " + addon_id)
            url, filename, full_name, version = github.find_zip(
                username, addon_id)
            if url:
                installed_list += github_installer.GitHub_Installer(
                    addon_id,
                    url,
                    full_name,
                    kodi.vfs.join("special://home", "addons"),
                    quiet=True,
                    batch=True,
                    installed_list=installed_list).installed_list
                kodi.sleep(1000)
            else:
                failed_list.append(addon_id)

    # Look for config files.
    # Need to add error checking for missing config files
    configs = xml.find('configs')
    if configs is not None and 'dir' in configs.attrs[0]:
        config_dir = configs['dir']
        for config in configs.findAll('config'):
            source = config.find('source')
            destination = config.find('destination')
            if source is None or destination is None: continue
            source = source.text
            destination = destination.text
            if not kodi.vfs.exists(destination):
                kodi.vfs.mkdir(destination, True)
            kodi.vfs.write_file(kodi.vfs.join(destination, source),
                                zip_ref.read(config_dir + '/' + source))

    # Now look for individual setting key and value pairs
    # Set them as instructed
    settings = xml.find('settings')
    if settings is not None:
        for setting in settings.findAll('setting'):
            if 'addon_id' in setting.attrs[0]:
                addon_id = setting['addon_id']
                k = setting.find('key')
                v = setting.find('value')
                if k is None or v is None: continue
                kodi.set_setting(k.text, v.text, addon_id)

    builtins = xml.find('builtins')
    if builtins is not None:
        for cmd in builtins.findAll('command'):
            cmd = cmd.text
            kodi.run_command(cmd)

    jsonrpc = xml.find('jsonrpc')
    if jsonrpc is not None:
        from ast import literal_eval
        for cmd in jsonrpc.findAll('command'):
            method = cmd.find('method').text
            params = literal_eval(cmd.find('params').text)
            id = cmd.find('id').text
            kodi.kodi_json_request(method, params, id)

    # Now clean up
    zip_ref.close()
    PB.close()
    if len(failed_list):
        kodi.dialog_ok("Batch Error", "One or more Addons failed to install",
                       "See log for list")
        kodi.log("Failed list: %s" % ",".join(failed_list))
    r = kodi.dialog_confirm(kodi.get_name(),
                            'Click Continue to install more addons or',
                            'Restart button to finalize addon installation',
                            yes='Restart',
                            no='Continue')
    if r:
        import sys
        import xbmc
        if sys.platform in ['linux', 'linux2', 'win32']:
            xbmc.executebuiltin('RestartApp')
        else:
            xbmc.executebuiltin('ShutDown')
Beispiel #4
0
def install_batch():
    import xbmcgui

    if kodi.mode == "install_batch":
        url = kodi.arg("url")
        xml, zip_ref = github.batch_installer(url)
    else:
        url = kodi.dialog_browser("Select a install file",
                                  type=kodi.BROWSER_TYPES.FILE,
                                  mask=".zip")
        if not github.re_installer.search(url):
            return
        xml, zip_ref = github.batch_installer(url, True)
    if not kodi.dialog_confirm(
            "Batch Installer?",
            "Click YES to proceed.",
            "This will install a list of addons.",
            "Some configuration files and settings may be overwritten.",
    ):
        return
    if not xml:
        return
    # Install each addon as instructed
    installed_list = []
    failed_list = []
    count = 0
    for a in xml.findAll("addon"):
        count += 1
    PB = kodi.ProgressBar()
    PB.new("Batch Installer - Progress", count)

    for a in xml.findAll("addon"):
        addon_id = a.find("addon_id")
        username = a.find("username")
        if addon_id is None or username is None:
            continue
        username = username.text
        addon_id = addon_id.text
        PB.next(addon_id)
        if not kodi.has_addon(addon_id):
            if PB.is_canceled():
                return
            kodi.log("Batch install " + addon_id)
            url, filename, full_name, version = github.find_zip(
                username, addon_id)
            if url:
                installed_list += github_installer.GitHub_Installer(
                    addon_id,
                    url,
                    full_name,
                    kodi.vfs.join("special://home", "addons"),
                    quiet=True,
                    batch=True,
                    installed_list=installed_list,
                ).installed_list
                kodi.sleep(1000)
            else:
                failed_list.append(addon_id)

    # Look for config files.
    # Need to add error checking for missing config files
    configs = xml.find("configs")
    if configs is not None and "dir" in configs.attrs[0]:
        config_dir = configs["dir"]
        for config in configs.findAll("config"):
            source = config.find("source")
            destination = config.find("destination")
            if source is None or destination is None:
                continue
            source = source.text
            destination = destination.text
            if not kodi.vfs.exists(destination):
                kodi.vfs.mkdir(destination, True)
            kodi.vfs.write_file(
                kodi.vfs.join(destination, source),
                zip_ref.read(config_dir + "/" + source),
            )

    # Now look for individual setting key and value pairs
    # Set them as instructed
    settings = xml.find("settings")
    if settings is not None:
        for setting in settings.findAll("setting"):
            if "addon_id" in setting.attrs[0]:
                addon_id = setting["addon_id"]
                k = setting.find("key")
                v = setting.find("value")
                if k is None or v is None:
                    continue
                kodi.set_setting(k.text, v.text, addon_id)

    builtins = xml.find("builtins")
    if builtins is not None:
        for cmd in builtins.findAll("command"):
            cmd = cmd.text
            kodi.run_command(cmd)

    jsonrpc = xml.find("jsonrpc")
    if jsonrpc is not None:
        from ast import literal_eval

        for cmd in jsonrpc.findAll("command"):
            method = cmd.find("method").text
            params = literal_eval(cmd.find("params").text)
            id = cmd.find("id").text
            kodi.kodi_json_request(method, params, id)

    # Now clean up
    zip_ref.close()
    PB.close()
    if len(failed_list):
        kodi.dialog_ok("Batch Error", "One or more Addons failed to install",
                       "See log for list")
        kodi.log("Failed list: %s" % ",".join(failed_list))
    r = kodi.dialog_confirm(
        kodi.get_name(),
        "Click Continue to install more addons or",
        "Restart button to finalize addon installation",
        yes="Restart",
        no="Continue",
    )
    if r:
        import sys
        import xbmc

        if sys.platform in ["linux", "linux2", "win32"]:
            xbmc.executebuiltin("RestartApp")
        else:
            xbmc.executebuiltin("ShutDown")