Add a playlist folder, several music folders and a Settings window, and prepare the 0.3.0 release #18

Merged
GrumpyStraw merged 1 commit from folders-and-0.3.0 into main 2026-10-14 19:47:39 +02:00
Owner

Folders

  • Playlists come from a playlist folder of their own (Settings → Playlist folder). All Music shows the songs of one or more music folders (Settings → Music folders), in a list of up to 5 rows that scrolls after that. A folder that cannot be read has a warning icon.
  • In the Flatpak, each folder picked in the file chooser is a separate document portal path, such as /run/user/1000/doc/<id>/Music. A relative path from one to the other leads nowhere inside the sandbox. portal::FolderMap keeps each picked folder with its path outside the Flatpak, and playlist::parse and playlist::serialize work through it. A song in ~/Music is saved from ~/Music/Listas as ../2026/Song.mp3, and from a separate ~/Playlists as ../Music/2026/Song.mp3.
  • The musicFolder setting from 0.2.0 becomes the first music folder and the playlist folder, so the same playlists show after the update.
  • A first-run dialog asks for the music folder and the playlist folder while neither is set. An empty playlist folder means the music folder.

Settings

  • Settings opens in a window of its own (SettingsWindow.qml), a child of the main window, so closing it never quits the app. It starts hidden, since Kirigami.ApplicationWindow is visible by default. Its size fits every setting with one music folder.
  • Start at login (autostart.rs) asks the Background portal for autostart. When the portal refuses, the setting turns back off and a notification says so.
  • Settings can hide the Donate button.

Changes on disk

  • A second watcher checks the music folders and every folder inside them every 10 seconds, against 2 seconds for the playlist folder, since a change means scanning every song again. All Music then reloads and keeps its scroll position. The Refresh button is gone. The open playlist was already checked every second.
  • The playlist scan no longer resets the music watcher, so a sync that changes songs and playlists together does not lose the song change.
  • PlaylistLibrary.musicVersion goes up when a music folder comes, goes or has songs changed. It is part of the playlist cover URL, so covers load again once songs are found.

Top bar

Playlists and Search on the left. Now Playing, Settings, Donate and About on the right. Donate opens Ko-fi, Liberapay and Monero, and About opens About Strawly Music directly.

Size

Cargo.toml builds the Rust code with lto = "fat", codegen-units = 1 and opt-level = "s", and the binary links with --gc-sections. Panics still unwind, since tags.rs catches them for damaged files.

0.2.0 Now
Bundle 3.38 MB 1.42 MB
Stripped binary 14.3 MB 4.9 MB
Memory, offscreen run 157 MB 127 MB

0.3.0 release prep

  • Version 0.3.0 in Cargo.toml, Cargo.lock, CMakeLists.txt and the README's install command.
  • A 0.3.0 entry in data/app.strawly.music.metainfo.xml with release notes. appstreamcli validate passes.
  • The Unreleased items in CHANGELOG.md are now under [0.3.0] - 2026-10-14, with the compare links updated.
  • The shipped 0.3.0 items leave ROADMAP.md.
  • Mentions of the phone and Nextcloud are gone from Settings, the README (except "Why Strawly Music"), the metainfo and code comments.

Checked

check.sh passes in org.kde.Sdk//6.11, with all 3 tests, including new Rust tests for the folder map, reading and writing playlists between portal folders, and listing folders. .forgejo/release-notes.sh 0.3.0 prints the notes. The Flatpak builds, installs and reports version 0.3.0. Tested by hand on Plasma 6 (Wayland): the first-run dialog, the Settings window and its size, the folder list order, and the top bar.

## Folders - Playlists come from a playlist folder of their own (Settings → Playlist folder). All Music shows the songs of one or more music folders (Settings → Music folders), in a list of up to 5 rows that scrolls after that. A folder that cannot be read has a warning icon. - In the Flatpak, each folder picked in the file chooser is a separate document portal path, such as `/run/user/1000/doc/<id>/Music`. A relative path from one to the other leads nowhere inside the sandbox. `portal::FolderMap` keeps each picked folder with its path outside the Flatpak, and `playlist::parse` and `playlist::serialize` work through it. A song in `~/Music` is saved from `~/Music/Listas` as `../2026/Song.mp3`, and from a separate `~/Playlists` as `../Music/2026/Song.mp3`. - The `musicFolder` setting from 0.2.0 becomes the first music folder and the playlist folder, so the same playlists show after the update. - A first-run dialog asks for the music folder and the playlist folder while neither is set. An empty playlist folder means the music folder. ## Settings - Settings opens in a window of its own (`SettingsWindow.qml`), a child of the main window, so closing it never quits the app. It starts hidden, since `Kirigami.ApplicationWindow` is visible by default. Its size fits every setting with one music folder. - Start at login (`autostart.rs`) asks the Background portal for autostart. When the portal refuses, the setting turns back off and a notification says so. - Settings can hide the Donate button. ## Changes on disk - A second watcher checks the music folders and every folder inside them every 10 seconds, against 2 seconds for the playlist folder, since a change means scanning every song again. All Music then reloads and keeps its scroll position. The Refresh button is gone. The open playlist was already checked every second. - The playlist scan no longer resets the music watcher, so a sync that changes songs and playlists together does not lose the song change. - `PlaylistLibrary.musicVersion` goes up when a music folder comes, goes or has songs changed. It is part of the playlist cover URL, so covers load again once songs are found. ## Top bar Playlists and Search on the left. Now Playing, Settings, Donate and About on the right. Donate opens Ko-fi, Liberapay and Monero, and About opens About Strawly Music directly. ## Size `Cargo.toml` builds the Rust code with `lto = "fat"`, `codegen-units = 1` and `opt-level = "s"`, and the binary links with `--gc-sections`. Panics still unwind, since `tags.rs` catches them for damaged files. | | 0.2.0 | Now | |---|---|---| | Bundle | 3.38 MB | 1.42 MB | | Stripped binary | 14.3 MB | 4.9 MB | | Memory, offscreen run | 157 MB | 127 MB | ## 0.3.0 release prep - Version 0.3.0 in `Cargo.toml`, `Cargo.lock`, `CMakeLists.txt` and the README's install command. - A 0.3.0 entry in `data/app.strawly.music.metainfo.xml` with release notes. `appstreamcli validate` passes. - The Unreleased items in `CHANGELOG.md` are now under `[0.3.0] - 2026-10-14`, with the compare links updated. - The shipped 0.3.0 items leave `ROADMAP.md`. - Mentions of the phone and Nextcloud are gone from Settings, the README (except "Why Strawly Music"), the metainfo and code comments. ## Checked `check.sh` passes in `org.kde.Sdk//6.11`, with all 3 tests, including new Rust tests for the folder map, reading and writing playlists between portal folders, and listing folders. `.forgejo/release-notes.sh 0.3.0` prints the notes. The Flatpak builds, installs and reports version 0.3.0. Tested by hand on Plasma 6 (Wayland): the first-run dialog, the Settings window and its size, the folder list order, and the top bar.
Add a playlist folder, several music folders and a Settings window, and prepare the 0.3.0 release
All checks were successful
Pull request checks / Lint and test (pull_request) Successful in 6m38s
23a33af226
- Playlists come from a playlist folder of their own, and All Music shows the songs of one or
  more music folders. In the Flatpak each picked folder is a separate portal path, so playlists
  are read and written through the paths outside the Flatpak, and a song is saved as
  ../Music/Song.mp3 from the playlist folder. The 0.2.0 music folder becomes the first music
  folder and the playlist folder.
- A first-run dialog asks for the music and playlist folders.
- Settings opens in a window of its own, sized to fit every setting, with the music folders in
  a list of up to 5 rows.
- Start at login, through the Background portal.
- The music folders are checked every 10 seconds, so All Music updates by itself and keeps its
  scroll position. The Refresh button is gone. Playlist covers load again when the music
  folders or their songs change.
- Donate is a button of its own, which Settings can hide. About opens directly. Now Playing
  moved left of Settings.
- The Rust code is built with link-time optimization and optimized for size: the bundle goes
  from 3.4 MB to 1.4 MB, and the binary from 14.3 MB to 4.9 MB.
- Version 0.3.0 in Cargo.toml, Cargo.lock, CMakeLists.txt, the README and the metainfo, with
  the changelog section and the roadmap updated.
GrumpyStraw scheduled this pull request to auto merge when all checks succeed 2026-10-14 19:42:33 +02:00
GrumpyStraw deleted branch folders-and-0.3.0 2026-10-14 19:47:40 +02:00
Sign in to join this conversation.
No description provided.