Exemple #1
0
 public NewVersionWindow(GithubRelease release, MainWindow mainWindow)
 {
     _release    = release;
     _mainWindow = mainWindow;
     InitializeComponent();
     MainGrid.DataContext = _release;
 }
        /// <summary>
        /// Downloads the latest release from github
        /// </summary>
        /// <returns></returns>
        private async Task <string> DownloadRelease(GithubRelease release)
        {
            if (release == null)
            {
                return(null);
            }

            var downloadPath = SidekickPaths.GetDataFilePath("Sidekick-Update.exe");

            if (File.Exists(downloadPath))
            {
                File.Delete(downloadPath);
            }

            var downloadUrl = release.Assets.FirstOrDefault(x => x.Name == "Sidekick-Setup.exe")?.DownloadUrl;

            if (downloadUrl == null)
            {
                return(null);
            }

            var response = await githubClient.Client.GetAsync(downloadUrl);

            using var downloadStream = await response.Content.ReadAsStreamAsync();

            using var fileStream = new FileStream(downloadPath, FileMode.Create, FileAccess.Write, FileShare.None);
            await downloadStream.CopyToAsync(fileStream);

            return(downloadPath);
        }
Exemple #3
0
        public UpdateViewModel(MainService main,
                               TrayService tray)
        {
            this.main = main;
            this.tray = tray;

            savePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
                                    "Update",
                                    "update.zip");
            upexePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
                                     "Update",
                                     "ProjectEyeUp.exe");
            string[] versionArray = Assembly.GetExecutingAssembly().GetName().Version.ToString().Split('.');
            version = versionArray[0] + "." + versionArray[1] + "." + versionArray[2];
#if DEBUG
            version = "1.0.3";
#endif
            githubUrl = "https://api.github.com/repos/planshit/projecteye/releases/latest";
            outPath   = Path.Combine(AppDomain.CurrentDomain.BaseDirectory);

            openurlCommand = new Command(new Action <object>(openurlCommand_action));
            updateCommand  = new Command(new Action <object>(updateCommand_action));
            installCommand = new Command(new Action <object>(installCommand_action));
            githubRelease  = new GithubRelease(githubUrl, version);
            githubRelease.RequestCompleteEvent += Updater_RequestCompleteEvent;
            githubRelease.RequestErrorEvent    += Updater_RequestErrorEvent;


            githubRelease.GetRequest();
            PlayProcess = true;
        }
        //  Methods
        //  =======

        public async Task <Asset> CheckForUpdateAsync()
        {
            RestRequest request = new RestRequest(Method.GET);

            IRestResponse response = await Task.Run(() =>
            {
                return(restClient.Execute(request));
            });

            if (response == null)
            {
                return(null);
            }

            switch (response.ResponseStatus)
            {
            case ResponseStatus.TimedOut:
            case ResponseStatus.Error:
            case ResponseStatus.Aborted:
            default:
                return(null);

            case ResponseStatus.Completed when response.StatusCode == HttpStatusCode.OK:
                GithubRelease release = jsonConverter.FromJson <GithubRelease>(response.Content);

                if (release == null)
                {
                    return(null);
                }

                if (release.IsDraft)
                {
                    return(null);
                }

                if (release.Tag == null)
                {
                    return(null);
                }

                if (!Version.TryParse(release.Tag.Split('-')[0].Replace(vPrefix, string.Empty), out Version version))
                {
                    return(null);
                }

                if (assemblyName.Version.CompareTo(version) >= 0)
                {
                    return(null);
                }

                Asset asset = release.Assets.FirstOrDefault(r => r.URL.EndsWith(msiExtension));

                if (asset == null)
                {
                    return(null);
                }

                return(asset);
            }
        }
        /// <summary>
        /// Returns whether there is an update available for the core ModAPI DLLs.
        /// </summary>
        /// <returns></returns>
        public static bool HasDllsUpdate(out GithubRelease release)
        {
            release = GetLatestGithubRelease("emd4600", "spore-modapi");
            var updateVersion = ParseGithubVersion(release.tag_name);

            return(updateVersion > Settings.CurrentDllsBuild);
        }
Exemple #6
0
        public void SetUp()
        {
            var navigationServiceMock = new Mock <INavigationService>();

            _dialogServiceMock = new Mock <IDialogService>();
            var busStopRepositoryMock = new Mock <IBusStopRepository>();

            _githubServiceMock = new Mock <IGithubService>();
            _appUpdaterMock    = new Mock <IAppUpdater>();
            var geolocatorMock = new Mock <IGeolocator>();

            _tabsPageVM = new TabsPageVM(navigationServiceMock.Object, _dialogServiceMock.Object,
                                         _githubServiceMock.Object, busStopRepositoryMock.Object, _appUpdaterMock.Object, geolocatorMock.Object);

            _githubRelease = new GithubRelease
            {
                Name    = "Newer tRelease",
                TagName = null,
                Assets  = new List <Asset>
                {
                    new Asset
                    {
                        Id   = 1,
                        Name = "TestAsset",
                        Size = 2,
                        Url  = "www.update-download-test.com"
                    }
                }
            };
        }
 public GitHubUpdates(string componentUpdated, GithubRelease latestRelease)
 {
     InitializeComponent();
     _componentUpdated    = componentUpdated;
     labelUpdated.Content = componentUpdated;
     _latestRelease       = latestRelease;
 }
        /// <summary>
        /// Returns whether there is an update available for the program.
        /// </summary>
        /// <returns></returns>
        public static bool HasProgramUpdate(out GithubRelease release)
        {
            release = GetLatestGithubRelease("Splitwirez", "Spore-Mod-Manager");
            //release = GetLatestGithubRelease("emd4600", "sporemodder-fx");
            var updateVersion = ParseGithubVersion(release.tag_name);

            return(updateVersion > Settings.ModManagerVersion);
        }
 private GithubRelease[] GetReleasesFromVersions(List <MLAPIVersion> versions)
 {
     GithubRelease[] releases = new GithubRelease[versions.Count];
     for (int i = 0; i < versions.Count; i++)
     {
         releases[i] = GetReleaseOfVersion(versions[i]);
     }
     return(releases);
 }
Exemple #10
0
        public void Release()
        {
            GithubRelease ckan = GithubAPI.GetLatestRelease("KSP-CKAN/Test", false);

            Assert.IsNotNull(ckan.author);
            Assert.IsNotNull(ckan.download);
            Assert.IsNotNull(ckan.size);
            Assert.IsNotNull(ckan.version);
        }
Exemple #11
0
 public GitHubUpdates(UpdaterComponent componentUpdated, GithubRelease latestRelease, string local, string online)
 {
     InitializeComponent();
     _componentUpdated    = componentUpdated;
     labelUpdated.Content = componentUpdated.name;
     labelVersion.Content = $"{(local != Properties.Resources.UpdaterNotInstalled ? $"{local} to " : "")}{online}";
     _latestRelease       = latestRelease;
     onlineVersion        = online;
 }
 public void TestSetup()
 {
     release = new GithubRelease()
     {
         Url        = string.Empty,
         Tag        = "v0.2.0",
         PreRelease = "False",
         Published  = string.Empty
     };
 }
    IEnumerator CheckForUpdates()
    {
        using (UnityWebRequest webRequest = UnityWebRequest.Get("https://api.github.com/repos/japamala/armok-vision/releases"))
        {
            yield return(webRequest.SendWebRequest());

            if (webRequest.result != UnityWebRequest.Result.Success)
            {
                Debug.LogError("Connection Error: " + webRequest.error);
            }
            else
            {
                var releases = JsonConvert.DeserializeObject <GithubRelease[]>(webRequest.downloadHandler.text);
                foreach (var release in releases)
                {
                    if (release.draft)
                    {
                        continue;
                    }
                    if (release.prerelease)
                    {
                        continue;
                    }
                    latestRelease = release;
                    break;
                }
                if (latestRelease == null)
                {
                    Debug.Log("No valid release.");
                    yield break;
                }
                try
                {
                    System.Version latestVersion  = new System.Version(latestRelease.tag_name.TrimStart('v'));
                    System.Version currentVersion = new System.Version(BuildSettings.Instance.content_version);
                    if (latestVersion > currentVersion)
                    {
                        ModalPanel.Instance.Choice(string.Format("There is a new version of Armok Vision availabe for download.\r\n" +
                                                                 "Current version: {0}\r\n" +
                                                                 "Latest version: {1}\r\n" +
                                                                 "Would you like to download it?", currentVersion, latestVersion), OpenRelease, NoEvent, DontAskAgain, "Yes", "No", "Don't ask again.");
                    }
                    else
                    {
                        Debug.Log("Armok Vision it up to date!");
                    }
                }
                catch (System.Exception e)
                {
                    Debug.LogException(e);
                    yield break;
                }
            }
        }
    }
Exemple #14
0
 public void UpdateApp(GithubRelease latestRelease)
 {
     if (_updateSupport.CheckIfApkIsDownloaded())
     {
         _updateSupport.ApkInstall();
     }
     else
     {
         DownloadLatestVersion(latestRelease.Assets[0].Url);
     }
 }
Exemple #15
0
        public async Task <GithubRelease> GetRelease()
        {
            if (githubRelease == null || DateTime < DateTime.UtcNow.AddHours(-1))
            {
                DateTime = DateTime.UtcNow;
                HttpClient.DefaultRequestHeaders.UserAgent.TryParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36 Edg/80.0.361.62");
                githubRelease = await HttpClient.GetFromJsonAsync <GithubRelease>("https://api.github.com/repos/IvanJosipovic/KubeUI/releases/latest");
            }

            return(githubRelease);
        }
Exemple #16
0
        protected override async Task Download(GithubRelease ghRelease)
        {
            var release = ghRelease.Release;
            var asset   = release.Assets.First(r => r.Name.Contains("win-x64"));

            using (var client = new HttpClient())
                using (var stream = await client.GetStreamAsync(asset.BrowserDownloadUrl))
                    using (var zipStream = new ZipArchive(stream))
                    {
                        zipStream.ExtractToDirectory(DownloadDirectory);
                    }
        }
Exemple #17
0
        /// <summary>
        /// Called after the loading, register the hook (for single-process) and check for new releases.
        /// </summary>
        private async void AppLoaded(object sender, RoutedEventArgs e)
        {
            _source = HwndSource.FromHwnd(new WindowInteropHelper(this).Handle);
            _source.AddHook(new HwndSourceHook(SettingsHelper.WndProc));

            GithubRelease githubRelease = await GithubHelper.GetLatestRelease();

            if (githubRelease.IsLatest)
            {
                this.InformNewVersion(githubRelease.Url, githubRelease.Version, githubRelease.Current);
            }
        }
Exemple #18
0
        private async void MainForm_Load(object sender, EventArgs e)
        {
            Text += " v" + Shared.VERSION.ToString(CultureInfo.InvariantCulture);
            ReadCurrentValues();

            _newRelease = await UpdateChecker.CheckForUpdates().ConfigureAwait(true);

            if (_newRelease != null)
            {
                btnUpdateAvailable.Visible = true;
                btnUpdateAvailable.Text    = "v" + _newRelease.tag_name + " is available!\r\nClick for changelog.";
            }
        }
        protected override async Task Download(GithubRelease ghRelease)
        {
            var release = ghRelease.Release;
            var asset   = release.Assets.First(r => r.Name.Contains("osx-x64"));

            // Download and extract tar gzip
            using (var httpClient = new HttpClient())
                using (var httpStream = await httpClient.GetStreamAsync(asset.BrowserDownloadUrl))
                    using (var decompressionStream = new GZipStream(httpStream, CompressionMode.Decompress))
                        using (var tar = TarArchive.CreateInputTarArchive(decompressionStream))
                        {
                            tar.ExtractContents(DownloadDirectory);
                        }
        }
    static void ParseGithub(WWW github)
    {
        release = JsonUtility.FromJson <GithubRelease>(github.text);
        string current = EditorPrefs.GetString(prefs + Application.productName, nullDT);

        if (DateTime.ParseExact(release.created_at, universalDT, CultureInfo.InvariantCulture) >
            DateTime.ParseExact(current, universalDT, CultureInfo.InvariantCulture))
        {
            hasUpdate = true;
            if (window != null)
            {
                window.Repaint();
            }
        }
    }
        /// <summary>
        /// Downloads the update from the given Github release and applies it, extracting all the necessary files.
        /// A progress handler can be passed to react when the operation progress (in the range [0, 100]) changes.
        /// Throws an InvalidOperationException if the update is not valid.
        /// </summary>
        /// <param name="release"></param>
        /// <param name="progressHandler"></param>
        public static void UpdateDlls(GithubRelease release, ProgressChangedEventHandler progressHandler)
        {
            var asset = Array.Find(release.assets, a => a.name.ToLower() == "sporemodapidlls.zip");

            if (asset == null)
            {
                throw new InvalidOperationException("Invalid update: no 'SporeModAPIdlls.zip' asset");
            }
            using (var client = new WebClient())
            {
                client.DownloadProgressChanged += (s, e) =>
                {
                    var args = new ProgressChangedEventArgs((int)(e.ProgressPercentage * DOWNLOAD_PROGRESS), null);
                    if (progressHandler != null)
                    {
                        progressHandler.Invoke(null, args);
                    }
                };

                string zipName = Path.GetTempFileName();
                client.DownloadFile(asset.browser_download_url, zipName);

                using (var zip = new ZipFile(zipName))
                {
                    int filesExtracted = 0;
                    foreach (string name in DLL_NAMES)
                    {
                        var entry = zip[name];
                        if (entry == null)
                        {
                            throw new InvalidOperationException("Invalid update: missing " + name + " in zip file");
                        }
                        entry.Extract(Settings.CoreLibsPath, ExtractExistingFileAction.OverwriteSilently);
                        Permissions.GrantAccessFile(Path.Combine(Settings.CoreLibsPath, entry.FileName));
                        ++filesExtracted;

                        double progress = DOWNLOAD_PROGRESS + filesExtracted * (1.0f - DOWNLOAD_PROGRESS) / (float)(DLL_NAMES.Length);
                        var    args     = new ProgressChangedEventArgs((int)(progress * 100.0), null);
                        if (progressHandler != null)
                        {
                            progressHandler.Invoke(null, args);
                        }
                    }
                }

                File.Delete(zipName);
            }
        }
Exemple #22
0
        static async Task <string> GetUpdateUrl()
        {
#if DEBUG
            return(@"C:\Users\fritzen\Source\Repos\frznUpload\frznUploadClient\Releases");
#endif
            bool pre = Config.AppSettings.AllKeys.Contains("Prerelease") && Config.AppSettings["Prerelease"].Value == "true";

            List <GithubRelease> releases = await GetReleases();

            GithubRelease latestRelease = releases
                                          .Where(x => pre || !x.Prerelease)
                                          .OrderByDescending(x => x.PublishedAt)
                                          .First();

            return(latestRelease.HtmlUrl.Replace("/tag/", "/download/"));
        }
Exemple #23
0
        /// <summary>
        /// Checks if there is a newer release available on github
        /// </summary>
        /// <returns></returns>
        public async Task <bool> NewVersionAvailable()
        {
            initializer.ReportProgress(ProgressTypeEnum.Other, nameof(UpdateManager), "Checking for Updates...");
            LatestRelease = await GetLatestRelease();

            if (LatestRelease != null)
            {
                var latestVersion = new Version(Regex.Match(LatestRelease.Tag, @"(\d+\.){2}\d+").ToString());
                // var currentVersion = new Version("0.2.0");
                var currentVersion = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(x => x.FullName.Contains("Sidekick")).GetName().Version;

                var result = currentVersion.CompareTo(latestVersion);
                return(result < 0 ? true : false);
            }

            return(false);
        }
        public GitHubUpdates(UpdaterComponent componentUpdated, GithubRelease latestRelease, string local, string online)
        {
            InitializeComponent();
            _componentUpdated = componentUpdated;
            if (componentUpdated.name == "TeknoParrotUI")
            {
                labelUpdated.Content = componentUpdated.name + " (Requires App Restart)";
            }
            else
            {
                labelUpdated.Content = componentUpdated.name;
            }

            labelVersion.Content = $"{(local != Properties.Resources.UpdaterNotInstalled ? $"{local} to " : "")}{online}";
            _latestRelease       = latestRelease;
            onlineVersion        = online;
        }
Exemple #25
0
        /// <summary>
        /// Determines latest release on github. Pre-releases do not count as release, therefore we need to get the list of releases first, if no actual latest release can be found
        /// </summary>
        /// <returns></returns>
        private async Task <GithubRelease> GetLatestRelease()
        {
            GithubRelease latestRelease = null;

            try
            {
                var jsonOptions = new JsonSerializerOptions {
                    IgnoreNullValues = true, PropertyNameCaseInsensitive = true
                };
                var response = await _httpClient.GetAsync("/repos/domialex/Sidekick/releases/latest");

                if (response.IsSuccessStatusCode)
                {
                    latestRelease = await JsonSerializer.DeserializeAsync <GithubRelease>(await response.Content.ReadAsStreamAsync(), jsonOptions);
                }
                else
                {
                    //Get List of releases if there is no latest release ( should only happen if there are only pre-releases)
                    var listResponse = await _httpClient.GetAsync("/repos/domialex/Sidekick/releases");

                    if (listResponse.IsSuccessStatusCode)
                    {
                        var githubReleaseList = await JsonSerializer.DeserializeAsync <GithubRelease[]>(await listResponse.Content.ReadAsStreamAsync(), jsonOptions);

                        // Iterate through version list to determine latest version
                        var highestVersionNo = new Version("0.0.0.0");
                        foreach (var release in githubReleaseList)
                        {
                            var releaseVersion = new Version(Regex.Match(release.Tag, @"(\d+\.){2}\d+").ToString());
                            if (highestVersionNo?.CompareTo(releaseVersion) < 0)
                            {
                                highestVersionNo = releaseVersion;
                                latestRelease    = release;
                            }
                        }
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
            return(latestRelease);
        }
        /// <summary>
        /// Determines if there is a newer version available
        /// </summary>
        /// <returns></returns>
        private bool IsUpdateAvailable(GithubRelease release)
        {
            if (release != null)
            {
                logger.LogInformation("[Updater] Found " + release.Tag + " as latest version on GitHub.");

                var latestVersion  = new Version(Regex.Match(release.Tag, @"(\d+\.){2}\d+").ToString());
                var currentVersion = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(x => x.FullName.Contains("Sidekick")).GetName().Version;

                var result = currentVersion.CompareTo(latestVersion);
                return(result < 0);
            }
            else
            {
                logger.LogInformation("[Updater] No latest release found on GitHub.");
            }

            return(false);
        }
Exemple #27
0
 // Start auto updater
 public static async void AutoUpdate(GithubRelease release)
 {
     try
     {
         if (release.Assets.Count > 0)
         {
             string assemblylocation = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
             string updater          = Path.Combine(assemblylocation, UpdaterFileName);
             Process.Start(updater, string.Format("{0} {1}", Process.GetCurrentProcess().Id, release.Assets[0].Url));
             Hearthstone_Deck_Tracker.API.Core.MainWindow.Close();
             System.Windows.Application.Current.Shutdown();
         }
     }
     catch (Exception e)
     {
         // Manual update
         Log.Info("AutoUpdate error: " + e.Message);
         Process.Start(releaseDownloadUrl);
     }
 }
Exemple #28
0
        // Start auto updater
        public static async Task <bool> AutoUpdate(GithubRelease release)
        {
            bool status = true;

            try
            {
                if (release.Assets.Count > 0)
                {
                    // Update and install
                    status = await AutoUpdater.Update(release.Assets[0].Url);
                }
            }
            catch (Exception e)
            {
                status = false;

                Log.Info("AutoUpdate error: " + e.Message);
            }

            return(status);
        }
Exemple #29
0
        public void PromptUpdate(IRestResponse response)
        {
            if (response.StatusCode != HttpStatusCode.OK)
            {
                return;
            }

            GithubRelease release = JsonConvert.DeserializeObject <GithubRelease>(response.Content);

            if (release == null)
            {
                return;
            }

            if (release.IsDraft)
            {
                return;
            }

            Version.TryParse(release.Tag.Split('-')[0].Replace("v", ""), out Version version);

            if (Assembly.GetExecutingAssembly().GetName().Version.CompareTo(version) >= 0)
            {
                return;
            }

            Asset asset = release.Assets.FirstOrDefault(r => r.URL.EndsWith(".msi"));

            if (asset == null)
            {
                return;
            }

            UpdateWindow prompt = new UpdateWindow(release.URL, asset.URL)
            {
                Owner = this
            };

            prompt.ShowDialog();
        }
Exemple #30
0
        public Updater(GithubRelease updateToVersion)
        {
            InitializeComponent();

            backgroundWorker.DoWork               += UpdateTool;
            backgroundWorker.ProgressChanged      += UpdateProgress;
            backgroundWorker.RunWorkerCompleted   += OnDone;
            backgroundWorker.WorkerReportsProgress = true;

            // bit of a hack to check if we're using the self-contained binary or not
            var isSelfContained = File.Exists("System.dll");

            foreach (var asset in updateToVersion.assets)
            {
                if ((isSelfContained && asset.name.Contains("sc")) ||
                    !(isSelfContained || asset.name.Contains("sc")))
                {
                    releaseAsset = asset;
                    break;
                }
            }
        }