* Create a shared DragDrop Zone
- This zone allows the dropping of files
- The zone allows validation by parent
- The zone allows customisation like icon shown
* Import Settings
- Ability to import settings from a JSON file
- Validation to ensure file compatibility
- Visualiser for viewing string differences
* i18n
- Moved all hardcoded values to be en localised
* Zod / Validation
This commit contains the code to move settings to using ZOD, the reason for this is so that we can validate the settings schema that is being imported.
This commit also adds various validation and transforms to ensure the settings being reimported match values we expect.
I also removed the original crude validation and replaced it with the new ZOD parser that will handle this for us.
Finally the "styles-settings" component will listen to any external content updates and update its value, the reasoning is the external import wouldn't update the existing value.
- Split Settings schema into two parts, schema that is validated on import and schema that is not
- Schemas are merged to make the full SettingsStateSchema
* Migrate during validation
- Migration is done as part of validation
- Updated the store version to v10 as there has been changes to the settings
- Migrate will now add the fields from v9 to v10
- the build was failing due to ids not being mapped to their enum values
---------
Co-authored-by: Jeff <42182408+jeffvli@users.noreply.github.com>
In f07393c8 we enabled the MediaSession API, which from Chromium's side
brings its own native way of handling Global Media Keys. However, it
turns out having this enabled seemingly conflicts with Windows 11's SMTC
implementation when we also bind the Media Keys using Electron's Global
Hotkeys API (Windows 10 is apparently fine, but now EOL).
Globally passing `HardwareMediaKeyHandling` to `disable-features` was
considered, however using the MediaSession API requires
`HardwareMediaKeyHandling` to be enabled, so this is not an option.
Instead, with MediaSession enabled we need to let Chromium handle the
Media Keys, while without MediaSession we bind our own Global Hot Keys
for users that have them enabled in the settings.
Co-authored-by: Xudong Zhou <godzmichael@outlook.com>
* Add song and artist links to discord RPC
* use first artist name for artist link, full artist name for song link
* use first album artist for song link
* add discord rpc links setting
* simplify discord link settings
* fix setting description
* add musicbrainz links
* fix callback missing dependency
* use encodeURIComponent for lastfm links
Co-authored-by: Kendall Garner <17521368+kgarner7@users.noreply.github.com>
* split musicbrainz ids
* combine link settings
---------
Co-authored-by: Kendall Garner <17521368+kgarner7@users.noreply.github.com>
* Add autodiscovery for Jellyfin servers
* Remove debugging aids
you didn't see anything
* Fix linter errors
* Send a discovery packet to localhost too
* feat: add semantic selectors for now-playing media
This change adds unique class names to the elements that display the currently playing media information. This makes it easier for extension developers to parse the DOM and understand what media is playing.
The following classes have been added:
- `media-player`: The main player container.
- `player-cover-art`: The cover art of the playing track.
- `song-title`: The title of the playing track.
- `song-artist`: The artist of the playing track.
- `song-album`: The album of the playing track.
- `player-state-playing`/`player-state-paused`: The state of the player.
- `elapsed-time`: The elapsed time of the playing track.
- `total-duration`: The total duration of the playing track.
---------
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>