Skip to content

Commit e5c68ae

Browse files
Remove Overlay label on poster upload (#29)
* Add kometa integration * Fix pre-commit mdformat of issue_templates
1 parent f1b2d2f commit e5c68ae

7 files changed

Lines changed: 62 additions & 25 deletions

File tree

.pre-commit-config.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ repos:
1414
args:
1515
- --number
1616
- --wrap=keep
17+
exclude: ".github\/ISSUE_TEMPLATE\/.*.md"
1718
- repo: https://github.com/pre-commit/pre-commit-hooks
1819
rev: v5.0.0
1920
hooks:

README.md

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -69,14 +69,14 @@ Pulls Posters, Backdrops and Title Cards.
6969

7070
## Notes
7171

72-
- When running a sync/show/collection/movie it will keep downloading sets until all the needed posters are found.
73-
- **Show:** Poster and Backdrop
74-
- **Season:** Poster
75-
- **Episode:** Title Card
76-
- **Collection:** Poster and Backdrop
77-
- **Movie:** Poster and Backdrop
78-
- To enable support for Collections in Plex, each Collection needs to have a label with its tmdb-id, in the format of `tmdb-<number>`\
79-
If using Kometa, refer to [this comment](https://github.com/Buried-In-Code/Mediux-Posters/issues/12#issuecomment-2622002859) to have Kometa add these labels.
72+
- When running a sync/show/collection/movie it will keep downloading sets until all the needed posters are found.
73+
- **Show:** Poster and Backdrop
74+
- **Season:** Poster
75+
- **Episode:** Title Card
76+
- **Collection:** Poster and Backdrop
77+
- **Movie:** Poster and Backdrop
78+
- To enable support for Collections in Plex, each Collection needs to have a label with its tmdb-id, in the format of `tmdb-<number>`\
79+
If using Kometa, refer to [this comment](https://github.com/Buried-In-Code/Mediux-Posters/issues/12#issuecomment-2622002859) to have Kometa add these labels.
8080

8181
## Settings
8282

@@ -87,6 +87,7 @@ File will be created on first run.
8787

8888
```toml
8989
exclude_usernames = []
90+
kometa_integration = false
9091
only_priority_usernames = false
9192
priority_usernames = []
9293

@@ -105,6 +106,10 @@ token = "<Token>"
105106

106107
A list of usernames whose sets should be ignored when running a sync.
107108

109+
- `kometa_integration`
110+
111+
If enabled, will remove the `Overlay` label from any media Mediux-Posters uploads a poster/backdrop/title-card to.
112+
108113
- `only_priority_usernames`
109114

110115
A boolean flag that limits downloading sets to ones created by the users specified in `priority_usernames`.

mediux_posters/__main__.py

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -90,36 +90,37 @@ def filter_sets(
9090

9191
def update_posters(
9292
mediux_data: dict,
93-
obj: BaseShow | BaseMovie | BaseCollection,
93+
obj: BaseShow | BaseCollection | BaseMovie,
9494
mediux: Mediux,
9595
service: BaseService,
96+
kometa_integration: bool,
9697
abort_on_unknown: bool = False,
9798
debug: bool = False,
9899
) -> None:
99100
if mediux_data.get("show") and isinstance(obj, BaseShow):
100101
mediux.download_show_posters(data=mediux_data, show=obj)
101-
service.upload_posters(obj=obj)
102+
service.upload_posters(obj=obj, kometa_integration=kometa_integration)
102103
for season in obj.seasons:
103-
service.upload_posters(obj=season)
104+
service.upload_posters(obj=season, kometa_integration=kometa_integration)
104105
for episode in season.episodes:
105-
service.upload_posters(obj=episode)
106-
elif mediux_data.get("movie") and isinstance(obj, BaseMovie):
107-
mediux.download_movie_posters(data=mediux_data, movie=obj)
108-
service.upload_posters(obj=obj)
106+
service.upload_posters(obj=episode, kometa_integration=kometa_integration)
109107
elif mediux_data.get("collection") and isinstance(obj, BaseCollection):
110108
mediux.download_collection_posters(data=mediux_data, collection=obj)
111-
service.upload_posters(obj=obj)
109+
service.upload_posters(obj=obj, kometa_integration=kometa_integration)
112110
for movie_data in mediux_data.get("collection", {}).get("movies", []):
113111
if movie := service.get_movie(tmdb_id=int(movie_data.get("id", -1))):
114112
mediux.download_movie_posters(data=mediux_data, movie=movie)
115-
service.upload_posters(obj=movie)
113+
service.upload_posters(obj=movie, kometa_integration=kometa_integration)
116114
else:
117115
LOGGER.warning(
118116
"[%s] Unable to find '%s (%s)'",
119117
type(service).__name__,
120118
movie_data.get("title"),
121119
(movie_data.get("release_date") or "0000")[:4],
122120
)
121+
elif mediux_data.get("movie") and isinstance(obj, BaseMovie):
122+
mediux.download_movie_posters(data=mediux_data, movie=obj)
123+
service.upload_posters(obj=obj, kometa_integration=kometa_integration)
123124
else:
124125
LOGGER.error("Unknown data set: %s", mediux_data)
125126
if debug:
@@ -223,7 +224,12 @@ def sync_posters(
223224
set_data.get("user_created", {}).get("username"),
224225
)
225226
update_posters(
226-
mediux_data=set_data, obj=entry, mediux=mediux, service=service, debug=debug
227+
mediux_data=set_data,
228+
obj=entry,
229+
mediux=mediux,
230+
service=service,
231+
kometa_integration=settings.kometa_integration,
232+
debug=debug,
227233
)
228234
if entry.all_posters_uploaded:
229235
break
@@ -323,7 +329,12 @@ def show_posters(
323329
set_data.get("user_created", {}).get("username"),
324330
)
325331
update_posters(
326-
mediux_data=set_data, obj=obj, mediux=mediux, service=service, debug=debug
332+
mediux_data=set_data,
333+
obj=obj,
334+
mediux=mediux,
335+
service=service,
336+
kometa_integration=settings.kometa_integration,
337+
debug=debug,
327338
)
328339
if obj.all_posters_uploaded:
329340
break
@@ -424,7 +435,12 @@ def collection_posters(
424435
set_data.get("user_created", {}).get("username"),
425436
)
426437
update_posters(
427-
mediux_data=set_data, obj=obj, mediux=mediux, service=service, debug=debug
438+
mediux_data=set_data,
439+
obj=obj,
440+
mediux=mediux,
441+
service=service,
442+
kometa_integration=settings.kometa_integration,
443+
debug=debug,
428444
)
429445
if obj.all_posters_uploaded:
430446
break
@@ -524,7 +540,12 @@ def movie_posters(
524540
set_data.get("user_created", {}).get("username"),
525541
)
526542
update_posters(
527-
mediux_data=set_data, obj=obj, mediux=mediux, service=service, debug=debug
543+
mediux_data=set_data,
544+
obj=obj,
545+
mediux=mediux,
546+
service=service,
547+
kometa_integration=settings.kometa_integration,
548+
debug=debug,
528549
)
529550
if obj.all_posters_uploaded:
530551
break
@@ -597,7 +618,7 @@ def set_posters(
597618
if tmdb_id:
598619
tmdb_id = int(tmdb_id)
599620
with CONSOLE.status(
600-
f"Searching {type(service).__name__} for '{set_data.get('set_name')} [tmdb-{tmdb_id}]'"
621+
f"Searching {type(service).__name__} for '{set_data.get('set_name')} [{tmdb_id}]'"
601622
):
602623
obj = (
603624
service.get_show(tmdb_id=tmdb_id)
@@ -643,6 +664,7 @@ def set_posters(
643664
obj=obj,
644665
mediux=mediux,
645666
service=service,
667+
kometa_integration=settings.kometa_integration,
646668
abort_on_unknown=True,
647669
debug=debug,
648670
)

mediux_posters/services/_base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,4 +143,4 @@ def list_movies(self, skip_libraries: list[str] | None = None) -> list[M]: ...
143143
def get_movie(self, tmdb_id: int) -> M | None: ...
144144

145145
@abstractmethod
146-
def upload_posters(self, obj: T | S | E | M | C) -> None: ...
146+
def upload_posters(self, obj: T | S | E | M | C, kometa_integration: bool) -> None: ...

mediux_posters/services/jellyfin.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,11 @@ def list_collections(self, skip_libraries: list[str] | None = None) -> list: #
234234
def get_collection(self, tmdb_id: int) -> None: # noqa: ARG002
235235
return None
236236

237-
def upload_posters(self, obj: Show | Season | Episode | Movie | None) -> None:
237+
def upload_posters(
238+
self,
239+
obj: Show | Season | Episode | Movie | None,
240+
kometa_integration: bool, # noqa: ARG002
241+
) -> None:
238242
if isinstance(obj, Show | Movie):
239243
options = [
240244
(obj.poster, "poster_uploaded", "Primary"),

mediux_posters/services/plex.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,9 @@ def list_collections(self, skip_libraries: list[str] | None = None) -> list[Coll
182182
def get_collection(self, tmdb_id: int) -> Collection | None:
183183
return self._search(library_type="collection", search_id=tmdb_id)
184184

185-
def upload_posters(self, obj: Show | Season | Episode | Movie | Collection) -> None:
185+
def upload_posters(
186+
self, obj: Show | Season | Episode | Movie | Collection, kometa_integration: bool
187+
) -> None:
186188
if isinstance(obj, Show | Movie | Collection):
187189
options = [
188190
(obj.poster, "poster_uploaded", obj.plex.uploadPoster),
@@ -202,6 +204,8 @@ def upload_posters(self, obj: Show | Season | Episode | Movie | Collection) -> N
202204
try:
203205
func(filepath=str(image_file))
204206
setattr(obj, field, True)
207+
if kometa_integration:
208+
obj.plex.removeLabel("Overlay").reload()
205209
except (ConnectionError, HTTPError, ReadTimeout, BadRequest, NotFound) as err:
206210
LOGGER.error(
207211
"[Plex] Failed to upload %s: %s",

mediux_posters/settings.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ class Settings(BaseModel):
5353
_file: ClassVar[Path] = get_config_root() / "settings.toml"
5454

5555
exclude_usernames: list[str] = Field(default_factory=list)
56+
kometa_integration: bool = False
5657
only_priority_usernames: bool = False
5758
priority_usernames: list[str] = Field(default_factory=list)
5859
jellyfin: Jellyfin = Jellyfin()

0 commit comments

Comments
 (0)