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 } }
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); } }