diff --git a/plextraktsync/config/HttpCacheConfig.py b/plextraktsync/config/HttpCacheConfig.py index 07a9a07929..1abac115c6 100644 --- a/plextraktsync/config/HttpCacheConfig.py +++ b/plextraktsync/config/HttpCacheConfig.py @@ -104,7 +104,7 @@ class HttpCacheConfig: # system_account "*/accounts": DO_NOT_CACHE, # version, updated_at - # "*/": DO_NOT_CACHE, + "*.plex.direct:*/": DO_NOT_CACHE, } @property diff --git a/plextraktsync/config/PlexServerConfig.py b/plextraktsync/config/PlexServerConfig.py index f76c4f2ca8..e586c89ad1 100644 --- a/plextraktsync/config/PlexServerConfig.py +++ b/plextraktsync/config/PlexServerConfig.py @@ -16,6 +16,15 @@ class PlexServerConfig: id: str = None config: dict = None + @property + def base_urls(self): + """ + Returns unique host:port of all urls + """ + from urllib.parse import urlparse + + return {urlparse(url).netloc for url in self.urls} + def asdict(self): data = asdict(self) del data["name"] diff --git a/plextraktsync/plex/PlexServerConnection.py b/plextraktsync/plex/PlexServerConnection.py index f7ff7f9486..8fcccaea65 100644 --- a/plextraktsync/plex/PlexServerConnection.py +++ b/plextraktsync/plex/PlexServerConnection.py @@ -7,7 +7,6 @@ from requests.exceptions import ConnectionError, SSLError from plextraktsync.config import PLEX_PLATFORM -from plextraktsync.decorators.nocache import nocache from plextraktsync.factory import Factory, logging @@ -29,7 +28,6 @@ def config(self): def session(self): return self.factory.session - @nocache def connect(self, urls: list[str], token: str): plexapi.X_PLEX_PLATFORM = PLEX_PLATFORM plexapi.TIMEOUT = self.timeout diff --git a/plextraktsync/util/Factory.py b/plextraktsync/util/Factory.py index 3d6795e146..15845cde45 100644 --- a/plextraktsync/util/Factory.py +++ b/plextraktsync/util/Factory.py @@ -125,7 +125,27 @@ def urls_expire_after(self): "*": DO_NOT_CACHE, } - return self.config.http_cache.urls_expire_after + def patch_plex_urls(patterns, base_urls, glob="*.plex.direct:*"): + """ + Replace plex.direct urls from patterns to current server urls + """ + from fnmatch import filter + + for pattern, expire in patterns.items(): + # add original pattern + yield pattern, expire + + # replaced patterns + for url in filter(base_urls, glob): + url = pattern.replace(glob, url) + yield url, expire + + urls_expire_after = dict(patch_plex_urls( + self.config.http_cache.urls_expire_after, + self.server_config.base_urls, + )) + + return urls_expire_after @cached_property def session(self):