* feat(linked-accounts): create page and display linked media server accounts
* feat(dropdown): add new shared Dropdown component
Adds a shared component for plain dropdown menus, based on the headlessui Menu component. Updates
the `ButtonWithDropdown` component to use the same inner components, ensuring that the only
difference between the two components is the trigger button, and both use the same components for
the actual dropdown menu.
* refactor(modal): add support for configuring button props
* feat(linked-accounts): add support for linking/unlinking jellyfin accounts
* feat(linked-accounts): support linking/unlinking plex accounts
* fix(linked-accounts): probibit unlinking accounts in certain cases
Prevents the primary administrator from unlinking their media server account (which would break
sync). Additionally, prevents users without a configured local email and password from unlinking
their accounts, which would render them unable to log in.
* feat(linked-accounts): support linking/unlinking emby accounts
* style(dropdown): improve style class application
* fix(server): improve error handling and API spec
* style(usersettings): improve syntax & performance of user password checks
* style(linkedaccounts): use applicationName in page description
* fix(linkedaccounts): resolve typo
* refactor(app): remove RequestError class
* feat: create the basis for the override rules
* feat: add support for sonarr and keywords to override rules
* feat: apply override rules in the media request
* feat: add users to override rules
* fix: save the settings modified by the override rules
* fix: resolve type errors
* style: run prettier
* fix: add missing migration
* fix: correct sonarr override rules
* fix: create PostgreSQL migration and fix SQLite migration
* fix: resolve type naming and fix i18n issue
* fix: remove unrelated changes to the PR
Previously, the "Play on Jellyfin" or "Watch Trailers" buttons used the onClick event and
window.open to open links, instead of using 'a' elements with a href.
* fix: cache Jellyfin/Emby avatars from API
Previously, avatars were cached using image links from Jellyfin/Emby. Now, avatar images are
obtained directly from the API to avoid some configuration bugs.
* fix: update avatar on new login
* fix: rewrite avatarproxy and CachedImage
Avatar proxy was allowing every request to be proxied, no matter the original ressource's origin or
filetype. This PR fixes it be allowing only relevant resources to be cached, i.e. Jellyfin/Emby
images and TMDB images.
fix#1012, #1013
* fix: resolve CodeQL error
* fix: resolve CodeQL error
* fix: resolve review comments
* fix: resolve review comment
* fix: resolve CodeQL error
* fix: update imageproxy path
* refactor: proxy and cache user avatar images
* fix: extract keys
* fix: set avatar image URL
* fix: show the correct avatar in the list of available users in advanced request
* fix(s): set correct src URL for cached image
* fix: remove unexpired unused image when a user changes their avatar
* fix: requested changes
* refactor: use 'mime' package to detmerine file extension
* style: grammar
* refactor: checks if the default avatar is cached to avoid creating duplicates for different users
* fix: fix vulnerability
* fix: fix incomplete URL substring sanitization
* refactor: only cache avatar with http url protocol
* fix: remove log and correctly set the if statement for the cached image component
* fix: avatar images not showing on issues page
* style: formatting
---------
Co-authored-by: JoaquinOlivero <joaquin.olivero@hotmail.com>
* feat: blacklist media items
re #490
* feat: blacklist media items
* feat: blacklist media items
* style: formatting
* refactor: close the manage slide-over when the media item is removed from the blacklist
* fix: fix media data in the db when blacklisting an item
* refactor: refactor component to accept show boolean
* refactor: hide watchlist button in the media page when it's blacklisted. Also add a blacklist button
* style: formatting
---------
Co-authored-by: JoaquinOlivero <joaquin.olivero@hotmail.com>
* refactor: update Next.js and React.js
* refactor: update Next.js images
* refactor: update ESLint rules and fix warnings/errors
* fix: remove old intl polyfill
* fix: add proper size to next/image components
* fix: adjust full-size for next/image components
* fix: temporary allow all domains for image optimization
* build: fixes an issue where dev env could lead to javascript heap out of memory
* fix: resolve webpack cache issue with country-flag-icons
* refactor: switch compiler from Babel to SWC
* fix: resize logo in sidebar
* fix: break word on long path to avoid text overflow
* chore: added sharp for production image optimisation
* fix: change extract script for i18n to a custom script
* fix: resolve GitHub CodeQL alert
* chore: temporarily remove builds for ARMv7
* fix: resize avatar images
* refactor: update Node.js to v20
* fix: resolve various UI issues
* build: migrate yarn to pnpm and restrict engine to node@^20.0.0
* ci: specify the pnpm version to use in workflow actions
* ci: fix typo in pnpm action-setup for cypress workflow
* test(cypress): use pnpm instead of yarn
* style: ran prettier on pnpm-lock
* ci(cypress): setup nodejs v20 in cypress workflow
* ci: pnpm cache to reduce install time
* ci: use sh shell to get pnpm store directory
* build(dockerfile): migrate to pnpm from yarn in docker builds
* build(dockerfile): copy the proper pnpm lockfile
* build: install pnpm for all platforms
* build(dockerfile): remove unnecessary `&&` on apk installation steps
* build: migrate pnpm 8 to 9
* build(dockerfile): add node-gyp back in
* build(dockerfile): install node-gyp through npm
* build(dockerfile): ignore scripts to not run husky install when devdependencies are pruned
* build: migrate to pnpm from yarn
* chore: remove a section that is no longer relevant
---------
Co-authored-by: fallenbagel <98979876+Fallenbagel@users.noreply.github.com>
This fix addresses an issue on the Watchlist page where changes to the watchlist were not
immediately reflected. Previously, after removing an item from the watchlist, the update
required a full page reload or revalidating upon focusing the window or tab. With this fix,
the watchlist now correctly mutates and updates in real-time, providing a seamless user
experience.
This fix resolves a Watchlist page bug where the isAddedToWatchlist prop was missing.
Without this prop, the removal button for watchlist items was absent. In this fix, the
isAddedToWatchlist prop is re-added and set to true, allowing users to remove items from
their local watchlist directly on the Watchlist page.
* fix(ui): remove opacity classes from transition enter and leave props
The flickering was caused by the opacity classes in the `leave` prop to take effect as the
transition ends; when the `leaveTo` prop classes are no longer applied, but the `leave` prop classes
are still applied.
* fix(ui): resolve transition issues for all components
1. Remove opacity classes from `enter` and `leave` props
2. Fix some class name typos
3. Remove transform classes since those are automatically applied as from TailwindCSS v3.0
4. Narrow down `transition` classes to only the properties being transitioned in Transition components
* fix(deps): update dependency @heroicons/react to v2
* fix: update imports and fix icon name changes for heroicons
* fix: also update MiniStatusBadge to use new check icon
* fix: update last place with old import
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: sct <ryan@sct.dev>
* fix(ui): hide available media on person page
* fix(ui): set correct label for image cache settings
* fix(ui): disable status badge tooltip for collections
* fix(ui): replace empty space when no episodes in season
* fix: suggested changes
* fix(jobs): set watchlist sync to short interval
* chore: run i18n:extract
* fix: suggested changes
* feat(frontend): open media management slideover on status badge click
* fix(frontend): use Link component for in-app badge links
* fix: check for query param value of '1'
* fix: correct query param check
* fix: available badges should still link to Plex
* fix(api): fix requestedBy logic in request edits
* fix(frontend): do not display empty advanced request options box
* fix(frontend): set max height on modal backdrop