* [bugfix]: Handle top-level songs for Jellyfin
If a song is at the top level of a music folder, Jellyfin will not
group that into an album (See https://jellyfin.org/docs/general/server/media/music/).
This PR introduces a few changes:
- Gives tracks with no album ID a special route (`/dummy/${id}`)
- Gives a new route for dummy albums, warning about the error. This is designed to look _like_ the album detail page
* `are are` > `are`
* revert name changes
- mpris-service: migrate to @jellybrick/mpris-service, which has upgraded dependencies and uses class
- i18next-parser: 6 -> 8. This requires a small change to i18next-parser.config.js
* add share item feature
* take care of (mostly) everything
* bugfixes
* allow clicking on notification to open url
* readd the missing modal after router migration
* remove unnecessary extension
---------
Co-authored-by: Kendall Garner <17521368+kgarner7@users.noreply.github.com>
* [enhancement]: Support toggling Album/Track view for gneres
The _primary_ purpose of this PR is to enable viewing tracks OR albums for genres.
This has a few requirements:
1. Ability to set default route for genres, **except** when already on song/album page
2. Ability to toggle between album and genre view
3. Fixed refresh for genre ID
Additionally, there was some refactoring:
- Since the *-list-headers had very similar functions for search, export that as a hook instead
* also use hook for album artist
* support switching albumartist tracks/albums
* remove toggle on song/album list, simplify logic
- Previously, the search page would render initial page in one order, but search itself would be different order
This is resolved by having both virtual-table and search-header using listStoreKey
- When double clicking, now enqueue all the songs using the same sort
- Reset the search when clearing
Resolves#536.
With the previous implementation, next/previous would first update
the current queue and then call next/previous. However, since these were
asynchronous calls it was very likely that the second calls would fail
(and a test of adding delay showed that it actually caused a double skip).
This PR resolves this by just removing the prev/next.
Small other fixes:
- setQueue + pause -> setQueue(..., true)
- make MPV and web player have the same behavior for (pause/stop) where appropriate