Example #1
0
 public void SetActiveButton(TopAnimeType val)
 {
     ResetTopCategoryButtons();
     TopCategoriesForegorundBrushes[val.ToString()] =
         Application.Current.Resources["SystemControlBackgroundAccentBrush"] as Brush;
     RaisePropertyChanged(() => TopCategoriesForegorundBrushes);
 }
Example #2
0
 private string GetEndpoint(TopAnimeType type,int page)
 { 
     switch (type)
     {
         case TopAnimeType.General:
             return $"topanime.php?limit={page*50}";
         case TopAnimeType.Airing:
             return $"topanime.php?type=airing&limit={page*50}";
         case TopAnimeType.Upcoming:
             return $"topanime.php?type=upcoming&limit={page*50}";
         case TopAnimeType.Tv:
             return $"topanime.php?type=tv&limit={page*50}";
         case TopAnimeType.Movies:
             return $"topanime.php?type=movie&limit={page*50}";
         case TopAnimeType.Ovas:
             return $"topanime.php?type=ova&limit={page*50}";
         case TopAnimeType.Popular:
             return $"topanime.php?type=bypopularity&limit={page*50}";
         case TopAnimeType.Favourited:
             return $"topanime.php?type=favorite&limit={page*50}";
         case TopAnimeType.Manga:
             return $"topmanga.php?limit={page*50}";
         default:
             throw new ArgumentOutOfRangeException(nameof(type), type, null);
     }
 }
Example #3
0
        private string GetEndpoint(TopAnimeType type, int page)
        {
            switch (type)
            {
            case TopAnimeType.General:
                return($"topanime.php?limit={page*50}");

            case TopAnimeType.Airing:
                return($"topanime.php?type=airing&limit={page*50}");

            case TopAnimeType.Upcoming:
                return($"topanime.php?type=upcoming&limit={page*50}");

            case TopAnimeType.Tv:
                return($"topanime.php?type=tv&limit={page*50}");

            case TopAnimeType.Movies:
                return($"topanime.php?type=movie&limit={page*50}");

            case TopAnimeType.Ovas:
                return($"topanime.php?type=ova&limit={page*50}");

            case TopAnimeType.Popular:
                return($"topanime.php?type=bypopularity&limit={page*50}");

            case TopAnimeType.Favourited:
                return($"topanime.php?type=favorite&limit={page*50}");

            case TopAnimeType.Manga:
                return($"topmanga.php?limit={page*50}");

            default:
                throw new ArgumentOutOfRangeException(nameof(type), type, null);
            }
        }
 private void ButtonClickTopCategory(object o)
 {
     if (o == null)
         return;
     TopAnimeType type = (TopAnimeType)int.Parse(o as string);
     ViewModelLocator.Main.Navigate(PageIndex.PageTopAnime, AnimeListPageNavigationArgs.TopAnime(type));
     SetActiveButton(HamburgerButtons.TopAnime);
 }
 public AnimeTopQuery(TopAnimeType topType)
 {
     Request =
         WebRequest.Create(
             Uri.EscapeUriString($"http://myanimelist.net/{GetEndpoint(topType)}"));
     Request.ContentType = "application/x-www-form-urlencoded";
     Request.Method      = "GET";
     _type = topType;
 }
Example #6
0
 public AnimeTopQuery(TopAnimeType topType,int page = 0)
 {
     Request =
         WebRequest.Create(
             Uri.EscapeUriString($"https://myanimelist.net/{GetEndpoint(topType,page)}"));
     Request.ContentType = "application/x-www-form-urlencoded";
     Request.Method = "GET";
     _page = page;
     _type = topType;
 }
Example #7
0
 public static async Task <List <TopAnimeData> > RetrieveTopAnimeData(TopAnimeType type)
 {
     try
     {
         return(await DataCacheService.RetrieveData <List <TopAnimeData> >($"top_{type}_data.json", "", 14));
     }
     catch (Exception)
     {
         //No file
     }
     return(null);
 }
Example #8
0
 public static async void SaveTopAnimeData(List <TopAnimeData> data, TopAnimeType type)
 {
     try
     {
         await Task.Run(async() =>
         {
             await DataCacheService.SaveData(data, $"top_{type}_data.json", "");
         });
     }
     catch (Exception)
     {
         //magic
     }
 }
Example #9
0
        public static async Task <List <TopAnimeData> > RetrieveTopAnimeData(TopAnimeType type)
        {
            try
            {
                var file =
                    await ApplicationData.Current.LocalFolder.GetFileAsync($"top_{type}_data.json");

                var data = await FileIO.ReadTextAsync(file);

                var tuple =
                    JsonConvert.DeserializeObject <Tuple <DateTime, List <TopAnimeData> > >(data);
                return(CheckForOldDataDetails(tuple.Item1) ? tuple.Item2 : null);
            }
            catch (Exception)
            {
                //No file
            }
            return(null);
        }
Example #10
0
 public static async void SaveTopAnimeData(List <TopAnimeData> data, TopAnimeType type)
 {
     try
     {
         await Task.Run(async() =>
         {
             var json =
                 JsonConvert.SerializeObject(new Tuple <DateTime, List <TopAnimeData> >(DateTime.UtcNow, data));
             var file =
                 await
                 ApplicationData.Current.LocalFolder.CreateFileAsync(
                     $"top_{type}_data.json", CreationCollisionOption.ReplaceExisting);
             await FileIO.WriteTextAsync(file, json);
         });
     }
     catch (Exception)
     {
         //magic
     }
 }
 public void SetActiveButton(TopAnimeType val)
 {
     ResetTopCategoryButtons();
     TopCategoriesForegorundBrushes[val.ToString()] =
         Application.Current.Resources["SystemControlBackgroundAccentBrush"] as Brush;
     RaisePropertyChanged(() => TopCategoriesForegorundBrushes);
 }
Example #12
0
 public void SetActiveButton(TopAnimeType topType)
 {
     //
 }
Example #13
0
 public void SetActiveButton(TopAnimeType topType)
 {
     //throw new NotImplementedException();
 }
Example #14
0
		public void SetActiveButton(TopAnimeType topType)
		{
			//throw new NotImplementedException();
		}
Example #15
0
        public async void TestTopAnime(TopAnimeType type)
        {
            var top = await new AnimeTopQuery(type).GetTopAnimeData(true);

            Assert.False(top.Count == 0);
        }
 public void SetActiveButton(TopAnimeType topType)
 {
     //not for mobile
 }
Example #17
0
 public async void TestTopAnime(TopAnimeType type)
 {
     var top = await new AnimeTopQuery(type).GetTopAnimeData(true);
     Assert.False(top.Count == 0);
 }
 public static AnimeListPageNavigationArgs TopAnime(TopAnimeType type) =>
     new AnimeListPageNavigationArgs { WorkMode = AnimeListWorkModes.TopAnime, TopWorkMode = type };
		public async Task<List<AnimeDetail>> FindTopAnimeAsync(int pageNumber, TopAnimeType topAnimeType)
		{
			//Need to be reviewed !!!


			RestClient.BaseUrl = new Uri("http://myanimelist.net/topanime.php");

			var request = GetRestRequest(Method.GET);

			var animeType = GetTopAnimeType(topAnimeType);

			if (!string.IsNullOrEmpty(animeType))
				request.AddParameter("type", animeType);

			if (pageNumber > 0)
			{
				var limit = pageNumber * 30;

				request.AddParameter("limit", limit);
			}

			var animeDetails = new List<AnimeDetail>();

			var result = await ExecuteTaskASync(request).ConfigureAwait(false);

			var document = new HtmlDocument();

			document.LoadHtml(result);

			var pageContent = document.DocumentNode.SelectNodes("//div[@id='content']//table//tr");

			foreach (var row in pageContent)
			{
				var animeTitleNode = row.SelectSingleNode("//td//a//strong");

				if (animeTitleNode == null)
					continue;

				var animeUrl = animeTitleNode.ParentNode.Attributes["href"].Value;

				if (!animeUrl.Contains("myanimelist.net/anime"))
					continue;

				var animeDetail = new AnimeDetail();

				var stringToParse = animeUrl.Replace("http://myanimelist.net/anime/", "");

				var animeIdString = stringToParse.Substring(0, stringToParse.IndexOf("/", StringComparison.Ordinal));

				int animeId;

				if (Int32.TryParse(animeIdString, out animeId))
				{
					animeDetail.Id = animeId;
				}
				else
				{
					animeDetail.Id = 0;
				}


				animeDetail.Title = HttpUtility.HtmlDecode(animeTitleNode.InnerText);

				var contentCell = row.SelectSingleNode("//div[@class='spaceit_pad']");

				if (contentCell != null)
				{
					//Regex.Replace(classification.NextSibling.InnerText, @"\t|\n|\r", "").Trim();
					var memberCell = contentCell.SelectSingleNode("//div[@class='spaceit_pad']//span[@class='lightLink']");


					if (memberCell != null)
					{
						var membersString = memberCell.InnerText.Substring(0, memberCell.InnerText.IndexOf(" ", StringComparison.Ordinal)).Trim();

						int memberCount;

						if (Int32.TryParse(membersString.Replace(",", ""), out memberCount))
						{
							animeDetail.MembersCount = memberCount;
						}
					}

					var stats = Regex.Replace(contentCell.ChildNodes.First().InnerText, @"\t|\n|\r", "").Trim().Split(',');

					animeDetail.Type = stats[0];

					var episodesString = stats[1].Substring(0, stats[1].IndexOf("eps", StringComparison.Ordinal)).Trim();

					int episodesCount;

					if (Int32.TryParse(episodesString, out episodesCount))
					{
						animeDetail.Episodes = episodesCount;
					}

					var scoreString = Regex.Match(stats[2], @"\d+\.\d+");

					double score;

					if (Double.TryParse(scoreString.ToString(), NumberStyles.Any, CultureInfo.InvariantCulture, out score))
					{
						animeDetail.MembersScore = score;
					}
				}

			}

			return animeDetails;
		}
 public void SetActiveButton(TopAnimeType topType)
 {
     //not for mobile
 }
Example #21
0
 public static AnimeListPageNavigationArgs TopAnime(TopAnimeType type) =>
 new AnimeListPageNavigationArgs
 {
     WorkMode = AnimeListWorkModes.TopAnime, TopWorkMode = type
 };
 public void SetActiveButton(TopAnimeType topType)
 {
     
 }
		private string GetTopAnimeType(TopAnimeType topAnimeType)
		{
			switch (topAnimeType)
			{
				case TopAnimeType.ByPopularity:
					return "bypopularity";

				case TopAnimeType.Movie:
					return "movie";
				case TopAnimeType.Ova:
					return "ova";
				case TopAnimeType.Special:
					return "special";
				case TopAnimeType.Tv:
					return "tv";
				case TopAnimeType.All:
					return string.Empty;
				default:
					return string.Empty;
			}
		}