def is_duplicate(title, titles): if not settings.get_setting_bool("widgets.hide_duplicates"): return False prefer_eps = settings.get_setting_bool("widgets.prefer_episodes") if title["type"] == "movie": return (title["label"], title["imdbnumber"]) in [ (t["label"], t["imdbnumber"]) for t in titles ] elif (title["type"] == "tvshow" and prefer_eps) or (title["type"] == "episode" and not prefer_eps): return title["showtitle"] in [t["showtitle"] for t in titles] else: return False
def log(msg, level="debug"): _level = xbmc.LOGDEBUG debug = settings.get_setting_bool("logging.debug") logpath = os.path.join(_addon_data, "aw_debug.log") if level == "debug": _level = xbmc.LOGDEBUG elif level in ["notice", "info"]: try: _level = xbmc.LOGNOTICE except AttributeError: _level = xbmc.LOGINFO elif level == "error": _level = xbmc.LOGERROR msg = u"{}: {}".format(_addon_id, six.text_type(msg)) try: xbmc.log(msg, _level) except UnicodeEncodeError: xbmc.log(msg.encode("utf-8"), _level) if debug: debug_size = os.path.getsize(logpath) if os.path.exists(logpath) else 0 debug_msg = u"{} {}{}".format(time.ctime(), level.upper(), msg[25:]) write_file(logpath, debug_msg + "\n", mode="a" if debug_size < 1048576 else "w")
def _reload_settings(self): self.refresh_enabled = settings.get_setting_int("service.refresh_enabled") self.refresh_duration = settings.get_setting_float("service.refresh_duration") self.refresh_notification = settings.get_setting_int( "service.refresh_notification" ) self.refresh_sound = settings.get_setting_bool("service.refresh_sound") utils.update_container(True)
def refresh_paths(notify=False, force=False): if notify: dialog = xbmcgui.Dialog() dialog.notification( "AutoWidget", utils.get_string(30020), sound=settings.get_setting_bool("service.refresh_sound"), ) del dialog for group_def in manage.find_defined_groups(): paths = [] widgets = manage.find_defined_widgets(group_def["id"]) for widget_def in widgets: paths = refresh( widget_def["id"], widget_def=widget_def, paths=paths, force=force ) utils.update_container(True) return True, "AutoWidget"
def show_path( group_id, path_label, widget_id, widget_path, idx=0, titles=None, num=1, merged=False, ): hide_watched = settings.get_setting_bool("widgets.hide_watched") show_next = settings.get_setting_int("widgets.show_next") paged_widgets = settings.get_setting_bool("widgets.paged") default_color = settings.get_setting_string("ui.color") widget_def = manage.get_widget_by_id(widget_id) if not widget_def: return True, "AutoWidget", None content = widget_path.get("content") action = widget_def.get("action", "") if not titles: titles = [] stack = widget_def.get("stack", []) path = widget_path["file"]["file"] if not stack else stack[-1] files, hash = refresh.get_files_list(path, widget_id) # if not files: # properties = { # "autoLabel": path_label, # "autoID": widget_id, # "autoAction": action, # "autoCache": hash, # } # if files is None: # show_error(path_label, properties) # elif files == []: # show_empty(path_label, properties) # return titles if titles else True, path_label, content utils.log("Loading items from {}".format(path), "debug") color = widget_path.get("color", default_color) if stack: title = _previous # title = utils.get_string(30085).format(len(stack)) directory.add_menu_item( title=title, params={ "mode": "path", "action": "update", "id": widget_id, "path": "", "target": "back", }, art=utils.get_art("back", color), isFolder=num > 1, props={ "specialsort": "top", "autoLabel": path_label }, ) for pos, file in enumerate(files): properties = { "autoLabel": path_label, "autoID": widget_id, "autoAction": action, "autoCache": hash, } next_item = False prev_item = False is_folder = file["filetype"] == "directory" if pos == len(files) - 1 and is_folder: next_item = _is_page_item(file.get("label", "")) elif pos == 0 and is_folder: prev_item = _is_page_item(file.get("label", ""), next=False) if (prev_item and stack) or (next_item and show_next == 0): continue elif next_item and show_next > 0: label = _next_page properties["specialsort"] = "bottom" if num > 1: if show_next == 1: continue label = "{} - {}".format(label, path_label) update_params = { "mode": "path", "action": "update", "id": widget_id, "path": file["file"], "target": "next", } directory.add_menu_item( title=label, params=update_params if paged_widgets and not merged else None, path=file["file"] if not paged_widgets or merged else None, art=utils.get_art("next_page", color), info=file, isFolder=not paged_widgets or merged, props=properties, ) else: filetype = file.get("type", "") title = { "type": filetype, "label": file.get("label"), "imdbnumber": file.get("imdbnumber"), "showtitle": file.get("showtitle"), } dupe = refresh.is_duplicate(title, titles) if (hide_watched and file.get("playcount", 0) > 0) or dupe: continue filepath = "" info_type = directory.info_types.get(filetype, "video") if (path.startswith("library://{}/".format(info_type)) or path.startswith("{}db://".format(info_type) or path.endswith(".xsp"))) and is_folder: filepath = directory.make_library_path(info_type, filetype, file.get("id", -1)) directory.add_menu_item( title=file["label"], path=file["file"] if not filepath else filepath, info=file, isFolder=is_folder, props=properties, ) titles.append(title) return titles, path_label, content
import xbmcgui import os import re import six from resources.lib import manage from resources.lib.common import settings from resources.lib.common import utils _addon_data = utils.translate_path(settings.get_addon_info("profile")) advanced = settings.get_setting_bool("context.advanced") warning_shown = settings.get_setting_bool("context.warning") filter = { "include": ["label", "file", "art", "color"] + utils.art_types, "exclude": ["paths", "version", "type"], } widget_filter = { "include": ["action", "refresh", "path"], "exclude": ["stack", "version", "label", "current", "updated"], } color_tag = "\[\w+(?: \w+)*\](?:\[\w+(?: \w+)*\])?(\w+)(?:\[\/\w+\])?\[\/\w+\]" plus = utils.get_art("plus") def shift_path(group_id, path_id, target): group_def = manage.get_group_by_id(group_id) paths = group_def["paths"]