diff --git a/README.md b/README.md index f71ee70..25b5a4a 100644 --- a/README.md +++ b/README.md @@ -165,8 +165,8 @@ One tag releases pine and spruce together. Write the release notes for the two p Commit the notes and push them to `main`. Then use the release script. ```sh -${EDITOR:-vi} docs/releases/v0.8.1.md -./scripts/release.sh v0.8.1 +${EDITOR:-vi} docs/releases/v0.8.2.md +./scripts/release.sh v0.8.2 ``` When the script publishes the GitHub Release, the `Release` workflow builds the two programs for Linux, macOS, and Windows. It attaches one archive for each program and each system to the release. diff --git a/docs/releases/v0.8.2.md b/docs/releases/v0.8.2.md new file mode 100644 index 0000000..8227eab --- /dev/null +++ b/docs/releases/v0.8.2.md @@ -0,0 +1,149 @@ +# pine and spruce v0.8.2 + +This release corrects faults in the bookmarks, the playback, and the text +inputs of pine. It removes the keys `n` and `N` of pine. spruce has two +corrections. + +## Installation + +```sh +go install github.com/Thelost77/pine@v0.8.2 +go install github.com/Thelost77/pine/cmd/spruce@v0.8.2 +``` + +As an alternative, download an archive from the release page. See "Binaries". + +## Binaries + +The release has one archive for each program and each system. The name of an +archive is `_v0.8.2__`: + +| System | Architecture | File type | +|--------|--------------|-----------| +| `linux` | `amd64`, `arm64` | `.tar.gz` | +| `darwin` (macOS) | `amd64`, `arm64` | `.tar.gz` | +| `windows` | `amd64` | `.zip` | + +Each archive contains the program, the `LICENSE` file of pine, and a `licenses` +directory. That directory has the license texts of Go and of the modules that +the program links. + +- A binary needs libmpv. See "Requirements". +- On Windows, put `libmpv-2.dll` in the directory of the program. The archive + does not contain it. +- The binaries are not signed. +- A GitHub Actions workflow builds the binaries on Linux with `CGO_ENABLED=0`. + No binary of this release has run on a test machine. + +## pine + +### Reliability and Correctness + +Bookmarks: + +* **The detail screen showed no bookmarks for an item that has bookmarks.** + pine read the bookmarks from the progress of the item. Audiobookshelf gives + no bookmarks there. A bookmark that the user added was in the list only + until the user left the detail screen. pine now reads the bookmark route, + which Audiobookshelf has from 2.36.0. For an older server, pine reads the + bookmarks of the user and keeps those of the item. +* **The detail screen could show the bookmarks of a different item.** The + answer for an item can come after the user opened a different item. pine + now ignores the bookmarks of an item that the detail screen does not show. +* **`b` made a bookmark on an item that did not play.** The bookmark got the + position of the player. On the detail screen of a different item, `b` made + a bookmark on that item, at a position of the item that plays. pine now + makes no bookmark and shows an error. + +Playback: + +* **A new player played at the speed 1.0, while the footer showed the speed of + pine.** This occurred after the start of a session, and after the change to + the next file of a book. The key `speed` of the config file had no effect + on the player. pine now sets its speed in each new player. +* **The time of a stalled stream counted as listening time.** mpv reports no + pause while it waits for data. pine now counts no listening time while the + player plays no audio. +* **The close of the terminal lost the last position and the listening + time.** The process ended before pine sent them. pine now quits at the + close of the terminal as it does with `q`. +* **A pause state, a speed, or a volume that the player refused gave no + error.** The footer then showed a state that the player did not have. pine + now shows the error. + +Text inputs: + +* **The bookmark title editor lost keys.** `q` quit the program, `?` opened + the help overlay, and `esc` went to the previous screen. During a playback, + the playback keys did their function, for example `l`, `h`, `p`, and space. + The left arrow closed the editor, and the text was lost. The editor now + gets each key. `esc` cancels the edit, and the left arrow moves the cursor. +* **The login screen lost the keys `?` and `C`.** `?` opened the help + overlay, and a typed `C` had no effect. So a password with one of these + characters could not be typed. +* **The metadata editor lost the key `?`.** `?` opened the help overlay. +* **`q` in the confirmation dialog of a deletion quit the program.** `q` now + cancels the dialog, as `n` and `esc` do. +* **The error banner took the first key of a text input.** A key closes the + banner. While a text input or the confirmation dialog has the keys, the key + now goes to it, and the banner closes after 5 seconds. + +### Changes of Behavior + +* The keys `n` and `N` (next and previous chapter) are gone. Use the chapter + list (`C`), or the actions "Next Chapter" and "Previous Chapter" of the + command palette (`ctrl+p`). +* The config keys `next_chapter` and `prev_chapter` are gone. A config file + that has them still loads, and the two keys have no effect. pine wrote the + two keys to each config file that it made. +* While a text input or the confirmation dialog has the keys, the global keys + and the playback keys have no function. `ctrl+p` does not open the command + palette, and space does not pause the playback. `ctrl+c` quits the program + on each screen. The hint line then shows no global key and no playback key. +* `?` closes the help overlay on each screen. +* A stall of the stream can lose up to 1 second of listening time, as a pause + does. +* For Audiobookshelf before 2.36.0, each read of the bookmarks reads the user + with all bookmarks. + +## spruce + +* **spruce did no cleanup at the close of the terminal.** The process ended + before spruce closed its media cache and its players. spruce now quits its + program at the close of the terminal, and then does the cleanup. +* **A pause state, a speed, or a volume that the player refused gave no + error.** spruce now shows the error. + +The shared packages `internal/player` and `internal/ui` have changes for +pine. spruce gets the new idle state of the player in each position tick, and +does not use it. + +## Development + +* Each correction has a test that failed before the correction, but not the + cleanup of spruce at the close of the terminal. The tests use a fake + Audiobookshelf server and the mock player of the app tests. The test of the + stalled stream plays a stream through the real libmpv. +* No real Audiobookshelf server ran for these corrections. The statements + about Audiobookshelf are from the source of the versions 2.35.1, 2.36.0, and + 2.37.1. +* pine and spruce did not run in a terminal for the corrections of the keys + and of the bookmarks. The tests send messages to the models and read the + views. +* The close of a terminal has a test for the function that the two programs + call. No test runs the `main` function of a program, because it needs a + terminal. For the first form of this correction, pine ran one time in a + pseudo-terminal, with no session. spruce did not run. +* No test makes libmpv refuse a pause state, a speed, or a volume. The tests + use a player that fails these calls. +* In CI on Windows, the tests `TestE2E_LoginFailure` and + `TestE2E_CacheSurvivesRestart` failed at times, and passed in the next run + of the same commit. The test helper waits 200 ms for a command. This release + does not change the two tests or the helper. + +## Requirements + +- Go 1.26.4 or newer, for an installation from source +- libmpv from [mpv](https://mpv.io/) 0.34 or later +- pine: an [Audiobookshelf](https://www.audiobookshelf.org/) server +- spruce: a [Jellyfin](https://jellyfin.org/) account with a music library diff --git a/docs/spruce/README.md b/docs/spruce/README.md index 849bc00..34effbb 100644 --- a/docs/spruce/README.md +++ b/docs/spruce/README.md @@ -191,7 +191,7 @@ Commit the notes and all release changes. Push them to `main`. Then use the release script: ```sh -./scripts/release.sh v0.8.1 +./scripts/release.sh v0.8.2 ``` The script verifies the repository, creates and pushes the exact annotated tag,