Example #1
0
 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 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;
 }
Example #3
0
        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();
            }
        }
Example #4
0
        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();
            }
        }
Example #5
0
        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)
            {
                //
            }
        }
Example #6
0
        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);
            }
        }
Example #7
0
        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);
            }
        }
Example #8
0
 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)
     {
         //
     }
 }
Example #9
0
        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;
 }
Example #13
0
        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();
        }
Example #14
0
 public AnimeListPageNavigationArgs(int index, AnimeListWorkModes workMode)
 {
     WorkMode    = workMode;
     StatusIndex = index;
 }
Example #15
0
 public AnimeListPageNavigationArgs(AnimeGenres genre)
 {
     WorkMode = AnimeListWorkModes.AnimeByGenre;
     Genre    = genre;
 }
Example #16
0
 public AnimeListPageNavigationArgs(AnimeStudios studio)
 {
     WorkMode = AnimeListWorkModes.AnimeByStudio;
     Studio   = studio;
 }