public void SetActiveButton(TopAnimeType val) { ResetTopCategoryButtons(); TopCategoriesForegorundBrushes[val.ToString()] = Application.Current.Resources["SystemControlBackgroundAccentBrush"] as Brush; RaisePropertyChanged(() => TopCategoriesForegorundBrushes); }
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 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; }
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; }
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); }
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 } }
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); }
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 topType) { // }
public void SetActiveButton(TopAnimeType topType) { //throw new NotImplementedException(); }
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 }
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) { }
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; } }