def is_duplicate(title, titles): if not utils.get_setting_bool("widgets.hide_duplicates"): return False prefer_eps = utils.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 _reload_settings(self): self.refresh_enabled = utils.get_setting_int('service.refresh_enabled') self.refresh_duration = utils.get_setting_float('service.refresh_duration') self.refresh_notification = utils.get_setting_int('service.refresh_notification') self.refresh_sound = utils.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(32033), sound=utils.get_setting_bool('service.refresh_sound')) 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'
import xbmcgui import os import re import six from resources.lib import manage from resources.lib.common import utils advanced = utils.get_setting_bool('context.advanced') warning_shown = utils.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') dialog = xbmcgui.Dialog() def shift_path(group_id, path_id, target): group_def = manage.get_group_by_id(group_id) paths = group_def['paths'] for idx, path_def in enumerate(paths): if path_def['id'] == path_id:
import xbmcgui import os import re import six from resources.lib import manage from resources.lib.common import utils advanced = utils.get_setting_bool("context.advanced") warning_shown = utils.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") dialog = xbmcgui.Dialog() def shift_path(group_id, path_id, target): group_def = manage.get_group_by_id(group_id) paths = group_def["paths"] for idx, path_def in enumerate(paths): if path_def["id"] == path_id:
def show_path(group_id, path_label, widget_id, path, idx=0, titles=None, num=1, merged=False): hide_watched = utils.get_setting_bool('widgets.hide_watched') show_next = utils.get_setting_int('widgets.show_next') paged_widgets = utils.get_setting_bool('widgets.paged') default_color = utils.get_setting('ui.color') widget_def = manage.get_widget_by_id(widget_id) if not widget_def: return True, 'AutoWidget' if not titles: titles = [] files = refresh.get_files_list(path, titles, widget_id) if not files: return titles, path_label utils.log('Loading items from {}'.format(path), 'debug') if isinstance(widget_def['path'], list): color = widget_def['path'][idx].get('color', default_color) elif isinstance(widget_def['path'], six.text_type): color = widget_def['stack'][0].get('color', default_color) else: color = widget_def['path'].get('color', default_color) stack = widget_def.get('stack', []) if stack: title = utils.get_string(32110).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 file in files: properties = {'autoLabel': path_label, 'autoID': widget_id} if 'customproperties' in file: for prop in file['customproperties']: properties[prop] = file['customproperties'][prop] clean_pattern = '[^\w \xC0-\xFF]' tag_pattern = '(\[[^\]]*\])' next_pattern = ( '(?:^(?:next)?\s*(?:(?:>>)|(?:\.*)$)?)\s*' '(?:page\s*(?:(?:\d+\D*\d?$)|(?:(?:>>)|(?:\.*)$)|(?:\(\d+|.*\)$))?)?$' ) prev_pattern = '^(?:previous(?: page)?)$|^(?:back)$' cleaned_title = re.sub(tag_pattern, '', file.get('label', '').lower()).strip() next_item = re.search(next_pattern, cleaned_title) prev_item = re.search(prev_pattern, cleaned_title) if (prev_item and stack) or (next_item and show_next == 0): continue elif next_item and show_next > 0: label = utils.get_string(32111) 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: dupe = False title = (file['label'], file.get('imdbnumber')) for t in titles: if t == title: dupe = True if (hide_watched and file.get('playcount', 0) > 0) or dupe: continue directory.add_menu_item(title=title[0], path=file['file'], art=file['art'], info=file, isFolder=file['filetype'] == 'directory', props=properties) titles.append(title) return titles, path_label
def show_path(group_id, path_label, widget_id, path, idx=0, titles=None, num=1, merged=False): hide_watched = utils.get_setting_bool("widgets.hide_watched") show_next = utils.get_setting_int("widgets.show_next") paged_widgets = utils.get_setting_bool("widgets.paged") default_color = utils.get_setting("ui.color") widget_def = manage.get_widget_by_id(widget_id) if not widget_def: return True, "AutoWidget" if not titles: titles = [] files = refresh.get_files_list(path, widget_id) if not files: return titles, path_label utils.log("Loading items from {}".format(path), "debug") if isinstance(widget_def["path"], list): color = widget_def["path"][idx].get("color", default_color) elif isinstance(widget_def["path"], six.text_type): color = widget_def["stack"][0].get("color", default_color) else: color = widget_def["path"].get("color", default_color) stack = widget_def.get("stack", []) if stack: title = utils.get_string(32110).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 file in files: properties = {"autoLabel": path_label, "autoID": widget_id} if "customproperties" in file: for prop in file["customproperties"]: properties[prop] = file["customproperties"][prop] clean_pattern = "[^\w \xC0-\xFF]" tag_pattern = "(\[[^\]]*\])" next_pattern = ( "(?:^(?:next)?\s*(?:(?:>>)|(?:\.*)$)?)\s*" "(?:page\s*(?:(?:\d+\D*\d?$)|(?:(?:>>)|(?:\.*)$)|(?:\(\d+|.*\)$))?)?$" ) prev_pattern = "^(?:previous(?: page)?)$|^(?:back)$" cleaned_title = re.sub(tag_pattern, "", file.get("label", "").lower()).strip() next_item = re.search(next_pattern, cleaned_title) prev_item = re.search(prev_pattern, cleaned_title) if (prev_item and stack) or (next_item and show_next == 0): continue elif next_item and show_next > 0: label = utils.get_string(32111) 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: title = { "type": file.get("type"), "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 art = file.get("art", {}) if not art.get("landscape") and art.get("thumb"): art["landscape"] = art["thumb"] directory.add_menu_item( title=file["label"], path=file["file"], art=art, info=file, isFolder=file["filetype"] == "directory", props=properties, ) titles.append(title) return titles, path_label
alert = utils.get_art('alert.png') folder = utils.get_art('folder.png') folder_shortcut = utils.get_art('folder-shortcut.png') folder_sync = utils.get_art('folder-sync.png') folder_next = utils.get_art('folder-next.png') refresh = utils.get_art('refresh.png') remove = utils.get_art('remove.png') share = utils.get_art('share.png') shuffle = utils.get_art('shuffle.png') sync = utils.get_art('sync.png') tools = utils.get_art('tools.png') unpack = utils.get_art('unpack.png') _addon = xbmcaddon.Addon() label_warning_shown = utils.get_setting_bool('label.warning') def _warn(): dialog = xbmcgui.Dialog() dialog.ok('AutoWidget', utils.get_string(32073)) _addon.setSetting('label.warning', 'true') label_warning_shown = True def root_menu(): directory.add_menu_item(title=32007, params={'mode': 'group'}, art=folder, isFolder=True)
def show_path(group_id, path_label, widget_id, path, idx=0, titles=None, num=1, merged=False): hide_watched = utils.get_setting_bool("widgets.hide_watched") show_next = utils.get_setting_int("widgets.show_next") paged_widgets = utils.get_setting_bool("widgets.paged") default_color = utils.get_setting("ui.color") widget_def = manage.get_widget_by_id(widget_id) if not widget_def: return True, "AutoWidget" if not titles: titles = [] files = refresh.get_files_list(path, widget_id) if not files: return titles, path_label utils.log("Loading items from {}".format(path), "debug") if isinstance(widget_def["path"], list): color = widget_def["path"][idx].get("color", default_color) elif isinstance(widget_def["path"], six.text_type): color = widget_def["stack"][0].get("color", default_color) else: color = widget_def["path"].get("color", default_color) stack = widget_def.get("stack", []) 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} next_item = False prev_item = False if "customproperties" in file: for prop in file["customproperties"]: properties[prop] = file["customproperties"][prop] if pos == len(files) - 1: next_item = _is_page_item(file.get("label", "")) elif pos == 0: 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: title = { "type": file.get("type"), "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 art = file.get("art", {}) if not art.get("landscape") and art.get("thumb"): art["landscape"] = art["thumb"] directory.add_menu_item( title=file["label"], path=file["file"], art=art, info=file, isFolder=file["filetype"] == "directory", props=properties, ) titles.append(title) return titles, path_label