Skip to content

Commit

Permalink
remove references to animix play in ui
Browse files Browse the repository at this point in the history
  • Loading branch information
insomniachi committed Dec 23, 2022
1 parent b8868ad commit f8939d7
Show file tree
Hide file tree
Showing 21 changed files with 223 additions and 172 deletions.
3 changes: 2 additions & 1 deletion Totoro.Core.Tests/Builders/WatchViewModelBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ internal WatchViewModel Bulid()
MediaPlayer,
_timestampsServiceMock.Object,
_recentEpisodesProviderMock.Object,
Mock.Of<ILocalMediaService>());
Mock.Of<ILocalMediaService>(),
Mock.Of<IStreamPageMapper>());
}

internal WatchViewModelBuilder WithProviderFactory(Action<Mock<IProviderFactory>> configure)
Expand Down
2 changes: 1 addition & 1 deletion Totoro.Core.Tests/ViewModels/DisoverViewModelTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public async void DiscoverViewModel_Initializes()
vm.ShowOnlyWatchingAnime = false;

Assert.Equal(3, vm.Episodes.Count);
Assert.Equal(5, vm.Featured.Count);
//Assert.Equal(5, vm.Featured.Count);
}

[Fact]
Expand Down
1 change: 1 addition & 0 deletions Totoro.Core/Contracts/IStreamPageMapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ namespace Totoro.Core.Contracts;
public interface IStreamPageMapper
{
Task<(SearchResult Sub, SearchResult Dub)?> GetStreamPage(long malId, ProviderType provider);
Task<long> GetMalId(string identifier, ProviderType provider);
}
2 changes: 1 addition & 1 deletion Totoro.Core/Contracts/IViewService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,5 @@ public interface IViewService
Task AuthenticateMal();
Task PlayVideo(string title, string url);
Task<T> SelectModel<T>(IEnumerable<object> models) where T : class;
Task SubmitTimeStamp(long malId, int ep, string url, double duration, double introStart);
Task SubmitTimeStamp(long malId, int ep, VideoStream stream, double duration, double introStart);
}
4 changes: 2 additions & 2 deletions Totoro.Core/Models/AiredEpisode.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public sealed partial class AiredEpisode : IEquatable<AiredEpisode>
public string EpisodeUrl { get; set; }
public string Image { get; set; }
public DateTime TimeOfAiring { get; set; }
public string HumanizedTimeOfAiring => TimeOfAiring.Humanize();
public string HumanizedTimeOfAiring => string.Empty;
public long? MalId { get; set; }
public int GetEpisode()
{
Expand All @@ -29,6 +29,6 @@ public override bool Equals(object obj)

public override int GetHashCode() => EpisodeUrl.GetHashCode();

[GeneratedRegex("ep(\\d+)")]
[GeneratedRegex("(\\d+)")]
private static partial Regex EpisodeRegex();
}
5 changes: 3 additions & 2 deletions Totoro.Core/ServiceCollectionExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using Microsoft.Extensions.Hosting;
using Totoro.Core.Services;
using Totoro.Core.Services.AnimixPlay;
using Totoro.Core.Services.GogoAnime;
using Totoro.Core.Services.MyAnimeList;
using Totoro.Core.Services.ShanaProject;
using Totoro.Core.ViewModels;
Expand All @@ -27,11 +28,11 @@ public static IServiceCollection AddTotoro(this IServiceCollection services)
services.AddSingleton<ITimestampsService, TimestampsService>();
services.AddSingleton<ITorrentsService, TorrentsService>();
services.AddSingleton<ILocalMediaService, LocalMediaService>();
services.AddSingleton<IAiredEpisodeNotifier, AnimixPlayNotifier>();
services.AddSingleton<IAiredEpisodeNotifier, AiredEpisodeNotifier>();

services.AddTransient<IFileService, FileService>();
services.AddTransient<MalToModelConverter>();
services.AddTransient<IRecentEpisodesProvider, AnimixPlayEpisodesProvider>();
services.AddTransient<IRecentEpisodesProvider, GogoAnimeEpisodesProvider>();
services.AddTransient<IFeaturedAnimeProvider, AnimixPlayFeaturedAnimeProvider>();
services.AddTransient<IAnimeIdService, AnimeIdService>();
services.AddTransient<IShanaProjectService, ShanaProjectService>();
Expand Down
32 changes: 32 additions & 0 deletions Totoro.Core/Services/AiredEpisodeNotifier.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using System.Reactive.Subjects;
using Splat;

namespace Totoro.Core.Services;

public class AiredEpisodeNotifier : IAiredEpisodeNotifier
{
private List<AiredEpisode> _previousState = new();
private readonly Subject<AiredEpisode> _onNewEpisode = new();

public IObservable<AiredEpisode> OnNewEpisode => _onNewEpisode;

public AiredEpisodeNotifier(IRecentEpisodesProvider recentEpisodesProvider)
{
Observable
.Timer(TimeSpan.Zero, TimeSpan.FromMinutes(30))
.SelectMany(_ => recentEpisodesProvider.GetRecentlyAiredEpisodes())
.Select(enumerable => enumerable.ToList())
.Do(async list =>
{
list.RemoveAll(_previousState.Contains);
_previousState = list;
foreach (var item in list)
{
item.MalId = await recentEpisodesProvider.GetMalId(item);
_onNewEpisode.OnNext(item);
}
})
.Subscribe(_ => { }, RxApp.DefaultExceptionHandler.OnError);
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public IObservable<IEnumerable<FeaturedAnime>> GetFeaturedAnime()
{
return Observable.Create<IEnumerable<FeaturedAnime>>(async observer =>
{
var response = await _httpClient.GetAsync("https://animixplay.to/assets/s/featured.json");
var response = await _httpClient.GetAsync("https://animixplay.to/assets/s/featuredx.json");

if (!response.IsSuccessStatusCode)
{
Expand Down
48 changes: 0 additions & 48 deletions Totoro.Core/Services/AnimixPlay/AnimixPlayNotifier.cs

This file was deleted.

70 changes: 70 additions & 0 deletions Totoro.Core/Services/GogoAnime/GogoAnimeEpisodesProvider.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
using System.Text.RegularExpressions;
using AngleSharp.Dom;
using AnimDL.Api;
using AnimDL.Core;
using HtmlAgilityPack;
using HtmlAgilityPack.CssSelectors.NetCore;

namespace Totoro.Core.Services.GogoAnime;

public partial class GogoAnimeEpisodesProvider : IRecentEpisodesProvider
{
public const string AJAX_URL = "https://ajax.gogo-load.com/ajax/page-recent-release.html?page=1&type=1";
private readonly HttpClient _httpClient;
private readonly IStreamPageMapper _streamPageMapper;
private readonly string _urlStripped;
private readonly HtmlWeb _web = new();

public GogoAnimeEpisodesProvider(HttpClient httpClient,
IStreamPageMapper streamPageMapper)
{
_httpClient = httpClient;
_streamPageMapper = streamPageMapper;
_urlStripped = DefaultUrl.GogoAnime.EndsWith("/") || DefaultUrl.GogoAnime.EndsWith("\\") ? DefaultUrl.GogoAnime[..^1] : DefaultUrl.GogoAnime;
}

public IObservable<long> GetMalId(AiredEpisode ep)
{
var uri = new Uri(ep.EpisodeUrl);
var match = IdentifierRegex().Match(uri.AbsolutePath);

if (!match.Success)
{
return Observable.Return((long)0);
}

return _streamPageMapper.GetMalId(match.Groups[1].Value, ProviderType.GogoAnime).ToObservable();
}

public IObservable<IEnumerable<AiredEpisode>> GetRecentlyAiredEpisodes()
{
return Observable.Create<IEnumerable<AiredEpisode>>(async observer =>
{
var doc = await _web.LoadFromWebAsync(AJAX_URL);

var nodes = doc.QuerySelectorAll(".items li");
var list = new List<AiredEpisode>();

foreach (var item in nodes)
{
var title = item.SelectSingleNode("div/a").Attributes["title"].Value;
var url = _urlStripped + item.SelectSingleNode("div/a").Attributes["href"].Value;
var img = item.SelectSingleNode("div/a/img").Attributes["src"].Value;
var ep = item.QuerySelector(".episode").InnerText.Trim();
list.Add(new AiredEpisode
{
Anime = title,
EpisodeUrl = url,
Image = img,
InfoText = ep
});
}

observer.OnNext(list);
observer.OnCompleted();
});
}

[GeneratedRegex("/?(.+)-episode-\\d+")]
private static partial Regex IdentifierRegex();
}
27 changes: 26 additions & 1 deletion Totoro.Core/Services/MalSyncStreamPageMapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,21 @@ public MalSyncStreamPageMapper(HttpClient httpClient)
_httpClient = httpClient;
}

public async Task<long> GetMalId(string identifier, ProviderType provider)
{
try
{
var json = await _httpClient.GetStringAsync($"https://raw.githubusercontent.com/MALSync/MAL-Sync-Backup/master/data/pages/{GetProviderPage(provider)}/{identifier}.json");
var jObject = JsonNode.Parse(json);
var value = (long)jObject["malId"].AsValue();
return value;
}
catch
{
return 0;
}
}

public async Task<(SearchResult Sub, SearchResult Dub)?> GetStreamPage(long malId, ProviderType provider)
{
var json = await _httpClient.GetStringAsync($"https://raw.githubusercontent.com/MALSync/MAL-Sync-Backup/master/data/myanimelist/anime/{malId}.json");
Expand Down Expand Up @@ -77,7 +92,17 @@ private static string GetKey(ProviderType provider)
ProviderType.AnimixPlay => "AniMixPlay",
ProviderType.Tenshi => "Tenshi",
ProviderType.AnimePahe => "animepahe",
_ => throw new UnreachableException()
_ => throw new NotSupportedException()
};
}

private static string GetProviderPage(ProviderType provider)
{
return provider switch
{
ProviderType.GogoAnime => "Gogoanime",
ProviderType.Tenshi => "Tenshi",
_ => throw new NotSupportedException()
};
}
}
Expand Down
2 changes: 1 addition & 1 deletion Totoro.Core/Services/TimestampsService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ public async Task SubmitTimeStamp(long malId, int ep, string skipType, Interval
var postData = new Dictionary<string, string>()
{
["skipType"] = skipType,
["providerName"] = "AnimixPlay",
["providerName"] = _settings.DefaultProviderType.ToString(),
["startTime"] = interval.StartTime.ToString(),
["endTime"] = interval.EndTime.ToString(),
["episodeLength"] = episodeLength.ToString(),
Expand Down
Loading

0 comments on commit f8939d7

Please sign in to comment.