public AnimeListPageNavigationArgs(SortOptions sort, int status, bool desc, AnimeListWorkModes seasonal, string source, AnimeSeason season, AnimeListDisplayModes dispMode) { SortOption = sort; Status = status; Descending = desc; WorkMode = seasonal; ListSource = source; NavArgs = true; CurrSeason = season; DisplayMode = dispMode; }
public LibraryListQuery(string source, AnimeListWorkModes mode) { _mode = mode; _source = source; var type = _mode == AnimeListWorkModes.Anime ? "anime" : "manga"; switch (CurrentApiType) { case ApiType.Mal: Request = WebRequest.Create( Uri.EscapeUriString( $"https://myanimelist.net/malappinfo.php?u={source}&status=all&type={type}")); Request.ContentType = "application/x-www-form-urlencoded"; Request.Method = "GET"; break; case ApiType.Hummingbird: switch (mode) { case AnimeListWorkModes.Anime: Request = WebRequest.Create( Uri.EscapeUriString($"https://hummingbird.me/api/v1/users/{source}/library")); Request.ContentType = "application/x-www-form-urlencoded"; Request.Method = "GET"; break; case AnimeListWorkModes.Manga: Request = WebRequest.Create( Uri.EscapeUriString($"https://hummingbird.me/manga_library_entries?user_id={source}")); Request.ContentType = "application/x-www-form-urlencoded"; Request.Method = "GET"; break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); } break; default: throw new ArgumentOutOfRangeException(); } }
public static async void SaveDataForUser(string user, string data, AnimeListWorkModes mode) { if (!Settings.IsCachingEnabled) { return; } try { var file = await ApplicationData.Current.LocalFolder.CreateFileAsync( $"{(mode == AnimeListWorkModes.Anime ? "anime" : "manga")}_data_{user.ToLower()}.json", CreationCollisionOption.ReplaceExisting); await FileIO.WriteTextAsync(file, JsonConvert.SerializeObject(new Tuple <DateTime, string>(DateTime.Now, data))); } catch (Exception) { // } }
public static async Task <List <ILibraryData> > RetrieveDataForUser(string user, AnimeListWorkModes mode) { if (!Settings.IsCachingEnabled) { return(null); } try { var file = await ApplicationData.Current.LocalFolder.GetFileAsync( $"{(mode == AnimeListWorkModes.Anime ? "anime" : "manga")}_data_{user.ToLower()}.json"); var data = await FileIO.ReadTextAsync(file); var decoded = new List <ILibraryData>(); if (mode == AnimeListWorkModes.Anime) { var jsonObj = JsonConvert.DeserializeObject <Tuple <DateTime, List <AnimeLibraryItemData> > >(data); if (!CheckForOldData(jsonObj.Item1)) { await file.DeleteAsync(); return(null); } decoded.AddRange(jsonObj.Item2.Select(item => item as ILibraryData)); } else { var jsonObj = JsonConvert.DeserializeObject <Tuple <DateTime, List <MangaLibraryItemData> > >(data); if (!CheckForOldData(jsonObj.Item1)) { await file.DeleteAsync(); return(null); } decoded.AddRange(jsonObj.Item2.Select(item => item as ILibraryData)); } return(decoded); } catch (Exception) { return(null); } }
public static async Task <List <ILibraryData> > RetrieveDataForUser(string user, AnimeListWorkModes mode) { if (!Settings.IsCachingEnabled) { return(null); } try { var decoded = new List <ILibraryData>(); if (mode == AnimeListWorkModes.Anime) { var jsonObj = await DataCacheService.RetrieveData <Tuple <DateTime, List <AnimeLibraryItemData> > >( $"{(mode == AnimeListWorkModes.Anime ? "anime" : "manga")}_data_{user.ToLower()}.json", "", 0); if (!CheckForOldData(jsonObj.Item1)) { return(null); } decoded.AddRange(jsonObj.Item2.Select(item => item as ILibraryData)); } else { var jsonObj = await DataCacheService.RetrieveData <Tuple <DateTime, List <MangaLibraryItemData> > >( $"{(mode == AnimeListWorkModes.Anime ? "anime" : "manga")}_data_{user.ToLower()}.json", "", 0); if (!CheckForOldData(jsonObj.Item1)) { return(null); } decoded.AddRange(jsonObj.Item2.Select(item => item as ILibraryData)); } return(decoded); } catch (Exception) { return(null); } }
public static async Task SaveDataForUser(string user, IEnumerable <ILibraryData> data, AnimeListWorkModes mode) { if (!Settings.IsCachingEnabled) { return; } try { if (mode == AnimeListWorkModes.Anime) { await DataCacheService.SaveData( new Tuple <DateTime, IEnumerable <AnimeLibraryItemData> >(DateTime.Now, data.Select(item => item as AnimeLibraryItemData)), $"{(mode == AnimeListWorkModes.Anime ? "anime" : "manga")}_data_{user.ToLower()}.json", ""); } else { await DataCacheService.SaveData( new Tuple <DateTime, IEnumerable <MangaLibraryItemData> >(DateTime.Now, data.Select(item => item as MangaLibraryItemData)), $"{(mode == AnimeListWorkModes.Anime ? "anime" : "manga")}_data_{user.ToLower()}.json", ""); } } catch (Exception) { // } }
public static async Task <Tuple <string, DateTime> > RetrieveDataForUser(string user, AnimeListWorkModes mode) { if (!Settings.IsCachingEnabled) { return(null); } try { var file = await ApplicationData.Current.LocalFolder.GetFileAsync( $"{(mode == AnimeListWorkModes.Anime ? "anime" : "manga")}_data_{user.ToLower()}.json"); var data = await FileIO.ReadTextAsync(file); var decoded = JsonConvert.DeserializeObject <Tuple <DateTime, string> >(data); if (!CheckForOldData(decoded.Item1)) { await file.DeleteAsync(); return(null); } return(new Tuple <string, DateTime>(decoded.Item2, decoded.Item1)); } catch (Exception) { return(null); } }
public AnimeListPageNavigationArgs(AnimeGenres genre) { WorkMode = AnimeListWorkModes.AnimeByGenre; Genre = genre; }
public AnimeListPageNavigationArgs(AnimeStudios studio) { WorkMode = AnimeListWorkModes.AnimeByStudio; Studio = studio; }
public AnimeListPageNavigationArgs(int filterIndex, AnimeListWorkModes workMode) { WorkMode = workMode; StatusIndex = filterIndex; }
public async Task FetchData(bool force = false, AnimeListWorkModes? modeOverride = null) { if(_fetching) return; _fetching = true; var requestedMode = modeOverride ?? WorkMode; if (!force && _prevListSource == ListSource && _prevWorkMode == requestedMode) { if (_prevWorkMode != modeOverride) RefreshList(); _fetching = false; return; } if (WorkMode == requestedMode) _prevWorkMode = WorkMode; _prevListSource = ListSource; Loading = modeOverride == null; BtnSetSourceVisibility = false; EmptyNoticeVisibility = false; if (string.IsNullOrWhiteSpace(ListSource)) { EmptyNoticeVisibility = true; EmptyNoticeContent = "We have come up empty...\nList source is not set.\nLog in or set it manually."; BtnSetSourceVisibility = true; } else { EmptyNoticeContent = "We have come up empty..."; } switch (requestedMode) { case AnimeListWorkModes.Anime: _attemptedAnimeFetch = true; AllLoadedAnimeItemAbstractions = new List<AnimeItemAbstraction>(); if (force) _allLoadedAuthAnimeItems = new List<AnimeItemAbstraction>(); else if (_allLoadedAuthAnimeItems.Count > 0 && string.Equals(ListSource, Credentials.UserName, StringComparison.CurrentCultureIgnoreCase)) AllLoadedAnimeItemAbstractions = _allLoadedAuthAnimeItems; break; case AnimeListWorkModes.Manga: _attemptedMangaFetch = true; AllLoadedMangaItemAbstractions = new List<AnimeItemAbstraction>(); if (force) _allLoadedAuthMangaItems = new List<AnimeItemAbstraction>(); else if (_allLoadedAuthMangaItems.Count > 0 && string.Equals(ListSource, Credentials.UserName, StringComparison.CurrentCultureIgnoreCase)) AllLoadedMangaItemAbstractions = _allLoadedAuthMangaItems; break; default: throw new ArgumentOutOfRangeException(); } if (requestedMode == AnimeListWorkModes.Anime ? AllLoadedAnimeItemAbstractions.Count == 0 : AllLoadedMangaItemAbstractions.Count == 0) { List<ILibraryData> data = null; await Task.Run(async () => data = await new LibraryListQuery(ListSource, requestedMode).GetLibrary(force)); if (data?.Count == 0) { //no data? RefreshList(); _fetching = false; return; } var auth = Credentials.Authenticated && string.Equals(ListSource, Credentials.UserName, StringComparison.CurrentCultureIgnoreCase); switch (requestedMode) { case AnimeListWorkModes.Anime: foreach (var item in data) AllLoadedAnimeItemAbstractions.Add(new AnimeItemAbstraction(auth, item as AnimeLibraryItemData)); if (string.Equals(ListSource, Credentials.UserName, StringComparison.CurrentCultureIgnoreCase)) _allLoadedAuthAnimeItems = AllLoadedAnimeItemAbstractions; break; case AnimeListWorkModes.Manga: foreach (var item in data) AllLoadedMangaItemAbstractions.Add(new AnimeItemAbstraction(auth && Settings.SelectedApiType == ApiType.Mal, item as MangaLibraryItemData)); //read only manga for hummingbird if (string.Equals(ListSource, Credentials.UserName, StringComparison.CurrentCultureIgnoreCase)) _allLoadedAuthMangaItems = AllLoadedMangaItemAbstractions; break; default: throw new ArgumentOutOfRangeException(); } } _fetching = false; if (WorkMode != requestedMode) return; // manga or anime is loaded top manga can proceed loading something else AppBtnGoBackToMyListVisibility = Credentials.Authenticated && !string.Equals(ListSource, Credentials.UserName, StringComparison.CurrentCultureIgnoreCase) ? true : false; //load tags ViewModelLocator.GeneralMain.SearchHints = _allLoadedAuthAnimeItems.Concat(_allLoadedAuthMangaItems).SelectMany(abs => abs.Tags).Distinct().ToList(); RefreshList(); }
public AnimeListPageNavigationArgs(int index, AnimeListWorkModes workMode) { WorkMode = workMode; StatusIndex = index; }