plex-tui 0.3.41__tar.gz → 0.3.43__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.3.41 → plex_tui-0.3.43}/CHANGELOG.md +5 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/PKG-INFO +1 -1
- {plex_tui-0.3.41 → plex_tui-0.3.43}/packaging/aur/.SRCINFO +3 -3
- {plex_tui-0.3.41 → plex_tui-0.3.43}/packaging/aur/PKGBUILD +2 -2
- {plex_tui-0.3.41 → plex_tui-0.3.43}/pyproject.toml +1 -1
- {plex_tui-0.3.41 → plex_tui-0.3.43}/src/plextui/__init__.py +1 -1
- {plex_tui-0.3.41 → plex_tui-0.3.43}/src/plextui/app.py +25 -15
- {plex_tui-0.3.41 → plex_tui-0.3.43}/tests/test_app_helpers.py +23 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/.github/workflows/aur.yml +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/.github/workflows/bump.yml +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/.github/workflows/ci.yml +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/.github/workflows/post-release-aur.yml +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/.github/workflows/post-release-homebrew.yml +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/.github/workflows/publish-aur.yml +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/.github/workflows/publish-pypi.yml +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/.github/workflows/publish-testpypi.yml +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/.gitignore +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/AGENTS.md +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/LICENSE +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/Makefile +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/PACKAGING.md +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/README.md +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/RELEASE.md +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/ROADMAP.md +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/config.example.toml +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/docs/assets/grid-view.png +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/docs/assets/list-view.png +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/docs/plex-integration-research.md +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/packaging/aur/README.md +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/packaging/homebrew/README.md +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/scripts/check_release.py +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/scripts/stage_release.py +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/scripts/update_aur_package.py +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/scripts/update_homebrew_formula.py +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/src/plextui/__main__.py +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/src/plextui/artwork.py +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/src/plextui/auth.py +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/src/plextui/config.py +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/src/plextui/models.py +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/src/plextui/player.py +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/src/plextui/plex_service.py +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/src/plextui/smoke.py +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/tests/test_app_navigation.py +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/tests/test_artwork.py +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/tests/test_auth.py +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/tests/test_cli.py +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/tests/test_config.py +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/tests/test_player.py +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/tests/test_plex_service.py +0 -0
- {plex_tui-0.3.41 → plex_tui-0.3.43}/tests/test_release_checks.py +0 -0
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.3.43 - 2026-06-16
|
|
6
|
+
|
|
7
|
+
- Kept the footer command bar focused on core actions while leaving the full
|
|
8
|
+
keyboard reference discoverable from Help.
|
|
9
|
+
|
|
5
10
|
## 0.3.41 - 2026-06-16
|
|
6
11
|
|
|
7
12
|
- Fixed Plex-transcoded resume playback by passing the resume offset into the
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
pkgbase = plex-tui
|
|
2
2
|
pkgdesc = Standalone Plex terminal UI with mpv playback
|
|
3
|
-
pkgver = 0.3.
|
|
3
|
+
pkgver = 0.3.41
|
|
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.3.
|
|
20
|
-
sha256sums =
|
|
19
|
+
source = plex-tui-0.3.41.tar.gz::https://github.com/so1omon563/plex-tui/archive/refs/tags/v0.3.41.tar.gz
|
|
20
|
+
sha256sums = 9291974a0e9b3e7e1acebf76c2c033bc90dd24c32bec5ea11922377dfa5e5ccb
|
|
21
21
|
|
|
22
22
|
pkgname = plex-tui
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Maintainer: so1omon
|
|
2
2
|
pkgname=plex-tui
|
|
3
|
-
pkgver=0.3.
|
|
3
|
+
pkgver=0.3.41
|
|
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=("9291974a0e9b3e7e1acebf76c2c033bc90dd24c32bec5ea11922377dfa5e5ccb")
|
|
26
26
|
|
|
27
27
|
build() {
|
|
28
28
|
cd "$pkgname-$pkgver"
|
|
@@ -431,29 +431,39 @@ class PlexTuiApp(App[None]):
|
|
|
431
431
|
|
|
432
432
|
BINDINGS = [
|
|
433
433
|
Binding("q", "quit", "Quit"),
|
|
434
|
-
Binding("ctrl+r", "reload", "Reload"),
|
|
434
|
+
Binding("ctrl+r", "reload", "Reload", show=False),
|
|
435
435
|
Binding("/", "focus_search", "Search"),
|
|
436
436
|
Binding("g", "focus_global_search", "Global"),
|
|
437
|
-
Binding("tab", "focus_next", "Next"),
|
|
438
|
-
Binding("shift+tab", "focus_previous", "Prev"),
|
|
437
|
+
Binding("tab", "focus_next", "Next", show=False),
|
|
438
|
+
Binding("shift+tab", "focus_previous", "Prev", show=False),
|
|
439
439
|
Binding("question_mark", "show_help", "Help"),
|
|
440
|
-
Binding("l", "focus_libraries", "Focus libraries"),
|
|
441
|
-
Binding("m", "focus_media", "Focus media list"),
|
|
442
|
-
Binding("d", "focus_details", "Focus details"),
|
|
440
|
+
Binding("l", "focus_libraries", "Focus libraries", show=False),
|
|
441
|
+
Binding("m", "focus_media", "Focus media list", show=False),
|
|
442
|
+
Binding("d", "focus_details", "Focus details", show=False),
|
|
443
443
|
Binding("v", "toggle_media_view", "View"),
|
|
444
|
-
Binding(
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
444
|
+
Binding(
|
|
445
|
+
"left_square_bracket",
|
|
446
|
+
"jump_alpha_previous",
|
|
447
|
+
"Prev letter",
|
|
448
|
+
show=False,
|
|
449
|
+
),
|
|
450
|
+
Binding(
|
|
451
|
+
"right_square_bracket",
|
|
452
|
+
"jump_alpha_next",
|
|
453
|
+
"Next letter",
|
|
454
|
+
show=False,
|
|
455
|
+
),
|
|
456
|
+
Binding("left", "grid_left", "Left", show=False),
|
|
457
|
+
Binding("right", "grid_right", "Right", show=False),
|
|
448
458
|
Binding("comma", "show_settings", "Settings"),
|
|
449
459
|
Binding("escape", "back_or_clear", "Back"),
|
|
450
460
|
Binding("p", "play_selected", "Play"),
|
|
451
461
|
Binding("r", "resume_selected", "Resume"),
|
|
452
|
-
Binding("a", "audio_picker", "Audio"),
|
|
453
|
-
Binding("s", "subtitle_picker", "Subtitles"),
|
|
454
|
-
Binding("A", "clear_audio_preference", "Clear audio"),
|
|
455
|
-
Binding("S", "cycle_subtitle_mode", "Sub mode"),
|
|
456
|
-
Binding("x", "stop_playback", "Stop"),
|
|
462
|
+
Binding("a", "audio_picker", "Audio", show=False),
|
|
463
|
+
Binding("s", "subtitle_picker", "Subtitles", show=False),
|
|
464
|
+
Binding("A", "clear_audio_preference", "Clear audio", show=False),
|
|
465
|
+
Binding("S", "cycle_subtitle_mode", "Sub mode", show=False),
|
|
466
|
+
Binding("x", "stop_playback", "Stop", show=False),
|
|
457
467
|
]
|
|
458
468
|
|
|
459
469
|
service: reactive[PlexService | None] = reactive(None)
|
|
@@ -830,6 +830,29 @@ def test_render_help_groups_key_bindings():
|
|
|
830
830
|
assert "?: show help" in rendered
|
|
831
831
|
|
|
832
832
|
|
|
833
|
+
def test_footer_shows_core_bindings_and_help_keeps_full_reference():
|
|
834
|
+
shown = {binding.action for binding in PlexTuiApp.BINDINGS if binding.show}
|
|
835
|
+
hidden = {binding.action for binding in PlexTuiApp.BINDINGS if not binding.show}
|
|
836
|
+
rendered = render_help()
|
|
837
|
+
|
|
838
|
+
assert shown == {
|
|
839
|
+
"quit",
|
|
840
|
+
"focus_search",
|
|
841
|
+
"focus_global_search",
|
|
842
|
+
"show_help",
|
|
843
|
+
"toggle_media_view",
|
|
844
|
+
"show_settings",
|
|
845
|
+
"back_or_clear",
|
|
846
|
+
"play_selected",
|
|
847
|
+
"resume_selected",
|
|
848
|
+
}
|
|
849
|
+
assert "audio_picker" in hidden
|
|
850
|
+
assert "subtitle_picker" in hidden
|
|
851
|
+
assert "a: choose and save audio preference" in rendered
|
|
852
|
+
assert "s: choose and save subtitle preference" in rendered
|
|
853
|
+
assert "ctrl+r: reconnect / reload libraries" in rendered
|
|
854
|
+
|
|
855
|
+
|
|
833
856
|
def test_performance_log_requires_perf_env(monkeypatch):
|
|
834
857
|
messages = []
|
|
835
858
|
monkeypatch.delenv("PLEX_TUI_PERF_LOG", raising=False)
|
|
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
|