diff --git a/README.md b/README.md
index 5bb4f900..30b33db5 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# MediaTracker · [](https://github.com/bonukai/MediaTracker/blob/main/LICENSE.md) [](https://gitter.im/bonukai/MediaTracker?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [](https://crowdin.com/project/mediatracker) [](https://hub.docker.com/r/bonukai/mediatracker) [](https://hub.docker.com/r/bonukai/mediatracker) [](https://www.codefactor.io/repository/github/bonukai/mediatracker) [](https://codecov.io/gh/bonukai/MediaTracker)
-Self hosted platform for tracking movies, tv shows, video games, books and audiobooks, highly inspired by [flox](https://github.com/devfake/flox)
+Self hosted platform for tracking movies, tv shows, video games, books, audiobooks and music albums, highly inspired by [flox](https://github.com/devfake/flox)
# Demo
@@ -150,6 +150,8 @@ docker run -p 7481:7481 mediatracker
| [IGDB](https://www.igdb.com/)\* | video game | ✗ |
| [Audible API](https://audible.readthedocs.io/en/latest/misc/external_api.html) | audiobooks | ✓ |
| [Open Library](https://openlibrary.org/) | books | ✗ |
+| [MusicBrainz](https://musicbrainz.org/) | music | ✗ |
+
\* IGDB has a limit of 4 requests per second. Because of that IGDB API key is not provided with MediaTracker, it can be acquired [here](https://api-docs.igdb.com/#account-creation) and set in [http://localhost:7481/#/settings/configuration](http://localhost:7481/#/settings/configuration)
diff --git a/app.json b/app.json
index a92439b1..5c1facb7 100644
--- a/app.json
+++ b/app.json
@@ -1,6 +1,6 @@
{
"name": "MediaTracker",
- "description": "Self hosted media tracker for movies, tv shows, video games, books and audiobooks",
+ "description": "Self hosted media tracker for movies, tv shows, video games, books, audiobooks, and music albums",
"repository": "https://github.com/bonukai/MediaTracker",
"stack": "container",
"env": {
diff --git a/client/src/Router.tsx b/client/src/Router.tsx
index 4ee0d825..9b85683b 100644
--- a/client/src/Router.tsx
+++ b/client/src/Router.tsx
@@ -75,10 +75,14 @@ export const MyRouter: FunctionComponent = () => {
path="/audiobooks"
element={}
/>
+ }
+ />
}
+ element={}
/>
= (props) => {
- const { mediaItem, season, episode, useSeasonAndEpisodeNumber } = {
- useSeasonAndEpisodeNumber: false,
- ...props,
- };
-
- return (
- <>
- (
-
- {isAudiobook(mediaItem) && Add to listened history}
- {isBook(mediaItem) && Add to read history}
- {isVideoGame(mediaItem) && Add to played history}
- {isMovie(mediaItem) && Add to seen history}
- {isTvShow(mediaItem) &&
- (useSeasonAndEpisodeNumber ? (
- episode ? (
-
- Add {formatEpisodeNumber(episode)} to seen history
-
- ) : season ? (
-
- Add {formatSeasonNumber(season)} to seen history
-
- ) : (
- Add to seen history
- )
- ) : episode ? (
- Add episode to seen history
- ) : season ? (
- Add season to seen history
- ) : (
- Add to seen history
- ))}
-
- (await Confirm(
- plural(count, {
- one: 'Do you want to remove # seen history entry?',
- other: 'Do you want to remove all # seen history entries?',
- })
- )) &&
- markAsUnseen({
- mediaItem: mediaItem,
- season: season,
- episode: episode,
- seenId: seenId,
- })
- }
- >
- {isAudiobook(mediaItem) && Remove from listened history}
- {isBook(mediaItem) && Remove from read history}
- {isVideoGame(mediaItem) && Remove from played history}
- {isMovie(mediaItem) && Remove from seen history}
- {isTvShow(mediaItem) &&
- (episode ? (
- Remove episode from seen history
- ) : season ? (
- Remove season from seen history
- ) : (
- Remove from seen history
- ))}
-
+ {isAudiobook(mediaItem) && Add to listened history}
+ {isBook(mediaItem) && Add to read history}
+ {isMusic(mediaItem) && Add to listened history}
+ {isVideoGame(mediaItem) && Add to played history}
+ {isMovie(mediaItem) && Add to seen history}
+ {isTvShow(mediaItem) &&
+ (useSeasonAndEpisodeNumber ? (
+ episode ? (
+
+ Add {formatEpisodeNumber(episode)} to seen history
+
+ ) : season ? (
+
+ Add {formatSeasonNumber(season)} to seen history
+
+ ) : (
+ Add to seen history
+ )
+ ) : episode ? (
+ Add episode to seen history
+ ) : season ? (
+ Add season to seen history
+ ) : (
+ Add to seen history
+ ))}
+
+ (await Confirm(
+ plural(count, {
+ one: 'Do you want to remove # seen history entry?',
+ other: 'Do you want to remove all # seen history entries?',
+ })
+ )) &&
+ markAsUnseen({
+ mediaItem: mediaItem,
+ season: season,
+ episode: episode,
+ seenId: seenId,
+ })
+ }
+ >
+ {isAudiobook(mediaItem) && Remove from listened history}
+ {isBook(mediaItem) && Remove from read history}
+ {isMusic(mediaItem) && Remove from listened history}
+ {isVideoGame(mediaItem) && Remove from played history}
+ {isMovie(mediaItem) && Remove from seen history}
+ {isTvShow(mediaItem) &&
+ (episode ? (
+ Remove episode from seen history
+ ) : season ? (
+ Remove season from seen history
+ ) : (
+ Remove from seen history
+ ))}
+
+
+ {data.music.items} albums (
+ {data.music.plays} plays)
+
+
+
+ )}
)}
>
diff --git a/client/src/i18n/locales/da/translation.json b/client/src/i18n/locales/da/translation.json
index b1f37860..3129e530 100644
--- a/client/src/i18n/locales/da/translation.json
+++ b/client/src/i18n/locales/da/translation.json
@@ -3,6 +3,7 @@
"<0><1/> 0>playing": "<0><1/> 0> afspiller",
"<0><1/> 0>reading": "<0><1/> 0> læser",
"<0><1/> 0>watching": "<0><1/> 0> afspiller",
+ "<0>{0}0> albums (<1>{1}1> plays)": "",
"<0>{0}0> audiobooks (<1>{1}1> plays)": "<0>{0}0> lydbøger (<1>{1}1> afspilninger)",
"<0>{0}0> books (<1>{1}1> reads)": "<0>{0}0> bøger (<1>{1}1> læste)",
"<0>{0}0> episodes (<1>{1}1> plays of <2>{2}2> shows)": "<0>{0}0> episoder (<1>{1}1> afspilninger af <2>{2}2> serier)",
@@ -71,13 +72,14 @@
"Games": "Spil",
"General": "Generelt",
"Go to <0>https://www.goodreads.com/review/list0> and copy RSS url from the bottom of the page": "Gå til <0>https://www.goodreads.com/review/list0> og kopier RSS-url'en fra bunden af siden",
+ "Go to <0>{0}0> and enter following code: <1>{1}1>": "",
"Go to <0>{0}0> and enter following code: {1}": "Gå til <0>{0}0> og insæt følgende: {1}",
"Gotify server url": "Gotify server url",
"Hide overview of unseen seasons": "Skjul oversigt over uafspillede sæsoner",
"Hide title of unseen episodes": "Skjul titel på uafspillede sæsoner",
"Home": "Hjem",
"Http": "Http",
- "I am listening it": "Jeg lytter til den",
+ "I am listening to it": "Jeg lytter til den",
"I am playing it": "Jeg spiller det",
"I am reading it": "Jeg læser den",
"I am watching it": "Jeg ser den",
@@ -102,6 +104,10 @@
"Last read at {0}": "Sidst læst den {0}",
"Last seen": "Sidst afspillet",
"Last seen at {0}": "Sidst afspillet den {0}",
+ "List {0} - episodes": "",
+ "List {0} - movies": "",
+ "List {0} - seasons": "",
+ "List {0} - shows": "",
"List: {0}": "Liste: {0}",
"Listened": "Afspillet",
"Listened at {0}": "Afspillet den {0}",
@@ -121,6 +127,7 @@
"Movie": "Film",
"Movies": "Film",
"Movies, shows, seasons, episodes, books, audiobooks and video games I plan to watch/read/listen/play": "Film, Tv-shows, sæsoner, episoder, bøger, lydbøger og videspil jeg har planer om at se/læse/lytte til/spille",
+ "Music": "",
"My rating": "Min bedømmelse",
"Name": "Navn",
"Network": "Netværk",
@@ -132,6 +139,7 @@
"No": "Nej",
"No date": "Ingen dato",
"No more logs": "Der er ikke mere i loggen",
+ "Not imported items": "",
"Notifications": "Notifikationer",
"Now": "Nu",
"Number of episodes": "Antal episoder",
@@ -157,6 +165,10 @@
"Rated": "Bedømt",
"Rating": "Bedømmelse",
"Ratings": "Bedømmelser",
+ "Ratings - episodes": "",
+ "Ratings - movies": "",
+ "Ratings - seasons": "",
+ "Ratings - shows": "",
"Read": "Læs",
"Read at {0}": "Læst den {0}",
"Read history": "Læsehistorik",
@@ -196,6 +208,8 @@
"Seasons": "Sæsoner",
"Seen at {0}": "Set den {0}",
"Seen history": "Historik",
+ "Seen history - episodes": "",
+ "Seen history - movies": "",
"Select": "Vælg",
"Select date": "Vælg dato",
"Send notification for episodes releases": "Send notifikation for nyudgivne episoder",
@@ -242,6 +256,11 @@
"Warning": "Advarsel",
"Watched": "Set",
"Watchlist": "Overvågningsliste",
+ "Watchlist - episodes": "",
+ "Watchlist - movies": "",
+ "Watchlist - season": "",
+ "Watchlist - shows": "",
+ "Webhook URL": "",
"What is the last episode of \"{0}\" you see?": "Hvilken episode af \"{0}\" har du sidst set?",
"What is the last episode you see?": "Hvilken episode så du sidst?",
"When did you listen it?": "Hvornår lyttede du til det?",
@@ -252,6 +271,7 @@
"When did you read it?": "Hvornår læste du den?",
"When did you see \"{0}\"?": "Hvornår så du \"{0}\"?",
"When did you see it?": "Hvornår så du den?",
+ "Where to watch": "",
"Yes": "Ja",
"import": "importér",
"{0, plural, one { Found # item for query \"<0>{searchQuery}0>\"} other { Found # items for query \"<1>{searchQuery}1>\"}}": "{0, plural, one { Fandt # punkt for forespørgslen \"<0>{searchQuery}0>\"} other { Fandt # punkt i forespørgslen \"<1>{searchQuery}1>\"}}",
diff --git a/client/src/i18n/locales/de/translation.json b/client/src/i18n/locales/de/translation.json
index 6ec169cc..ee2f8df3 100644
--- a/client/src/i18n/locales/de/translation.json
+++ b/client/src/i18n/locales/de/translation.json
@@ -3,6 +3,7 @@
"<0><1/> 0>playing": "<0><1/> 0>spiele gerade\n",
"<0><1/> 0>reading": "<0><1/> 0>lese gerade",
"<0><1/> 0>watching": "<0><1/> 0>schaue gerade",
+ "<0>{0}0> albums (<1>{1}1> plays)": "",
"<0>{0}0> audiobooks (<1>{1}1> plays)": "<0>{0}0> Hörbücher (<1>{1}1> abgespielt)\n",
"<0>{0}0> books (<1>{1}1> reads)": "<0>{0}0> Bücher (<1>{1}1> gelesen)",
"<0>{0}0> episodes (<1>{1}1> plays of <2>{2}2> shows)": "<0>{0}0> Folgen (<1>{1}1> geschaut von <2>{2}2> Serien)",
@@ -79,7 +80,7 @@
"Hide title of unseen episodes": "Titel der ungesehenen Folgen ausblenden",
"Home": "Startseite",
"Http": "Http",
- "I am listening it": "Ich höre es gerade",
+ "I am listening to it": "Ich höre es gerade",
"I am playing it": "Ich spiele es gerade",
"I am reading it": "Ich lese es gerade",
"I am watching it": "Ich schaue es gerade",
@@ -127,6 +128,7 @@
"Movie": "Film",
"Movies": "Filme",
"Movies, shows, seasons, episodes, books, audiobooks and video games I plan to watch/read/listen/play": "Filme, Serien, Staffeln, Folgen, Bücher, Hörbücher und Videospiele, die ich plane zu sehen/lesen/hören oder spielen möchte",
+ "Music": "",
"My rating": "Meine Bewertung",
"Name": "Name",
"Network": "Sender",
diff --git a/client/src/i18n/locales/en/translation.json b/client/src/i18n/locales/en/translation.json
index d07c322d..943be738 100644
--- a/client/src/i18n/locales/en/translation.json
+++ b/client/src/i18n/locales/en/translation.json
@@ -3,6 +3,7 @@
"<0><1/> 0>playing": "<0><1/> 0>playing",
"<0><1/> 0>reading": "<0><1/> 0>reading",
"<0><1/> 0>watching": "<0><1/> 0>watching",
+ "<0>{0}0> albums (<1>{1}1> plays)": "<0>{0}0> albums (<1>{1}1> plays)",
"<0>{0}0> audiobooks (<1>{1}1> plays)": "<0>{0}0> audiobooks (<1>{1}1> plays)",
"<0>{0}0> books (<1>{1}1> reads)": "<0>{0}0> books (<1>{1}1> reads)",
"<0>{0}0> episodes (<1>{1}1> plays of <2>{2}2> shows)": "<0>{0}0> episodes (<1>{1}1> plays of <2>{2}2> shows)",
@@ -79,7 +80,7 @@
"Hide title of unseen episodes": "Hide title of unseen episodes",
"Home": "Home",
"Http": "Http",
- "I am listening it": "I am listening it",
+ "I am listening to it": "I am listening to it",
"I am playing it": "I am playing it",
"I am reading it": "I am reading it",
"I am watching it": "I am watching it",
@@ -127,6 +128,7 @@
"Movie": "Movie",
"Movies": "Movies",
"Movies, shows, seasons, episodes, books, audiobooks and video games I plan to watch/read/listen/play": "Movies, shows, seasons, episodes, books, audiobooks and video games I plan to watch/read/listen/play",
+ "Music": "Music",
"My rating": "My rating",
"Name": "Name",
"Network": "Network",
diff --git a/client/src/i18n/locales/es/translation.json b/client/src/i18n/locales/es/translation.json
index 0b2bd78a..c1b904e4 100644
--- a/client/src/i18n/locales/es/translation.json
+++ b/client/src/i18n/locales/es/translation.json
@@ -3,6 +3,7 @@
"<0><1/> 0>playing": "<0><1/> 0>jugando",
"<0><1/> 0>reading": "<0><1/> 0>leyendo",
"<0><1/> 0>watching": "<0><1/> 0>viendo",
+ "<0>{0}0> albums (<1>{1}1> plays)": "",
"<0>{0}0> audiobooks (<1>{1}1> plays)": "<0>{0}0> audiolibros (<1>{1}1> reproducciones)",
"<0>{0}0> books (<1>{1}1> reads)": "<0>{0}0> libros (<1>{1}1> lecturas)",
"<0>{0}0> episodes (<1>{1}1> plays of <2>{2}2> shows)": "<0>{0}0> episodios (<1>{1}1> reproducciones de <2>{2}2> series)",
@@ -79,7 +80,7 @@
"Hide title of unseen episodes": "Ocultar el título de episodios no vistos",
"Home": "Inicio",
"Http": "Http",
- "I am listening it": "Lo estoy escuchando",
+ "I am listening to it": "Lo estoy escuchando",
"I am playing it": "Lo estoy jugando",
"I am reading it": "Lo estoy leyendo",
"I am watching it": "La estoy viendo",
@@ -127,6 +128,7 @@
"Movie": "Película",
"Movies": "Películas",
"Movies, shows, seasons, episodes, books, audiobooks and video games I plan to watch/read/listen/play": "Películas, programas, temporadas, episodios, libros, audiolibros y videojuegos que tengo planeado ver/leer/escuchar/jugar",
+ "Music": "",
"My rating": "Mi puntuación",
"Name": "Nombre",
"Network": "Canal",
diff --git a/client/src/i18n/locales/fr/translation.json b/client/src/i18n/locales/fr/translation.json
index f01689a9..55790238 100644
--- a/client/src/i18n/locales/fr/translation.json
+++ b/client/src/i18n/locales/fr/translation.json
@@ -3,10 +3,13 @@
"<0><1/> 0>playing": "<0><1/> 0>joué",
"<0><1/> 0>reading": "<0><1/> 0>lu",
"<0><1/> 0>watching": "<0><1/> 0>vu",
+ "<0>{0}0> albums (<1>{1}1> plays)": "",
"<0>{0}0> audiobooks (<1>{1}1> plays)": "<0>{0}0> audiobooks (<1>{1}1> joués)",
"<0>{0}0> books (<1>{1}1> reads)": "<0>{0}0> livres (<1>{1}1> lus)",
+ "<0>{0}0> episodes (<1>{1}1> plays of <2>{2}2> shows)": "",
"<0>{0}0> movies (<1>{1}1> plays)": "<0>{0}0> films (<1>{1}1> vus)",
"<0>{0}0> video games (<1>{1}1> plays)": "<0>{0}0> jeux vidéos (<1>{1}1> joués)",
+ "API keys can be acquired here": "",
"About": "A propos",
"Access Token": "Jeton d'accès",
"Add \"{0}\" to list": "Ajouté \"{0}\" à la liste",
@@ -16,12 +19,18 @@
"Add season to list": "Ajouter la saison à la liste",
"Add season to seen history": "Ajouter la saison à l'historique",
"Add to list": "Ajouter à la liste",
+ "Add to listened history": "",
+ "Add to played history": "",
+ "Add to read history": "",
+ "Add to seen history": "",
+ "Add to watchlist": "",
"Add token": "Ajouter le jeton",
"Add {0} to seen history": "Ajouter {0} à l'historique",
"All": "Tous",
"App token": "Jeton d'application",
"Application tokens": "Jetons d'application",
"Ascending": "Ascendant",
+ "At release date": "",
"Audible language": "Audible langue",
"Audiobook": "Audiobook",
"Audiobooks": "Audiobooks",
@@ -33,6 +42,7 @@
"Cancel": "Annuler",
"Change password": "Changer le mot de passe",
"Client ID": "Client ID",
+ "Client Secret": "",
"Close": "Fermer",
"Configuration": "Configuration",
"Confirm new password": "Confirmer le nouveau mot de passe",
@@ -55,16 +65,31 @@
"Episode": "Épisode",
"Episode {0} {1}": "Épisode {0} {1}",
"Episodes": "Épisodes",
+ "Episodes page": "",
"Error": "Erreur",
"Exporting": "En cours d'export",
+ "First unwatched episode": "",
"Games": "Jeux vidéos",
"General": "Général",
+ "Go to <0>https://www.goodreads.com/review/list0> and copy RSS url from the bottom of the page": "",
+ "Go to <0>{0}0> and enter following code: <1>{1}1>": "",
+ "Gotify server url": "",
"Hide overview of unseen seasons": "Masquer l'aperçu des saisons non vues",
"Hide title of unseen episodes": "Masquer les titres des épisodes non vus",
"Home": "Accueil",
"Http": "Http",
+ "I am listening to it": "",
+ "I am playing it": "",
+ "I am reading it": "",
+ "I am watching it": "",
+ "I do not remember": "",
+ "I finished listening it": "",
+ "I finished playing it": "",
+ "I finished reading it": "",
+ "I finished watching it": "",
"IGDB credentials": "Identifiants IGDB",
"Import": "Importer",
+ "Import from": "",
"Imported": "Importé",
"Importing": "En cours d'import",
"In progress": "En cours",
@@ -72,6 +97,20 @@
"Info": "Information",
"Key": "Clé",
"Language": "Langue",
+ "Last airing": "",
+ "Last listened at {0}": "",
+ "Last played at {0}": "",
+ "Last read at {0}": "",
+ "Last seen": "",
+ "Last seen at {0}": "",
+ "List {0} - episodes": "",
+ "List {0} - movies": "",
+ "List {0} - seasons": "",
+ "List {0} - shows": "",
+ "List: {0}": "",
+ "Listened": "",
+ "Listened at {0}": "",
+ "Listened history": "",
"Lists": "Listes",
"Loading": "Chargement",
"Login": "Se connecter",
@@ -85,25 +124,33 @@
"Media type": "Type de média",
"Movie": "Film",
"Movies": "Films",
+ "Movies, shows, seasons, episodes, books, audiobooks and video games I plan to watch/read/listen/play": "",
+ "Music": "Musique",
"My rating": "Mon évaluation",
"Name": "Nom",
"Network": "Réseau",
"New list": "Nouvelle liste",
"New password": "Nouveau mot de passe",
+ "Next airing": "",
"Next episode": "Prochain épisode",
"Next episode to watch": "Prochain épisode à regarder",
"No": "Non",
"No date": "Aucune date",
+ "No more logs": "",
+ "Not imported items": "",
"Notifications": "Notifications",
"Now": "Maintenant",
"Number of episodes": "Nombre d'épisodes",
"Number of pages": "Nombre de pages",
+ "On watchlist": "",
"Overview": "Aperçu",
"Password": "Mot de passe",
"Password has been changed": "Le mot de passe a été changé",
"Passwords do not match": "Les mots de passe ne correspondent pas",
+ "Platform": "",
"Played": "Joué",
"Played at {0}": "Joué le {0}",
+ "Played history": "",
"Preferences": "Préférences",
"Priority": "Priorité",
"Privacy": "Confidentialité",
@@ -113,9 +160,23 @@
"Public reviews": "Avis publics",
"RSS link": "Lien RSS",
"Rank": "Classement",
+ "Rated": "",
+ "Rating": "",
+ "Ratings": "",
+ "Ratings - episodes": "",
+ "Ratings - movies": "",
+ "Ratings - seasons": "",
+ "Ratings - shows": "",
"Read": "Lu",
"Read at {0}": "Lu le {0}",
+ "Read history": "",
+ "Receive notification for all media items on your watchlist, when its release date changes": "",
+ "Receive notification for all media items on your watchlist, when its status changes": "",
+ "Receive notification for all media items on your watchlist, when they are released, including new seasons for tv shows": "",
+ "Receive notification for all tv shows on your watchlist, when its number of seasons changes": "",
+ "Receive notification for every episode for all tv shows on your watchlist, when it's released": "",
"Recently added": "Récemment ajouté",
+ "Recently aired": "",
"Recently released": "Publié récemment",
"Recently watched": "Vu récemment",
"Register": "Enregistrer",
@@ -124,34 +185,61 @@
"Released <0/>": "Publié le <0/>",
"Remove \"{0}\" from watchlist?": "Supprimer \"{0}\" de la liste de lecture ?",
"Remove \"{0}{1}\" from watchlist?": "Supprimer \"{0}{1}\" de la liste de lecture?",
+ "Remove episode from seen history": "",
+ "Remove from listened history": "",
+ "Remove from played history": "",
+ "Remove from read history": "",
+ "Remove from seen history": "",
+ "Remove from watchlist": "",
+ "Remove season from seen history": "",
"Remove token": "Supprimer le jeton",
+ "Review by <0><1>{author}1>0> at {date}": "",
"Runtime": "Durée",
"Save": "Sauvegarder",
"Save list": "Enregistrer la liste",
"Save review": "Enregistrer l'avis",
"Search": "Rechercher",
+ "Search for items or <0>import0>": "",
"Search list": "Liste de recherche",
"Season": "Saison",
"Season {0}": "Saison {0}",
"Seasons": "Saisons",
+ "Seen at {0}": "",
+ "Seen history": "",
+ "Seen history - episodes": "",
+ "Seen history - movies": "",
"Select": "Sélectionner",
"Select date": "Sélectionner la date",
+ "Send notification for episodes releases": "",
+ "Send notification for releases": "",
+ "Send notification when number of seasons changes": "",
+ "Send notification when release date changes": "",
+ "Send notification when status changes": "",
"Server error: {errorMessage}": "Erreur serveur : {errorMessage}",
"Server language": "Langue du serveur",
"Server url (only for self hosting)": "url du serveur (uniquement pour l'auto-hébergement)",
+ "Set": "",
"Set progress": "Définir la progression",
"Settings": "Paramètres",
+ "Show your reviews to other users": "",
+ "Shows": "",
"Sort by": "Trier par",
"Sort order": "Ordre de tri",
"Source": "Source",
+ "Start over": "",
"Status": "Statut",
"Summary": "Résumé",
"S{0}": "S{0}",
"S{0}E{1}": "S{0}E{1}",
"TMDB language": "TMDB langue",
+ "There already exists a list with name \"{name}\"": "",
+ "This component can only be used with tv shows": "",
"Title": "Titre",
+ "To read": "",
+ "Topic": "",
"Total runtime": "Durée totale",
"Tv": "Tv",
+ "Uninitialized": "",
"Unrated": "Pas de note",
"Unseen episodes": "Episodes non vus",
"Unseen episodes count": "Episodes non vus",
@@ -166,6 +254,34 @@
"Warning": "Avertissement",
"Watched": "Vu",
"Watchlist": "Liste de lecture",
+ "Watchlist - episodes": "",
+ "Watchlist - movies": "",
+ "Watchlist - season": "",
+ "Watchlist - shows": "",
+ "Webhook URL": "",
+ "What is the last episode of \"{0}\" you see?": "",
+ "When did you listen to \"{0}\"?": "",
+ "When did you play \"{0}\"?": "",
+ "When did you read \"{0}\"?": "",
+ "When did you see \"{0}\"?": "",
+ "Where to watch": "",
"Yes": "Oui",
- "import": "importer"
+ "import": "importer",
+ "{0, plural, one { Found # item for query \"<0>{searchQuery}0>\"} other { Found # items for query \"<1>{searchQuery}1>\"}}": "",
+ "{0, plural, one {# item} other {# items}}": "",
+ "{0, plural, one {1 item} other {# items}}": "",
+ "{0, plural, one {Author} other {Authors}}": "",
+ "{0, plural, one {Genre} other {Genres}}": "",
+ "{0, plural, one {Listed on 1 list} other {Listed on # lists}}": "",
+ "{0, plural, one {Listened 1 time} other {Listened # times}}": "",
+ "{0, plural, one {Narrator} other {Narrators}}": "",
+ "{0, plural, one {Platform} other {platforms}}": "",
+ "{0, plural, one {Played 1 time} other {Played # times}}": "",
+ "{0, plural, one {Read 1 time} other {Read # times}}": "",
+ "{0, plural, one {Seen 1 time} other {Seen # times}}": "",
+ "{count, plural, one {Do you want to remove # seen history entry?} other {Do you want to remove all # seen history entries?}}": "",
+ "{duration, plural, one {minute} other {minutes}}": "",
+ "{numberOfItemsTotal, plural, one {1 item} other {# items}}": "",
+ "{value, plural, one {minute} other {minutes}}": "",
+ "{value, plural, one {page} other {pages}}": ""
}
\ No newline at end of file
diff --git a/client/src/i18n/locales/ko/translation.json b/client/src/i18n/locales/ko/translation.json
index d4509e9b..70768427 100644
--- a/client/src/i18n/locales/ko/translation.json
+++ b/client/src/i18n/locales/ko/translation.json
@@ -3,6 +3,7 @@
"<0><1/> 0>playing": "<0><1/> 0>플레이",
"<0><1/> 0>reading": "<0><1/> 0>감상",
"<0><1/> 0>watching": "<0><1/> 0>시청",
+ "<0>{0}0> albums (<1>{1}1> plays)": "",
"<0>{0}0> audiobooks (<1>{1}1> plays)": "<0>{0}0> 오디오북 (<1>{1}1>번 감상)",
"<0>{0}0> books (<1>{1}1> reads)": "<0>{0}0> 권 (<1>{1}1>번 읽음)",
"<0>{0}0> episodes (<1>{1}1> plays of <2>{2}2> shows)": "<0>{0}0> 에피소드 (<2>{2}2> 쇼, <1>{1}1>번 시청)",
@@ -79,7 +80,7 @@
"Hide title of unseen episodes": "시청하지 않은 에피소드 제목 숨기기",
"Home": "홈",
"Http": "HTTP",
- "I am listening it": "감상 중으로 설정",
+ "I am listening to it": "감상 중으로 설정",
"I am playing it": "플레이 중으로 설정",
"I am reading it": "감상 중으로 설정",
"I am watching it": "시청 중으로 설정",
@@ -127,6 +128,7 @@
"Movie": "영화",
"Movies": "영화",
"Movies, shows, seasons, episodes, books, audiobooks and video games I plan to watch/read/listen/play": "내가 보고/읽고/듣고/플레이하고자 하는 영화, TV 쇼, 시즌, 에피소드, 책, 오디오북 및 게임",
+ "Music": "",
"My rating": "내 평점",
"Name": "이름",
"Network": "네트워크",
diff --git a/client/src/i18n/locales/nl/translation.json b/client/src/i18n/locales/nl/translation.json
index 4a78bc26..fbc4dafc 100644
--- a/client/src/i18n/locales/nl/translation.json
+++ b/client/src/i18n/locales/nl/translation.json
@@ -79,7 +79,7 @@
"Hide title of unseen episodes": "Titel van onbekeken afleveringen verbergen",
"Home": "Startscherm",
"Http": "Http",
- "I am listening it": "Ik luister ernaar",
+ "I am listening to it": "Ik luister ernaar",
"I am playing it": "Ik ben het aan het spelen",
"I am reading it": "Ik ben het aan het lezen",
"I am watching it": "Ik kijk ernaar",
diff --git a/client/src/i18n/locales/pt/translation.json b/client/src/i18n/locales/pt/translation.json
index f2ad14c2..9747d555 100644
--- a/client/src/i18n/locales/pt/translation.json
+++ b/client/src/i18n/locales/pt/translation.json
@@ -1,4 +1,14 @@
{
+ "<0><1/> 0>listening": "",
+ "<0><1/> 0>playing": "",
+ "<0><1/> 0>reading": "",
+ "<0><1/> 0>watching": "",
+ "<0>{0}0> albums (<1>{1}1> plays)": "",
+ "<0>{0}0> audiobooks (<1>{1}1> plays)": "",
+ "<0>{0}0> books (<1>{1}1> reads)": "",
+ "<0>{0}0> episodes (<1>{1}1> plays of <2>{2}2> shows)": "",
+ "<0>{0}0> movies (<1>{1}1> plays)": "",
+ "<0>{0}0> video games (<1>{1}1> plays)": "",
"API keys can be acquired here": "Chaves de API podem ser obtidas aqui",
"About": "Acerca",
"Access Token": "Token de Acesso",
@@ -13,6 +23,7 @@
"Add to played history": "Adicionar ao histórico de reproduções",
"Add to read history": "Adicionar ao histórico de leituras",
"Add to seen history": "Adicionar ao histórico de visualizações",
+ "Add to watchlist": "",
"Add token": "Adicionar token",
"Add {0} to seen history": "Adicionar {0} ao histórico de visualizações",
"All": "Tudo",
@@ -40,6 +51,7 @@
"Copy to clipboard": "Copiar para a área de transferência",
"Current password": "Palavra-passe atual",
"Current password is incorrect": "A palavra-passe atual está incorreta",
+ "Currently reading": "",
"Custom date": "Data personalizada",
"Debug": "Depurar",
"Delete list": "Eliminar lista",
@@ -60,13 +72,14 @@
"Games": "Jogos",
"General": "Geral",
"Go to <0>https://www.goodreads.com/review/list0> and copy RSS url from the bottom of the page": "Navegue para <0>https://www.goodreads.com/review/list0> e copie o URL RSS da parte inferior da página",
+ "Go to <0>{0}0> and enter following code: <1>{1}1>": "",
"Go to <0>{0}0> and enter following code: {1}": "Vá a <0>{0}0> e introduza o seguinte código: {1}",
"Gotify server url": "URL do servidor Gotify",
"Hide overview of unseen seasons": "Ocultar visão geral de temporadas não vistas",
"Hide title of unseen episodes": "Ocultar título de episódios não vistos",
"Home": "Página inicial",
"Http": "HTTP",
- "I am listening it": "Estou a ouvir",
+ "I am listening to it": "Estou a ouvir",
"I am playing it": "Estou a reproduzir",
"I am reading it": "Estou a ler",
"I am watching it": "Estou a assistir",
@@ -90,6 +103,46 @@
"Last played at {0}": "Reproduzido pela última vez em {0}",
"Last read at {0}": "Lido pela última vez em {0}",
"Last seen": "Visto pela última vez",
+ "Last seen at {0}": "",
+ "List {0} - episodes": "",
+ "List {0} - movies": "",
+ "List {0} - seasons": "",
+ "List {0} - shows": "",
+ "List: {0}": "",
+ "Listened": "",
+ "Listened at {0}": "",
+ "Listened history": "",
+ "Lists": "",
+ "Loading": "",
+ "Login": "",
+ "Logout": "",
+ "Logs": "",
+ "Media type": "",
+ "Movie": "",
+ "Movies": "",
+ "Movies, shows, seasons, episodes, books, audiobooks and video games I plan to watch/read/listen/play": "",
+ "Music": "",
+ "My rating": "",
+ "Name": "",
+ "Network": "",
+ "New list": "",
+ "New password": "",
+ "Next airing": "",
+ "Next episode": "",
+ "Next episode to watch": "",
+ "No": "",
+ "No date": "",
+ "No more logs": "",
+ "Not imported items": "",
+ "Notifications": "",
+ "Now": "",
+ "Number of episodes": "",
+ "Number of pages": "",
+ "On watchlist": "",
+ "Overview": "",
+ "Password": "",
+ "Password has been changed": "",
+ "Passwords do not match": "",
"Platform": "Plataforma",
"Played": "Reproduzido",
"Played at {0}": "Reproduzido em {0}",
@@ -106,8 +159,124 @@
"Rated": "Classificado",
"Rating": "Classificação",
"Ratings": "Classificações",
+ "Ratings - episodes": "",
+ "Ratings - movies": "",
+ "Ratings - seasons": "",
+ "Ratings - shows": "",
"Read": "Lido",
"Read at {0}": "Lido em {0}",
"Read history": "Histórico de leitura",
- "Updating metadata": "A atualizar metadados"
+ "Receive notification for all media items on your watchlist, when its release date changes": "",
+ "Receive notification for all media items on your watchlist, when its status changes": "",
+ "Receive notification for all media items on your watchlist, when they are released, including new seasons for tv shows": "",
+ "Receive notification for all tv shows on your watchlist, when its number of seasons changes": "",
+ "Receive notification for every episode for all tv shows on your watchlist, when it's released": "",
+ "Recently added": "",
+ "Recently aired": "",
+ "Recently released": "",
+ "Recently watched": "",
+ "Register": "",
+ "Release <0/>": "",
+ "Release date": "",
+ "Released <0/>": "",
+ "Remove \"{0}{1}\" from watchlist?": "",
+ "Remove episode from seen history": "",
+ "Remove from listened history": "",
+ "Remove from played history": "",
+ "Remove from read history": "",
+ "Remove from seen history": "",
+ "Remove from watchlist": "",
+ "Remove season from seen history": "",
+ "Remove token": "",
+ "Review by <0><1>{author}1>0> at {date}": "",
+ "Runtime": "",
+ "Save": "",
+ "Save list": "",
+ "Save review": "",
+ "Search": "",
+ "Search for items or <0>import0>": "",
+ "Search list": "",
+ "Season": "",
+ "Season {0}": "",
+ "Seasons": "",
+ "Seen at {0}": "",
+ "Seen history": "",
+ "Seen history - episodes": "",
+ "Seen history - movies": "",
+ "Select": "",
+ "Select date": "",
+ "Send notification for episodes releases": "",
+ "Send notification for releases": "",
+ "Send notification when number of seasons changes": "",
+ "Send notification when release date changes": "",
+ "Send notification when status changes": "",
+ "Server error: {errorMessage}": "",
+ "Server language": "",
+ "Server url (only for self hosting)": "",
+ "Set": "",
+ "Set progress": "",
+ "Settings": "",
+ "Show your reviews to other users": "",
+ "Shows": "",
+ "Sort by": "",
+ "Sort order": "",
+ "Source": "",
+ "Start over": "",
+ "Status": "",
+ "Summary": "",
+ "S{0}": "",
+ "S{0}E{1}": "",
+ "TMDB language": "",
+ "There already exists a list with name \"{name}\"": "",
+ "This component can only be used with tv shows": "",
+ "Title": "",
+ "To read": "",
+ "Topic": "",
+ "Total runtime": "",
+ "Tv": "",
+ "Uninitialized": "",
+ "Unrated": "",
+ "Unseen episodes": "",
+ "Unseen episodes count": "",
+ "Upcoming": "",
+ "Update metadata": "",
+ "Updating metadata": "A atualizar metadados",
+ "User key": "",
+ "Username": "",
+ "Version": "",
+ "Video game": "",
+ "Waiting for authentication": "",
+ "Warning": "",
+ "Watched": "",
+ "Watchlist": "",
+ "Watchlist - episodes": "",
+ "Watchlist - movies": "",
+ "Watchlist - season": "",
+ "Watchlist - shows": "",
+ "Webhook URL": "",
+ "What is the last episode of \"{0}\" you see?": "",
+ "When did you listen to \"{0}\"?": "",
+ "When did you play \"{0}\"?": "",
+ "When did you read \"{0}\"?": "",
+ "When did you see \"{0}\"?": "",
+ "Where to watch": "",
+ "Yes": "",
+ "import": "",
+ "{0, plural, one { Found # item for query \"<0>{searchQuery}0>\"} other { Found # items for query \"<1>{searchQuery}1>\"}}": "",
+ "{0, plural, one {# item} other {# items}}": "",
+ "{0, plural, one {1 item} other {# items}}": "",
+ "{0, plural, one {Author} other {Authors}}": "",
+ "{0, plural, one {Genre} other {Genres}}": "",
+ "{0, plural, one {Listed on 1 list} other {Listed on # lists}}": "",
+ "{0, plural, one {Listened 1 time} other {Listened # times}}": "",
+ "{0, plural, one {Narrator} other {Narrators}}": "",
+ "{0, plural, one {Platform} other {platforms}}": "",
+ "{0, plural, one {Played 1 time} other {Played # times}}": "",
+ "{0, plural, one {Read 1 time} other {Read # times}}": "",
+ "{0, plural, one {Seen 1 time} other {Seen # times}}": "",
+ "{count, plural, one {Do you want to remove # seen history entry?} other {Do you want to remove all # seen history entries?}}": "",
+ "{duration, plural, one {minute} other {minutes}}": "",
+ "{numberOfItemsTotal, plural, one {1 item} other {# items}}": "",
+ "{value, plural, one {minute} other {minutes}}": "",
+ "{value, plural, one {page} other {pages}}": ""
}
\ No newline at end of file
diff --git a/client/src/pages/Details.tsx b/client/src/pages/Details.tsx
index 2b6877de..6254fb5e 100644
--- a/client/src/pages/Details.tsx
+++ b/client/src/pages/Details.tsx
@@ -23,6 +23,7 @@ import {
isAudiobook,
isBook,
isMovie,
+ isMusic,
isOnWatchlist,
isTvShow,
isVideoGame,
@@ -184,7 +185,7 @@ const ExternalLinks: FunctionComponent<{
/>
)}
- {mediaItem.audibleId && (
+ {mediaItem.audibleId && ( // TODO add music logo
{
>
{isMovie(mediaItem) && I am watching it}
{isBook(mediaItem) && I am reading it}
- {isAudiobook(mediaItem) && I am listening it}
+ {isAudiobook(mediaItem) && I am listening to it}
+ {isMusic(mediaItem) && I am listening to it}
{isVideoGame(mediaItem) && I am playing it}
)}
@@ -487,6 +489,9 @@ export const DetailsPage: FunctionComponent = () => {
{isAudiobook(mediaItem) && (
I finished listening it
)}
+ {isMusic(mediaItem) && (
+ I finished listening it
+ )}
{isVideoGame(mediaItem) && (
I finished playing it
)}
@@ -529,7 +534,7 @@ export const DetailsPage: FunctionComponent = () => {
)}
{mediaItem.lastSeenAt > 0 && (