plex-tui 0.2.1__tar.gz → 0.3.0__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.
Files changed (44) hide show
  1. {plex_tui-0.2.1 → plex_tui-0.3.0}/.github/workflows/aur.yml +4 -1
  2. plex_tui-0.3.0/.github/workflows/bump.yml +108 -0
  3. {plex_tui-0.2.1 → plex_tui-0.3.0}/.github/workflows/ci.yml +5 -2
  4. {plex_tui-0.2.1 → plex_tui-0.3.0}/.github/workflows/publish-pypi.yml +5 -2
  5. {plex_tui-0.2.1 → plex_tui-0.3.0}/.github/workflows/publish-testpypi.yml +5 -2
  6. {plex_tui-0.2.1 → plex_tui-0.3.0}/AGENTS.md +16 -0
  7. {plex_tui-0.2.1 → plex_tui-0.3.0}/CHANGELOG.md +11 -0
  8. {plex_tui-0.2.1 → plex_tui-0.3.0}/Makefile +5 -2
  9. {plex_tui-0.2.1 → plex_tui-0.3.0}/PKG-INFO +17 -4
  10. {plex_tui-0.2.1 → plex_tui-0.3.0}/README.md +16 -3
  11. {plex_tui-0.2.1 → plex_tui-0.3.0}/RELEASE.md +40 -14
  12. plex_tui-0.3.0/ROADMAP.md +39 -0
  13. {plex_tui-0.2.1 → plex_tui-0.3.0}/config.example.toml +1 -1
  14. {plex_tui-0.2.1 → plex_tui-0.3.0}/packaging/aur/.SRCINFO +3 -3
  15. {plex_tui-0.2.1 → plex_tui-0.3.0}/packaging/aur/PKGBUILD +2 -2
  16. {plex_tui-0.2.1 → plex_tui-0.3.0}/pyproject.toml +1 -1
  17. plex_tui-0.3.0/scripts/check_release.py +172 -0
  18. {plex_tui-0.2.1 → plex_tui-0.3.0}/src/plextui/__init__.py +1 -1
  19. {plex_tui-0.2.1 → plex_tui-0.3.0}/src/plextui/__main__.py +6 -1
  20. {plex_tui-0.2.1 → plex_tui-0.3.0}/src/plextui/app.py +351 -47
  21. {plex_tui-0.2.1 → plex_tui-0.3.0}/src/plextui/artwork.py +35 -13
  22. {plex_tui-0.2.1 → plex_tui-0.3.0}/tests/test_app_helpers.py +146 -10
  23. {plex_tui-0.2.1 → plex_tui-0.3.0}/tests/test_app_navigation.py +116 -1
  24. {plex_tui-0.2.1 → plex_tui-0.3.0}/tests/test_artwork.py +51 -3
  25. {plex_tui-0.2.1 → plex_tui-0.3.0}/tests/test_cli.py +16 -0
  26. plex_tui-0.3.0/tests/test_release_checks.py +109 -0
  27. plex_tui-0.2.1/ROADMAP.md +0 -32
  28. {plex_tui-0.2.1 → plex_tui-0.3.0}/.gitignore +0 -0
  29. {plex_tui-0.2.1 → plex_tui-0.3.0}/LICENSE +0 -0
  30. {plex_tui-0.2.1 → plex_tui-0.3.0}/PACKAGING.md +0 -0
  31. {plex_tui-0.2.1 → plex_tui-0.3.0}/docs/assets/grid-view.png +0 -0
  32. {plex_tui-0.2.1 → plex_tui-0.3.0}/docs/assets/list-view.png +0 -0
  33. {plex_tui-0.2.1 → plex_tui-0.3.0}/packaging/aur/README.md +0 -0
  34. {plex_tui-0.2.1 → plex_tui-0.3.0}/packaging/homebrew/README.md +0 -0
  35. {plex_tui-0.2.1 → plex_tui-0.3.0}/src/plextui/auth.py +0 -0
  36. {plex_tui-0.2.1 → plex_tui-0.3.0}/src/plextui/config.py +0 -0
  37. {plex_tui-0.2.1 → plex_tui-0.3.0}/src/plextui/models.py +0 -0
  38. {plex_tui-0.2.1 → plex_tui-0.3.0}/src/plextui/player.py +0 -0
  39. {plex_tui-0.2.1 → plex_tui-0.3.0}/src/plextui/plex_service.py +0 -0
  40. {plex_tui-0.2.1 → plex_tui-0.3.0}/src/plextui/smoke.py +0 -0
  41. {plex_tui-0.2.1 → plex_tui-0.3.0}/tests/test_auth.py +0 -0
  42. {plex_tui-0.2.1 → plex_tui-0.3.0}/tests/test_config.py +0 -0
  43. {plex_tui-0.2.1 → plex_tui-0.3.0}/tests/test_player.py +0 -0
  44. {plex_tui-0.2.1 → plex_tui-0.3.0}/tests/test_plex_service.py +0 -0
@@ -13,6 +13,9 @@ on:
13
13
  - "packaging/aur/**"
14
14
  workflow_dispatch:
15
15
 
16
+ env:
17
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
18
+
16
19
  jobs:
17
20
  makepkg:
18
21
  runs-on: ubuntu-latest
@@ -24,7 +27,7 @@ jobs:
24
27
  pacman -Syu --noconfirm git namcap sudo
25
28
 
26
29
  - name: Check out repository
27
- uses: actions/checkout@v4
30
+ uses: actions/checkout@v5
28
31
 
29
32
  - name: Create build user
30
33
  run: |
@@ -0,0 +1,108 @@
1
+ name: Version Bump and Release
2
+
3
+ on:
4
+ pull_request:
5
+ types: ["closed"]
6
+ branches: ["main"]
7
+
8
+ env:
9
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
10
+
11
+ jobs:
12
+ bump-version:
13
+ if: |
14
+ github.event.pull_request.merged == true &&
15
+ (
16
+ contains(github.event.pull_request.title, '#patch') ||
17
+ contains(github.event.pull_request.title, '#minor') ||
18
+ contains(github.event.pull_request.title, '#major') ||
19
+ contains(github.event.pull_request.body, '#patch') ||
20
+ contains(github.event.pull_request.body, '#minor') ||
21
+ contains(github.event.pull_request.body, '#major')
22
+ )
23
+ runs-on: ubuntu-latest
24
+ permissions:
25
+ contents: write
26
+ outputs:
27
+ new_tag: ${{ steps.bump.outputs.new_version }}
28
+ previous_tag: ${{ steps.bump.outputs.previous_version }}
29
+ skipped: ${{ steps.bump.outputs.skipped }}
30
+ release_requested: ${{ steps.bump.outputs.should_release }}
31
+
32
+ steps:
33
+ - name: Check out repository
34
+ uses: actions/checkout@v5
35
+ with:
36
+ fetch-depth: 0
37
+
38
+ - name: Bump version tag
39
+ id: bump
40
+ uses: so1omon563/custom-semver-bumper@v1
41
+ with:
42
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
43
+ branch_name: ${{ github.event.pull_request.head.ref }}
44
+ # Floating pointer tags are owned by release-creator so they only move
45
+ # when a GitHub Release is intentionally published.
46
+
47
+ create-release:
48
+ name: Create GitHub Release
49
+ needs: bump-version
50
+ if: |
51
+ needs.bump-version.outputs.release_requested == 'true' &&
52
+ needs.bump-version.outputs.skipped != 'true'
53
+ runs-on: ubuntu-latest
54
+ permissions:
55
+ contents: write
56
+
57
+ steps:
58
+ - name: Check out repository
59
+ uses: actions/checkout@v5
60
+ with:
61
+ fetch-depth: 0
62
+
63
+ - name: Create release
64
+ uses: so1omon563/release-creator@v1
65
+ with:
66
+ token: ${{ secrets.GITHUB_TOKEN }}
67
+ tag: ${{ needs.bump-version.outputs.new_tag }}
68
+ from-tag: ${{ needs.bump-version.outputs.previous_tag }}
69
+ tag-prefix: v
70
+ notes-format: grouped
71
+ move-major-tag: "true"
72
+ move-minor-tag: "true"
73
+
74
+ publish-pypi:
75
+ name: Publish to PyPI
76
+ needs:
77
+ - bump-version
78
+ - create-release
79
+ runs-on: ubuntu-latest
80
+ environment: pypi
81
+ permissions:
82
+ contents: read
83
+ id-token: write
84
+
85
+ steps:
86
+ - name: Check out release tag
87
+ uses: actions/checkout@v5
88
+ with:
89
+ ref: ${{ needs.bump-version.outputs.new_tag }}
90
+
91
+ - name: Set up Python
92
+ uses: actions/setup-python@v6
93
+ with:
94
+ python-version: "3.13"
95
+
96
+ - name: Install build tools
97
+ run: |
98
+ python -m pip install --upgrade pip
99
+ python -m pip install build twine
100
+
101
+ - name: Build package
102
+ run: python -m build
103
+
104
+ - name: Check package metadata
105
+ run: python -m twine check dist/*
106
+
107
+ - name: Publish package
108
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -6,6 +6,9 @@ on:
6
6
  pull_request:
7
7
  branches: ["main"]
8
8
 
9
+ env:
10
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
11
+
9
12
  jobs:
10
13
  check:
11
14
  name: Python ${{ matrix.python-version }}
@@ -17,10 +20,10 @@ jobs:
17
20
 
18
21
  steps:
19
22
  - name: Check out repository
20
- uses: actions/checkout@v4
23
+ uses: actions/checkout@v5
21
24
 
22
25
  - name: Set up Python
23
- uses: actions/setup-python@v5
26
+ uses: actions/setup-python@v6
24
27
  with:
25
28
  python-version: ${{ matrix.python-version }}
26
29
 
@@ -14,6 +14,9 @@ permissions:
14
14
  contents: read
15
15
  id-token: write
16
16
 
17
+ env:
18
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
19
+
17
20
  jobs:
18
21
  publish:
19
22
  runs-on: ubuntu-latest
@@ -21,12 +24,12 @@ jobs:
21
24
 
22
25
  steps:
23
26
  - name: Check out repository
24
- uses: actions/checkout@v4
27
+ uses: actions/checkout@v5
25
28
  with:
26
29
  ref: ${{ github.event.release.tag_name || inputs.ref }}
27
30
 
28
31
  - name: Set up Python
29
- uses: actions/setup-python@v5
32
+ uses: actions/setup-python@v6
30
33
  with:
31
34
  python-version: "3.13"
32
35
 
@@ -7,6 +7,9 @@ permissions:
7
7
  contents: read
8
8
  id-token: write
9
9
 
10
+ env:
11
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
12
+
10
13
  jobs:
11
14
  publish:
12
15
  runs-on: ubuntu-latest
@@ -14,10 +17,10 @@ jobs:
14
17
 
15
18
  steps:
16
19
  - name: Check out repository
17
- uses: actions/checkout@v4
20
+ uses: actions/checkout@v5
18
21
 
19
22
  - name: Set up Python
20
- uses: actions/setup-python@v5
23
+ uses: actions/setup-python@v6
21
24
  with:
22
25
  python-version: "3.13"
23
26
 
@@ -78,6 +78,22 @@ Pull requests should include:
78
78
  - Screenshots or terminal notes for TUI changes when useful.
79
79
  - Any config, packaging, or migration impact.
80
80
 
81
+ Use PRs for repository changes. When publishing local commits, branch from
82
+ `main` with a scoped name such as `codex/release-prep`, push that branch, and
83
+ open a draft PR instead of pushing directly to `main`. Treat `main` as a
84
+ protected branch even before GitHub branch protection or rulesets are enabled.
85
+
86
+ GitHub CLI notes:
87
+
88
+ - `gh auth status` may fail inside the sandbox even when the user is logged in
89
+ via the macOS keyring. Re-run `gh` auth, PR, and push operations outside the
90
+ sandbox when keyring access is required.
91
+ - Prefer the GitHub connector for PR creation when it has access. If it returns
92
+ `403 Resource not accessible by integration`, fall back to
93
+ `gh pr create --draft` using the authenticated CLI session.
94
+ - Keep PR bodies explicit about validation, especially `make check` results and
95
+ release workflow checks such as `actionlint`.
96
+
81
97
  ## Security & Configuration Tips
82
98
 
83
99
  Never commit real Plex tokens, account tokens, debug logs, or local config files.
@@ -2,6 +2,17 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.3.0 - 2026-06-12
6
+
7
+ - Added `plex-tui --diagnostics` for collecting environment and playback setup details.
8
+ - Added PR-merge version tagging, GitHub Release creation, and PyPI publishing workflow automation.
9
+ - Added a local release workflow and version metadata verification target.
10
+ - Added targeted playback troubleshooting hints for common `mpv` and Plex stream failures.
11
+ - Added a compact active-playback footer while media is playing.
12
+ - Simplified Settings rows into inline controls for numeric values, toggles, and option cycling.
13
+ - Tuned grid density geometry and stabilized unloaded poster placeholders.
14
+ - Added explicit Kitty renderer fallback diagnostics while native images remain disabled inside Textual.
15
+
5
16
  ## 0.2.1 - 2026-06-11
6
17
 
7
18
  - Added GitHub Actions CI and PyPI Trusted Publishing workflow scaffolding.
@@ -1,4 +1,4 @@
1
- .PHONY: install-dev run test compile smoke build check-package check clean
1
+ .PHONY: install-dev run test compile smoke build check-package check-release check clean
2
2
 
3
3
  PYTHON ?= .venv/bin/python
4
4
 
@@ -23,7 +23,10 @@ build:
23
23
  check-package: build
24
24
  $(PYTHON) -m twine check dist/*
25
25
 
26
- check: smoke test compile check-package
26
+ check-release:
27
+ $(PYTHON) scripts/check_release.py
28
+
29
+ check: smoke test compile check-release check-package
27
30
 
28
31
  clean:
29
32
  rm -rf build dist *.egg-info src/*.egg-info
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plex-tui
3
- Version: 0.2.1
3
+ Version: 0.3.0
4
4
  Summary: A small standalone Plex terminal UI.
5
5
  Project-URL: Homepage, https://github.com/so1omon563/plex-tui
6
6
  Project-URL: Issues, https://github.com/so1omon563/plex-tui/issues
@@ -128,6 +128,7 @@ Useful CLI checks:
128
128
  plex-tui --version
129
129
  plex-tui --config-path
130
130
  plex-tui --debug-log-path
131
+ plex-tui --diagnostics
131
132
  plex-tui --smoke
132
133
  ```
133
134
 
@@ -222,13 +223,17 @@ available, and the details pane shows the effective playback choices.
222
223
  - Settings screen for stream preferences, artwork modes, grid density, page
223
224
  size, auto-load threshold, grid artwork prefetching, media view, and `mpv`
224
225
  window size.
226
+ - App diagnostics view for version, paths, `mpv`, Plex connection, artwork, and
227
+ browsing settings.
225
228
 
226
229
  ## Artwork
227
230
 
228
231
  Poster artwork renders as portable colored block art, so it works in ordinary
229
- terminals without Kitty, iTerm2, or Sixel support. Native terminal image output
230
- is disabled for now because Kitty protocol rendering conflicts with Textual's
231
- screen renderer in practice.
232
+ terminals without Kitty, iTerm2, or Sixel support. Native Kitty image output is
233
+ disabled inside the Textual app because direct Kitty graphics protocol placement
234
+ can destabilize the UI. If `artwork_renderer` is set to `auto` or `kitty`, the
235
+ app falls back to block art and summarizes the fallback in
236
+ `plex-tui --diagnostics`.
232
237
 
233
238
  Grid view prefetches artwork for the visible page immediately and, by default,
234
239
  prepares three pages ahead in the background. `grid_prefetch_pages` can be set
@@ -241,6 +246,8 @@ Settings.
241
246
 
242
247
  Playback diagnostics are written to `debug.log` in the app config directory.
243
248
  Tokens are redacted from logged `mpv` arguments.
249
+ The Settings diagnostics section can show the debug log path, recent log lines,
250
+ and an app diagnostics summary for support reports.
244
251
 
245
252
  Useful paths:
246
253
 
@@ -255,6 +262,12 @@ Enable browsing performance timings before launch:
255
262
  PLEX_TUI_PERF_LOG=1 plex-tui
256
263
  ```
257
264
 
265
+ To collect environment information for issue reports:
266
+
267
+ ```bash
268
+ plex-tui --diagnostics
269
+ ```
270
+
258
271
  Verbose grid artwork internals are quieter by default. Include them only when
259
272
  debugging poster loading:
260
273
 
@@ -92,6 +92,7 @@ Useful CLI checks:
92
92
  plex-tui --version
93
93
  plex-tui --config-path
94
94
  plex-tui --debug-log-path
95
+ plex-tui --diagnostics
95
96
  plex-tui --smoke
96
97
  ```
97
98
 
@@ -186,13 +187,17 @@ available, and the details pane shows the effective playback choices.
186
187
  - Settings screen for stream preferences, artwork modes, grid density, page
187
188
  size, auto-load threshold, grid artwork prefetching, media view, and `mpv`
188
189
  window size.
190
+ - App diagnostics view for version, paths, `mpv`, Plex connection, artwork, and
191
+ browsing settings.
189
192
 
190
193
  ## Artwork
191
194
 
192
195
  Poster artwork renders as portable colored block art, so it works in ordinary
193
- terminals without Kitty, iTerm2, or Sixel support. Native terminal image output
194
- is disabled for now because Kitty protocol rendering conflicts with Textual's
195
- screen renderer in practice.
196
+ terminals without Kitty, iTerm2, or Sixel support. Native Kitty image output is
197
+ disabled inside the Textual app because direct Kitty graphics protocol placement
198
+ can destabilize the UI. If `artwork_renderer` is set to `auto` or `kitty`, the
199
+ app falls back to block art and summarizes the fallback in
200
+ `plex-tui --diagnostics`.
196
201
 
197
202
  Grid view prefetches artwork for the visible page immediately and, by default,
198
203
  prepares three pages ahead in the background. `grid_prefetch_pages` can be set
@@ -205,6 +210,8 @@ Settings.
205
210
 
206
211
  Playback diagnostics are written to `debug.log` in the app config directory.
207
212
  Tokens are redacted from logged `mpv` arguments.
213
+ The Settings diagnostics section can show the debug log path, recent log lines,
214
+ and an app diagnostics summary for support reports.
208
215
 
209
216
  Useful paths:
210
217
 
@@ -219,6 +226,12 @@ Enable browsing performance timings before launch:
219
226
  PLEX_TUI_PERF_LOG=1 plex-tui
220
227
  ```
221
228
 
229
+ To collect environment information for issue reports:
230
+
231
+ ```bash
232
+ plex-tui --diagnostics
233
+ ```
234
+
222
235
  Verbose grid artwork internals are quieter by default. Include them only when
223
236
  debugging poster loading:
224
237
 
@@ -1,6 +1,9 @@
1
1
  # Release Checklist
2
2
 
3
- Use this checklist for tagged app releases from `so1omon563/plex-tui`.
3
+ Use this checklist for planned app releases from `so1omon563/plex-tui`.
4
+ Normal releases now move through a pull request into `main`; the merge runs
5
+ `.github/workflows/bump.yml`, creates the version tag, optionally creates the
6
+ GitHub Release, and publishes to PyPI in the same workflow run.
4
7
 
5
8
  ## 1. Local Validation
6
9
 
@@ -13,15 +16,28 @@ make check
13
16
 
14
17
  `make check` runs smoke, tests, compile, and package metadata validation.
15
18
 
16
- ## 2. Version Prep
19
+ ## 2. Release PR Prep
17
20
 
18
- Before tagging:
21
+ Prepare a release PR:
19
22
 
20
23
  - Update `version` in `pyproject.toml`.
21
24
  - Update `src/plextui/__init__.py`.
22
- - Move `CHANGELOG.md` entries from `Unreleased` to the release date.
25
+ - Move `CHANGELOG.md` entries from `Unreleased` to the release version and date.
23
26
  - Confirm `README.md`, `PACKAGING.md`, and `config.example.toml` match current behavior.
24
27
  - Confirm the Git remote points to `https://github.com/so1omon563/plex-tui`.
28
+ - Make sure the PR title or body includes the right bump marker:
29
+ `#patch`, `#minor`, or `#major`.
30
+ - Add `#release`, `#publish`, or `#ship` when the merge should create the
31
+ GitHub Release and publish to PyPI.
32
+
33
+ The semver bumper creates tags from merge metadata, but it does not edit project
34
+ files. Keep the version files and changelog in the PR aligned with the tag the
35
+ merge will create.
36
+
37
+ Do not update Homebrew or AUR checksums in the release PR. Those checksums depend
38
+ on the tag or published artifact that does not exist until after merge. Handle
39
+ packaging repository updates in a follow-up PR that does not include `#patch`,
40
+ `#minor`, or `#major`, so it cannot create another version tag.
25
41
 
26
42
  ## 3. Build Artifacts
27
43
 
@@ -57,18 +73,20 @@ python -m venv /tmp/plex-tui-testpypi
57
73
  /tmp/plex-tui-testpypi/bin/plex-tui --smoke
58
74
  ```
59
75
 
60
- ## 5. Tag And Publish PyPI
76
+ ## 5. Merge And Publish
61
77
 
62
- Create and push an annotated tag:
78
+ Merge the release PR after CI passes. The `Version Bump and Release` workflow:
63
79
 
64
- ```bash
65
- git tag -a vX.Y.Z -m "Release X.Y.Z"
66
- git push --follow-tags
67
- ```
80
+ 1. Runs `so1omon563/custom-semver-bumper@v1` on the merged PR and creates the
81
+ next `vX.Y.Z` tag when the merged PR title or body includes `#patch`,
82
+ `#minor`, or `#major`.
83
+ 2. Runs `so1omon563/release-creator@v1` when the merge message includes
84
+ `#release`, `#publish`, or `#ship`.
85
+ 3. Publishes the tagged package to PyPI through Trusted Publishing after the
86
+ GitHub Release is created.
68
87
 
69
- Create a GitHub Release for the tag. Publishing the GitHub Release triggers
70
- `.github/workflows/publish-pypi.yml` through PyPI Trusted Publishing. If needed,
71
- the same workflow can be run manually with `ref=vX.Y.Z`.
88
+ The older `Publish to PyPI` workflow remains available as a manual fallback with
89
+ `ref=vX.Y.Z`, and still supports manually created GitHub Releases.
72
90
 
73
91
  After PyPI publishes, validate the real package:
74
92
 
@@ -95,6 +113,8 @@ brew test so1omon563/plex-tui/plex-tui
95
113
  brew audit --strict --online so1omon563/plex-tui/plex-tui
96
114
  ```
97
115
 
116
+ Open this as a packaging-only PR without a semver bump marker.
117
+
98
118
  ## 7. Arch AUR
99
119
 
100
120
  Update `packaging/aur/PKGBUILD` and regenerate `.SRCINFO`:
@@ -116,7 +136,13 @@ git commit -m "Update to X.Y.Z-1"
116
136
  git push
117
137
  ```
118
138
 
119
- ## Manual PyPI Fallback
139
+ Open this as a packaging-only PR without a semver bump marker.
140
+
141
+ ## Manual Fallbacks
142
+
143
+ If a tag exists but the release step needs to be retried, create the GitHub
144
+ Release manually or with `so1omon563/release-creator@v1`, then run
145
+ `Publish to PyPI` manually with `ref=vX.Y.Z`.
120
146
 
121
147
  Prefer Trusted Publishing. If it is not available and a PyPI token is
122
148
  configured, upload validated artifacts manually:
@@ -0,0 +1,39 @@
1
+ # Roadmap
2
+
3
+ ## App UX
4
+
5
+ - Verify real library browsing after the prefetch/rendering and idle-detail
6
+ passes, especially any remaining list/grid latency on large remote libraries.
7
+ - Tune grid artwork defaults such as `grid_prefetch_pages` only if verification
8
+ shows the current defaults are too aggressive or too conservative.
9
+ - Continue tuning focus and selection affordances based on real terminal themes.
10
+ - Continue refining Settings ergonomics as new preferences are added.
11
+ - Consider separate poster-size controls only if density presets are not enough
12
+ after real-library verification.
13
+ - Continue improving playback diagnostics as real-world `mpv` and Plex stream
14
+ failures show up in use.
15
+
16
+ ## Packaging & Distribution
17
+
18
+ - Keep planned releases moving through PRs so merged release PRs drive automatic
19
+ tagging, GitHub Release creation, and PyPI publishing.
20
+ - Add a GitHub ruleset or branch protection for `main` that requires branch
21
+ work, pull requests, and passing checks before merge.
22
+ - Improve Homebrew install time; the current formula works but builds native
23
+ Python resources such as `pillow` from source.
24
+ - Automate Homebrew tap and AUR metadata updates after PyPI releases by opening
25
+ packaging-only pull requests with the new artifact URLs and checksums. These
26
+ PRs must omit semver bump markers so they do not create another release tag.
27
+ - Consider standalone artifacts only after the app behavior stabilizes.
28
+
29
+ ## Technical Follow-Up
30
+
31
+ - Use `PLEX_TUI_PERF_LOG=1` for focused regression checks when changing grid,
32
+ artwork, pagination, or detail-loading behavior.
33
+ - Revisit whether verbose `PLEX_TUI_ARTWORK_LOG=1` should expose more structured artwork counters.
34
+ - Revisit native terminal image support with a Kitty Unicode-placeholder
35
+ prototype. Direct Kitty graphics protocol placement inside Textual caused UI
36
+ hangs, so any future implementation should transmit images quietly, render
37
+ normal placeholder text that Textual can redraw safely, and keep block art as
38
+ the mandatory fallback.
39
+ - Add focused regression tests for any real-world Plex media edge cases discovered during use.
@@ -31,7 +31,7 @@ client_identifier = "plex-tui-your-stable-client-id"
31
31
  # artwork_mode can be "on" or "off".
32
32
  # artwork_mode = "on"
33
33
  # artwork_renderer can be "block", "auto", or "kitty". Auto/kitty currently
34
- # fall back to block art while native terminal image support is disabled.
34
+ # fall back to block art because direct Kitty image placement is unsafe in Textual.
35
35
  # artwork_renderer = "block"
36
36
  # detail_artwork_mode can be "list_only", "on", or "off".
37
37
  # detail_artwork_mode = "list_only"
@@ -1,6 +1,6 @@
1
1
  pkgbase = plex-tui
2
2
  pkgdesc = Standalone Plex terminal UI with mpv playback
3
- pkgver = 0.2.0
3
+ pkgver = 0.2.1
4
4
  pkgrel = 1
5
5
  url = https://github.com/so1omon563/plex-tui
6
6
  arch = any
@@ -17,7 +17,7 @@ pkgbase = plex-tui
17
17
  depends = python-plexapi
18
18
  depends = python-rich
19
19
  depends = python-textual
20
- source = plex-tui-0.2.0.tar.gz::https://github.com/so1omon563/plex-tui/archive/refs/tags/v0.2.0.tar.gz
21
- sha256sums = f97a723c025d8678ca23d717e16d8cf753685e8d6bf6dd2b3e99fe1bef0e2941
20
+ source = plex-tui-0.2.1.tar.gz::https://github.com/so1omon563/plex-tui/archive/refs/tags/v0.2.1.tar.gz
21
+ sha256sums = f1b84354e5a0f7885fb7391d81f6d15ddece55822c8a5d5d08d01b4fadffbbeb
22
22
 
23
23
  pkgname = plex-tui
@@ -1,6 +1,6 @@
1
1
  # Maintainer: so1omon
2
2
  pkgname=plex-tui
3
- pkgver=0.2.0
3
+ pkgver=0.2.1
4
4
  pkgrel=1
5
5
  pkgdesc="Standalone Plex terminal UI with mpv playback"
6
6
  arch=("any")
@@ -23,7 +23,7 @@ makedepends=(
23
23
  )
24
24
  checkdepends=("python-pytest")
25
25
  source=("$pkgname-$pkgver.tar.gz::$url/archive/refs/tags/v$pkgver.tar.gz")
26
- sha256sums=("f97a723c025d8678ca23d717e16d8cf753685e8d6bf6dd2b3e99fe1bef0e2941")
26
+ sha256sums=("f1b84354e5a0f7885fb7391d81f6d15ddece55822c8a5d5d08d01b4fadffbbeb")
27
27
 
28
28
  build() {
29
29
  cd "$pkgname-$pkgver"
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "plex-tui"
7
- version = "0.2.1"
7
+ version = "0.3.0"
8
8
  description = "A small standalone Plex terminal UI."
9
9
  readme = "README.md"
10
10
  license = "MIT"