* fix(tautulli): fetch additional user history as necessary to return 20 unique media
* refactor: rename var for clarity
* refactor: make single DB query for recently watched media
* fix: resolve query builder weirdness
* refactor: use find instead of qb
* refactor: minor refactor
* fix: also find 4K rating keys
* feat: media/user watch history data via Tautulli
* fix(frontend): only display slideover cog button if there is media to manage
* fix(lang): tweak permission denied messages
* refactor: reorder Media section in slideover
* refactor: use new Tautulli stats API
* fix(frontend): do not attempt to fetch data when user lacks req perms
* fix: remove unneccessary get_user requests
* feat(frontend): display user avatars
* feat: add external URL setting
* feat: add play counts for past week/month
* fix(lang): tweak strings
Co-authored-by: Ryan Cohen <ryan@sct.dev>
* feat(api): allow importing of only selected Plex users
* feat(frontend): modal for importing Plex users
* feat: add alert if 'Enable New Plex Sign-In' setting is enabled
* refactor: fetch all existing Plex users in a single DB query
Co-authored-by: Ryan Cohen <ryan@sct.dev>
* feat(search): search by id
This adds the ability to search by ID (starting with TMDb ID).
Since there doesn't seem to be way of searching across movies, tv and persons,
I have to search through all 3 and use the first one in the order: movie -> tv -> person
Searching by ID is triggered using a 'prefix' just like in the *arrs.
* fix: missed some refactoring
* feat(search): use locale language
* feat(search): search using imdb id
* feat(search): search using tvdb id
* fix: alias type import
* fix: missed some refactoring
* fix(search): account for id being a string
* feat(search): account for movies/tvs/persons with the same id
* feat(search): remove non-null assertion
Co-authored-by: Ryan Cohen <ryan@sct.dev>
* feat(servarr): auto fill base url when testing service if missing
This will fill the base URL of the *arr service only if it's missing and the base URL hasn't been
provided beforehand
* fix(servarr): replace redundant check
* fix(servarr): suggested changes
* feat(lang): add Greek & Polish display languages
Also:
* rename zh-TW display language to 繁體中文
* fix plurality of AvailableLocale type name
* consistently use 'en' as fallback/default language
* revert(lang): remove Polish display language due to lack of translation activity
* fix: fetch localized person details from TMDb
* feat: include DOB, hometown, and alternate names on person detail pages
* fix: remove unnecessary ternary operator
* fix(ui): don't display AKA when empty
* feat: map AniDB IDs from Hama agent to tvdb/tmdb/imdb IDs
re #453
* refactor: removes sync job for AnimeList, load mapping on demand
* refactor: addressing review comments, using typescript types for xml parsing
* refactor: make sure sync job does not update create same tvshow/movie twice
Hama agent can have same tvdbid it for different library items - for example
when user stores different seasons for same tv show separately. This change
adds "AsyncLock" that guarantees code in callback runs for same id fully,
before running same callback next time.
* refactor: do not use season 0 tvdbid for tvshow from mapping file
* refactor: support multiple imdb mappings for same anidb entry
* refactor: add debug log for missing tvdb entries in tmdb lookups from anidb/hama agent
When a movie or series is added with radarr or sonarr, if it fails, this changes the media state to
unknown and sends a notification to admins. Client side this will look like a failed state along
with a retry button that will delete the request and re-queue it.
* feat(frontend): person API call - details, combined credits
* feat(frontend): add next for error handling + remove conditional
* feat(frontend): add status code to next error
Adds a "The Movie DB" api wrapper for some basic requests (search/get movie details/get tv details).
Also adds a search endpoint to our api and mappers to convert the tmdb results