示例#1
0
        /// <summary>
        /// Checks if an update is available
        /// </summary>
        /// <returns>The latest or current version</returns>
        public async Task <Version> CheckForUpdatesAsync()
        {
            State = UpdaterState.CheckingForUpdates;

            int updateFiles = Directory.GetFiles(downloadPath).Length;

            if (File.Exists(versionFilePath) && updateFiles > 0)
            {
                string versionTxt = await File.ReadAllTextAsync(versionFilePath);

                latestVersion = Version.ConvertToVersion(versionTxt);

                if (latestVersion > currentVersion)
                {
                    if (File.Exists(changelogFilePath))
                    {
                        UpdateAvailable?.Invoke(this, new VersionEventArgs(currentVersion, latestVersion, true, File.ReadAllText(changelogFilePath)));
                    }
                    else
                    {
                        UpdateAvailable?.Invoke(this, new VersionEventArgs(currentVersion, latestVersion, true));
                    }

                    State = UpdaterState.Idle;
                    return(latestVersion);
                }
            }
            else
            {
                try
                {
                    var releases = await gitHubClient.Repository.Release.GetAll(GitHubUsername, GitHubRepositoryName);

                    Release release = releases.FirstOrDefault(x => Version.ConvertToVersion(x.TagName.Replace("v", "")) > currentVersion);

                    if (release is null)
                    {
                        return(currentVersion);
                    }

                    latestRelease = release;
                    latestVersion = Version.ConvertToVersion(latestRelease.TagName.Replace("v", ""));
                    changelog     = latestRelease.Body;
                    UpdateAvailable?.Invoke(this, new VersionEventArgs(currentVersion, latestVersion, false, latestRelease.Body));
                    State = UpdaterState.Idle;
                    return(latestVersion);
                }
                catch (Exception)
                {
                    throw;
                }
            }

            State = UpdaterState.Idle;
            return(currentVersion);
        }
示例#2
0
        /// <summary>
        /// Initializes a new instance of the updater
        /// </summary>
        /// <param name="gitHubUsername">The GitHub username</param>
        /// <param name="gitHubRepositoryName">The GitHub repository name</param>
        /// <param name="token">The GitHub personal access token</param>
        public Updater(string gitHubUsername, string gitHubRepositoryName, string token)
        {
            GitHubUsername       = gitHubUsername;
            GitHubRepositoryName = gitHubRepositoryName;

            string appData         = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
            string mainProjectName = Assembly.GetEntryAssembly().GetName().Name;
            string appDataPath     = $@"{appData}\{mainProjectName}";

            downloadPath = $@"{appDataPath}\Download";
            updatePath   = $@"{appDataPath}\Update";
            batFilePath  = $@"{appDataPath}\InstallUpdate.bat";

            if (!Directory.Exists(appDataPath))
            {
                Directory.CreateDirectory(appDataPath);
            }
            if (!Directory.Exists(downloadPath))
            {
                Directory.CreateDirectory(downloadPath);
            }
            if (!Directory.Exists(updatePath))
            {
                Directory.CreateDirectory(updatePath);
            }

            if (File.Exists(batFilePath) && !string.Equals(File.ReadAllText(batFilePath), Resources.InstallUpdate) || !File.Exists(batFilePath))
            {
                File.WriteAllText(batFilePath, Resources.InstallUpdate);
            }

            try
            {
                gitHubClient = new GitHubClient(new ProductHeaderValue(mainProjectName))
                {
                    Credentials = new Credentials(token)
                };
                webClient = new WebClient();
                webClient.DownloadFileCompleted   += WebClient_DownloadFileCompleted;
                webClient.DownloadProgressChanged += WebClient_DownloadProgressChanged;
            }
            catch (Exception)
            {
                throw;
            }

            originalFilePath  = Process.GetCurrentProcess().MainModule.FileName;
            changelogFilePath = $@"{downloadPath}\Update.changelog";
            versionFilePath   = $@"{downloadPath}\Update.version";

            currentVersion = Version.ConvertToVersion(Assembly.GetEntryAssembly().GetName().Version.ToString(), true);
        }
示例#3
0
 /// <summary>
 /// Initializes a new instance of the updater
 /// </summary>
 /// <param name="gitHubUsername">The GitHub username</param>
 /// <param name="gitHubRepositoryName">The GitHub repository name</param>
 /// <param name="token">The GitHub personal access token</param>
 /// <param name="currentVersion">The current version of the application</param>
 public Updater(string gitHubUsername, string gitHubRepositoryName, string token, string currentVersion) : this(gitHubUsername, gitHubRepositoryName, token)
 {
     this.currentVersion = Version.ConvertToVersion(currentVersion, true);
 }