From fdcc5548bbd142d670545aa2565b6a6165870366 Mon Sep 17 00:00:00 2001 From: anxdpanic Date: Thu, 23 Feb 2023 16:49:11 -0500 Subject: [PATCH] Update workflows and remove unneeded patches --- .github/workflows/addon-validations.yml | 16 +- .github/workflows/make-release.yml | 55 +- .github/workflows/submit-release.yml | 36 +- .patches/matrix-kodi-addon-checker.patch | 30 - .patches/matrix-unofficial.patch | 1753 ---------------------- .patches/matrix.patch | 1163 -------------- 6 files changed, 11 insertions(+), 3042 deletions(-) delete mode 100644 .patches/matrix-kodi-addon-checker.patch delete mode 100644 .patches/matrix-unofficial.patch delete mode 100644 .patches/matrix.patch diff --git a/.github/workflows/addon-validations.yml b/.github/workflows/addon-validations.yml index 8d5c1ec46..04ee126e9 100644 --- a/.github/workflows/addon-validations.yml +++ b/.github/workflows/addon-validations.yml @@ -25,17 +25,7 @@ jobs: python -m pip install --upgrade pip python -m pip install git+https://github.com/xbmc/addon-check.git - - name: Kodi Add-on Checker (Isengard) - id: kodi-addon-checker-isengard + - name: Kodi Add-on Checker (Nexus) + id: kodi-addon-checker-nexus run: | - kodi-addon-checker ${{ github.event.repository.name }} --branch=isengard - - - name: Staging for Matrix - run: | - git apply .patches/matrix-kodi-addon-checker.patch - working-directory: ${{ github.event.repository.name }} - - - name: Kodi Add-on Checker (Matrix) - id: kodi-addon-checker-matrix - run: | - kodi-addon-checker ${{ github.event.repository.name }} --branch=matrix + kodi-addon-checker ${{ github.event.repository.name }} --branch=nexus diff --git a/.github/workflows/make-release.yml b/.github/workflows/make-release.yml index bb47adda3..765921a86 100644 --- a/.github/workflows/make-release.yml +++ b/.github/workflows/make-release.yml @@ -45,8 +45,8 @@ jobs: echo "changes=$changes" >> $GITHUB_OUTPUT working-directory: ${{ github.event.repository.name }} - - name: Create Zip (Isengard) - id: zip-isengard + - name: Create Zip (Nexus) + id: zip-nexus run: | mv .git .. rm -rf .??* @@ -59,8 +59,8 @@ jobs: echo "filename=$filename" >> $GITHUB_OUTPUT working-directory: ${{ github.event.repository.name }} - - name: Create Zip (Isengard-Unofficial) - id: zip-unofficial-isengard + - name: Create Zip (Nexus-Unofficial) + id: zip-unofficial-nexus run: | git reset git checkout . @@ -77,53 +77,6 @@ jobs: echo "filename=$filename" >> $GITHUB_OUTPUT working-directory: ${{ github.event.repository.name }} - - name: Remove Repository - id: remove-repo - run: | - rm -rf ${{ github.event.repository.name }} - - - name: Checkout Add-on - uses: actions/checkout@v3 - with: - path: ${{ github.event.repository.name }} - - - name: Create Zip (Matrix) - id: zip-matrix - run: | - git apply .patches/matrix.patch - mv .git .. - rm -rf .??* - rm *.md - version=$(xmlstarlet sel -t -v 'string(/addon/@version)' addon.xml) - xmlstarlet ed -L -u '/addon/@version' -v "${version}+matrix.1" addon.xml - version=$(xmlstarlet sel -t -v 'string(/addon/@version)' addon.xml) - filename=${{ github.event.repository.name }}-${version}.zip - cd .. - zip -r $filename ${{ github.event.repository.name }} - mv .git ${{ github.event.repository.name }} - echo "filename=$filename" >> $GITHUB_OUTPUT - working-directory: ${{ github.event.repository.name }} - - - name: Create Zip (Matrix-Unofficial) - id: zip-unofficial-matrix - run: | - git reset - git checkout . - git clean -fdx - git apply .patches/matrix-unofficial.patch - mv .git .. - rm -rf .??* - rm *.md - version=$(xmlstarlet sel -t -v 'string(/addon/@version)' addon.xml) - xmlstarlet ed -L -u '/addon/@version' -v "${version}+matrix.1" addon.xml - version=$(xmlstarlet sel -t -v 'string(/addon/@version)' addon.xml) - filename=${{ github.event.repository.name }}-unofficial-${version}.zip - cd .. - zip -r $filename ${{ github.event.repository.name }} - mv .git ${{ github.event.repository.name }} - echo "filename=$filename" >> $GITHUB_OUTPUT - working-directory: ${{ github.event.repository.name }} - - name: Create Release id: create-release uses: actions/create-release@v1 diff --git a/.github/workflows/submit-release.yml b/.github/workflows/submit-release.yml index 44af0538b..e9316d80b 100644 --- a/.github/workflows/submit-release.yml +++ b/.github/workflows/submit-release.yml @@ -48,41 +48,13 @@ jobs: mv ../.git . rm *.md git add . - git commit -m "Kodi 15 Patch" + git commit -m "Remove Unwanted Files" working-directory: ${{ github.event.repository.name }} - - name: Submit to Official Repository (Isengard) - id: submit-isengard + - name: Submit to Official Repository (Nexus) + id: submit-nexus run: | - submit-addon -r repo-plugins -b isengard --pull-request ${{ github.event.repository.name }} - working-directory: ${{ github.event.repository.name }} - env: - GH_USERNAME: anxdpanic - GH_TOKEN: ${{ secrets.ADDON_SUBMISSION_TOKEN }} - EMAIL: anxdpanic@users.noreply.github.com - - - name: Staging for Official Repository (Matrix) - id: stage-matrix - run: | - git reset --hard ${{ github.sha }} - git checkout . - git clean -fdx - git apply .patches/matrix.patch - mv .git .. - rm -rf .??* - mv ../.git . - rm *.md - rm changelog.txt - version=$(xmlstarlet sel -t -v 'string(/addon/@version)' addon.xml) - xmlstarlet ed -L -u '/addon/@version' -v "${version}+matrix.1" addon.xml - git add . - git commit -m "Kodi 19 Patch" - working-directory: ${{ github.event.repository.name }} - - - name: Submit to Official Repository (Matrix) - id: submit-matrix - run: | - submit-addon -r repo-plugins -b matrix --pull-request ${{ github.event.repository.name }} + submit-addon -r repo-plugins -b nexus --pull-request ${{ github.event.repository.name }} working-directory: ${{ github.event.repository.name }} env: GH_USERNAME: anxdpanic diff --git a/.patches/matrix-kodi-addon-checker.patch b/.patches/matrix-kodi-addon-checker.patch deleted file mode 100644 index fd9723ea2..000000000 --- a/.patches/matrix-kodi-addon-checker.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 555b8e2c8d1c1ac76a3b48ce333b7369ad38c5cf Mon Sep 17 00:00:00 2001 -From: anxdpanic -Date: Fri, 7 Feb 2020 16:44:38 -0500 -Subject: [PATCH] matrix patch - ---- - addon.xml | 4 +- - .../kodion/impl/abstract_settings.py | 2 +- - resources/settings.xml | 1102 ++++++++++++++--- - 3 files changed, 956 insertions(+), 152 deletions(-) - -diff --git a/addon.xml b/addon.xml -index d1cc52b..58e88d1 100644 ---- a/addon.xml -+++ b/addon.xml -@@ -3,5 +3,5 @@ - -- -+ - - - -@@ -9,6 +9,6 @@ - - video - -- -+ - - diff --git a/.patches/matrix-unofficial.patch b/.patches/matrix-unofficial.patch deleted file mode 100644 index 0c21e98fc..000000000 --- a/.patches/matrix-unofficial.patch +++ /dev/null @@ -1,1753 +0,0 @@ -From e4872a2c400e30dc2ddbe828b0bdc6657a344ca9 Mon Sep 17 00:00:00 2001 -From: anxdpanic -Date: Fri, 7 Feb 2020 16:44:38 -0500 -Subject: [PATCH] matrix patch - ---- - addon.xml | 5 +- - .../kodion/abstract_provider.py | 21 +- - .../kodion/constants/const_settings.py | 4 + - .../kodion/impl/abstract_context_ui.py | 6 + - .../kodion/impl/abstract_settings.py | 5 +- - .../kodion/impl/xbmc/xbmc_context.py | 1 + - .../kodion/impl/xbmc/xbmc_context_ui.py | 13 + - .../kodion/impl/xbmc/xbmc_runner.py | 8 + - .../youtube_plugin/kodion/utils/__init__.py | 3 +- - .../kodion/utils/view_manager.py | 166 +++ - .../youtube_plugin/youtube/helper/utils.py | 2 +- - .../youtube/helper/yt_specials.py | 18 +- - .../lib/youtube_plugin/youtube/provider.py | 22 +- - resources/settings.xml | 1141 ++++++++++++++--- - 14 files changed, 1239 insertions(+), 176 deletions(-) - create mode 100644 resources/lib/youtube_plugin/kodion/utils/view_manager.py - -diff --git a/addon.xml b/addon.xml -index cd39f4a..d3e9ef9 100644 ---- a/addon.xml -+++ b/addon.xml -@@ -3,5 +3,5 @@ - -- -+ - - - -@@ -9,7 +9,7 @@ - - video - -- -+ - - - -@@ -102,3 +102,4 @@ - 此附加元件未由Google支持 - - -+ -diff --git a/resources/lib/youtube_plugin/kodion/abstract_provider.py b/resources/lib/youtube_plugin/kodion/abstract_provider.py -index 7069da6..f49e2e2 100644 ---- a/resources/lib/youtube_plugin/kodion/abstract_provider.py -+++ b/resources/lib/youtube_plugin/kodion/abstract_provider.py -@@ -73,10 +73,29 @@ class AbstractProvider(object): - self._dict_path[re_path] = method_name - - def _process_wizard(self, context): -+ def _setup_views(_context, _view): -+ view_manager = utils.ViewManager(_context) -+ if not view_manager.update_view_mode(_context.localize(self._local_map['kodion.wizard.view.%s' % _view]), -+ _view): -+ return -+ -+ _context.get_settings().set_bool(constants.setting.VIEW_OVERRIDE, True) -+ - # start the setup wizard - wizard_steps = [] - if context.get_settings().is_setup_wizard_enabled(): - context.get_settings().set_bool(constants.setting.SETUP_WIZARD, False) -+ if utils.ViewManager(context).has_supported_views(): -+ views = self.get_wizard_supported_views() -+ for view in views: -+ if view in utils.ViewManager.SUPPORTED_VIEWS: -+ wizard_steps.append((_setup_views, [context, view])) -+ else: -+ context.log_warning('[Setup-Wizard] Unsupported view "%s"' % view) -+ else: -+ skin_id = context.get_ui().get_skin_id() -+ context.log("ViewManager: Unknown skin id '%s'" % skin_id) -+ - wizard_steps.extend(self.get_wizard_steps(context)) - - if wizard_steps and context.get_ui().on_yes_no_input(context.get_name(), -@@ -279,7 +298,7 @@ class AbstractProvider(object): - query = query.decode('utf-8') - return self.on_search(query, context, re_match) - else: -- context.set_content_type(constants.content_type.FILES) -+ context.set_content_type(constants.content_type.VIDEOS) - result = [] - - location = str(context.get_param('location', False)).lower() == 'true' -diff --git a/resources/lib/youtube_plugin/kodion/constants/const_settings.py b/resources/lib/youtube_plugin/kodion/constants/const_settings.py -index dfeeace..e797928 100644 ---- a/resources/lib/youtube_plugin/kodion/constants/const_settings.py -+++ b/resources/lib/youtube_plugin/kodion/constants/const_settings.py -@@ -35,6 +35,10 @@ HIDE_SHORT_VIDEOS = 'youtube.hide_shorts' # (bool) - SUPPORT_ALTERNATIVE_PLAYER = 'kodion.support.alternative_player' # (bool) - ALTERNATIVE_PLAYER_WEB_URLS = 'kodion.alternative_player.web.urls' # (bool) - -+VIEW_OVERRIDE = 'kodion.view.override' # (bool) -+VIEW_DEFAULT = 'kodion.view.default' # (int) -+VIEW_X = 'kodion.view.%s' # (int) -+ - ALLOW_DEV_KEYS = 'youtube.allow.dev.keys' # (bool) - - DASH_VIDEOS = 'kodion.mpd.videos' # (bool) -diff --git a/resources/lib/youtube_plugin/kodion/impl/abstract_context_ui.py b/resources/lib/youtube_plugin/kodion/impl/abstract_context_ui.py -index 7ed3fef..46eabf2 100644 ---- a/resources/lib/youtube_plugin/kodion/impl/abstract_context_ui.py -+++ b/resources/lib/youtube_plugin/kodion/impl/abstract_context_ui.py -@@ -16,6 +16,12 @@ class AbstractContextUI(object): - def create_progress_dialog(self, heading, text=None, background=False): - raise NotImplementedError() - -+ def set_view_mode(self, view_mode): -+ raise NotImplementedError() -+ -+ def get_view_mode(self): -+ raise NotImplementedError() -+ - def get_skin_id(self): - raise NotImplementedError() - -diff --git a/resources/lib/youtube_plugin/kodion/impl/abstract_settings.py b/resources/lib/youtube_plugin/kodion/impl/abstract_settings.py -index 1a6e82c..591bec4 100644 ---- a/resources/lib/youtube_plugin/kodion/impl/abstract_settings.py -+++ b/resources/lib/youtube_plugin/kodion/impl/abstract_settings.py -@@ -63,7 +63,7 @@ class AbstractSettings(object): - return value == 'true' - - def get_items_per_page(self): -- return self.get_int(constants.setting.ITEMS_PER_PAGE, 50, lambda x: (x + 1) * 5) -+ return self.get_int(constants.setting.ITEMS_PER_PAGE, 50) - - def get_video_quality(self, quality_map_override=None): - vq_dict = {0: 240, -@@ -90,6 +90,9 @@ class AbstractSettings(object): - def is_setup_wizard_enabled(self): - return self.get_bool(constants.setting.SETUP_WIZARD, False) - -+ def is_override_view_enabled(self): -+ return self.get_bool(constants.setting.VIEW_OVERRIDE, False) -+ - def is_support_alternative_player_enabled(self): - return self.get_bool(constants.setting.SUPPORT_ALTERNATIVE_PLAYER, False) - -diff --git a/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_context.py b/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_context.py -index 6542331..fc98931 100644 ---- a/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_context.py -+++ b/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_context.py -@@ -208,6 +208,7 @@ class XbmcContext(AbstractContext): - def set_content_type(self, content_type): - self.log_debug('Setting content-type: "%s" for "%s"' % (content_type, self.get_path())) - xbmcplugin.setContent(self._plugin_handle, content_type) -+ self.get_ui().set_view_mode(content_type) - - def add_sort_method(self, *sort_methods): - for sort_method in sort_methods: -diff --git a/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_context_ui.py b/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_context_ui.py -index 49c9507..6aece7b 100644 ---- a/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_context_ui.py -+++ b/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_context_ui.py -@@ -9,6 +9,7 @@ - """ - - from six import PY3 -+from six import string_types - - import xbmc - import xbmcgui -@@ -35,6 +36,18 @@ class XbmcContextUI(AbstractContextUI): - - return XbmcProgressDialog(heading, text) - -+ def set_view_mode(self, view_mode): -+ if isinstance(view_mode, string_types): -+ view_mode = self._context.get_settings().get_int(constants.setting.VIEW_X % view_mode, self._context.get_settings().get_int(constants.setting.VIEW_DEFAULT, 50)) -+ -+ self._view_mode = view_mode -+ -+ def get_view_mode(self): -+ if self._view_mode is not None: -+ return self._view_mode -+ -+ return self._context.get_settings().get_int(constants.setting.VIEW_DEFAULT, 50) -+ - def get_skin_id(self): - return xbmc.getSkinDir() - -diff --git a/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_runner.py b/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_runner.py -index e050639..3ee89b8 100644 ---- a/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_runner.py -+++ b/resources/lib/youtube_plugin/kodion/impl/xbmc/xbmc_runner.py -@@ -8,6 +8,7 @@ - See LICENSES/GPL-2.0-only for more information. - """ - -+import xbmc - import xbmcgui - import xbmcplugin - -@@ -66,6 +67,13 @@ class XbmcRunner(AbstractProviderRunner): - self.handle, succeeded=True, - updateListing=options.get(AbstractProvider.RESULT_UPDATE_LISTING, False), - cacheToDisc=options.get(AbstractProvider.RESULT_CACHE_TO_DISC, True)) -+ -+ # set alternative view mode -+ if context.get_settings().is_override_view_enabled(): -+ view_mode = context.get_ui().get_view_mode() -+ if view_mode is not None: -+ context.log_debug('Override view mode to "%d"' % view_mode) -+ xbmc.executebuiltin('Container.SetViewMode(%d)' % view_mode) - else: - # handle exception - pass -diff --git a/resources/lib/youtube_plugin/kodion/utils/__init__.py b/resources/lib/youtube_plugin/kodion/utils/__init__.py -index 20e9597..4c279f9 100644 ---- a/resources/lib/youtube_plugin/kodion/utils/__init__.py -+++ b/resources/lib/youtube_plugin/kodion/utils/__init__.py -@@ -16,6 +16,7 @@ from .favorite_list import FavoriteList - from .watch_later_list import WatchLaterList - from .function_cache import FunctionCache - from .access_manager import AccessManager -+from .view_manager import ViewManager - from .http_server import get_http_server, is_httpd_live, get_client_ip_address - from .monitor import YouTubeMonitor - from .player import YouTubePlayer -@@ -25,7 +26,7 @@ from .system_version import SystemVersion - from . import ip_api - - --__all__ = ['SearchHistory', 'FavoriteList', 'WatchLaterList', 'FunctionCache', 'AccessManager', -+__all__ = ['SearchHistory', 'FavoriteList', 'WatchLaterList', 'FunctionCache', 'AccessManager', 'ViewManager', - 'strip_html_from_text', 'create_path', 'create_uri_path', 'find_best_fit', 'to_unicode', 'to_utf8', - 'datetime_parser', 'select_stream', 'get_http_server', 'is_httpd_live', 'YouTubeMonitor', - 'make_dirs', 'loose_version', 'ip_api', 'PlaybackHistory', 'DataCache', 'get_client_ip_address', -diff --git a/resources/lib/youtube_plugin/kodion/utils/view_manager.py b/resources/lib/youtube_plugin/kodion/utils/view_manager.py -new file mode 100644 -index 0000000..9a5fe5a ---- /dev/null -+++ b/resources/lib/youtube_plugin/kodion/utils/view_manager.py -@@ -0,0 +1,166 @@ -+# -*- coding: utf-8 -*- -+""" -+ -+ Copyright (C) 2014-2016 bromix (plugin.video.youtube) -+ Copyright (C) 2016-2018 plugin.video.youtube -+ -+ SPDX-License-Identifier: GPL-2.0-only -+ See LICENSES/GPL-2.0-only for more information. -+""" -+ -+from .. import constants -+ -+ -+class ViewManager(object): -+ SUPPORTED_VIEWS = ['default', 'movies', 'tvshows', 'episodes', 'musicvideos', 'songs', 'albums', 'artists'] -+ SKIN_DATA = { -+ 'skin.confluence': { -+ 'default': [ -+ {'name': 'List', 'id': 50}, -+ {'name': 'Big List', 'id': 51}, -+ {'name': 'Thumbnail', 'id': 500} -+ ], -+ 'movies': [ -+ {'name': 'List', 'id': 50}, -+ {'name': 'Big List', 'id': 51}, -+ {'name': 'Thumbnail', 'id': 500}, -+ {'name': 'Media info', 'id': 504}, -+ {'name': 'Media info 2', 'id': 503} -+ ], -+ 'episodes': [ -+ {'name': 'List', 'id': 50}, -+ {'name': 'Big List', 'id': 51}, -+ {'name': 'Thumbnail', 'id': 500}, -+ {'name': 'Media info', 'id': 504}, -+ {'name': 'Media info 2', 'id': 503} -+ ], -+ 'tvshows': [ -+ {'name': 'List', 'id': 50}, -+ {'name': 'Big List', 'id': 51}, -+ {'name': 'Thumbnail', 'id': 500}, -+ {'name': 'Poster', 'id': 500}, -+ {'name': 'Wide', 'id': 505}, -+ {'name': 'Media info', 'id': 504}, -+ {'name': 'Media info 2', 'id': 503}, -+ {'name': 'Fanart', 'id': 508} -+ ], -+ 'musicvideos': [ -+ {'name': 'List', 'id': 50}, -+ {'name': 'Big List', 'id': 51}, -+ {'name': 'Thumbnail', 'id': 500}, -+ {'name': 'Media info', 'id': 504}, -+ {'name': 'Media info 2', 'id': 503} -+ ], -+ 'songs': [ -+ {'name': 'List', 'id': 50}, -+ {'name': 'Big List', 'id': 51}, -+ {'name': 'Thumbnail', 'id': 500}, -+ {'name': 'Media info', 'id': 506} -+ ], -+ 'albums': [ -+ {'name': 'List', 'id': 50}, -+ {'name': 'Big List', 'id': 51}, -+ {'name': 'Thumbnail', 'id': 500}, -+ {'name': 'Media info', 'id': 506} -+ ], -+ 'artists': [ -+ {'name': 'List', 'id': 50}, -+ {'name': 'Big List', 'id': 51}, -+ {'name': 'Thumbnail', 'id': 500}, -+ {'name': 'Media info', 'id': 506} -+ ] -+ }, -+ 'skin.aeon.nox.5': { -+ 'default': [ -+ {'name': 'List', 'id': 50}, -+ {'name': 'Episodes', 'id': 502}, -+ {'name': 'LowList', 'id': 501}, -+ {'name': 'BannerWall', 'id': 58}, -+ {'name': 'Shift', 'id': 57}, -+ {'name': 'Posters', 'id': 56}, -+ {'name': 'ShowCase', 'id': 53}, -+ {'name': 'Landscape', 'id': 52}, -+ {'name': 'InfoWall', 'id': 51} -+ ] -+ }, -+ 'skin.xperience1080+': { -+ 'default': [ -+ {'name': 'List', 'id': 50}, -+ {'name': 'Thumbnail', 'id': 500}, -+ ], -+ 'episodes': [ -+ {'name': 'List', 'id': 50}, -+ {'name': 'Info list', 'id': 52}, -+ {'name': 'Fanart', 'id': 502}, -+ {'name': 'Landscape', 'id': 54}, -+ {'name': 'Poster', 'id': 55}, -+ {'name': 'Thumbnail', 'id': 500}, -+ {'name': 'Banner', 'id': 60} -+ ], -+ }, -+ 'skin.xperience1080': { -+ 'default': [ -+ {'name': 'List', 'id': 50}, -+ {'name': 'Thumbnail', 'id': 500}, -+ ], -+ 'episodes': [ -+ {'name': 'List', 'id': 50}, -+ {'name': 'Info list', 'id': 52}, -+ {'name': 'Fanart', 'id': 502}, -+ {'name': 'Landscape', 'id': 54}, -+ {'name': 'Poster', 'id': 55}, -+ {'name': 'Thumbnail', 'id': 500}, -+ {'name': 'Banner', 'id': 60} -+ ], -+ }, -+ 'skin.estuary': { -+ 'default': [ -+ {'name': 'Shift', 'id': 53}, -+ {'name': 'InfoWall', 'id': 54}, -+ {'name': 'Wall', 'id': 500}, -+ {'name': 'WideList', 'id': 55}, -+ ], -+ 'episodes': [ -+ {'name': 'InfoWall', 'id': 54}, -+ {'name': 'Wall', 'id': 500}, -+ {'name': 'WideList', 'id': 55}, -+ ] -+ } -+ } -+ -+ def __init__(self, context): -+ self._context = context -+ -+ def has_supported_views(self): -+ """ -+ Returns True if the View of the current skin are supported -+ :return: True if the View of the current skin are supported -+ """ -+ return self._context.get_ui().get_skin_id() in self.SKIN_DATA -+ -+ def update_view_mode(self, title, view='default'): -+ view_id = -1 -+ settings = self._context.get_settings() -+ -+ skin_id = self._context.get_ui().get_skin_id() -+ skin_data = self.SKIN_DATA.get(skin_id, {}).get(view, []) -+ if skin_data: -+ items = [] -+ for view_data in skin_data: -+ items.append((view_data['name'], view_data['id'])) -+ view_id = self._context.get_ui().on_select(title, items) -+ else: -+ self._context.log_notice("ViewManager: Unknown skin id '%s'" % skin_id) -+ -+ if view_id == -1: -+ old_value = settings.get_string(constants.setting.VIEW_X % view, '') -+ if old_value: -+ result, view_id = self._context.get_ui().on_numeric_input(title, old_value) -+ if not result: -+ view_id = -1 -+ -+ if view_id > -1: -+ settings.set_int(constants.setting.VIEW_X % view, view_id) -+ return True -+ -+ return False -diff --git a/resources/lib/youtube_plugin/youtube/helper/utils.py b/resources/lib/youtube_plugin/youtube/helper/utils.py -index 88a7fb7..5fc6e37 100644 ---- a/resources/lib/youtube_plugin/youtube/helper/utils.py -+++ b/resources/lib/youtube_plugin/youtube/helper/utils.py -@@ -258,7 +258,7 @@ def update_video_infos(provider, context, video_id_dict, playlist_item_id_dict=N - video_item = video_id_dict[video_id] - - # set mediatype -- video_item.set_mediatype('video') # using video -+ video_item.set_mediatype('episode') # using video - - if not yt_item: - continue -diff --git a/resources/lib/youtube_plugin/youtube/helper/yt_specials.py b/resources/lib/youtube_plugin/youtube/helper/yt_specials.py -index 89ad2b1..c5c8fec 100644 ---- a/resources/lib/youtube_plugin/youtube/helper/yt_specials.py -+++ b/resources/lib/youtube_plugin/youtube/helper/yt_specials.py -@@ -15,7 +15,7 @@ from . import utils - - - def _process_related_videos(provider, context): -- provider.set_content_type(context, kodion.constants.content_type.VIDEOS) -+ provider.set_content_type(context, kodion.constants.content_type.EPISODES) - result = [] - - page_token = context.get_param('page_token', '') -@@ -60,7 +60,7 @@ def _process_child_comments(provider, context): - - - def _process_recommendations(provider, context): -- provider.set_content_type(context, kodion.constants.content_type.VIDEOS) -+ provider.set_content_type(context, kodion.constants.content_type.EPISODES) - result = [] - - page_token = context.get_param('page_token', '') -@@ -72,7 +72,7 @@ def _process_recommendations(provider, context): - - - def _process_popular_right_now(provider, context): -- provider.set_content_type(context, kodion.constants.content_type.VIDEOS) -+ provider.set_content_type(context, kodion.constants.content_type.EPISODES) - result = [] - - page_token = context.get_param('page_token', '') -@@ -85,7 +85,7 @@ def _process_popular_right_now(provider, context): - - - def _process_browse_channels(provider, context): -- provider.set_content_type(context, kodion.constants.content_type.FILES) -+ provider.set_content_type(context, kodion.constants.content_type.VIDEOS) - result = [] - - # page_token = context.get_param('page_token', '') -@@ -107,7 +107,7 @@ def _process_browse_channels(provider, context): - - - def _process_disliked_videos(provider, context): -- provider.set_content_type(context, kodion.constants.content_type.VIDEOS) -+ provider.set_content_type(context, kodion.constants.content_type.EPISODES) - result = [] - - page_token = context.get_param('page_token', '') -@@ -122,7 +122,7 @@ def _process_live_events(provider, context, event_type='live'): - def _sort(x): - return x.get_aired() - -- provider.set_content_type(context, kodion.constants.content_type.VIDEOS) -+ provider.set_content_type(context, kodion.constants.content_type.EPISODES) - result = [] - - # TODO: cache result -@@ -142,7 +142,7 @@ def _process_description_links(provider, context): - addon_id = context.get_param('addon_id', '') - - def _extract_urls(_video_id): -- provider.set_content_type(context, kodion.constants.content_type.VIDEOS) -+ provider.set_content_type(context, kodion.constants.content_type.EPISODES) - url_resolver = UrlResolver(context) - - result = [] -@@ -304,7 +304,7 @@ def _process_purchases_tv(provider, context): - - - def _process_new_uploaded_videos_tv(provider, context): -- provider.set_content_type(context, kodion.constants.content_type.VIDEOS) -+ provider.set_content_type(context, kodion.constants.content_type.EPISODES) - - result = [] - next_page_token = context.get_param('next_page_token', '') -@@ -316,7 +316,7 @@ def _process_new_uploaded_videos_tv(provider, context): - - - def _process_new_uploaded_videos_tv_filtered(provider, context): -- provider.set_content_type(context, kodion.constants.content_type.VIDEOS) -+ provider.set_content_type(context, kodion.constants.content_type.EPISODES) - - result = [] - next_page_token = context.get_param('next_page_token', '') -diff --git a/resources/lib/youtube_plugin/youtube/provider.py b/resources/lib/youtube_plugin/youtube/provider.py -index fea2957..75c6780 100644 ---- a/resources/lib/youtube_plugin/youtube/provider.py -+++ b/resources/lib/youtube_plugin/youtube/provider.py -@@ -437,7 +437,7 @@ class Provider(kodion.AbstractProvider): - - @kodion.RegisterProviderPath('^/playlist/(?P[^/]+)/$') - def _on_playlist(self, context, re_match): -- self.set_content_type(context, kodion.constants.content_type.VIDEOS) -+ self.set_content_type(context, kodion.constants.content_type.EPISODES) - - result = [] - -@@ -461,7 +461,7 @@ class Provider(kodion.AbstractProvider): - - @kodion.RegisterProviderPath('^/channel/(?P[^/]+)/playlist/(?P[^/]+)/$') - def _on_channel_playlist(self, context, re_match): -- self.set_content_type(context, kodion.constants.content_type.VIDEOS) -+ self.set_content_type(context, kodion.constants.content_type.EPISODES) - client = self.get_client(context) - result = [] - -@@ -484,7 +484,7 @@ class Provider(kodion.AbstractProvider): - - @kodion.RegisterProviderPath('^/channel/(?P[^/]+)/playlists/$') - def _on_channel_playlists(self, context, re_match): -- self.set_content_type(context, kodion.constants.content_type.FILES) -+ self.set_content_type(context, kodion.constants.content_type.VIDEOS) - result = [] - - channel_id = re_match.group('channel_id') -@@ -525,7 +525,7 @@ class Provider(kodion.AbstractProvider): - - @kodion.RegisterProviderPath('^/channel/(?P[^/]+)/live/$') - def _on_channel_live(self, context, re_match): -- self.set_content_type(context, kodion.constants.content_type.VIDEOS) -+ self.set_content_type(context, kodion.constants.content_type.EPISODES) - result = [] - - channel_id = re_match.group('channel_id') -@@ -560,7 +560,7 @@ class Provider(kodion.AbstractProvider): - if method == 'channel' and not channel_id: - return False - -- self.set_content_type(context, kodion.constants.content_type.VIDEOS) -+ self.set_content_type(context, kodion.constants.content_type.EPISODES) - - resource_manager = self.get_resource_manager(context) - -@@ -648,7 +648,7 @@ class Provider(kodion.AbstractProvider): - # noinspection PyUnusedLocal - @kodion.RegisterProviderPath('^/location/mine/$') - def _on_my_location(self, context, re_match): -- self.set_content_type(context, kodion.constants.content_type.FILES) -+ self.set_content_type(context, kodion.constants.content_type.VIDEOS) - - settings = context.get_settings() - result = list() -@@ -793,7 +793,7 @@ class Provider(kodion.AbstractProvider): - subscriptions = yt_subscriptions.process(method, self, context) - - if method == 'list': -- self.set_content_type(context, kodion.constants.content_type.FILES) -+ self.set_content_type(context, kodion.constants.content_type.VIDEOS) - channel_ids = [] - for subscription in subscriptions: - channel_ids.append(subscription.get_channel_id()) -@@ -1025,9 +1025,9 @@ class Provider(kodion.AbstractProvider): - context.set_param('q', search_text) - - if search_type == 'video': -- self.set_content_type(context, kodion.constants.content_type.VIDEOS) -+ self.set_content_type(context, kodion.constants.content_type.EPISODES) - else: -- self.set_content_type(context, kodion.constants.content_type.FILES) -+ self.set_content_type(context, kodion.constants.content_type.VIDEOS) - - if page == 1 and search_type == 'video' and not event_type and not hide_folders: - if not channel_id and not location: -@@ -1361,7 +1361,7 @@ class Provider(kodion.AbstractProvider): - settings = context.get_settings() - _ = self.get_client(context) # required for self.is_logged_in() - -- self.set_content_type(context, kodion.constants.content_type.FILES) -+ self.set_content_type(context, kodion.constants.content_type.VIDEOS) - - result = [] - -@@ -1596,7 +1596,7 @@ class Provider(kodion.AbstractProvider): - @staticmethod - def set_content_type(context, content_type): - context.set_content_type(content_type) -- if content_type == kodion.constants.content_type.VIDEOS: -+ if content_type == kodion.constants.content_type.EPISODES: - context.add_sort_method(kodion.constants.sort_method.UNSORTED, - kodion.constants.sort_method.VIDEO_RUNTIME, - kodion.constants.sort_method.DATE_ADDED, -diff --git a/resources/settings.xml b/resources/settings.xml -index dd1d769..736c92d 100644 ---- a/resources/settings.xml -+++ b/resources/settings.xml -@@ -1,151 +1,992 @@ -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -+ -+ -+
-+ -+ -+ -+ 0 -+ 3 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ false -+ -+ -+ -+ -+ -+ 0 -+ false -+ -+ -+ false -+ -+ -+ -+ -+ -+ 0 -+ false -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/config/subtitles/) -+ -+ true -+ -+ -+ -+ true -+ -+ -+ true -+ -+ -+ -+ true -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ false -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ false -+ -+ -+ false -+ -+ -+ -+ -+ -+ 0 -+ false -+ -+ -+ -+ 0 -+ false -+ -+ -+ -+ 0 -+ 85 -+ -+ 1 -+ 1 -+ 99 -+ -+ -+ -+ true -+ -+ -+ -+ false -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ false -+ -+ -+ -+ 0 -+ false -+ -+ -+ true -+ -+ -+ -+ -+ -+ 0 -+ false -+ -+ -+ -+ -+ -+ 0 -+ 1 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ true -+ -+ -+ -+ -+ -+ 0 -+ 50 -+ -+ 5 -+ 5 -+ 50 -+ -+ -+ false -+ -+ -+ -+ 0 -+ 10 -+ -+ 0 -+ 10 -+ 200 -+ -+ -+ false -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ false -+ -+ -+ System.HasAddon(inputstream.adaptive) -+ -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/config/mpd/) -+ -+ true -+ -+ -+ -+ true -+ -+ -+ -+ true -+ -+ -+ -+ -+ -+ 0 -+ true -+ -+ -+ true -+ -+ -+ -+ -+ -+ 0 -+ 8 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ true -+ -+ -+ -+ -+ -+ 0 -+ false -+ -+ -+ -+ true -+ 8 -+ -+ -+ -+ -+ -+ -+ 0 -+ false -+ -+ -+ -+ true -+ false -+ 8 -+ 9 -+ -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ true -+ -+ -+ true -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/maintain/inputstreamhelper/install/) -+ -+ true -+ -+ -+ -+ true -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ false -+ -+ -+ -+ 0 -+ false -+ -+ -+ true -+ -+ -+ true -+ -+ -+ -+ -+ -+ 0 -+ -+ -+ true -+ -+ -+ -+ true -+ -+ -+ true -+ -+ -+ -+ 30585 -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ false -+ -+ -+ -+ 0 -+ false -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ false -+ -+ -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ -+ -+ true -+ -+ -+ -+ true -+ -+ -+ true -+ -+ -+ -+ 30037 -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ -+ -+ true -+ -+ -+ -+ true -+ -+ -+ true -+ -+ -+ -+ 30038 -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ false -+ -+ -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/users/add/?refresh=false) -+ -+ true -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/users/remove/?refresh=false) -+ -+ true -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/users/rename/?refresh=false) -+ -+ true -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/users/switch/?refresh=false) -+ -+ true -+ -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ false -+ -+ -+ -+ 0 -+ false -+ -+ -+ true -+ -+ -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ -+ -+ 0 -+ false -+ -+ -+ -+ -+ -+ 0 -+ false -+ -+ -+ -+ 0 -+ 50 -+ -+ -+ true -+ -+ -+ -+ 30027 -+ -+ -+ -+ 0 -+ 50 -+ -+ -+ true -+ -+ -+ -+ 30028 -+ -+ -+ -+ -+ -+ 0 -+ 10 -+ -+ 5 -+ 1 -+ 100 -+ -+ -+ false -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ -+ -+ 0 -+ en-US -+ -+ -+ false -+ -+ -+ -+ 30523 -+ -+ -+ -+ 0 -+ US -+ -+ -+ false -+ -+ -+ -+ 30550 -+ -+ -+ -+ 0 -+ -+ -+ true -+ -+ -+ -+ true -+ -+ -+ -+ 30651 -+ -+ -+ -+ 0 -+ 500 -+ -+ 1 -+ 1 -+ 1000 -+ -+ -+ -+ true -+ -+ -+ -+ false -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ 0.0.0.0 -+ -+ -+ true -+ -+ -+ -+ 30643 -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/config/listen_ip/) -+ -+ true -+ -+ -+ true -+ -+ -+ -+ 0 -+ 50152 -+ -+ -+ true -+ -+ -+ -+ 30619 -+ -+ -+ -+ 0 -+ -+ -+ true -+ -+ -+ -+ true -+ -+ -+ -+ 30629 -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/show_client_ip/) -+ -+ true -+ -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ -+ -+ true -+ -+ -+ 30201 -+ -+ -+ -+ 0 -+ -+ -+ true -+ -+ -+ 30202 -+ -+ -+ -+ 0 -+ -+ -+ true -+ -+ -+ 30203 -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ -+ -+ 0 -+ false -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/maintain/function_cache/clear/) -+ -+ true -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/maintain/data_cache/clear/) -+ -+ true -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/maintain/search_cache/clear/) -+ -+ true -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/maintain/playback_history/clear/) -+ -+ true -+ -+ -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/maintain/function_cache/delete/) -+ -+ true -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/maintain/data_cache/delete/) -+ -+ true -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/maintain/search_cache/delete/) -+ -+ true -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/maintain/playback_history/delete/) -+ -+ true -+ -+ -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/maintain/access_manager/reset/) -+ -+ true -+ -+ -+ true -+ -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/maintain/settings_xml/delete/) -+ -+ true -+ -+ -+ true -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/maintain/api_keys/delete/) -+ -+ true -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/maintain/access_manager/delete/) -+ -+ true -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/maintain/temp_files/delete/) -+ -+ true -+ -+ -+ -+ -+ 0 -+ -+ -+ true -+ -+ -+ -+ false -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ -+ -+ true -+ -+ -+ -+ false -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ false -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ -+ -+ true -+ -+ -+ -+ false -+ -+ -+ -+ -+ -+ -+ -+ -+
-
--- -2.33.0.windows.2 - diff --git a/.patches/matrix.patch b/.patches/matrix.patch deleted file mode 100644 index f1d96591d..000000000 --- a/.patches/matrix.patch +++ /dev/null @@ -1,1163 +0,0 @@ -From 600ba27aace694c860d31cb9fd24bb08e7d2cafd Mon Sep 17 00:00:00 2001 -From: anxdpanic -Date: Fri, 7 Feb 2020 16:44:38 -0500 -Subject: [PATCH] matrix patch - ---- - addon.xml | 4 +- - .../kodion/impl/abstract_settings.py | 2 +- - resources/settings.xml | 1110 ++++++++++++++--- - 3 files changed, 963 insertions(+), 153 deletions(-) - -diff --git a/addon.xml b/addon.xml -index cd39f4a..aa52ec5 100644 ---- a/addon.xml -+++ b/addon.xml -@@ -3,5 +3,5 @@ - -- -+ - - - -@@ -9,7 +9,7 @@ - - video - -- -+ - - - -diff --git a/resources/lib/youtube_plugin/kodion/impl/abstract_settings.py b/resources/lib/youtube_plugin/kodion/impl/abstract_settings.py -index 1a6e82c..b79c3b0 100644 ---- a/resources/lib/youtube_plugin/kodion/impl/abstract_settings.py -+++ b/resources/lib/youtube_plugin/kodion/impl/abstract_settings.py -@@ -63,7 +63,7 @@ class AbstractSettings(object): - return value == 'true' - - def get_items_per_page(self): -- return self.get_int(constants.setting.ITEMS_PER_PAGE, 50, lambda x: (x + 1) * 5) -+ return self.get_int(constants.setting.ITEMS_PER_PAGE, 50) - - def get_video_quality(self, quality_map_override=None): - vq_dict = {0: 240, -diff --git a/resources/settings.xml b/resources/settings.xml -index dd1d769..240043a 100644 ---- a/resources/settings.xml -+++ b/resources/settings.xml -@@ -1,151 +1,961 @@ -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -+ -+ -+
-+ -+ -+ -+ 0 -+ 3 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ false -+ -+ -+ -+ -+ -+ 0 -+ false -+ -+ -+ false -+ -+ -+ -+ -+ -+ 0 -+ false -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/config/subtitles/) -+ -+ true -+ -+ -+ -+ true -+ -+ -+ true -+ -+ -+ -+ true -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ false -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ false -+ -+ -+ false -+ -+ -+ -+ -+ -+ 0 -+ false -+ -+ -+ -+ 0 -+ false -+ -+ -+ -+ 0 -+ 85 -+ -+ 1 -+ 1 -+ 99 -+ -+ -+ -+ true -+ -+ -+ -+ false -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ false -+ -+ -+ -+ 0 -+ false -+ -+ -+ true -+ -+ -+ -+ -+ -+ 0 -+ false -+ -+ -+ -+ -+ -+ 0 -+ 1 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ true -+ -+ -+ -+ -+ -+ 0 -+ 50 -+ -+ 5 -+ 5 -+ 50 -+ -+ -+ false -+ -+ -+ -+ 0 -+ 10 -+ -+ 0 -+ 10 -+ 200 -+ -+ -+ false -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ false -+ -+ -+ System.HasAddon(inputstream.adaptive) -+ -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/config/mpd/) -+ -+ true -+ -+ -+ -+ true -+ -+ -+ -+ true -+ -+ -+ -+ -+ -+ 0 -+ true -+ -+ -+ true -+ -+ -+ -+ -+ -+ 0 -+ 8 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ true -+ -+ -+ -+ -+ -+ 0 -+ false -+ -+ -+ -+ true -+ 8 -+ -+ -+ -+ -+ -+ -+ 0 -+ false -+ -+ -+ -+ true -+ false -+ 8 -+ 9 -+ -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ true -+ -+ -+ true -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/maintain/inputstreamhelper/install/) -+ -+ true -+ -+ -+ -+ true -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ false -+ -+ -+ -+ 0 -+ false -+ -+ -+ true -+ -+ -+ true -+ -+ -+ -+ -+ -+ 0 -+ -+ -+ true -+ -+ -+ -+ true -+ -+ -+ true -+ -+ -+ -+ 30585 -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ false -+ -+ -+ -+ 0 -+ false -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ false -+ -+ -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ -+ -+ true -+ -+ -+ -+ true -+ -+ -+ true -+ -+ -+ -+ 30037 -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ -+ -+ true -+ -+ -+ -+ true -+ -+ -+ true -+ -+ -+ -+ 30038 -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ false -+ -+ -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/users/add/?refresh=false) -+ -+ true -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/users/remove/?refresh=false) -+ -+ true -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/users/rename/?refresh=false) -+ -+ true -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/users/switch/?refresh=false) -+ -+ true -+ -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ 0 -+ false -+ -+ -+ -+ 0 -+ false -+ -+ -+ true -+ -+ -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ -+ -+ 0 -+ false -+ -+ -+ -+ -+ -+ 0 -+ 10 -+ -+ 5 -+ 1 -+ 100 -+ -+ -+ false -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ -+ -+ 0 -+ en-US -+ -+ -+ false -+ -+ -+ -+ 30523 -+ -+ -+ -+ 0 -+ US -+ -+ -+ false -+ -+ -+ -+ 30550 -+ -+ -+ -+ 0 -+ -+ -+ true -+ -+ -+ -+ true -+ -+ -+ -+ 30651 -+ -+ -+ -+ 0 -+ 500 -+ -+ 1 -+ 1 -+ 1000 -+ -+ -+ -+ true -+ -+ -+ -+ false -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ 0.0.0.0 -+ -+ -+ true -+ -+ -+ -+ 30643 -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/config/listen_ip/) -+ -+ true -+ -+ -+ true -+ -+ -+ -+ 0 -+ 50152 -+ -+ -+ true -+ -+ -+ -+ 30619 -+ -+ -+ -+ 0 -+ -+ -+ true -+ -+ -+ -+ true -+ -+ -+ -+ 30629 -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/show_client_ip/) -+ -+ true -+ -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ -+ -+ true -+ -+ -+ 30201 -+ -+ -+ -+ 0 -+ -+ -+ true -+ -+ -+ 30202 -+ -+ -+ -+ 0 -+ -+ -+ true -+ -+ -+ 30203 -+ -+ -+ -+ 0 -+ true -+ -+ -+ -+ -+ -+ 0 -+ false -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/maintain/function_cache/clear/) -+ -+ true -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/maintain/data_cache/clear/) -+ -+ true -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/maintain/search_cache/clear/) -+ -+ true -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/maintain/playback_history/clear/) -+ -+ true -+ -+ -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/maintain/function_cache/delete/) -+ -+ true -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/maintain/data_cache/delete/) -+ -+ true -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/maintain/search_cache/delete/) -+ -+ true -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/maintain/playback_history/delete/) -+ -+ true -+ -+ -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/maintain/access_manager/reset/) -+ -+ true -+ -+ -+ true -+ -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/maintain/settings_xml/delete/) -+ -+ true -+ -+ -+ true -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/maintain/api_keys/delete/) -+ -+ true -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/maintain/access_manager/delete/) -+ -+ true -+ -+ -+ -+ -+ 0 -+ RunPlugin(plugin://plugin.video.youtube/maintain/temp_files/delete/) -+ -+ true -+ -+ -+ -+ -+ 0 -+ -+ -+ true -+ -+ -+ -+ false -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ -+ -+ true -+ -+ -+ -+ false -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ false -+ -+ -+ -+ -+ -+ -+ -+ 0 -+ -+ -+ true -+ -+ -+ -+ false -+ -+ -+ -+ -+ -+ -+ -+ -+
-
--- -2.33.0.windows.2 -