private List <string> DownloadAndUncompress(ReleaseInfo releaseInfo) { if (ArchiveDownloadUpdate != null) { ArchiveDownloadUpdate(this, new ArchiveDownloadEventArgs(releaseInfo, ArchiveDownloadStatus.Downloading)); } // var destinationFolder = Path.Combine(UpdateFolder, "files"); var archiveName = Path.Combine(UpdateFolder, "archives", "hg_update_" + releaseInfo.Version.Replace(" ", "_").Replace(".", "_") + ".zip"); if (!Directory.Exists(Path.GetDirectoryName(archiveName))) { Directory.CreateDirectory(Path.GetDirectoryName(archiveName)); } using (var client = new WebClient()) { client.Headers.Add("user-agent", "HomeGenieUpdater/1.0 (compatible; MSIE 7.0; Windows NT 6.0)"); try { client.DownloadFile(releaseInfo.DownloadUrl, archiveName); } catch (Exception) { if (ArchiveDownloadUpdate != null) { ArchiveDownloadUpdate(this, new ArchiveDownloadEventArgs(releaseInfo, ArchiveDownloadStatus.Error)); } return(null); // throw; } finally { client.Dispose(); } } // Unarchive (unzip) ArchiveDownloadUpdate?.Invoke(this, new ArchiveDownloadEventArgs(releaseInfo, ArchiveDownloadStatus.Decompressing)); var errorOccurred = false; var files = Utility.UncompressTgz(archiveName, destinationFolder); errorOccurred = files.Count == 0; ArchiveDownloadUpdate?.Invoke(this, errorOccurred ? new ArchiveDownloadEventArgs(releaseInfo, ArchiveDownloadStatus.Error) : new ArchiveDownloadEventArgs(releaseInfo, ArchiveDownloadStatus.Completed)); // update release_info.xml file with last releaseInfo ReleaseDate field in order to reflect github release date if (files.Contains(UpdatesHelper.ReleaseFile)) { var ri = UpdatesHelper.GetReleaseInfoFromFile(Path.Combine(destinationFolder, UpdatesHelper.ReleaseFile)); ri.ReleaseDate = releaseInfo.ReleaseDate.ToUniversalTime(); var serializer = new XmlSerializer(typeof(ReleaseInfo)); using (TextWriter writer = new StreamWriter(Path.Combine(destinationFolder, UpdatesHelper.ReleaseFile))) { serializer.Serialize(writer, ri); } } return(files); }
public ReleaseInfo GetCurrentRelease() { return(_currentRelease = UpdatesHelper.GetReleaseInfoFromFile(UpdatesHelper.ReleaseFile)); }