mirror of
https://github.com/lampame/lampac-ukraine.git
synced 2026-04-16 09:22:21 +00:00
refactor(nmoonanime): rename MoonAnime module to NMoonAnime
This commit is contained in:
parent
bffdf68bde
commit
dbb24205d7
@ -45,7 +45,7 @@ namespace AnimeON
|
|||||||
|
|
||||||
AnimeON = new OnlinesSettings("AnimeON", "https://animeon.club", streamproxy: false, useproxy: false)
|
AnimeON = new OnlinesSettings("AnimeON", "https://animeon.club", streamproxy: false, useproxy: false)
|
||||||
{
|
{
|
||||||
displayname = "🇯🇵 AnimeON",
|
displayname = "AnimeON",
|
||||||
displayindex = 0,
|
displayindex = 0,
|
||||||
proxy = new Shared.Models.Base.ProxySettings()
|
proxy = new Shared.Models.Base.ProxySettings()
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,6 +0,0 @@
|
|||||||
{
|
|
||||||
"enable": true,
|
|
||||||
"version": 3,
|
|
||||||
"initspace": "MoonAnime.ModInit",
|
|
||||||
"online": "MoonAnime.OnlineApi"
|
|
||||||
}
|
|
||||||
@ -1,5 +1,5 @@
|
|||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using MoonAnime.Models;
|
using NMoonAnime.Models;
|
||||||
using Shared;
|
using Shared;
|
||||||
using Shared.Engine;
|
using Shared.Engine;
|
||||||
using Shared.Models;
|
using Shared.Models;
|
||||||
@ -13,7 +13,7 @@ using System.Text.RegularExpressions;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Web;
|
using System.Web;
|
||||||
|
|
||||||
namespace MoonAnime.Controllers
|
namespace NMoonAnime.Controllers
|
||||||
{
|
{
|
||||||
public class Controller : BaseOnlineController
|
public class Controller : BaseOnlineController
|
||||||
{
|
{
|
||||||
@ -21,47 +21,47 @@ namespace MoonAnime.Controllers
|
|||||||
|
|
||||||
public Controller() : base(ModInit.Settings)
|
public Controller() : base(ModInit.Settings)
|
||||||
{
|
{
|
||||||
proxyManager = new ProxyManager(ModInit.MoonAnime);
|
proxyManager = new ProxyManager(ModInit.NMoonAnime);
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
[Route("moonanime")]
|
[Route("nmoonanime")]
|
||||||
public async Task<ActionResult> Index(long id, string imdb_id, long kinopoisk_id, string title, string original_title, string original_language, int year, string source, int serial, string account_email, string mal_id, string t, int s = -1, bool rjson = false, bool checksearch = false)
|
public async Task<ActionResult> Index(long id, string imdb_id, long kinopoisk_id, string title, string original_title, string original_language, int year, string source, int serial, string account_email, string mal_id, string t, int s = -1, bool rjson = false, bool checksearch = false)
|
||||||
{
|
{
|
||||||
await UpdateService.ConnectAsync(host);
|
await UpdateService.ConnectAsync(host);
|
||||||
|
|
||||||
var init = await loadKit(ModInit.MoonAnime);
|
var init = await loadKit(ModInit.NMoonAnime);
|
||||||
if (!init.enable)
|
if (!init.enable)
|
||||||
return Forbid();
|
return Forbid();
|
||||||
|
|
||||||
var invoke = new MoonAnimeInvoke(init, hybridCache, OnLog, proxyManager);
|
var invoke = new NMoonAnimeInvoke(init, hybridCache, OnLog, proxyManager);
|
||||||
|
|
||||||
if (checksearch)
|
if (checksearch)
|
||||||
{
|
{
|
||||||
if (AppInit.conf?.online?.checkOnlineSearch != true)
|
if (AppInit.conf?.online?.checkOnlineSearch != true)
|
||||||
return OnError("moonanime", proxyManager);
|
return OnError("nmoonanime", proxyManager);
|
||||||
|
|
||||||
var checkResults = await invoke.Search(imdb_id, mal_id, title, original_title, year);
|
var checkResults = await invoke.Search(imdb_id, mal_id, title, original_title, year);
|
||||||
if (checkResults != null && checkResults.Count > 0)
|
if (checkResults != null && checkResults.Count > 0)
|
||||||
return Content("data-json=", "text/plain; charset=utf-8");
|
return Content("data-json=", "text/plain; charset=utf-8");
|
||||||
|
|
||||||
return OnError("moonanime", proxyManager);
|
return OnError("nmoonanime", proxyManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
OnLog($"MoonAnime: title={title}, original_title={original_title}, imdb={imdb_id}, mal_id={mal_id}, serial={serial}, s={s}, t={t}");
|
OnLog($"NMoonAnime: назва={title}, оригінальна_назва={original_title}, imdb={imdb_id}, mal_id={mal_id}, серіал={serial}, сезон={s}, озвучка={t}");
|
||||||
|
|
||||||
var seasons = await invoke.Search(imdb_id, mal_id, title, original_title, year);
|
var seasons = await invoke.Search(imdb_id, mal_id, title, original_title, year);
|
||||||
if (seasons == null || seasons.Count == 0)
|
if (seasons == null || seasons.Count == 0)
|
||||||
return OnError("moonanime", proxyManager);
|
return OnError("nmoonanime", proxyManager);
|
||||||
|
|
||||||
bool isSeries = serial == 1;
|
bool isSeries = serial == 1;
|
||||||
MoonAnimeSeasonContent firstSeasonData = null;
|
NMoonAnimeSeasonContent firstSeasonData = null;
|
||||||
|
|
||||||
if (serial == -1)
|
if (serial == -1)
|
||||||
{
|
{
|
||||||
firstSeasonData = await invoke.GetSeasonContent(seasons[0]);
|
firstSeasonData = await invoke.GetSeasonContent(seasons[0]);
|
||||||
if (firstSeasonData == null || firstSeasonData.Voices.Count == 0)
|
if (firstSeasonData == null || firstSeasonData.Voices.Count == 0)
|
||||||
return OnError("moonanime", proxyManager);
|
return OnError("nmoonanime", proxyManager);
|
||||||
|
|
||||||
isSeries = firstSeasonData.IsSeries;
|
isSeries = firstSeasonData.IsSeries;
|
||||||
}
|
}
|
||||||
@ -74,22 +74,22 @@ namespace MoonAnime.Controllers
|
|||||||
return await RenderMovie(invoke, seasons, title, original_title, firstSeasonData, rjson);
|
return await RenderMovie(invoke, seasons, title, original_title, firstSeasonData, rjson);
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet("moonanime/play")]
|
[HttpGet("nmoonanime/play")]
|
||||||
public async Task<ActionResult> Play(string file, string title = null)
|
public async Task<ActionResult> Play(string file, string title = null)
|
||||||
{
|
{
|
||||||
await UpdateService.ConnectAsync(host);
|
await UpdateService.ConnectAsync(host);
|
||||||
|
|
||||||
var init = await loadKit(ModInit.MoonAnime);
|
var init = await loadKit(ModInit.NMoonAnime);
|
||||||
if (!init.enable)
|
if (!init.enable)
|
||||||
return Forbid();
|
return Forbid();
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(file))
|
if (string.IsNullOrWhiteSpace(file))
|
||||||
return OnError("moonanime", proxyManager);
|
return OnError("nmoonanime", proxyManager);
|
||||||
|
|
||||||
var invoke = new MoonAnimeInvoke(init, hybridCache, OnLog, proxyManager);
|
var invoke = new NMoonAnimeInvoke(init, hybridCache, OnLog, proxyManager);
|
||||||
var streams = invoke.ParseStreams(file);
|
var streams = invoke.ParseStreams(file);
|
||||||
if (streams == null || streams.Count == 0)
|
if (streams == null || streams.Count == 0)
|
||||||
return OnError("moonanime", proxyManager);
|
return OnError("nmoonanime", proxyManager);
|
||||||
|
|
||||||
if (streams.Count == 1)
|
if (streams.Count == 1)
|
||||||
{
|
{
|
||||||
@ -106,7 +106,7 @@ namespace MoonAnime.Controllers
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!streamQuality.Any())
|
if (!streamQuality.Any())
|
||||||
return OnError("moonanime", proxyManager);
|
return OnError("nmoonanime", proxyManager);
|
||||||
|
|
||||||
var first = streamQuality.Firts();
|
var first = streamQuality.Firts();
|
||||||
string json = VideoTpl.ToJson("play", first.link, title ?? string.Empty, streamquality: streamQuality);
|
string json = VideoTpl.ToJson("play", first.link, title ?? string.Empty, streamquality: streamQuality);
|
||||||
@ -114,8 +114,8 @@ namespace MoonAnime.Controllers
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async Task<ActionResult> RenderSerial(
|
private async Task<ActionResult> RenderSerial(
|
||||||
MoonAnimeInvoke invoke,
|
NMoonAnimeInvoke invoke,
|
||||||
List<MoonAnimeSeasonRef> seasons,
|
List<NMoonAnimeSeasonRef> seasons,
|
||||||
string imdbId,
|
string imdbId,
|
||||||
long kinopoiskId,
|
long kinopoiskId,
|
||||||
string title,
|
string title,
|
||||||
@ -132,7 +132,7 @@ namespace MoonAnime.Controllers
|
|||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
if (orderedSeasons.Count == 0)
|
if (orderedSeasons.Count == 0)
|
||||||
return OnError("moonanime", proxyManager);
|
return OnError("nmoonanime", proxyManager);
|
||||||
|
|
||||||
if (selectedSeason == -1)
|
if (selectedSeason == -1)
|
||||||
{
|
{
|
||||||
@ -153,14 +153,14 @@ namespace MoonAnime.Controllers
|
|||||||
var currentSeason = orderedSeasons.FirstOrDefault(s => s.SeasonNumber == selectedSeason) ?? orderedSeasons[0];
|
var currentSeason = orderedSeasons.FirstOrDefault(s => s.SeasonNumber == selectedSeason) ?? orderedSeasons[0];
|
||||||
var seasonData = await invoke.GetSeasonContent(currentSeason);
|
var seasonData = await invoke.GetSeasonContent(currentSeason);
|
||||||
if (seasonData == null)
|
if (seasonData == null)
|
||||||
return OnError("moonanime", proxyManager);
|
return OnError("nmoonanime", proxyManager);
|
||||||
|
|
||||||
var voices = seasonData.Voices
|
var voices = seasonData.Voices
|
||||||
.Where(v => v != null && v.Episodes != null && v.Episodes.Count > 0)
|
.Where(v => v != null && v.Episodes != null && v.Episodes.Count > 0)
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
if (voices.Count == 0)
|
if (voices.Count == 0)
|
||||||
return OnError("moonanime", proxyManager);
|
return OnError("nmoonanime", proxyManager);
|
||||||
|
|
||||||
int activeVoiceIndex = ParseVoiceIndex(selectedVoice, voices.Count);
|
int activeVoiceIndex = ParseVoiceIndex(selectedVoice, voices.Count);
|
||||||
var voiceTpl = new VoiceTpl(voices.Count);
|
var voiceTpl = new VoiceTpl(voices.Count);
|
||||||
@ -179,20 +179,20 @@ namespace MoonAnime.Controllers
|
|||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
if (episodes.Count == 0)
|
if (episodes.Count == 0)
|
||||||
return OnError("moonanime", proxyManager);
|
return OnError("nmoonanime", proxyManager);
|
||||||
|
|
||||||
string displayTitle = !string.IsNullOrWhiteSpace(title)
|
string displayTitle = !string.IsNullOrWhiteSpace(title)
|
||||||
? title
|
? title
|
||||||
: !string.IsNullOrWhiteSpace(originalTitle)
|
: !string.IsNullOrWhiteSpace(originalTitle)
|
||||||
? originalTitle
|
? originalTitle
|
||||||
: "MoonAnime";
|
: "NMoonAnime";
|
||||||
|
|
||||||
var episodeTpl = new EpisodeTpl(episodes.Count);
|
var episodeTpl = new EpisodeTpl(episodes.Count);
|
||||||
foreach (var episode in episodes)
|
foreach (var episode in episodes)
|
||||||
{
|
{
|
||||||
int episodeNumber = episode.Number <= 0 ? 1 : episode.Number;
|
int episodeNumber = episode.Number <= 0 ? 1 : episode.Number;
|
||||||
string episodeName = string.IsNullOrWhiteSpace(episode.Name) ? $"Епізод {episodeNumber}" : episode.Name;
|
string episodeName = string.IsNullOrWhiteSpace(episode.Name) ? $"Епізод {episodeNumber}" : episode.Name;
|
||||||
string callUrl = $"{host}/moonanime/play?file={HttpUtility.UrlEncode(episode.File)}&title={HttpUtility.UrlEncode(displayTitle)}";
|
string callUrl = $"{host}/nmoonanime/play?file={HttpUtility.UrlEncode(episode.File)}&title={HttpUtility.UrlEncode(displayTitle)}";
|
||||||
episodeTpl.Append(episodeName, displayTitle, currentSeason.SeasonNumber.ToString(), episodeNumber.ToString(), accsArgs(callUrl), "call");
|
episodeTpl.Append(episodeName, displayTitle, currentSeason.SeasonNumber.ToString(), episodeNumber.ToString(), accsArgs(callUrl), "call");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,11 +204,11 @@ namespace MoonAnime.Controllers
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async Task<ActionResult> RenderMovie(
|
private async Task<ActionResult> RenderMovie(
|
||||||
MoonAnimeInvoke invoke,
|
NMoonAnimeInvoke invoke,
|
||||||
List<MoonAnimeSeasonRef> seasons,
|
List<NMoonAnimeSeasonRef> seasons,
|
||||||
string title,
|
string title,
|
||||||
string originalTitle,
|
string originalTitle,
|
||||||
MoonAnimeSeasonContent firstSeasonData,
|
NMoonAnimeSeasonContent firstSeasonData,
|
||||||
bool rjson)
|
bool rjson)
|
||||||
{
|
{
|
||||||
var currentSeason = seasons
|
var currentSeason = seasons
|
||||||
@ -217,20 +217,20 @@ namespace MoonAnime.Controllers
|
|||||||
.FirstOrDefault();
|
.FirstOrDefault();
|
||||||
|
|
||||||
if (currentSeason == null)
|
if (currentSeason == null)
|
||||||
return OnError("moonanime", proxyManager);
|
return OnError("nmoonanime", proxyManager);
|
||||||
|
|
||||||
MoonAnimeSeasonContent seasonData = firstSeasonData;
|
NMoonAnimeSeasonContent seasonData = firstSeasonData;
|
||||||
if (seasonData == null || !string.Equals(seasonData.Url, currentSeason.Url, StringComparison.OrdinalIgnoreCase))
|
if (seasonData == null || !string.Equals(seasonData.Url, currentSeason.Url, StringComparison.OrdinalIgnoreCase))
|
||||||
seasonData = await invoke.GetSeasonContent(currentSeason);
|
seasonData = await invoke.GetSeasonContent(currentSeason);
|
||||||
|
|
||||||
if (seasonData == null || seasonData.Voices.Count == 0)
|
if (seasonData == null || seasonData.Voices.Count == 0)
|
||||||
return OnError("moonanime", proxyManager);
|
return OnError("nmoonanime", proxyManager);
|
||||||
|
|
||||||
string displayTitle = !string.IsNullOrWhiteSpace(title)
|
string displayTitle = !string.IsNullOrWhiteSpace(title)
|
||||||
? title
|
? title
|
||||||
: !string.IsNullOrWhiteSpace(originalTitle)
|
: !string.IsNullOrWhiteSpace(originalTitle)
|
||||||
? originalTitle
|
? originalTitle
|
||||||
: "MoonAnime";
|
: "NMoonAnime";
|
||||||
|
|
||||||
var movieTpl = new MovieTpl(displayTitle, originalTitle);
|
var movieTpl = new MovieTpl(displayTitle, originalTitle);
|
||||||
int fallbackIndex = 1;
|
int fallbackIndex = 1;
|
||||||
@ -248,13 +248,13 @@ namespace MoonAnime.Controllers
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
string voiceName = string.IsNullOrWhiteSpace(voice.Name) ? $"Озвучка {fallbackIndex}" : voice.Name;
|
string voiceName = string.IsNullOrWhiteSpace(voice.Name) ? $"Озвучка {fallbackIndex}" : voice.Name;
|
||||||
string callUrl = $"{host}/moonanime/play?file={HttpUtility.UrlEncode(file)}&title={HttpUtility.UrlEncode(displayTitle)}";
|
string callUrl = $"{host}/nmoonanime/play?file={HttpUtility.UrlEncode(file)}&title={HttpUtility.UrlEncode(displayTitle)}";
|
||||||
movieTpl.Append(voiceName, accsArgs(callUrl), "call");
|
movieTpl.Append(voiceName, accsArgs(callUrl), "call");
|
||||||
fallbackIndex++;
|
fallbackIndex++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (movieTpl.IsEmpty)
|
if (movieTpl.IsEmpty)
|
||||||
return OnError("moonanime", proxyManager);
|
return OnError("nmoonanime", proxyManager);
|
||||||
|
|
||||||
return rjson
|
return rjson
|
||||||
? Content(movieTpl.ToJson(), "application/json; charset=utf-8")
|
? Content(movieTpl.ToJson(), "application/json; charset=utf-8")
|
||||||
@ -264,7 +264,7 @@ namespace MoonAnime.Controllers
|
|||||||
private string BuildIndexUrl(string imdbId, long kinopoiskId, string title, string originalTitle, int year, int serial, string malId, int season, string voice)
|
private string BuildIndexUrl(string imdbId, long kinopoiskId, string title, string originalTitle, int year, int serial, string malId, int season, string voice)
|
||||||
{
|
{
|
||||||
var url = new StringBuilder();
|
var url = new StringBuilder();
|
||||||
url.Append($"{host}/moonanime?imdb_id={HttpUtility.UrlEncode(imdbId)}");
|
url.Append($"{host}/nmoonanime?imdb_id={HttpUtility.UrlEncode(imdbId)}");
|
||||||
url.Append($"&kinopoisk_id={kinopoiskId}");
|
url.Append($"&kinopoisk_id={kinopoiskId}");
|
||||||
url.Append($"&title={HttpUtility.UrlEncode(title)}");
|
url.Append($"&title={HttpUtility.UrlEncode(title)}");
|
||||||
url.Append($"&original_title={HttpUtility.UrlEncode(originalTitle)}");
|
url.Append($"&original_title={HttpUtility.UrlEncode(originalTitle)}");
|
||||||
@ -14,20 +14,20 @@ using System.Text;
|
|||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace MoonAnime
|
namespace NMoonAnime
|
||||||
{
|
{
|
||||||
public class ModInit
|
public class ModInit
|
||||||
{
|
{
|
||||||
public static double Version => 1.0;
|
public static double Version => 1.0;
|
||||||
|
|
||||||
public static OnlinesSettings MoonAnime;
|
public static OnlinesSettings NMoonAnime;
|
||||||
|
|
||||||
public static bool ApnHostProvided;
|
public static bool ApnHostProvided;
|
||||||
|
|
||||||
public static OnlinesSettings Settings
|
public static OnlinesSettings Settings
|
||||||
{
|
{
|
||||||
get => MoonAnime;
|
get => NMoonAnime;
|
||||||
set => MoonAnime = value;
|
set => NMoonAnime = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -35,9 +35,9 @@ namespace MoonAnime
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static void loaded(InitspaceModel initspace)
|
public static void loaded(InitspaceModel initspace)
|
||||||
{
|
{
|
||||||
MoonAnime = new OnlinesSettings("MoonAnime", "https://moonanime.art", "https://apx.lme.isroot.in", streamproxy: false, useproxy: false)
|
NMoonAnime = new OnlinesSettings("NMoonAnime", "https://moonanime.art", "https://apx.lme.isroot.in", streamproxy: false, useproxy: false)
|
||||||
{
|
{
|
||||||
displayname = "MoonAnime",
|
displayname = "🌙 NMoonAnime",
|
||||||
displayindex = 0,
|
displayindex = 0,
|
||||||
proxy = new Shared.Models.Base.ProxySettings()
|
proxy = new Shared.Models.Base.ProxySettings()
|
||||||
{
|
{
|
||||||
@ -48,27 +48,27 @@ namespace MoonAnime
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var conf = ModuleInvoke.Conf("MoonAnime", MoonAnime) ?? JObject.FromObject(MoonAnime);
|
var conf = ModuleInvoke.Conf("NMoonAnime", NMoonAnime) ?? JObject.FromObject(NMoonAnime);
|
||||||
bool hasApn = ApnHelper.TryGetInitConf(conf, out bool apnEnabled, out string apnHost);
|
bool hasApn = ApnHelper.TryGetInitConf(conf, out bool apnEnabled, out string apnHost);
|
||||||
conf.Remove("apn");
|
conf.Remove("apn");
|
||||||
conf.Remove("apn_host");
|
conf.Remove("apn_host");
|
||||||
MoonAnime = conf.ToObject<OnlinesSettings>();
|
NMoonAnime = conf.ToObject<OnlinesSettings>();
|
||||||
|
|
||||||
if (hasApn)
|
if (hasApn)
|
||||||
ApnHelper.ApplyInitConf(apnEnabled, apnHost, MoonAnime);
|
ApnHelper.ApplyInitConf(apnEnabled, apnHost, NMoonAnime);
|
||||||
|
|
||||||
ApnHostProvided = hasApn && apnEnabled && !string.IsNullOrWhiteSpace(apnHost);
|
ApnHostProvided = hasApn && apnEnabled && !string.IsNullOrWhiteSpace(apnHost);
|
||||||
if (hasApn && apnEnabled)
|
if (hasApn && apnEnabled)
|
||||||
{
|
{
|
||||||
MoonAnime.streamproxy = false;
|
NMoonAnime.streamproxy = false;
|
||||||
}
|
}
|
||||||
else if (MoonAnime.streamproxy)
|
else if (NMoonAnime.streamproxy)
|
||||||
{
|
{
|
||||||
MoonAnime.apnstream = false;
|
NMoonAnime.apnstream = false;
|
||||||
MoonAnime.apn = null;
|
NMoonAnime.apn = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
AppInit.conf.online.with_search.Add("moonanime");
|
AppInit.conf.online.with_search.Add("nmoonanime");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1,15 +1,15 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
namespace MoonAnime.Models
|
namespace NMoonAnime.Models
|
||||||
{
|
{
|
||||||
public class MoonAnimeSearchResponse
|
public class NMoonAnimeSearchResponse
|
||||||
{
|
{
|
||||||
[JsonPropertyName("seasons")]
|
[JsonPropertyName("seasons")]
|
||||||
public List<MoonAnimeSeasonRef> Seasons { get; set; } = new();
|
public List<NMoonAnimeSeasonRef> Seasons { get; set; } = new();
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MoonAnimeSeasonRef
|
public class NMoonAnimeSeasonRef
|
||||||
{
|
{
|
||||||
[JsonPropertyName("season_number")]
|
[JsonPropertyName("season_number")]
|
||||||
public int SeasonNumber { get; set; }
|
public int SeasonNumber { get; set; }
|
||||||
@ -18,7 +18,7 @@ namespace MoonAnime.Models
|
|||||||
public string Url { get; set; }
|
public string Url { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MoonAnimeSeasonContent
|
public class NMoonAnimeSeasonContent
|
||||||
{
|
{
|
||||||
public int SeasonNumber { get; set; }
|
public int SeasonNumber { get; set; }
|
||||||
|
|
||||||
@ -26,19 +26,19 @@ namespace MoonAnime.Models
|
|||||||
|
|
||||||
public bool IsSeries { get; set; }
|
public bool IsSeries { get; set; }
|
||||||
|
|
||||||
public List<MoonAnimeVoiceContent> Voices { get; set; } = new();
|
public List<NMoonAnimeVoiceContent> Voices { get; set; } = new();
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MoonAnimeVoiceContent
|
public class NMoonAnimeVoiceContent
|
||||||
{
|
{
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
public string MovieFile { get; set; }
|
public string MovieFile { get; set; }
|
||||||
|
|
||||||
public List<MoonAnimeEpisodeContent> Episodes { get; set; } = new();
|
public List<NMoonAnimeEpisodeContent> Episodes { get; set; } = new();
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MoonAnimeEpisodeContent
|
public class NMoonAnimeEpisodeContent
|
||||||
{
|
{
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
@ -47,7 +47,7 @@ namespace MoonAnime.Models
|
|||||||
public string File { get; set; }
|
public string File { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MoonAnimeStreamVariant
|
public class NMoonAnimeStreamVariant
|
||||||
{
|
{
|
||||||
public string Url { get; set; }
|
public string Url { get; set; }
|
||||||
|
|
||||||
@ -1,4 +1,4 @@
|
|||||||
using MoonAnime.Models;
|
using NMoonAnime.Models;
|
||||||
using Shared;
|
using Shared;
|
||||||
using Shared.Engine;
|
using Shared.Engine;
|
||||||
using Shared.Models;
|
using Shared.Models;
|
||||||
@ -12,9 +12,9 @@ using System.Text.RegularExpressions;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Web;
|
using System.Web;
|
||||||
|
|
||||||
namespace MoonAnime
|
namespace NMoonAnime
|
||||||
{
|
{
|
||||||
public class MoonAnimeInvoke
|
public class NMoonAnimeInvoke
|
||||||
{
|
{
|
||||||
private readonly OnlinesSettings _init;
|
private readonly OnlinesSettings _init;
|
||||||
private readonly IHybridCache _hybridCache;
|
private readonly IHybridCache _hybridCache;
|
||||||
@ -25,7 +25,7 @@ namespace MoonAnime
|
|||||||
PropertyNameCaseInsensitive = true
|
PropertyNameCaseInsensitive = true
|
||||||
};
|
};
|
||||||
|
|
||||||
public MoonAnimeInvoke(OnlinesSettings init, IHybridCache hybridCache, Action<string> onLog, ProxyManager proxyManager)
|
public NMoonAnimeInvoke(OnlinesSettings init, IHybridCache hybridCache, Action<string> onLog, ProxyManager proxyManager)
|
||||||
{
|
{
|
||||||
_init = init;
|
_init = init;
|
||||||
_hybridCache = hybridCache;
|
_hybridCache = hybridCache;
|
||||||
@ -33,10 +33,10 @@ namespace MoonAnime
|
|||||||
_proxyManager = proxyManager;
|
_proxyManager = proxyManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<MoonAnimeSeasonRef>> Search(string imdbId, string malId, string title, string originalTitle, int year)
|
public async Task<List<NMoonAnimeSeasonRef>> Search(string imdbId, string malId, string title, string originalTitle, int year)
|
||||||
{
|
{
|
||||||
string memKey = $"MoonAnime:search:{imdbId}:{malId}:{title}:{originalTitle}:{year}";
|
string memKey = $"NMoonAnime:search:{imdbId}:{malId}:{title}:{originalTitle}:{year}";
|
||||||
if (_hybridCache.TryGetValue(memKey, out List<MoonAnimeSeasonRef> cached))
|
if (_hybridCache.TryGetValue(memKey, out List<NMoonAnimeSeasonRef> cached))
|
||||||
return cached;
|
return cached;
|
||||||
|
|
||||||
try
|
try
|
||||||
@ -53,15 +53,15 @@ namespace MoonAnime
|
|||||||
if (string.IsNullOrWhiteSpace(searchUrl))
|
if (string.IsNullOrWhiteSpace(searchUrl))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
_onLog($"MoonAnime: пошук через {searchUrl}");
|
_onLog($"NMoonAnime: пошук через {searchUrl}");
|
||||||
string json = await Http.Get(_init.cors(searchUrl), headers: DefaultHeaders(), proxy: _proxyManager.Get());
|
string json = await Http.Get(_init.cors(searchUrl), headers: DefaultHeaders(), proxy: _proxyManager.Get());
|
||||||
if (string.IsNullOrWhiteSpace(json))
|
if (string.IsNullOrWhiteSpace(json))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
var response = JsonSerializer.Deserialize<MoonAnimeSearchResponse>(json, _jsonOptions);
|
var response = JsonSerializer.Deserialize<NMoonAnimeSearchResponse>(json, _jsonOptions);
|
||||||
var seasons = response?.Seasons?
|
var seasons = response?.Seasons?
|
||||||
.Where(s => s != null && !string.IsNullOrWhiteSpace(s.Url))
|
.Where(s => s != null && !string.IsNullOrWhiteSpace(s.Url))
|
||||||
.Select(s => new MoonAnimeSeasonRef
|
.Select(s => new NMoonAnimeSeasonRef
|
||||||
{
|
{
|
||||||
SeasonNumber = s.SeasonNumber <= 0 ? 1 : s.SeasonNumber,
|
SeasonNumber = s.SeasonNumber <= 0 ? 1 : s.SeasonNumber,
|
||||||
Url = s.Url.Trim()
|
Url = s.Url.Trim()
|
||||||
@ -80,24 +80,24 @@ namespace MoonAnime
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_onLog($"MoonAnime: помилка пошуку - {ex.Message}");
|
_onLog($"NMoonAnime: помилка пошуку - {ex.Message}");
|
||||||
}
|
}
|
||||||
|
|
||||||
return new List<MoonAnimeSeasonRef>();
|
return new List<NMoonAnimeSeasonRef>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<MoonAnimeSeasonContent> GetSeasonContent(MoonAnimeSeasonRef season)
|
public async Task<NMoonAnimeSeasonContent> GetSeasonContent(NMoonAnimeSeasonRef season)
|
||||||
{
|
{
|
||||||
if (season == null || string.IsNullOrWhiteSpace(season.Url))
|
if (season == null || string.IsNullOrWhiteSpace(season.Url))
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
string memKey = $"MoonAnime:season:{season.Url}";
|
string memKey = $"NMoonAnime:season:{season.Url}";
|
||||||
if (_hybridCache.TryGetValue(memKey, out MoonAnimeSeasonContent cached))
|
if (_hybridCache.TryGetValue(memKey, out NMoonAnimeSeasonContent cached))
|
||||||
return cached;
|
return cached;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_onLog($"MoonAnime: завантаження сезону {season.Url}");
|
_onLog($"NMoonAnime: завантаження сезону {season.Url}");
|
||||||
string html = await Http.Get(_init.cors(season.Url), headers: DefaultHeaders(), proxy: _proxyManager.Get());
|
string html = await Http.Get(_init.cors(season.Url), headers: DefaultHeaders(), proxy: _proxyManager.Get());
|
||||||
if (string.IsNullOrWhiteSpace(html))
|
if (string.IsNullOrWhiteSpace(html))
|
||||||
return null;
|
return null;
|
||||||
@ -110,14 +110,14 @@ namespace MoonAnime
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_onLog($"MoonAnime: помилка читання сезону - {ex.Message}");
|
_onLog($"NMoonAnime: помилка читання сезону - {ex.Message}");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<MoonAnimeStreamVariant> ParseStreams(string rawFile)
|
public List<NMoonAnimeStreamVariant> ParseStreams(string rawFile)
|
||||||
{
|
{
|
||||||
var streams = new List<MoonAnimeStreamVariant>();
|
var streams = new List<NMoonAnimeStreamVariant>();
|
||||||
if (string.IsNullOrWhiteSpace(rawFile))
|
if (string.IsNullOrWhiteSpace(rawFile))
|
||||||
return streams;
|
return streams;
|
||||||
|
|
||||||
@ -131,7 +131,7 @@ namespace MoonAnime
|
|||||||
if (string.IsNullOrWhiteSpace(url))
|
if (string.IsNullOrWhiteSpace(url))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
streams.Add(new MoonAnimeStreamVariant
|
streams.Add(new NMoonAnimeStreamVariant
|
||||||
{
|
{
|
||||||
Url = url,
|
Url = url,
|
||||||
Quality = quality
|
Quality = quality
|
||||||
@ -148,7 +148,7 @@ namespace MoonAnime
|
|||||||
if (string.IsNullOrWhiteSpace(url))
|
if (string.IsNullOrWhiteSpace(url))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
streams.Add(new MoonAnimeStreamVariant
|
streams.Add(new NMoonAnimeStreamVariant
|
||||||
{
|
{
|
||||||
Url = url,
|
Url = url,
|
||||||
Quality = quality
|
Quality = quality
|
||||||
@ -167,7 +167,7 @@ namespace MoonAnime
|
|||||||
{
|
{
|
||||||
for (int i = 0; i < plainLinks.Count; i++)
|
for (int i = 0; i < plainLinks.Count; i++)
|
||||||
{
|
{
|
||||||
streams.Add(new MoonAnimeStreamVariant
|
streams.Add(new NMoonAnimeStreamVariant
|
||||||
{
|
{
|
||||||
Url = plainLinks[i],
|
Url = plainLinks[i],
|
||||||
Quality = $"auto-{i + 1}"
|
Quality = $"auto-{i + 1}"
|
||||||
@ -178,7 +178,7 @@ namespace MoonAnime
|
|||||||
|
|
||||||
if (streams.Count == 0 && value.StartsWith("http", StringComparison.OrdinalIgnoreCase))
|
if (streams.Count == 0 && value.StartsWith("http", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
streams.Add(new MoonAnimeStreamVariant
|
streams.Add(new NMoonAnimeStreamVariant
|
||||||
{
|
{
|
||||||
Url = value,
|
Url = value,
|
||||||
Quality = "auto"
|
Quality = "auto"
|
||||||
@ -187,7 +187,7 @@ namespace MoonAnime
|
|||||||
|
|
||||||
return streams
|
return streams
|
||||||
.Where(s => s != null && !string.IsNullOrWhiteSpace(s.Url))
|
.Where(s => s != null && !string.IsNullOrWhiteSpace(s.Url))
|
||||||
.Select(s => new MoonAnimeStreamVariant
|
.Select(s => new NMoonAnimeStreamVariant
|
||||||
{
|
{
|
||||||
Url = s.Url.Trim(),
|
Url = s.Url.Trim(),
|
||||||
Quality = NormalizeQuality(s.Quality)
|
Quality = NormalizeQuality(s.Quality)
|
||||||
@ -223,9 +223,9 @@ namespace MoonAnime
|
|||||||
return $"{_init.apihost.TrimEnd('/')}{endpoint}?{query}";
|
return $"{_init.apihost.TrimEnd('/')}{endpoint}?{query}";
|
||||||
}
|
}
|
||||||
|
|
||||||
private MoonAnimeSeasonContent ParseSeasonPage(string html, int seasonNumber, string seasonUrl)
|
private NMoonAnimeSeasonContent ParseSeasonPage(string html, int seasonNumber, string seasonUrl)
|
||||||
{
|
{
|
||||||
var content = new MoonAnimeSeasonContent
|
var content = new NMoonAnimeSeasonContent
|
||||||
{
|
{
|
||||||
SeasonNumber = seasonNumber <= 0 ? 1 : seasonNumber,
|
SeasonNumber = seasonNumber <= 0 ? 1 : seasonNumber,
|
||||||
Url = seasonUrl,
|
Url = seasonUrl,
|
||||||
@ -246,7 +246,7 @@ namespace MoonAnime
|
|||||||
if (entry.ValueKind != JsonValueKind.Object)
|
if (entry.ValueKind != JsonValueKind.Object)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
var voice = new MoonAnimeVoiceContent
|
var voice = new NMoonAnimeVoiceContent
|
||||||
{
|
{
|
||||||
Name = NormalizeVoiceName(GetStringProperty(entry, "title"), voiceIndex)
|
Name = NormalizeVoiceName(GetStringProperty(entry, "title"), voiceIndex)
|
||||||
};
|
};
|
||||||
@ -266,7 +266,7 @@ namespace MoonAnime
|
|||||||
string episodeTitle = GetStringProperty(episodeEntry, "title");
|
string episodeTitle = GetStringProperty(episodeEntry, "title");
|
||||||
int episodeNumber = ParseEpisodeNumber(episodeTitle, episodeIndex);
|
int episodeNumber = ParseEpisodeNumber(episodeTitle, episodeIndex);
|
||||||
|
|
||||||
voice.Episodes.Add(new MoonAnimeEpisodeContent
|
voice.Episodes.Add(new NMoonAnimeEpisodeContent
|
||||||
{
|
{
|
||||||
Name = string.IsNullOrWhiteSpace(episodeTitle) ? $"Епізод {episodeNumber}" : WebUtility.HtmlDecode(episodeTitle),
|
Name = string.IsNullOrWhiteSpace(episodeTitle) ? $"Епізод {episodeNumber}" : WebUtility.HtmlDecode(episodeTitle),
|
||||||
Number = episodeNumber,
|
Number = episodeNumber,
|
||||||
@ -5,7 +5,7 @@ using Shared.Models.Base;
|
|||||||
using Shared.Models.Module;
|
using Shared.Models.Module;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace MoonAnime
|
namespace NMoonAnime
|
||||||
{
|
{
|
||||||
public class OnlineApi
|
public class OnlineApi
|
||||||
{
|
{
|
||||||
@ -24,7 +24,7 @@ namespace MoonAnime
|
|||||||
{
|
{
|
||||||
var online = new List<(string name, string url, string plugin, int index)>();
|
var online = new List<(string name, string url, string plugin, int index)>();
|
||||||
|
|
||||||
var init = ModInit.MoonAnime;
|
var init = ModInit.NMoonAnime;
|
||||||
|
|
||||||
bool hasLang = !string.IsNullOrEmpty(original_language);
|
bool hasLang = !string.IsNullOrEmpty(original_language);
|
||||||
bool isAnime = hasLang && (original_language == "ja" || original_language == "zh");
|
bool isAnime = hasLang && (original_language == "ja" || original_language == "zh");
|
||||||
@ -33,9 +33,9 @@ namespace MoonAnime
|
|||||||
{
|
{
|
||||||
string url = init.overridehost;
|
string url = init.overridehost;
|
||||||
if (string.IsNullOrEmpty(url) || UpdateService.IsDisconnected())
|
if (string.IsNullOrEmpty(url) || UpdateService.IsDisconnected())
|
||||||
url = $"{host}/moonanime";
|
url = $"{host}/nmoonanime";
|
||||||
|
|
||||||
online.Add((init.displayname, url, "moonanime", init.displayindex));
|
online.Add((init.displayname, url, "nmoonanime", init.displayindex));
|
||||||
}
|
}
|
||||||
|
|
||||||
return online;
|
return online;
|
||||||
6
NMoonAnime/manifest.json
Normal file
6
NMoonAnime/manifest.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"enable": true,
|
||||||
|
"version": 3,
|
||||||
|
"initspace": "NMoonAnime.ModInit",
|
||||||
|
"online": "NMoonAnime.OnlineApi"
|
||||||
|
}
|
||||||
@ -13,7 +13,7 @@
|
|||||||
- [x] BambooUA
|
- [x] BambooUA
|
||||||
- [x] Unimay
|
- [x] Unimay
|
||||||
- [x] Mikai
|
- [x] Mikai
|
||||||
- [x] MoonAnime
|
- [x] NMoonAnime
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
@ -42,7 +42,7 @@ Create or update the module/repository.yaml file
|
|||||||
- AnimeON
|
- AnimeON
|
||||||
- Unimay
|
- Unimay
|
||||||
- Mikai
|
- Mikai
|
||||||
- MoonAnime
|
- NMoonAnime
|
||||||
- Uaflix
|
- Uaflix
|
||||||
- Bamboo
|
- Bamboo
|
||||||
- Makhno
|
- Makhno
|
||||||
@ -163,7 +163,7 @@ Sources with APN support:
|
|||||||
- Mikai
|
- Mikai
|
||||||
- Makhno
|
- Makhno
|
||||||
- KlonFUN
|
- KlonFUN
|
||||||
- MoonAnime
|
- NMoonAnime
|
||||||
|
|
||||||
## Source/player availability check script
|
## Source/player availability check script
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user