mirror of
https://github.com/Crunchy-DL/Crunchy-Downloader.git
synced 2026-05-17 15:32:05 +00:00
- Added **fallback for sync failures** [#407](https://github.com/Crunchy-DL/Crunchy-Downloader/issues/407) - Added **history setting** to remove non-existent series/episodes on refresh [#420](https://github.com/Crunchy-DL/Crunchy-Downloader/issues/420) - Added **movies to history** - Added **queue persistence** - Changed **download item state handling** - Changed **download item removal processing** - Made small changes to **font detection** - Changed **rate limit error handling** - Fixed issue where **files were not always cleaned up** for removed downloads - Fixed **crash when the queue list was modified** - Fixed **changelog parsing** not handling versions like `vX.X.X.X`, which caused changes to be re-added on every restart
92 lines
3.3 KiB
C#
92 lines
3.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.Specialized;
|
|
using System.Linq;
|
|
using System.Net.Http;
|
|
using System.Threading.Tasks;
|
|
using System.Web;
|
|
using CRD.Utils;
|
|
using CRD.Utils.Http;
|
|
using CRD.Utils.Structs;
|
|
|
|
namespace CRD.Downloader.Crunchyroll;
|
|
|
|
public class CrMovies{
|
|
private readonly CrunchyrollManager crunInstance = CrunchyrollManager.Instance;
|
|
|
|
public async Task<CrunchyMovie?> ParseMovieById(string id, string crLocale, bool forcedLang = false){
|
|
await crunInstance.CrAuthGuest.RefreshToken(true);
|
|
NameValueCollection query = HttpUtility.ParseQueryString(new UriBuilder().Query);
|
|
|
|
query["preferred_audio_language"] = "ja-JP";
|
|
if (!string.IsNullOrEmpty(crLocale)){
|
|
query["locale"] = crLocale;
|
|
if (forcedLang){
|
|
query["force_locale"] = crLocale;
|
|
}
|
|
}
|
|
|
|
|
|
var request = HttpClientReq.CreateRequestMessage($"{ApiUrls.Cms}/objects/{id}", HttpMethod.Get, true, crunInstance.CrAuthGuest.Token?.access_token, query);
|
|
|
|
var response = await HttpClientReq.Instance.SendHttpRequest(request);
|
|
|
|
if (!response.IsOk){
|
|
Console.Error.WriteLine("Movie Request Failed");
|
|
return null;
|
|
}
|
|
|
|
CrunchyMovieList movie = Helpers.Deserialize<CrunchyMovieList>(response.ResponseContent, crunInstance.SettingsJsonSerializerSettings) ?? new CrunchyMovieList();
|
|
|
|
if (movie.Total < 1){
|
|
return null;
|
|
}
|
|
|
|
if (movie is{ Total: 1, Data: not null }){
|
|
var movieRes = movie.Data.First();
|
|
return movieRes.type != "movie" ? null : movieRes;
|
|
}
|
|
|
|
Console.Error.WriteLine("Multiple movie returned with one ID?");
|
|
if (movie.Data != null){
|
|
var movieRes = movie.Data.First();
|
|
return movieRes.type != "movie" ? null : movieRes;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
|
|
public CrunchyEpMeta? EpisodeMeta(CrunchyMovie episodeP, List<string> dubLang){
|
|
if (!string.IsNullOrEmpty(episodeP.AudioLocale) && !dubLang.Contains(episodeP.AudioLocale)){
|
|
Console.Error.WriteLine("Movie not available in the selected dub lang");
|
|
return null;
|
|
}
|
|
|
|
var images = (episodeP.Images?.Thumbnail ??[new List<Image>(){ new(){ Source = "/notFound.jpg" } }]);
|
|
|
|
var epMeta = new CrunchyEpMeta();
|
|
epMeta.Data = new List<CrunchyEpMetaData>{ new(){ MediaId = episodeP.Id, Versions = null, IsSubbed = episodeP.IsSubbed, IsDubbed = episodeP.IsDubbed } };
|
|
epMeta.SeriesTitle = "Movie";
|
|
epMeta.SeasonTitle = "";
|
|
epMeta.EpisodeNumber = "";
|
|
epMeta.EpisodeTitle = episodeP.Title;
|
|
epMeta.SeasonId = "";
|
|
epMeta.Season = "";
|
|
epMeta.SeriesId = "";
|
|
epMeta.AbsolutEpisodeNumberE = "";
|
|
epMeta.Image = images.FirstOrDefault()?.FirstOrDefault()?.Source;
|
|
epMeta.ImageBig = images.FirstOrDefault()?.LastOrDefault()?.Source;
|
|
epMeta.DownloadProgress = new DownloadProgress(){
|
|
State = DownloadState.Queued,
|
|
Percent = 0,
|
|
Time = 0,
|
|
DownloadSpeedBytes = 0
|
|
};
|
|
epMeta.AvailableSubs = [];
|
|
epMeta.Description = episodeP.Description;
|
|
epMeta.Hslang = CrunchyrollManager.Instance.CrunOptions.Hslang;
|
|
|
|
return epMeta;
|
|
}
|
|
}
|