plex-tui 0.4.1__tar.gz → 0.4.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {plex_tui-0.4.1 → plex_tui-0.4.2}/CHANGELOG.md +5 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/PKG-INFO +1 -1
- {plex_tui-0.4.1 → plex_tui-0.4.2}/packaging/aur/.SRCINFO +3 -3
- {plex_tui-0.4.1 → plex_tui-0.4.2}/packaging/aur/PKGBUILD +2 -2
- {plex_tui-0.4.1 → plex_tui-0.4.2}/pyproject.toml +1 -1
- {plex_tui-0.4.1 → plex_tui-0.4.2}/src/plextui/__init__.py +1 -1
- {plex_tui-0.4.1 → plex_tui-0.4.2}/src/plextui/plex_service.py +7 -1
- {plex_tui-0.4.1 → plex_tui-0.4.2}/tests/test_plex_service.py +48 -1
- {plex_tui-0.4.1 → plex_tui-0.4.2}/.github/workflows/aur.yml +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/.github/workflows/bump.yml +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/.github/workflows/ci.yml +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/.github/workflows/post-release-aur.yml +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/.github/workflows/post-release-homebrew.yml +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/.github/workflows/publish-aur.yml +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/.github/workflows/publish-pypi.yml +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/.github/workflows/publish-testpypi.yml +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/.gitignore +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/AGENTS.md +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/LICENSE +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/Makefile +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/PACKAGING.md +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/README.md +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/RELEASE.md +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/ROADMAP.md +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/config.example.toml +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/docs/assets/grid-view.png +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/docs/assets/list-view.png +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/docs/plex-integration-research.md +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/packaging/aur/README.md +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/packaging/homebrew/README.md +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/scripts/check_release.py +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/scripts/stage_release.py +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/scripts/update_aur_package.py +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/scripts/update_homebrew_formula.py +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/src/plextui/__main__.py +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/src/plextui/app.py +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/src/plextui/artwork.py +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/src/plextui/auth.py +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/src/plextui/config.py +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/src/plextui/models.py +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/src/plextui/player.py +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/src/plextui/smoke.py +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/tests/test_app_helpers.py +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/tests/test_app_navigation.py +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/tests/test_artwork.py +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/tests/test_auth.py +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/tests/test_cli.py +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/tests/test_config.py +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/tests/test_player.py +0 -0
- {plex_tui-0.4.1 → plex_tui-0.4.2}/tests/test_release_checks.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
pkgbase = plex-tui
|
|
2
2
|
pkgdesc = Standalone Plex terminal UI with mpv playback
|
|
3
|
-
pkgver = 0.4.
|
|
3
|
+
pkgver = 0.4.1
|
|
4
4
|
pkgrel = 1
|
|
5
5
|
url = https://github.com/so1omon563/plex-tui
|
|
6
6
|
arch = any
|
|
@@ -16,7 +16,7 @@ pkgbase = plex-tui
|
|
|
16
16
|
depends = python-plexapi
|
|
17
17
|
depends = python-rich
|
|
18
18
|
depends = python-textual
|
|
19
|
-
source = plex-tui-0.4.
|
|
20
|
-
sha256sums =
|
|
19
|
+
source = plex-tui-0.4.1.tar.gz::https://github.com/so1omon563/plex-tui/archive/refs/tags/v0.4.1.tar.gz
|
|
20
|
+
sha256sums = 2271c6413ec204ba1250b812e6b9e98af37afaeb44006d5c17fb0f82cf419282
|
|
21
21
|
|
|
22
22
|
pkgname = plex-tui
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Maintainer: so1omon
|
|
2
2
|
pkgname=plex-tui
|
|
3
|
-
pkgver=0.4.
|
|
3
|
+
pkgver=0.4.1
|
|
4
4
|
pkgrel=1
|
|
5
5
|
pkgdesc="Standalone Plex terminal UI with mpv playback"
|
|
6
6
|
arch=("any")
|
|
@@ -22,7 +22,7 @@ makedepends=(
|
|
|
22
22
|
"python-wheel"
|
|
23
23
|
)
|
|
24
24
|
source=("$pkgname-$pkgver.tar.gz::$url/archive/refs/tags/v$pkgver.tar.gz")
|
|
25
|
-
sha256sums=("
|
|
25
|
+
sha256sums=("2271c6413ec204ba1250b812e6b9e98af37afaeb44006d5c17fb0f82cf419282")
|
|
26
26
|
|
|
27
27
|
build() {
|
|
28
28
|
cd "$pkgname-$pkgver"
|
|
@@ -226,7 +226,13 @@ def media_details(item: MediaItem) -> MediaDetails:
|
|
|
226
226
|
|
|
227
227
|
|
|
228
228
|
def artwork_path(raw: Any) -> str:
|
|
229
|
-
|
|
229
|
+
kind = str(getattr(raw, "TYPE", raw.__class__.__name__)).lower()
|
|
230
|
+
attrs = (
|
|
231
|
+
("thumb", "parentThumb", "grandparentThumb", "art")
|
|
232
|
+
if kind in {"show", "season", "episode"}
|
|
233
|
+
else ("grandparentThumb", "parentThumb", "thumb", "art")
|
|
234
|
+
)
|
|
235
|
+
for attr in attrs:
|
|
230
236
|
value = getattr(raw, attr, None)
|
|
231
237
|
if value:
|
|
232
238
|
return str(value)
|
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from plextui.models import LibraryItem, MediaItem
|
|
4
|
-
from plextui.plex_service import
|
|
4
|
+
from plextui.plex_service import (
|
|
5
|
+
PlexService,
|
|
6
|
+
artwork_path,
|
|
7
|
+
kind_label,
|
|
8
|
+
media_details,
|
|
9
|
+
progress_label,
|
|
10
|
+
row_progress_marker,
|
|
11
|
+
to_media_item,
|
|
12
|
+
watched_state,
|
|
13
|
+
)
|
|
5
14
|
|
|
6
15
|
|
|
7
16
|
class RawItem:
|
|
@@ -62,6 +71,18 @@ class DetailedRawItem(RawItem):
|
|
|
62
71
|
return [Part()]
|
|
63
72
|
|
|
64
73
|
|
|
74
|
+
class TvEpisodeRawItem(DetailedRawItem):
|
|
75
|
+
TYPE = "episode"
|
|
76
|
+
title = "Episode"
|
|
77
|
+
thumb = "/library/metadata/episode/thumb"
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
class TvSeasonRawItem(DetailedRawItem):
|
|
81
|
+
TYPE = "season"
|
|
82
|
+
title = "Season 1"
|
|
83
|
+
thumb = "/library/metadata/season-own/thumb"
|
|
84
|
+
|
|
85
|
+
|
|
65
86
|
class RawPage(list):
|
|
66
87
|
totalSize = 250
|
|
67
88
|
|
|
@@ -219,6 +240,32 @@ def test_media_details_include_audio_and_subtitle_locations():
|
|
|
219
240
|
assert details.artwork_path == "/library/metadata/show/thumb"
|
|
220
241
|
|
|
221
242
|
|
|
243
|
+
def test_tv_episode_artwork_prefers_episode_still():
|
|
244
|
+
assert artwork_path(TvEpisodeRawItem()) == "/library/metadata/episode/thumb"
|
|
245
|
+
assert to_media_item(TvEpisodeRawItem()).artwork_path == "/library/metadata/episode/thumb"
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
def test_tv_season_artwork_prefers_season_poster():
|
|
249
|
+
assert artwork_path(TvSeasonRawItem()) == "/library/metadata/season-own/thumb"
|
|
250
|
+
assert to_media_item(TvSeasonRawItem()).artwork_path == "/library/metadata/season-own/thumb"
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
def test_tv_artwork_falls_back_to_parent_then_show_art():
|
|
254
|
+
class EpisodeWithoutStill(TvEpisodeRawItem):
|
|
255
|
+
thumb = ""
|
|
256
|
+
|
|
257
|
+
class SeasonWithoutPoster(TvSeasonRawItem):
|
|
258
|
+
thumb = ""
|
|
259
|
+
|
|
260
|
+
class EpisodeWithoutSeasonArt(TvEpisodeRawItem):
|
|
261
|
+
thumb = ""
|
|
262
|
+
parentThumb = ""
|
|
263
|
+
|
|
264
|
+
assert artwork_path(EpisodeWithoutStill()) == "/library/metadata/season/thumb"
|
|
265
|
+
assert artwork_path(SeasonWithoutPoster()) == "/library/metadata/season/thumb"
|
|
266
|
+
assert artwork_path(EpisodeWithoutSeasonArt()) == "/library/metadata/show/thumb"
|
|
267
|
+
|
|
268
|
+
|
|
222
269
|
def test_kind_label_humanizes_known_and_unknown_media_types():
|
|
223
270
|
assert kind_label("movie") == "Movie"
|
|
224
271
|
assert kind_label("show") == "TV Show"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|