From 571bbb2db114fcc6868ef9287223ccc3dee39139 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Tue, 1 Nov 2022 16:37:36 +0000 Subject: [PATCH 01/21] Fallback season thumb to show thumb in get_metadata --- plexpy/pmsconnect.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plexpy/pmsconnect.py b/plexpy/pmsconnect.py index 9353b716..11142873 100644 --- a/plexpy/pmsconnect.py +++ b/plexpy/pmsconnect.py @@ -924,7 +924,7 @@ class PmsConnect(object): 'parent_year': show_details.get('year', ''), 'grandparent_year': helpers.get_xml_attr(metadata_main, 'grandparentYear'), 'thumb': helpers.get_xml_attr(metadata_main, 'thumb'), - 'parent_thumb': helpers.get_xml_attr(metadata_main, 'parentThumb'), + 'parent_thumb': helpers.get_xml_attr(metadata_main, 'parentThumb') or show_details.get('thumb'), 'grandparent_thumb': helpers.get_xml_attr(metadata_main, 'grandparentThumb'), 'art': helpers.get_xml_attr(metadata_main, 'art'), 'banner': show_details.get('banner', ''), @@ -1003,7 +1003,7 @@ class PmsConnect(object): 'parent_year': season_details.get('year', ''), 'grandparent_year': show_details.get('year', ''), 'thumb': helpers.get_xml_attr(metadata_main, 'thumb'), - 'parent_thumb': parent_thumb, + 'parent_thumb': parent_thumb or show_details.get('thumb'), 'grandparent_thumb': helpers.get_xml_attr(metadata_main, 'grandparentThumb'), 'art': helpers.get_xml_attr(metadata_main, 'art'), 'banner': show_details.get('banner', ''), From 5975b59c93c8cc1526c35b167670fe5d23c0d9f6 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sat, 5 Nov 2022 20:03:48 +0000 Subject: [PATCH 02/21] Add user_thumb to get_history response --- plexpy/datafactory.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/plexpy/datafactory.py b/plexpy/datafactory.py index 7027ae81..8a15ef7d 100644 --- a/plexpy/datafactory.py +++ b/plexpy/datafactory.py @@ -34,6 +34,7 @@ if plexpy.PYTHON2: import logger import pmsconnect import session + import users else: from plexpy import libraries from plexpy import common @@ -43,6 +44,7 @@ else: from plexpy import logger from plexpy import pmsconnect from plexpy import session + from plexpy import users # Temporarily store update_metadata row ids in memory to prevent rating_key collisions _UPDATE_METADATA_IDS = { @@ -103,6 +105,8 @@ class DataFactory(object): 'session_history.user', '(CASE WHEN users.friendly_name IS NULL OR TRIM(users.friendly_name) = "" \ THEN users.username ELSE users.friendly_name END) AS friendly_name', + 'users.thumb AS user_thumb', + 'users.custom_avatar_url AS custom_thumb', 'platform', 'product', 'player', @@ -161,6 +165,8 @@ class DataFactory(object): 'user', '(CASE WHEN friendly_name IS NULL OR TRIM(friendly_name) = "" \ THEN user ELSE friendly_name END) AS friendly_name', + 'NULL AS user_thumb', + 'NULL AS custom_thumb', 'platform', 'product', 'player', @@ -244,7 +250,18 @@ class DataFactory(object): } rows = [] + + users_lookup = {} + for item in history: + if item['state']: + # Get user thumb from database for current activity + if not users_lookup: + # Cache user lookup + users_lookup = {u['user_id']: u['thumb'] for u in users.Users().get_users()} + + item['user_thumb'] = users_lookup.get(item['user_id']) + filter_duration += int(item['duration']) if item['media_type'] == 'episode' and item['parent_thumb']: @@ -267,6 +284,13 @@ class DataFactory(object): # Rename Mystery platform names platform = common.PLATFORM_NAME_OVERRIDES.get(item['platform'], item['platform']) + if item['custom_thumb'] and item['custom_thumb'] != item['user_thumb']: + user_thumb = item['custom_thumb'] + elif item['user_thumb']: + user_thumb = item['user_thumb'] + else: + user_thumb = common.DEFAULT_USER_THUMB + row = {'reference_id': item['reference_id'], 'row_id': item['row_id'], 'id': item['row_id'], @@ -278,6 +302,7 @@ class DataFactory(object): 'user_id': item['user_id'], 'user': item['user'], 'friendly_name': item['friendly_name'], + 'user_thumb': user_thumb, 'platform': platform, 'product': item['product'], 'player': item['player'], From 4b97382b7c8a6611ef10741118fa475139c220e9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Nov 2022 09:30:19 -0800 Subject: [PATCH 03/21] Bump actions/stale from 5 to 6 (#1844) Bumps [actions/stale](https://github.com/actions/stale) from 5 to 6. - [Release notes](https://github.com/actions/stale/releases) - [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/stale/compare/v5...v6) --- updated-dependencies: - dependency-name: actions/stale dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> [skip ci] --- .github/workflows/issues-stale.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/issues-stale.yml b/.github/workflows/issues-stale.yml index 4605bcec..75c1e08f 100644 --- a/.github/workflows/issues-stale.yml +++ b/.github/workflows/issues-stale.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Stale - uses: actions/stale@v5 + uses: actions/stale@v6 with: stale-issue-message: > This issue is stale because it has been open for 30 days with no activity. @@ -30,7 +30,7 @@ jobs: days-before-close: 5 - name: Invalid Template - uses: actions/stale@v5 + uses: actions/stale@v6 with: stale-issue-message: > Invalid issues template. From 1977ca7db2b48bcc24be13019e618ce74ed471b9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Nov 2022 09:30:30 -0800 Subject: [PATCH 04/21] Bump actions/checkout from 3.0.2 to 3.1.0 (#1858) Bumps [actions/checkout](https://github.com/actions/checkout) from 3.0.2 to 3.1.0. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3.0.2...v3.1.0) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> [skip ci] --- .github/workflows/publish-docker.yml | 2 +- .github/workflows/publish-installers.yml | 4 ++-- .github/workflows/publish-snap.yml | 2 +- .github/workflows/pull-requests.yml | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/publish-docker.yml b/.github/workflows/publish-docker.yml index 773f730f..313ac340 100644 --- a/.github/workflows/publish-docker.yml +++ b/.github/workflows/publish-docker.yml @@ -13,7 +13,7 @@ jobs: if: ${{ !contains(github.event.head_commit.message, '[skip ci]') }} steps: - name: Checkout Code - uses: actions/checkout@v3.0.2 + uses: actions/checkout@v3.1.0 - name: Prepare id: prepare diff --git a/.github/workflows/publish-installers.yml b/.github/workflows/publish-installers.yml index ad590098..372e2591 100644 --- a/.github/workflows/publish-installers.yml +++ b/.github/workflows/publish-installers.yml @@ -24,7 +24,7 @@ jobs: steps: - name: Checkout Code - uses: actions/checkout@v3.0.2 + uses: actions/checkout@v3.1.0 - name: Set Release Version id: get_version @@ -103,7 +103,7 @@ jobs: uses: technote-space/workflow-conclusion-action@v3.0 - name: Checkout Code - uses: actions/checkout@v3.0.2 + uses: actions/checkout@v3.1.0 - name: Set Release Version id: get_version diff --git a/.github/workflows/publish-snap.yml b/.github/workflows/publish-snap.yml index 27682148..81a4728f 100644 --- a/.github/workflows/publish-snap.yml +++ b/.github/workflows/publish-snap.yml @@ -20,7 +20,7 @@ jobs: - armhf steps: - name: Checkout Code - uses: actions/checkout@v3.0.2 + uses: actions/checkout@v3.1.0 - name: Prepare id: prepare diff --git a/.github/workflows/pull-requests.yml b/.github/workflows/pull-requests.yml index 08f92507..ff9a0839 100644 --- a/.github/workflows/pull-requests.yml +++ b/.github/workflows/pull-requests.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout Code - uses: actions/checkout@v3.0.2 + uses: actions/checkout@v3.1.0 - name: Comment on Pull Request uses: mshick/add-pr-comment@v1 From a1b6c35bd2630ce280515c8419e30a452cac7feb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Nov 2022 09:30:40 -0800 Subject: [PATCH 05/21] Bump actions/setup-python from 4.2.0 to 4.3.0 (#1859) Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4.2.0 to 4.3.0. - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/v4.2.0...v4.3.0) --- updated-dependencies: - dependency-name: actions/setup-python dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> [skip ci] --- .github/workflows/publish-installers.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish-installers.yml b/.github/workflows/publish-installers.yml index 372e2591..00c5f722 100644 --- a/.github/workflows/publish-installers.yml +++ b/.github/workflows/publish-installers.yml @@ -52,7 +52,7 @@ jobs: echo $GITHUB_SHA > version.txt - name: Set Up Python - uses: actions/setup-python@v4.2.0 + uses: actions/setup-python@v4.3.0 with: python-version: '3.9' cache: pip From c53566225cc03068161f66d13c72f6c41e250776 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Nov 2022 09:30:51 -0800 Subject: [PATCH 06/21] Bump actions/cache from 3.0.8 to 3.0.11 (#1864) Bumps [actions/cache](https://github.com/actions/cache) from 3.0.8 to 3.0.11. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/v3.0.8...v3.0.11) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> [skip ci] --- .github/workflows/publish-docker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish-docker.yml b/.github/workflows/publish-docker.yml index 313ac340..5f95cd9d 100644 --- a/.github/workflows/publish-docker.yml +++ b/.github/workflows/publish-docker.yml @@ -47,7 +47,7 @@ jobs: version: latest - name: Cache Docker Layers - uses: actions/cache@v3.0.8 + uses: actions/cache@v3.0.11 with: path: /tmp/.buildx-cache key: ${{ runner.os }}-buildx-${{ github.sha }} From ed53d66aa71ff4f712da48aa2e6aed01a4454449 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 18 Sep 2022 15:30:53 -0700 Subject: [PATCH 07/21] Launch browser with IPv6 http_host --- plexpy/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plexpy/__init__.py b/plexpy/__init__.py index 6b10446b..e4f64b45 100644 --- a/plexpy/__init__.py +++ b/plexpy/__init__.py @@ -429,7 +429,7 @@ def daemonize(): def launch_browser(host, port, root): if not no_browser: - if host == '0.0.0.0': + if host in ('0.0.0.0', '::'): host = 'localhost' if CONFIG.ENABLE_HTTPS: From 894eaf0365d36aa80c6e8ee6ac647c853a001d33 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Sun, 18 Sep 2022 15:34:11 -0700 Subject: [PATCH 08/21] Check IPv6 HTTP host when retrieving app URL --- data/interfaces/default/mobile_devices_table.html | 4 ++-- plexpy/helpers.py | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/data/interfaces/default/mobile_devices_table.html b/data/interfaces/default/mobile_devices_table.html index 35c873bf..328e40e4 100644 --- a/data/interfaces/default/mobile_devices_table.html +++ b/data/interfaces/default/mobile_devices_table.html @@ -58,7 +58,7 @@ DOCUMENTATION :: END getPlexPyURL = function () { var deferred = $.Deferred(); - if (location.hostname !== "localhost" && location.hostname !== "127.0.0.1") { + if (location.hostname !== "localhost" && location.hostname !== "127.0.0.1" && location.hostname !== "[::1]") { deferred.resolve(location.href.split('/settings')[0]); } else { $.get('get_plexpy_url').then(function (url) { @@ -74,7 +74,7 @@ DOCUMENTATION :: END var hostname = parser.hostname; var protocol = parser.protocol; - if (hostname === '127.0.0.1' || hostname === 'localhost') { + if (hostname === 'localhost' || hostname === '127.0.0.1' || hostname === '[::1]') { $('#api_qr_localhost').toggle(true); $('#api_qr_private').toggle(false); } else { diff --git a/plexpy/helpers.py b/plexpy/helpers.py index d5ef887f..da5a5df5 100644 --- a/plexpy/helpers.py +++ b/plexpy/helpers.py @@ -1191,9 +1191,10 @@ def get_plexpy_url(hostname=None): else: scheme = 'http' - if hostname is None and plexpy.CONFIG.HTTP_HOST == '0.0.0.0': + if hostname is None and plexpy.CONFIG.HTTP_HOST in ('0.0.0.0', '::'): import socket try: + # Only returns IPv4 address s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) s.connect(('', 0)) @@ -1206,7 +1207,7 @@ def get_plexpy_url(hostname=None): if not hostname: hostname = 'localhost' - elif hostname == 'localhost' and plexpy.CONFIG.HTTP_HOST != '0.0.0.0': + elif hostname == 'localhost' and plexpy.CONFIG.HTTP_HOST not in ('0.0.0.0', '::'): hostname = plexpy.CONFIG.HTTP_HOST else: hostname = hostname or plexpy.CONFIG.HTTP_HOST From b74a1a3c327aa0e80f6c7b3c370e4295b1ba439d Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 7 Nov 2022 10:39:39 -0800 Subject: [PATCH 09/21] Separate stdout and stderr console logging * Closes #1874 --- plexpy/logger.py | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/plexpy/logger.py b/plexpy/logger.py index 953073c3..9f44df95 100644 --- a/plexpy/logger.py +++ b/plexpy/logger.py @@ -85,6 +85,16 @@ def filter_usernames(new_users=None): _FILTER_USERNAMES = sorted(_FILTER_USERNAMES, key=len, reverse=True) +class LogLevelFilter(logging.Filter): + def __init__(self, max_level): + super(LogLevelFilter, self).__init__() + + self.max_level = max_level + + def filter(self, record): + return record.levelno <= self.max_level + + class NoThreadFilter(logging.Filter): """ Log filter for the current thread @@ -330,12 +340,20 @@ def initLogger(console=False, log_dir=False, verbose=False): # Setup console logger if console: console_formatter = logging.Formatter('%(asctime)s - %(levelname)s :: %(threadName)s : %(message)s', '%Y-%m-%d %H:%M:%S') - console_handler = logging.StreamHandler() - console_handler.setFormatter(console_formatter) - console_handler.setLevel(logging.DEBUG) - logger.addHandler(console_handler) - cherrypy.log.error_log.addHandler(console_handler) + stdout_handler = logging.StreamHandler(sys.stdout) + stdout_handler.setFormatter(console_formatter) + stdout_handler.setLevel(logging.DEBUG) + stdout_handler.addFilter(LogLevelFilter(logging.INFO)) + + stderr_handler = logging.StreamHandler(sys.stderr) + stderr_handler.setFormatter(console_formatter) + stderr_handler.setLevel(logging.WARNING) + + logger.addHandler(stdout_handler) + logger.addHandler(stderr_handler) + cherrypy.log.error_log.addHandler(stdout_handler) + cherrypy.log.error_log.addHandler(stderr_handler) # Add filters to log handlers # Only add filters after the config file has been initialized From a3ad40122d0eee52cf0029ddb798d85bf3a6b326 Mon Sep 17 00:00:00 2001 From: JonnyWong16 <9099342+JonnyWong16@users.noreply.github.com> Date: Mon, 7 Nov 2022 11:26:13 -0800 Subject: [PATCH 10/21] Add months timeframe for newsletters * Closes #1876 --- data/interfaces/default/newsletter_config.html | 3 ++- plexpy/newsletters.py | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/data/interfaces/default/newsletter_config.html b/data/interfaces/default/newsletter_config.html index 003594a7..dc6de294 100644 --- a/data/interfaces/default/newsletter_config.html +++ b/data/interfaces/default/newsletter_config.html @@ -56,11 +56,12 @@
-
+