コード例 #1
0
        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);
        }
コード例 #2
0
 public ReleaseInfo GetCurrentRelease()
 {
     return(_currentRelease = UpdatesHelper.GetReleaseInfoFromFile(UpdatesHelper.ReleaseFile));
 }