protected override async void OnAppearing() { base.OnAppearing(); ArtistLabel.Text = Artist.Name; Releases.Clear(); foreach (Release release in await Client.GetReleases(Artist.MbId.ToString())) { Releases.Add(release); } SearchingLabel.IsVisible = false; ReleasesListView.IsVisible = true; }
private ICollection <Bundle> FilesToBundles(string directory, string ext = FILETYPE_XML) { ICollection <Bundle> outObj = new List <Bundle>(); var di = new DirectoryInfo(directory); try { Logger.Log(String.Format(CultureInfo.InvariantCulture, "Loading files from: {0}", directory), Logger.MessageLevel.Information, AppName); Releases.Clear(); if (!di.Exists) { var msg = "Directory provided does not exist!"; throw new DirectoryNotFoundException(msg); } else { // Iterate through all the XML files in the given directory. In case one is // passed in which is incorrect, the ReadFile function is wrapped in a try // catch. var allfiles = System.IO.Directory.GetFiles(directory); var files = Array.FindAll(allfiles, s => s.EndsWith(ext, StringComparison.OrdinalIgnoreCase)); foreach (var file in files) { Releases.Add(FileToBundle(file)); } } } catch (DirectoryNotFoundException dex) { Logger.Log(dex.Message, Logger.MessageLevel.Warning, AppName); } catch (Exception ex) { Logger.Log(ex, AppName); } finally { di = null; } ReleaseOutput = GetReleases; Processed = true; Logger.Log(String.Format(CultureInfo.InvariantCulture, "Files loaded", directory), Logger.MessageLevel.Information, AppName); return(outObj); }
private void Update() { foreach (ReleaseScheduleViewModel release in Releases) { release.SuccessfulCheckout -= ReleaseSuccessfulCheckoutHandler; } Releases.Clear(); foreach (Release release in m_model.Releases) { Releases.Add(new ReleaseScheduleViewModel() { Model = release, CheckoutProfiles = m_model.CheckoutProfiles }); Releases.Last().SuccessfulCheckout += ReleaseSuccessfulCheckoutHandler; } TierControl.Project = m_model; }
/// <summary> /// Reads the Atom feed at <see cref="ReleaseUpdateUri"/> and fills the <see cref="Releases"/> /// collection with information. If a release with higher version number than <see cref="ApplicationVersion"/> /// is found then the <see cref="ReleaseToUpdate"/> is set to this release. /// </summary> /// <param name="force"></param> /// <returns></returns> public async Task <bool> CheckForUpdate(bool force = false) { EnsureUpdateEntry(); if (updateEntry.LastCheck == DateTime.Today && !force) { return(false); } try { using (var cl = new HttpClient()) { var response = await cl.GetAsync(ReleaseUpdateUri); response.EnsureSuccessStatusCode(); using (var xmlReader = XmlReader.Create(await response.Content.ReadAsStreamAsync(), new XmlReaderSettings { Async = true })) { Releases.Clear(); ReleaseToUpdate = null; var feedReader = new AtomFeedReader(xmlReader); while (await feedReader.Read()) { switch (feedReader.ElementType) { case SyndicationElementType.Category: await feedReader.ReadCategory(); break; case SyndicationElementType.Image: await feedReader.ReadImage(); break; case SyndicationElementType.Item: var entry = await feedReader.ReadEntry(); var r = new Release(); r.DownloadUri = entry.Links.FirstOrDefault(x => x.RelationshipType == "alternate")?.Uri; if (r.DownloadUri != null) { r.Updated = entry.LastUpdated.ToUniversalTime().LocalDateTime; r.ParsedVersion = ParseVersion(r.DownloadUri.AbsolutePath); if (r.ParsedVersion != null) { Releases.Add(r); } } break; case SyndicationElementType.Link: await feedReader.ReadLink(); break; case SyndicationElementType.Person: await feedReader.ReadPerson(); break; default: await feedReader.ReadContent(); break; } } if (Releases.Count == 0) { return(false); } var top = Releases.OrderByDescending(x => x.ParsedVersion).First(); if (top.ParsedVersion > ApplicationVersion) { ReleaseToUpdate = top; return(true); } } } } catch (Exception ex) { LogException(ex); return(false); } updateEntry.LastCheck = DateTime.Today; SaveUpdateEntry(); return(false); }