diff --git a/package.json b/package.json index 5a9904fc..7aa795f7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "movie-web", - "version": "3.0.8", + "version": "3.0.9", "private": true, "homepage": "https://movie.squeezebox.dev", "dependencies": { diff --git a/src/backend/providers/flixhq.ts b/src/backend/providers/flixhq.ts index da2910c0..c2a1b84b 100644 --- a/src/backend/providers/flixhq.ts +++ b/src/backend/providers/flixhq.ts @@ -8,10 +8,7 @@ import { } from "../helpers/streams"; import { MWMediaType } from "../metadata/types"; -// const flixHqBase = "https://api.consumet.org/movies/flixhq"; -// *** TEMPORARY FIX - use other instance -// SEE ISSUE: https://github.com/consumet/api.consumet.org/issues/326 -const flixHqBase = "https://c.delusionz.xyz/movies/flixhq"; +const flixHqBase = "https://api.consumet.org/meta/tmdb"; interface FLIXMediaBase { id: number; @@ -19,13 +16,6 @@ interface FLIXMediaBase { url: string; image: string; type: "Movie" | "TV Series"; -} - -interface FLIXTVSerie extends FLIXMediaBase { - seasons: number | null; -} - -interface FLIXMovie extends FLIXMediaBase { releaseDate: string; } @@ -48,6 +38,11 @@ const qualityMap: Record = { "1080": MWStreamQuality.Q1080P, }; +enum FlixHQMediaType { + MOVIE = "movie", + SERIES = "series", +} + registerProvider({ id: "flixhq", displayName: "FlixHQ", @@ -67,60 +62,47 @@ registerProvider({ ); const foundItem = searchResults.results.find((v: FLIXMediaBase) => { - if (media.meta.type === MWMediaType.MOVIE) { - if (v.type !== "Movie") return false; - const movie = v as FLIXMovie; - return ( - compareTitle(movie.title, media.meta.title) && - movie.releaseDate === media.meta.year - ); - } - if (media.meta.type === MWMediaType.SERIES) { - if (v.type !== "TV Series") return false; - const serie = v as FLIXTVSerie; - if (serie.seasons && media.meta.seasons) { - return ( - compareTitle(serie.title, media.meta.title) && - serie.seasons === media.meta.seasons.length - ); - } - return false; - } - return false; + if (v.type !== "Movie" && v.type !== "TV Series") return false; + return ( + compareTitle(v.title, media.meta.title) && + v.releaseDate === media.meta.year + ); }); if (!foundItem) throw new Error("No watchable item found"); - const flixId = foundItem.id; // get media info progress(25); - const mediaInfo = await proxiedFetch("/info", { + const mediaInfo = await proxiedFetch(`/info/${foundItem.id}`, { baseURL: flixHqBase, params: { - id: flixId, + type: + media.meta.type === MWMediaType.MOVIE + ? FlixHQMediaType.MOVIE + : FlixHQMediaType.SERIES, }, }); - if (!mediaInfo.episodes) throw new Error("No watchable item found"); + if (!mediaInfo.id) throw new Error("No watchable item found"); // get stream info from media progress(75); - // By default we assume it is a movie - let episodeId: string | undefined = mediaInfo.episodes[0].id; - if (media.meta.type === MWMediaType.SERIES) { + let episodeId: string | undefined; + if (media.meta.type === MWMediaType.MOVIE) { + episodeId = mediaInfo.episodeId; + } else if (media.meta.type === MWMediaType.SERIES) { const seasonNo = media.meta.seasonData.number; const episodeNo = media.meta.seasonData.episodes.find( (e) => e.id === episode )?.number; - episodeId = mediaInfo.episodes.find( - (e: any) => e.season === seasonNo && e.number === episodeNo - )?.id; + + const season = mediaInfo.seasons.find((o: any) => o.season === seasonNo); + episodeId = season.episodes.find((o: any) => o.episode === episodeNo).id; } if (!episodeId) throw new Error("No watchable item found"); - const watchInfo = await proxiedFetch("/watch", { + const watchInfo = await proxiedFetch(`/watch/${episodeId}`, { baseURL: flixHqBase, params: { - episodeId, - mediaId: flixId, + id: mediaInfo.id, }, }); diff --git a/src/setup/locales/fr/translation.json b/src/setup/locales/fr/translation.json new file mode 100644 index 00000000..de40a796 --- /dev/null +++ b/src/setup/locales/fr/translation.json @@ -0,0 +1,97 @@ +{ + "global": { + "name": "movie-web" + }, + "search": { + "loading_series": "Recherche de votre série préférée...", + "loading_movie": "Recherche de vos films préférés...", + "loading": "Chargement...", + "allResults": "C'est tout ce que nous avons!", + "noResults": "Nous n'avons rien trouvé!", + "allFailed": "Le média n'a pas été trouvé, veuillez réessayez!", + "headingTitle": "Résultats de la recherche", + "bookmarks": "Favoris", + "continueWatching": "Continuer le visionnage", + "title": "Que voulez-vous voir?", + "placeholder": "Que voulez-vous voir?" + }, + "media": { + "title": "Impossible de trouver ce média", + "description": "Nous n'avons pas pu trouver le média que vous avez demandé. Soit il a été supprimé, soit vous avez altéré l'URL." + }, + "provider": { + "title": "Ce fournisseur a été désactivé", + "description": "Nous avons eu des problèmes avec le fournisseur ou bien il était trop instable pour être utilisé, donc nous avons dû le désactiver." + }, + "page": { + "title": "Impossible de trouver cette page", + "description": "Nous avons cherché partout : sous les poubelles, dans le placard, derrière le proxy, mais nous n'avons finalement pas pu trouver la page que vous recherchez." + }, + "searchBar": { + "movie": "Film", + "series": "Série", + "Search": "Rechercher" + }, + "videoPlayer": { + "findingBestVideo": "Recherche de la meilleure vidéo pour vous", + "noVideos": "Désolé, nous n'avons pas pu trouver de vidéos pour vous", + "loading": "Chargement...", + "backToHome": "Retour à la page d'accueil", + "backToHomeShort": "Retour", + "seasonAndEpisode": "S{{season}} E{{episode}}", + "buttons": { + "episodes": "Épisodes", + "source": "Source", + "captions": "Sous-titres", + "download": "Télécharger", + "settings": "Paramètres", + "pictureInPicture": "Image dans l'image" + }, + "popouts": { + "sources": "Sources", + "seasons": "Saisons", + "captions": "Sous-titres", + "captionPreferences": { + "title": "Personnaliser", + "delay": "Délai", + "fontSize": "Taille", + "opacity": "Opacité", + "color": "Couleur" + }, + "episode": "E{{index}} - {{title}}", + "noCaptions": "Pas de sous-titres", + "linkedCaptions": "Sous-titres liés", + "customCaption": "Sous-titres personnalisés", + "uploadCustomCaption": "Télécharger des sous-titres (SRT, VTT)", + "noEmbeds": "Aucun contenu intégré n'a été trouvé pour cette source", + "errors": { + "loadingWentWong": "Un problème est survenu lors du chargement des épisodes pour {{seasonTitle}}", + "embedsError": "Un problème est survenu lors du chargement des contenus intégrés pour cet élément que vous aimez" + }, + "descriptions": { + "sources": "Quel fournisseur voulez-vous utiliser ?", + "embeds": "Choisissez quelle vidéo regarder", + "seasons": "Choisissez la saison que vous voulez regarder", + "episode": "Sélectionnez un épisode", + "captions": "Choisissez une langue de sous-titres", + "captionPreferences": "Personnalisez l'apparence des sous-titres" + } + }, + "errors": { + "fatalError": "Le lecteur vidéo a rencontré une erreur fatale, veuillez la signaler au serveur <0>Discord ou sur <1>GitHub." + } + }, + "v3": { + "newSiteTitle": "Nouvelle version disponible!", + "newDomain": "https://movie-web.app", + "newDomainText": "movie-web déménagera bientôt vers un nouveau domaine : <0>https://movie-web.app. Veillez à mettre à jour tous vos favoris car <1>l'ancien site web cessera de fonctionner le {{date}}.", + "tireless": "Nous avons travaillé sans relâche sur cette nouvelle mise à jour et nous espérons que vous apprécierez ce que nous avons préparé ces derniers mois.", + "leaveAnnouncement": "Emmenez-moi là!" + }, + "casting": { + "casting": "Transmission à l'appareil..." + }, + "errors": { + "offline": "Vérifiez votre connexion internet" + } +}