diff --git a/AnimeON/ModInit.cs b/AnimeON/ModInit.cs index 3f70166..b33d74e 100644 --- a/AnimeON/ModInit.cs +++ b/AnimeON/ModInit.cs @@ -45,7 +45,7 @@ namespace AnimeON AnimeON = new OnlinesSettings("AnimeON", "https://animeon.club", streamproxy: false, useproxy: false) { - displayname = "🇯🇵 AnimeON", + displayname = "AnimeON", displayindex = 0, proxy = new Shared.Models.Base.ProxySettings() { diff --git a/MoonAnime/manifest.json b/MoonAnime/manifest.json deleted file mode 100644 index 754dcaa..0000000 --- a/MoonAnime/manifest.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "enable": true, - "version": 3, - "initspace": "MoonAnime.ModInit", - "online": "MoonAnime.OnlineApi" -} diff --git a/MoonAnime/ApnHelper.cs b/NMoonAnime/ApnHelper.cs similarity index 100% rename from MoonAnime/ApnHelper.cs rename to NMoonAnime/ApnHelper.cs diff --git a/MoonAnime/Controller.cs b/NMoonAnime/Controller.cs similarity index 83% rename from MoonAnime/Controller.cs rename to NMoonAnime/Controller.cs index dd13a44..a934991 100644 --- a/MoonAnime/Controller.cs +++ b/NMoonAnime/Controller.cs @@ -1,5 +1,5 @@ using Microsoft.AspNetCore.Mvc; -using MoonAnime.Models; +using NMoonAnime.Models; using Shared; using Shared.Engine; using Shared.Models; @@ -13,7 +13,7 @@ using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Web; -namespace MoonAnime.Controllers +namespace NMoonAnime.Controllers { public class Controller : BaseOnlineController { @@ -21,47 +21,47 @@ namespace MoonAnime.Controllers public Controller() : base(ModInit.Settings) { - proxyManager = new ProxyManager(ModInit.MoonAnime); + proxyManager = new ProxyManager(ModInit.NMoonAnime); } [HttpGet] - [Route("moonanime")] + [Route("nmoonanime")] public async Task 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); - var init = await loadKit(ModInit.MoonAnime); + var init = await loadKit(ModInit.NMoonAnime); if (!init.enable) return Forbid(); - var invoke = new MoonAnimeInvoke(init, hybridCache, OnLog, proxyManager); + var invoke = new NMoonAnimeInvoke(init, hybridCache, OnLog, proxyManager); if (checksearch) { 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); if (checkResults != null && checkResults.Count > 0) 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); if (seasons == null || seasons.Count == 0) - return OnError("moonanime", proxyManager); + return OnError("nmoonanime", proxyManager); bool isSeries = serial == 1; - MoonAnimeSeasonContent firstSeasonData = null; + NMoonAnimeSeasonContent firstSeasonData = null; if (serial == -1) { firstSeasonData = await invoke.GetSeasonContent(seasons[0]); if (firstSeasonData == null || firstSeasonData.Voices.Count == 0) - return OnError("moonanime", proxyManager); + return OnError("nmoonanime", proxyManager); isSeries = firstSeasonData.IsSeries; } @@ -74,22 +74,22 @@ namespace MoonAnime.Controllers return await RenderMovie(invoke, seasons, title, original_title, firstSeasonData, rjson); } - [HttpGet("moonanime/play")] + [HttpGet("nmoonanime/play")] public async Task Play(string file, string title = null) { await UpdateService.ConnectAsync(host); - var init = await loadKit(ModInit.MoonAnime); + var init = await loadKit(ModInit.NMoonAnime); if (!init.enable) return Forbid(); 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); if (streams == null || streams.Count == 0) - return OnError("moonanime", proxyManager); + return OnError("nmoonanime", proxyManager); if (streams.Count == 1) { @@ -106,7 +106,7 @@ namespace MoonAnime.Controllers } if (!streamQuality.Any()) - return OnError("moonanime", proxyManager); + return OnError("nmoonanime", proxyManager); var first = streamQuality.Firts(); string json = VideoTpl.ToJson("play", first.link, title ?? string.Empty, streamquality: streamQuality); @@ -114,8 +114,8 @@ namespace MoonAnime.Controllers } private async Task RenderSerial( - MoonAnimeInvoke invoke, - List seasons, + NMoonAnimeInvoke invoke, + List seasons, string imdbId, long kinopoiskId, string title, @@ -132,7 +132,7 @@ namespace MoonAnime.Controllers .ToList(); if (orderedSeasons.Count == 0) - return OnError("moonanime", proxyManager); + return OnError("nmoonanime", proxyManager); if (selectedSeason == -1) { @@ -153,14 +153,14 @@ namespace MoonAnime.Controllers var currentSeason = orderedSeasons.FirstOrDefault(s => s.SeasonNumber == selectedSeason) ?? orderedSeasons[0]; var seasonData = await invoke.GetSeasonContent(currentSeason); if (seasonData == null) - return OnError("moonanime", proxyManager); + return OnError("nmoonanime", proxyManager); var voices = seasonData.Voices .Where(v => v != null && v.Episodes != null && v.Episodes.Count > 0) .ToList(); if (voices.Count == 0) - return OnError("moonanime", proxyManager); + return OnError("nmoonanime", proxyManager); int activeVoiceIndex = ParseVoiceIndex(selectedVoice, voices.Count); var voiceTpl = new VoiceTpl(voices.Count); @@ -179,20 +179,20 @@ namespace MoonAnime.Controllers .ToList(); if (episodes.Count == 0) - return OnError("moonanime", proxyManager); + return OnError("nmoonanime", proxyManager); string displayTitle = !string.IsNullOrWhiteSpace(title) ? title : !string.IsNullOrWhiteSpace(originalTitle) ? originalTitle - : "MoonAnime"; + : "NMoonAnime"; var episodeTpl = new EpisodeTpl(episodes.Count); foreach (var episode in episodes) { int episodeNumber = episode.Number <= 0 ? 1 : episode.Number; 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"); } @@ -204,11 +204,11 @@ namespace MoonAnime.Controllers } private async Task RenderMovie( - MoonAnimeInvoke invoke, - List seasons, + NMoonAnimeInvoke invoke, + List seasons, string title, string originalTitle, - MoonAnimeSeasonContent firstSeasonData, + NMoonAnimeSeasonContent firstSeasonData, bool rjson) { var currentSeason = seasons @@ -217,20 +217,20 @@ namespace MoonAnime.Controllers .FirstOrDefault(); 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)) seasonData = await invoke.GetSeasonContent(currentSeason); if (seasonData == null || seasonData.Voices.Count == 0) - return OnError("moonanime", proxyManager); + return OnError("nmoonanime", proxyManager); string displayTitle = !string.IsNullOrWhiteSpace(title) ? title : !string.IsNullOrWhiteSpace(originalTitle) ? originalTitle - : "MoonAnime"; + : "NMoonAnime"; var movieTpl = new MovieTpl(displayTitle, originalTitle); int fallbackIndex = 1; @@ -248,13 +248,13 @@ namespace MoonAnime.Controllers continue; 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"); fallbackIndex++; } if (movieTpl.IsEmpty) - return OnError("moonanime", proxyManager); + return OnError("nmoonanime", proxyManager); return rjson ? 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) { 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($"&title={HttpUtility.UrlEncode(title)}"); url.Append($"&original_title={HttpUtility.UrlEncode(originalTitle)}"); diff --git a/MoonAnime/ModInit.cs b/NMoonAnime/ModInit.cs similarity index 87% rename from MoonAnime/ModInit.cs rename to NMoonAnime/ModInit.cs index 6be49a5..e60040b 100644 --- a/MoonAnime/ModInit.cs +++ b/NMoonAnime/ModInit.cs @@ -14,20 +14,20 @@ using System.Text; using System.Threading; using System.Threading.Tasks; -namespace MoonAnime +namespace NMoonAnime { public class ModInit { public static double Version => 1.0; - public static OnlinesSettings MoonAnime; + public static OnlinesSettings NMoonAnime; public static bool ApnHostProvided; public static OnlinesSettings Settings { - get => MoonAnime; - set => MoonAnime = value; + get => NMoonAnime; + set => NMoonAnime = value; } /// @@ -35,9 +35,9 @@ namespace MoonAnime /// 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, 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); conf.Remove("apn"); conf.Remove("apn_host"); - MoonAnime = conf.ToObject(); + NMoonAnime = conf.ToObject(); if (hasApn) - ApnHelper.ApplyInitConf(apnEnabled, apnHost, MoonAnime); + ApnHelper.ApplyInitConf(apnEnabled, apnHost, NMoonAnime); ApnHostProvided = hasApn && apnEnabled && !string.IsNullOrWhiteSpace(apnHost); if (hasApn && apnEnabled) { - MoonAnime.streamproxy = false; + NMoonAnime.streamproxy = false; } - else if (MoonAnime.streamproxy) + else if (NMoonAnime.streamproxy) { - MoonAnime.apnstream = false; - MoonAnime.apn = null; + NMoonAnime.apnstream = false; + NMoonAnime.apn = null; } - AppInit.conf.online.with_search.Add("moonanime"); + AppInit.conf.online.with_search.Add("nmoonanime"); } } diff --git a/MoonAnime/Models/MoonAnimeModels.cs b/NMoonAnime/Models/NMoonAnimeModels.cs similarity index 61% rename from MoonAnime/Models/MoonAnimeModels.cs rename to NMoonAnime/Models/NMoonAnimeModels.cs index 8bf9726..470d277 100644 --- a/MoonAnime/Models/MoonAnimeModels.cs +++ b/NMoonAnime/Models/NMoonAnimeModels.cs @@ -1,15 +1,15 @@ using System.Collections.Generic; using System.Text.Json.Serialization; -namespace MoonAnime.Models +namespace NMoonAnime.Models { - public class MoonAnimeSearchResponse + public class NMoonAnimeSearchResponse { [JsonPropertyName("seasons")] - public List Seasons { get; set; } = new(); + public List Seasons { get; set; } = new(); } - public class MoonAnimeSeasonRef + public class NMoonAnimeSeasonRef { [JsonPropertyName("season_number")] public int SeasonNumber { get; set; } @@ -18,7 +18,7 @@ namespace MoonAnime.Models public string Url { get; set; } } - public class MoonAnimeSeasonContent + public class NMoonAnimeSeasonContent { public int SeasonNumber { get; set; } @@ -26,19 +26,19 @@ namespace MoonAnime.Models public bool IsSeries { get; set; } - public List Voices { get; set; } = new(); + public List Voices { get; set; } = new(); } - public class MoonAnimeVoiceContent + public class NMoonAnimeVoiceContent { public string Name { get; set; } public string MovieFile { get; set; } - public List Episodes { get; set; } = new(); + public List Episodes { get; set; } = new(); } - public class MoonAnimeEpisodeContent + public class NMoonAnimeEpisodeContent { public string Name { get; set; } @@ -47,7 +47,7 @@ namespace MoonAnime.Models public string File { get; set; } } - public class MoonAnimeStreamVariant + public class NMoonAnimeStreamVariant { public string Url { get; set; } diff --git a/MoonAnime/MoonAnime.csproj b/NMoonAnime/NMoonAnime.csproj similarity index 100% rename from MoonAnime/MoonAnime.csproj rename to NMoonAnime/NMoonAnime.csproj diff --git a/MoonAnime/MoonAnimeInvoke.cs b/NMoonAnime/NMoonAnimeInvoke.cs similarity index 87% rename from MoonAnime/MoonAnimeInvoke.cs rename to NMoonAnime/NMoonAnimeInvoke.cs index df6a742..d2e087b 100644 --- a/MoonAnime/MoonAnimeInvoke.cs +++ b/NMoonAnime/NMoonAnimeInvoke.cs @@ -1,4 +1,4 @@ -using MoonAnime.Models; +using NMoonAnime.Models; using Shared; using Shared.Engine; using Shared.Models; @@ -12,9 +12,9 @@ using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Web; -namespace MoonAnime +namespace NMoonAnime { - public class MoonAnimeInvoke + public class NMoonAnimeInvoke { private readonly OnlinesSettings _init; private readonly IHybridCache _hybridCache; @@ -25,7 +25,7 @@ namespace MoonAnime PropertyNameCaseInsensitive = true }; - public MoonAnimeInvoke(OnlinesSettings init, IHybridCache hybridCache, Action onLog, ProxyManager proxyManager) + public NMoonAnimeInvoke(OnlinesSettings init, IHybridCache hybridCache, Action onLog, ProxyManager proxyManager) { _init = init; _hybridCache = hybridCache; @@ -33,10 +33,10 @@ namespace MoonAnime _proxyManager = proxyManager; } - public async Task> Search(string imdbId, string malId, string title, string originalTitle, int year) + public async Task> Search(string imdbId, string malId, string title, string originalTitle, int year) { - string memKey = $"MoonAnime:search:{imdbId}:{malId}:{title}:{originalTitle}:{year}"; - if (_hybridCache.TryGetValue(memKey, out List cached)) + string memKey = $"NMoonAnime:search:{imdbId}:{malId}:{title}:{originalTitle}:{year}"; + if (_hybridCache.TryGetValue(memKey, out List cached)) return cached; try @@ -53,15 +53,15 @@ namespace MoonAnime if (string.IsNullOrWhiteSpace(searchUrl)) continue; - _onLog($"MoonAnime: пошук через {searchUrl}"); + _onLog($"NMoonAnime: пошук через {searchUrl}"); string json = await Http.Get(_init.cors(searchUrl), headers: DefaultHeaders(), proxy: _proxyManager.Get()); if (string.IsNullOrWhiteSpace(json)) continue; - var response = JsonSerializer.Deserialize(json, _jsonOptions); + var response = JsonSerializer.Deserialize(json, _jsonOptions); var seasons = response?.Seasons? .Where(s => s != null && !string.IsNullOrWhiteSpace(s.Url)) - .Select(s => new MoonAnimeSeasonRef + .Select(s => new NMoonAnimeSeasonRef { SeasonNumber = s.SeasonNumber <= 0 ? 1 : s.SeasonNumber, Url = s.Url.Trim() @@ -80,24 +80,24 @@ namespace MoonAnime } catch (Exception ex) { - _onLog($"MoonAnime: помилка пошуку - {ex.Message}"); + _onLog($"NMoonAnime: помилка пошуку - {ex.Message}"); } - return new List(); + return new List(); } - public async Task GetSeasonContent(MoonAnimeSeasonRef season) + public async Task GetSeasonContent(NMoonAnimeSeasonRef season) { if (season == null || string.IsNullOrWhiteSpace(season.Url)) return null; - string memKey = $"MoonAnime:season:{season.Url}"; - if (_hybridCache.TryGetValue(memKey, out MoonAnimeSeasonContent cached)) + string memKey = $"NMoonAnime:season:{season.Url}"; + if (_hybridCache.TryGetValue(memKey, out NMoonAnimeSeasonContent cached)) return cached; try { - _onLog($"MoonAnime: завантаження сезону {season.Url}"); + _onLog($"NMoonAnime: завантаження сезону {season.Url}"); string html = await Http.Get(_init.cors(season.Url), headers: DefaultHeaders(), proxy: _proxyManager.Get()); if (string.IsNullOrWhiteSpace(html)) return null; @@ -110,14 +110,14 @@ namespace MoonAnime } catch (Exception ex) { - _onLog($"MoonAnime: помилка читання сезону - {ex.Message}"); + _onLog($"NMoonAnime: помилка читання сезону - {ex.Message}"); return null; } } - public List ParseStreams(string rawFile) + public List ParseStreams(string rawFile) { - var streams = new List(); + var streams = new List(); if (string.IsNullOrWhiteSpace(rawFile)) return streams; @@ -131,7 +131,7 @@ namespace MoonAnime if (string.IsNullOrWhiteSpace(url)) continue; - streams.Add(new MoonAnimeStreamVariant + streams.Add(new NMoonAnimeStreamVariant { Url = url, Quality = quality @@ -148,7 +148,7 @@ namespace MoonAnime if (string.IsNullOrWhiteSpace(url)) continue; - streams.Add(new MoonAnimeStreamVariant + streams.Add(new NMoonAnimeStreamVariant { Url = url, Quality = quality @@ -167,7 +167,7 @@ namespace MoonAnime { for (int i = 0; i < plainLinks.Count; i++) { - streams.Add(new MoonAnimeStreamVariant + streams.Add(new NMoonAnimeStreamVariant { Url = plainLinks[i], Quality = $"auto-{i + 1}" @@ -178,7 +178,7 @@ namespace MoonAnime if (streams.Count == 0 && value.StartsWith("http", StringComparison.OrdinalIgnoreCase)) { - streams.Add(new MoonAnimeStreamVariant + streams.Add(new NMoonAnimeStreamVariant { Url = value, Quality = "auto" @@ -187,7 +187,7 @@ namespace MoonAnime return streams .Where(s => s != null && !string.IsNullOrWhiteSpace(s.Url)) - .Select(s => new MoonAnimeStreamVariant + .Select(s => new NMoonAnimeStreamVariant { Url = s.Url.Trim(), Quality = NormalizeQuality(s.Quality) @@ -223,9 +223,9 @@ namespace MoonAnime 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, Url = seasonUrl, @@ -246,7 +246,7 @@ namespace MoonAnime if (entry.ValueKind != JsonValueKind.Object) continue; - var voice = new MoonAnimeVoiceContent + var voice = new NMoonAnimeVoiceContent { Name = NormalizeVoiceName(GetStringProperty(entry, "title"), voiceIndex) }; @@ -266,7 +266,7 @@ namespace MoonAnime string episodeTitle = GetStringProperty(episodeEntry, "title"); int episodeNumber = ParseEpisodeNumber(episodeTitle, episodeIndex); - voice.Episodes.Add(new MoonAnimeEpisodeContent + voice.Episodes.Add(new NMoonAnimeEpisodeContent { Name = string.IsNullOrWhiteSpace(episodeTitle) ? $"Епізод {episodeNumber}" : WebUtility.HtmlDecode(episodeTitle), Number = episodeNumber, diff --git a/MoonAnime/OnlineApi.cs b/NMoonAnime/OnlineApi.cs similarity index 88% rename from MoonAnime/OnlineApi.cs rename to NMoonAnime/OnlineApi.cs index 6666152..d432193 100644 --- a/MoonAnime/OnlineApi.cs +++ b/NMoonAnime/OnlineApi.cs @@ -5,7 +5,7 @@ using Shared.Models.Base; using Shared.Models.Module; using System.Collections.Generic; -namespace MoonAnime +namespace NMoonAnime { public class OnlineApi { @@ -24,7 +24,7 @@ namespace MoonAnime { 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 isAnime = hasLang && (original_language == "ja" || original_language == "zh"); @@ -33,9 +33,9 @@ namespace MoonAnime { string url = init.overridehost; 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; diff --git a/NMoonAnime/manifest.json b/NMoonAnime/manifest.json new file mode 100644 index 0000000..8f47d66 --- /dev/null +++ b/NMoonAnime/manifest.json @@ -0,0 +1,6 @@ +{ + "enable": true, + "version": 3, + "initspace": "NMoonAnime.ModInit", + "online": "NMoonAnime.OnlineApi" +} diff --git a/README.md b/README.md index 0b94ae5..211fb4d 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ - [x] BambooUA - [x] Unimay - [x] Mikai -- [x] MoonAnime +- [x] NMoonAnime ## Installation @@ -42,7 +42,7 @@ Create or update the module/repository.yaml file - AnimeON - Unimay - Mikai - - MoonAnime + - NMoonAnime - Uaflix - Bamboo - Makhno @@ -163,7 +163,7 @@ Sources with APN support: - Mikai - Makhno - KlonFUN -- MoonAnime +- NMoonAnime ## Source/player availability check script