The readme was not fitting for the current state of the client. Use
better futureproofing in the wording and link to wiki pages where
the most up-to-date information (like configuration settings) will live.
* Make the description framework agnostic, so we don't need to update it
in case we switch our desktop app bundler (for example).
* Add better description for end users. We were too developer centric.
* Add links to Wiki for all the pieces that are more susceptible of evolving.
* Add some clarification about how jellyfin-vue works
(add a note about jellyfin-web too) in regards to privacy,
since by what I read on Reddit,
many people assume the connections are not direct between their devices
and the target Jellyfin server.
* Made that privacy note really agnostic for how the client might be
served/distributed in the future (but hopefully I did it in a clear way).
* Clarify the "Getting started" and "Running a production build sections".
* Remove unused image assets. If they're needed in the future, we can simply use unplugin-icons
* Add deprecation notices
* Remove the canPlay check at playerElement: hls.js should handle that directly
These additional linting suites doesn't add new errors or warnings,
so they're good to have to prevent possible future problems
eslint-plugin-jsonc is also better maintained than eslint-plugin-json
Moves the content as is (although it must be updated to reflect Vue 3 upgrade)
to the wiki, where it will be more easily editable even by others if we want to, independently from the source code
* Upgrade to the new Vuetify 3.1.11, which fixes all missing VGrid types
* Upgrade axios and @jellyfin-sdk. Mismatched axios versions caused type errors
Show a v-progress-linear when an Axios request is happening or suspense
is loading content.
In a similar fashion to GitHub's and YouTube loading indicators
The page overflowed because unplugin-icons settled a size for the icon components.
With ``scale: 0`` this no longer happens.
Fixing that also fixed all the overflows present in the page.
The color of the playback buttons in the music player has been fixed by upgrading Vuetify
Merge redirection logic of music and video players into playerElement store
A middleware for handling direct URL access has been made, which will avoid
the player pages temporarily appearing after the splashscreen or if the user inputs the URL manually.
This will reduce resource usage.
For instance, useNow requests a lot of animation frames, which can be heavy when
invoked in multiple components.
Also, removed wildcard exports for stores (types now must be explicitly imported from the relevant store)
This is to avoid polluting the store exports. Just the new globals are allowed for wildcards.
Further changes:
* Components that can benefit from an shared state (like BlurhashImage) are refactored to use that.
* Fix#1888
Previously, if all the tasks were completed, they wouldn't disappear from the menu.
Now, completed tasks that live alongisde running tasks are also affected by this.
* Improve TS typechecking for locale values
* Add an automatic language mode to LocaleSwitcher
* Add an automatic color mode that follows browser color schema
* Fix tooltips in appbar
Remove computed properties and use proxy reactivity exclusively.
TODO: This store is still not fully reactive when data is returned through an Axios request.
* Concurrency errors happened when using a deep watcher in clientSettings
* The watcher location of all the stores have been moved into the constructor
* All the computed properties from the stores have been removed, as getters/setters are reactive
* Rename default import from remote plugin at Axios plugin
With the improvements on loading, items of the carousel would change after the component is instantiated.
However, there were some issues preventing the components from being reactive.
By migrating to Composition API, those reactivity issues are fixed.
* Update swiper to v9.X
* Fixed music changing when accessing fullscreen page
* Disable the navigation buttons when the swiper is at the end of beginning in swiper sections
* This commit lays the groundwork and adds some hints to some files, with ideas of how I see those features reimplemented for playback.
* Only music works at this point, but without AudioContext or any fancyness.
* Change folder layout from Players to Playback
* Don't use async storage
* Use arrow functions for TypeScript compatibility with this
* Add store keys as constants
* Fix defaultState being mutated using Object.assign as well, create a clone with lodash's cloneDeep
Check https://github.com/vueuse/vueuse/releases/tag/v9.12.0
Prior, socket required an string as a ref. As my PR has now been merged, undefined refs can be passed as well, so we can have the socket connect/disconnect behaviour working properly
When the available virtual buffer is bigger than the amount of items that we want to show, the incorrect slice bounds were used.
When the length of items is less than whatever buffer we had set, no virtual scrolling is used at all.
components.d.ts provides type support for components imported by unplugin-vue-components.
It needs to be commited to version control. However, any minor modification to components or moving files around modifies it.
As the Vue 3 branch is evolving so quickly, having it committed means that almost every commit will have modifications for it.
In order to keep a clear commit history, it's better to leave it ignored until before the Vue 3 migration's PR is merged
Adding @ as an import alias is something that was done in the project scaffolding.
Using @ it's easier in the keyboard than ~, as ~ typically requires double key taps, while @ is inputted directly in most keyboard layouts.
Replacing the imports was something left for the last moment, as it implied modifying a lot of files at once, which is something I wanted to keep for the final stages of the Vue 3 migration
Pinia was great in Vue 2. However, since in Vue 3 there's no longer a global instance,
doing reactivity and watching outside the app context is much easier and simplifies tremendously
our app initialization context (for things like playback watchers) and persistence.
Also, Pinia didn't allow us to be explicit with what we wanted to expose and, by default,
all the methods, state properties and getters were accessible by everyone. With TypeScript classes,
we have full control of the external visibility of every property and
how we want to expose everything (readonly or not readonly?)
We lose the ability to have DevTools support, but it's not like we used it that much anyway
* Wrap all the DOM population inside requestIdleCallback and requestAnimationFrame
* Fix slow scrolling
* Move types under a subdirectory
* Fix missing class in useResponsiveClasses JSDOC
* Remove useless rules from eslintrc
* Remove v-text usage
* Rework layout so the entire app is wrapped around v-app
* Remove useless script declaration in ItemCols
* Migrate PeopleList (previously named PersonList) to Composition API
* Migrate index page to Composition API
* Fix z-indexes of BlurhashImage
* Remove unnecessary computed propierties from app-bar-button-layout
* Migrate HomeSection to Composition API (fixes as well item popping)
* Migrate RelatedItems to Composition API, fixing a crash
* Update packages
* Allow the use of data-* attributes with strict template checking
* Use OverlayScrollbars for a consistent scrollbar experience
* Refactor ItemMenu to reduce function complexity
* Refactor Vuetify colors and styles to match Vuetify 3
* Fix color in WatchedIndicator
* Remove unused props in Card
* Add rgb use to all the CSS variables as Vuetify requests it
* Icon fixes
* Fix search bar styling
* Migrate ArtistTab to Composition API
* Reliability and logic improvements to BlurhashImage and fallback behaviour
* Fix order of main app bar and navigation drawer
* Add app bar to music playback page
* Migrate login page to Composition API
* Fix logic error in app-wide api availability
* Update v-menu activator for itemmenu
* Fix app bar icons
* Fix user views
* Migrate swiper
* Fix CORS issues with Vite
* Improve UserImage size handling (TODO: size in UserCard)
* Migrate more minor components to Composition API
For pages, we will still use vite-plugin-pages as it's stable and
unplugin-vue-router had issues with layouts. Using both won't increase the bundle
size, as unplugin-vue-router is not imported anywhere in the bundle.
We should keep a close track to both projects and just stick with one in the future.
* In Nuxt, lodash-es rendered a bigger bundle size than lodash, so we kept it. With full complete of our building tools, we can switch back to lodash-es and remove the eslint plugin