示例#1
0
        public static async void SaveAnimeDetails(int id, AnimeDetailsData data, bool anime = true)
        {
            try
            {
                var folder =
                    await
                    ApplicationData.Current.LocalFolder.CreateFolderAsync(anime? "AnimeDetails" : "MangaDetails",
                                                                          CreationCollisionOption.OpenIfExists);

                await Task.Run(async() =>
                {
                    var json =
                        JsonConvert.SerializeObject(new Tuple <DateTime, AnimeDetailsData>(DateTime.UtcNow, data));
                    var file =
                        await
                        folder.CreateFileAsync($"{data.Source}_{id}.json",
                                               CreationCollisionOption.ReplaceExisting);
                    await FileIO.WriteTextAsync(file, json);
                });
            }
            catch (Exception)
            {
                //probably failed to create folder #windowsmagic
            }
        }
示例#2
0
 public static async void SaveAnimeDetails(int id, AnimeDetailsData data, bool anime = true)
 {
     try
     {
         await Task.Run(async() =>
         {
             await
             DataCacheService.SaveData(data, $"{data.Source}_{id}.json",
                                       anime ? "AnimeDetails" : "MangaDetails");
         });
     }
     catch (Exception)
     {
         //probably failed to create folder #windowsmagic
     }
 }
        public async Task <AnimeDetailsData> GetGeneralDetailsData(bool force = false)
        {
            var possibleData = force ? null : await DataCache.RetrieveAnimeGeneralDetailsData(_id, DataSource.Ann);

            if (possibleData != null)
            {
                return(possibleData);
            }

            var raw = await GetRequestResponse();

            if (string.IsNullOrEmpty(raw))
            {
                return(null);
            }

            try
            {
                var data  = XDocument.Parse(raw);
                var nodes = data.Element("ann").Elements("anime");
                //there may be many things , maybe we are lucky enough to grab original title
                var node =
                    nodes.FirstOrDefault(
                        element =>
                        string.Equals(element.Attribute("name").Value, _rootTitle,
                                      StringComparison.CurrentCultureIgnoreCase));
                if (node == null)
                {
                    node = await Task.Run(() =>
                    {
                        foreach (var bigNode in nodes)
                        {
                            foreach (var infoNode in bigNode.Elements("info"))
                            {
                                foreach (var attr in infoNode.Attributes("type"))
                                {
                                    if (attr.Value == "Alternative title")
                                    {
                                        if (string.Equals(infoNode.Value, _rootTitle,
                                                          StringComparison.CurrentCultureIgnoreCase))
                                        {
                                            return(bigNode);
                                        }
                                    }
                                }
                            }
                        }
                        return(null);
                    });
                }


                if (node == null)
                {
                    node = nodes.First();
                }

                var output = new AnimeDetailsData
                {
                    SourceId = node.Attribute("id").Value,
                    Genres   =
                        node.Elements("info")
                        .Where(element => element.Attribute("type").Value == "Genres")
                        .Select(element => element.Value)
                        .ToList(),
                    Episodes = node.Elements("episode").Select(element => element.Value).ToList(),
                    OPs      =
                        node.Elements("info")
                        .Where(element => element.Attribute("type").Value == "Opening Theme")
                        .Select(element => element.Value)
                        .ToList(),
                    EDs =
                        node.Elements("info")
                        .Where(element => element.Attribute("type").Value == "Ending Theme")
                        .Select(element => element.Value)
                        .ToList()
                };

                DataCache.SaveAnimeDetails(_id, output);

                return(output);
            }
            catch (Exception)
            {
                return(null);
            }
        }