This release brings multiple new sources and a major change to how Rufin playback operates: playback and queue no longer belong to the current source but to Rufin.
-
Rufin now supports Plex, including Plex Companion handoff, Emby, WebDAV including custom certificates and headers, Nextcloud login (note that Nextcloud Music Subsonic path offers a better experience), and Samba including share discovery, guest and domain logins, signing/encryption, and much more! I also worked on OpenSubsonic compatibility more; confirmed that it works with Nextcloud Music, Gonic, and Funkwhale OpenSubsonic path.
-
You can now switch between sources without the song being interrupted, and you can add tracks from different sources to the same queue.
-
You can also define Rufin-owned playlists, in which you can combine tracks from different sources. This also works for smart playlists; you can edit their scope from the editing menu.
-
.m3u8 support is added. This means you can import and export playlists to and from Rufin. As long as the playlist file has a reachable media_uri, Rufin can play that file-for example, a random URL.
-
Backup functionality is added. You can export your settings, including server credentials, and set up Rufin with the import button on a fresh launch. You can enable automatic backups, set a backup location, and also choose to encrypt these backups with a password.
-
Rufin activity can now be exported as ListenBrainz/Last.fm compatible .csv files.
-
The Windows installer got a polish, and its strings are now extracted for translation through Weblate.
-
The Japanese dictionary is upgraded to Lindera. This one uses more resources but is now also out of the Rufin binary and is downloaded on demand when Furigana/Romanization settings are enabled.
-
Context menu custom orders are removed to use separators. Each entry can still be enabled or disabled.
-
Added keyboard shortcuts for switching sources (because I have 10 sources configured now for testing...).
-
Fixed an issue with karaoke mode evaluating Japanese readings based on kanji splits, producing wrong readings.
-
Fixed several issues with the Windows package, including automatic installation and local playback from the latest release.
-
Fixed several issues with GStreamer clock sync. In some hi-res tracks, there could be intermittent cuts, which are now fixed.
-
Fixed an issue with the visualizer showing only 2 updates per second for hi-res songs.
Changelog
- fix(rpm): recover transient COPR monitoring by @screwys in #928
- fix(rpm): allow Traditional Chinese catalog identity by @screwys in #929
- chore(deps): update rust crate async-trait to v0.1.92 by @rufin-renovate, @screwys in #892
- chore(deps): update rust crate roxmltree to 0.21.0 by @rufin-renovate, @screwys in #934
- chore(deps): update rust crate rustls to v0.23.43 by @rufin-renovate, @screwys in #896
- chore(deps): update rust crate futures-util to v0.3.34 by @rufin-renovate, @screwys in #895
- chore(deps): update renovatebot/github-action action to v46.2.2 by @rufin-renovate, @screwys in #932
- chore(deps): update rust crate base64 to v0.23.1 by @rufin-renovate, @screwys in #893
- chore(deps): update rust crate thiserror to v2.0.20 by @rufin-renovate, @screwys in #897
- fix(sources): relax source admission by @screwys in #938
- build: adopt CMake for cross-platform builds by @screwys in #939
- build: make just build host-native by @screwys in #941
- chore(i18n): update translations by @weblate, @aguhadug in #942
- chore(deps): update renovatebot/github-action action to v46.2.4 by @rufin-renovate in #943
- fix(sources): accept incomplete provider catalogs by @screwys in #944
- fix(windows): let installer own automatic updates by @screwys in #945
- refactor(ui): move interface ownership into resources by @screwys in #946
- chore(i18n): update translations by @weblate in #947
- revert(sources): remove incomplete catalog rewrite by @screwys in #951
- fix(playlists): correct most-played membership and pin metadata by @screwys in #952
- fix(settings): avoid offline preference freezes by @screwys in #953
- fix(ui): remove route bottom spacing by @screwys in #954
- fix(lyrics): restore sidecar storage preference by @screwys in #955
- chore(i18n): update translations by @weblate in #956
- fix(local): unify path mapping and metadata recovery by @screwys in #957
- chore(i18n): update translations by @weblate in #958
- chore(deps): update rust crate fcast-sender-sdk to 0.3.0 by @rufin-renovate in #959
- chore(i18n): update translations by @weblate, @aguhadug in #962
- various(library): make media identity the sole truth and decouple rufin state from active source by @screwys in #963
- chore(i18n): update translations by @weblate in #964
- feat(lyrics): download Lindera dictionary and preserve karaoke readings by @screwys in #965
- feat(sources): add WebDAV and SMB libraries by @screwys in #968
- chore(i18n): update translations by @weblate in #966
- fix(playback): restore unseekable track rules by @screwys in #969
- fix(library): restore album rows and reduce browsing and queue costs by @screwys in #970
- refactor(playback): bound the queue and move edits into playback by @screwys in #971
- fix(sources): map server media directly without strict record validation by @screwys in #973
- chore(readme): update sources by @screwys in #974
- chore(deps): update rust crate glib to v0.22.9 by @rufin-renovate in #977
- chore(deps): update renovatebot/github-action action to v46.2.5 by @rufin-renovate, @screwys in #975
- chore(deps): update rust crate hyper to v1.11.1 by @rufin-renovate, @screwys in #979
- chore(deps): update rust crate http-body-util to v0.1.5 by @rufin-renovate, @screwys in #978
- refactor: reorganize crate ownership and reduce UI retention by @screwys in #982
- chore(readme): fix typo by @screwys in #985
- refactor(queue): simplify playback membership and persistence by @screwys in #986
- chore(i18n): update translations by @weblate, @aguhadug in #983
- feat(plex): add Plex server and Companion support by @screwys in #987
- chore(deps): update rust crate mdns-sd to v0.21.1 by @rufin-renovate in #980
- chore(i18n): update translations by @weblate in #988
- fix(playback): stabilize high-resolution audio and visualizer updates by @screwys in #990
- feat: add Emby support by @screwys in #991
- fix(player): commit seek previews on pointer release by @screwys in #993
- fix(player): center the loaded queue before revealing it by @screwys in #995
- feat(windows): improve installer setup and translations by @screwys in #994
- fix(lyrics): animate the return to the top when playback repeats by @screwys in #996
- feat(ui): refine player feedback, menu groups and source shortcuts by @screwys in #997
- feat(sources): expand detail links and preserve usable provider data by @screwys in #998
- fix(ui): confirm playlist deletion and stabilize navigation and queue interactions by @screwys in #999
- chore(i18n): update translations by @weblate in #992
- chore(readme): update app description by @screwys in #1000
- chore(metadata): update supported source keywords and descriptions by @screwys in #1001
- fix: improve library performance and navigation by @screwys in #1002
- chore(i18n): update translations by @weblate in #1003
- feat(sources): add Connect sign-in and improve Emby and Jellyfin parity by @screwys in #1004
- chore(readme): add icons for sources by @screwys in #1006
- chore(i18n): update translations by @weblate in #1005
Full Changelog: v0.14.0...v0.15.0