Skip to content

Commit

Permalink
fix detection logic, fix tracking updating logic #33
Browse files Browse the repository at this point in the history
  • Loading branch information
insomniachi committed Jun 25, 2023
1 parent a88bac9 commit 74debc9
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 35 deletions.
25 changes: 24 additions & 1 deletion Totoro.Core/Models/Tracking.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
namespace Totoro.Core.Models;
using MalApi;

namespace Totoro.Core.Models;

public record Tracking
{
Expand Down Expand Up @@ -29,4 +31,25 @@ public static Tracking Next(AnimeModel anime)

return tracking;
}

public static Tracking WithEpisode(AnimeModel anime, int episode)
{
var tracking = new Tracking
{
WatchedEpisodes = episode
};

if (tracking.WatchedEpisodes == anime.TotalEpisodes)
{
tracking.Status = AnimeStatus.Completed;
tracking.FinishDate = DateTime.Today;
}
else if (tracking.WatchedEpisodes == 1)
{
tracking.Status = AnimeStatus.Watching;
tracking.StartDate = DateTime.Today;
}

return tracking;
}
}
46 changes: 27 additions & 19 deletions Totoro.WinUI/App.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -104,28 +104,36 @@ private void OnExit(object sender, EventArgs e)

private async void ToastNotificationManagerCompat_OnActivated(ToastNotificationActivatedEventArgsCompat e)
{
var args = ToastArguments.Parse(e.Argument);

if(!args.Contains("Type"))
try
{
return;
}
var args = ToastArguments.Parse(e.Argument);

switch (args.GetEnum<ToastType>("Type"))
if (!args.Contains("Type"))
{
return;
}

switch (args.GetEnum<ToastType>("Type"))
{
case ToastType.DownloadComplete:
Process.Start(new ProcessStartInfo { FileName = args.Get("File"), UseShellExecute = true });
break;
case ToastType.FinishedEpisode:
var anime = JsonSerializer.Deserialize<AnimeModel>(args.Get("Payload"));
var ep = args.GetInt("Episode");
var trackingService = GetService<ITrackingServiceContext>();
await trackingService.Update(anime.Id, Tracking.WithEpisode(anime, ep));
break;
case ToastType.SelectAnime:
var id = long.Parse((string)e.UserInput["animeId"]);
var nowPlayingViewModel = GetService<NowPlayingViewModel>();
RxApp.MainThreadScheduler.Schedule(async () => await nowPlayingViewModel.SetAnime(id));
break;
}
}
catch (Exception ex)
{
case ToastType.DownloadComplete:
Process.Start(new ProcessStartInfo { FileName = args.Get("File"), UseShellExecute = true });
break;
case ToastType.FinishedEpisode:
var anime = JsonSerializer.Deserialize<AnimeModel>(args.Get("Payload"));
var trackingService = GetService<ITrackingServiceContext>();
await trackingService.Update(anime.Id, Tracking.Next(anime));
break;
case ToastType.SelectAnime:
var id = long.Parse((string)e.UserInput["animeId"]);
var nowPlayingViewModel = GetService<NowPlayingViewModel>();
RxApp.MainThreadScheduler.Schedule(async () => await nowPlayingViewModel.SetAnime(id));
break;
this.Log().Error(ex);
}
}

Expand Down
3 changes: 1 addition & 2 deletions Totoro.WinUI/Services/ToastService.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
using System.IO;
using System.Text.Json;
using CommunityToolkit.WinUI.Notifications;
using Windows.ApplicationModel.Store;

namespace Totoro.WinUI.Services
{
Expand All @@ -13,7 +12,7 @@ public void CheckEpisodeComplete(AnimeModel anime, int currentEp)
new ToastContentBuilder()
.SetToastScenario(ToastScenario.Reminder)
.AddText($"Did you finish watching {anime.Title} Episode {currentEp}")
.AddButton("Yes", ToastActivationType.Background, $"Type={ToastType.FinishedEpisode};Payload={payload}")
.AddButton("Yes", ToastActivationType.Background, $"Type={ToastType.FinishedEpisode};Payload={payload};Episode={currentEp}")
.AddButton("No", ToastActivationType.Background, $"Type={ToastType.NoAction}")
.Show();
}
Expand Down
51 changes: 38 additions & 13 deletions Totoro.WinUI/Services/ViewService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -172,20 +172,32 @@ public async Task<T> SelectModel<T>(IEnumerable<T> models, T defaultValue = defa
return null;
}

var filtered = candidates.Where(x => Fuzz.PartialRatio(x.Title, title) > 80 || x.AlternativeTitles.Any(x => Fuzz.PartialRatio(title, x) > 80)).ToList();
if (!candidates.Any())
{
this.Log().Fatal($"no candidates found for title {title}");
return null;
}

if (candidates.FirstOrDefault(x => x.Title == title || x.AlternativeTitles.Any(x => x == title)) is { } result)
{
return result.Id;
}

var ratios = candidates.Select(x => (x, Fuzz.PartialRatio(x.Title, title))).OrderByDescending(x => x.Item2).ToList();
var filtered = ratios.Where(x => x.Item2 > 80).ToList();
if (filtered.Count == 1)
{
return filtered[0].Id;
return filtered[0].x.Id;
}
else
{
if (!candidates.Any())
var hundredPercent = filtered.Where(x => x.Item2 == 100).ToList();
if (hundredPercent.Count == 1)
{
this.Log().Fatal($"no candidates found for title {title}");
return null;
return hundredPercent[0].x.Id;
}

var model = await SelectModel(candidates, filtered.FirstOrDefault() ?? candidates.FirstOrDefault(), _animeService.GetAnime);
var model = await SelectModel(candidates, filtered.FirstOrDefault().x ?? candidates.FirstOrDefault(), _animeService.GetAnime);
return model?.Id;
}
}
Expand All @@ -203,20 +215,33 @@ public async Task<T> SelectModel<T>(IEnumerable<T> models, T defaultValue = defa
return null;
}

var filtered = candidates.Where(x => Fuzz.PartialRatio(x.Title, title) > 80 || x.AlternativeTitles.Any(x => Fuzz.PartialRatio(title, x) > 80)).ToList();
if (!candidates.Any())
{
this.Log().Fatal($"no candidates found for title {title}");
return null;
}

if (candidates.FirstOrDefault(x => x.Title == title || x.AlternativeTitles.Any(x => x == title)) is { } result)
{
return result.Id;
}

var ratios = candidates.Select(x => (x, Fuzz.PartialRatio(x.Title, title))).OrderByDescending(x => x.Item2).ToList();
var filtered = ratios.Where(x => x.Item2 > 80).ToList();
if (filtered.Count == 1)
{
return filtered[0].Id;
return filtered[0].x.Id;
}
else
{
if (!candidates.Any())
var hundredPercent = filtered.Where(x => x.Item2 == 100).ToList();
if (hundredPercent.Count == 1)
{
this.Log().Fatal($"no candidates found for title {title}");
return null;
return hundredPercent[0].x.Id;
}

_toastService.PromptAnimeSelection(candidates, filtered.FirstOrDefault() ?? candidates.FirstOrDefault());
_toastService.PromptAnimeSelection(candidates, filtered.FirstOrDefault().x ?? candidates.FirstOrDefault());

return null;
}
}
Expand Down Expand Up @@ -307,7 +332,7 @@ public async Task<Unit> Information(string title, string message)
PrimaryButtonText = "Yes",
};

var result = await dialog.ShowAsync();
await dialog.ShowAsync();
return Unit.Default;
}

Expand Down

0 comments on commit 74debc9

Please sign in to comment.