From 5644af655fef88cb550abc760037e8fe630c40da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elan=20Ruusam=C3=A4e?= Date: Sat, 13 Jan 2024 15:18:33 +0200 Subject: [PATCH 1/2] Add RichMarkup mixin --- plextraktsync/mixin/RichMarkup.py | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 plextraktsync/mixin/RichMarkup.py diff --git a/plextraktsync/mixin/RichMarkup.py b/plextraktsync/mixin/RichMarkup.py new file mode 100644 index 0000000000..26a6b9c5c6 --- /dev/null +++ b/plextraktsync/mixin/RichMarkup.py @@ -0,0 +1,10 @@ +from rich.markup import escape + + +class RichMarkup: + def markup_link(self, link: str, title: str): + return f"[link={link}]{self.markup_title(title)}[/]" + + @staticmethod + def markup_title(title: str): + return f"[green]{escape(title)}[/]" From 55ecfd5d13898c0bf94888b1a7b63053102ded1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elan=20Ruusam=C3=A4e?= Date: Sat, 13 Jan 2024 15:23:27 +0200 Subject: [PATCH 2/2] Use RichMarkup mixin --- plextraktsync/media.py | 6 +++--- plextraktsync/plex/PlexGuid.py | 7 +++---- plextraktsync/plex/PlexLibraryItem.py | 8 ++++---- plextraktsync/plex/PlexLibrarySection.py | 6 +++--- plextraktsync/plex/PlexPlaylist.py | 9 ++++----- 5 files changed, 17 insertions(+), 19 deletions(-) diff --git a/plextraktsync/media.py b/plextraktsync/media.py index c2e40034bf..a233fb7a59 100644 --- a/plextraktsync/media.py +++ b/plextraktsync/media.py @@ -5,11 +5,11 @@ from plexapi.exceptions import PlexApiException from requests import RequestException -from rich.markup import escape from trakt.errors import TraktException from trakt.tv import TVShow from plextraktsync.factory import logger +from plextraktsync.mixin.RichMarkup import RichMarkup from plextraktsync.trakt.TraktLookup import TraktLookup if TYPE_CHECKING: @@ -21,7 +21,7 @@ from plextraktsync.trakt.types import TraktMedia -class Media: +class Media(RichMarkup): """ Class containing Plex and Trakt media items (Movie, Episode) """ @@ -55,7 +55,7 @@ def title_link(self): if self.plex: return self.plex.title_link - return f"[green]{escape(self.title)}[/]" + return self.markup_title(self.title) @cached_property def media_type(self): diff --git a/plextraktsync/plex/PlexGuid.py b/plextraktsync/plex/PlexGuid.py index 915562ccaf..b1205a03a4 100644 --- a/plextraktsync/plex/PlexGuid.py +++ b/plextraktsync/plex/PlexGuid.py @@ -3,15 +3,14 @@ from functools import cached_property from typing import TYPE_CHECKING -from rich.markup import escape - from plextraktsync.factory import factory +from plextraktsync.mixin.RichMarkup import RichMarkup if TYPE_CHECKING: from plextraktsync.plex.PlexLibraryItem import PlexLibraryItem -class PlexGuid: +class PlexGuid(RichMarkup): def __init__(self, guid: str, type: str, pm: PlexLibraryItem | None = None): self.guid = guid self.type = type @@ -79,7 +78,7 @@ def title_link(self): if self.pm: return self.pm.title_link - return f"[green]{escape(str(self))}[/]" + return self.markup_title(str(self)) def __str__(self): return f"" diff --git a/plextraktsync/plex/PlexLibraryItem.py b/plextraktsync/plex/PlexLibraryItem.py index 5540020f58..e365ef5bf3 100644 --- a/plextraktsync/plex/PlexLibraryItem.py +++ b/plextraktsync/plex/PlexLibraryItem.py @@ -4,11 +4,11 @@ from functools import cached_property from typing import TYPE_CHECKING -from rich.markup import escape from trakt.utils import timestamp from plextraktsync.decorators.retry import retry from plextraktsync.factory import factory +from plextraktsync.mixin.RichMarkup import RichMarkup from plextraktsync.plex.PlexGuid import PlexGuid if TYPE_CHECKING: @@ -18,7 +18,7 @@ from plextraktsync.plex.types import PlexMedia -class PlexLibraryItem: +class PlexLibraryItem(RichMarkup): def __init__(self, item: PlexMedia, plex: PlexApi = None): self.item = item self.plex = plex @@ -349,9 +349,9 @@ def title_link(self): if self.plex: link = self.plex.media_url(self) - return f"[link={link}][green]{escape(self.title)}[/][/]" + return self.markup_link(link, self.title) - return f"[green]{escape(self.title)}[/]" + return self.markup_title(self.title) def __repr__(self): try: diff --git a/plextraktsync/plex/PlexLibrarySection.py b/plextraktsync/plex/PlexLibrarySection.py index 69e785278a..7d9dcbc9f2 100644 --- a/plextraktsync/plex/PlexLibrarySection.py +++ b/plextraktsync/plex/PlexLibrarySection.py @@ -4,9 +4,9 @@ from plexapi import X_PLEX_CONTAINER_SIZE from plexapi.exceptions import NotFound -from rich.markup import escape from plextraktsync.decorators.retry import retry +from plextraktsync.mixin.RichMarkup import RichMarkup from plextraktsync.plex.PlexLibraryItem import PlexLibraryItem if TYPE_CHECKING: @@ -16,7 +16,7 @@ from plextraktsync.plex.types import PlexMedia -class PlexLibrarySection: +class PlexLibrarySection(RichMarkup): def __init__(self, section: ShowSection | MovieSection, plex: PlexApi = None): self.section = section self.plex = plex @@ -44,7 +44,7 @@ def link(self): @property def title_link(self): - return f"[link={self.link}][green]{escape(self.title)}[/][/]" + return self.markup_link(self.link, self.title) def find_by_title(self, name: str): try: diff --git a/plextraktsync/plex/PlexPlaylist.py b/plextraktsync/plex/PlexPlaylist.py index 62789f8b86..15fd891d6d 100644 --- a/plextraktsync/plex/PlexPlaylist.py +++ b/plextraktsync/plex/PlexPlaylist.py @@ -3,11 +3,10 @@ from functools import cached_property from typing import TYPE_CHECKING -from rich.markup import escape - from plextraktsync.decorators.flatten import flatten_dict from plextraktsync.factory import logging from plextraktsync.media import Media +from plextraktsync.mixin.RichMarkup import RichMarkup if TYPE_CHECKING: from plexapi.playlist import Playlist @@ -16,7 +15,7 @@ from plextraktsync.plex.types import PlexMedia -class PlexPlaylist: +class PlexPlaylist(RichMarkup): def __init__(self, server: PlexServer, name: str): self.server = server self.name = name @@ -90,9 +89,9 @@ def title_link(self): if self.playlist is not None: link = self.playlist._getWebURL() - return f"[link={link}][green]{escape(self.name)}[/][/]" + return self.markup_link(link, self.name) - return f"[green]{escape(self.name)}[/]" + return self.markup_title(self.name) @staticmethod def same_list(list_a: list[PlexMedia], list_b: list[PlexMedia]) -> bool: