/* * Gets the latest Firefox release from Github using the Github API * The latest Geckodriver supports backwards to version 60 of Firefox */ internal static string GetFireFoxURL(Browser browser, OperatingSystem os) { try { RestController restController = new RestController(firefox_url); var response = restController.Get("latest"); GitHubRelease responseData = (GitHubRelease)response.DeserialiseResponseTo <GitHubRelease>(); var osPlatform = Environment.OSVersion; bool sixtyfourBit = Environment.Is64BitOperatingSystem; if (os.Equals(OperatingSystem.WINDOWS)) { var asset = responseData.Assets.Where(x => x.Name.ToLower().Contains("win32")).FirstOrDefault(); return(asset.browser_download_url.AbsoluteUri); } else if (os.Equals(OperatingSystem.MAC)) { var asset = responseData.Assets.Where(x => x.Name.ToLower().Contains("macos")).FirstOrDefault(); return(asset.browser_download_url.AbsoluteUri); } else { var asset = responseData.Assets.Where(x => x.Name.ToLower().Contains("linux" + (sixtyfourBit ? "64" : "32"))).FirstOrDefault(); return(asset.browser_download_url.AbsoluteUri); } } catch (Exception e) { throw; } }
public async void Check(bool notifyNoFound, bool isPreRelease) { try { var updater = new GitHubRelease(Owner, Repo); var url = updater.AllReleaseUrl; var json = await GetAsync(url, true); var releases = JsonConvert.DeserializeObject <List <Release> >(json); var latestRelease = VersionUtil.GetLatestRelease(releases, isPreRelease); if (VersionUtil.CompareVersion(latestRelease.tag_name, Version) > 0) { LatestVersionNumber = latestRelease.tag_name; LatestVersionUrl = latestRelease.html_url; NewVersionFound?.Invoke(this, new EventArgs()); } else { LatestVersionNumber = latestRelease.tag_name; if (notifyNoFound) { NewVersionNotFound?.Invoke(this, new EventArgs()); } } } catch (Exception e) { Debug.WriteLine(e.Message); if (notifyNoFound) { NewVersionFoundFailed?.Invoke(this, new EventArgs()); } } }
public void Check(bool notifyNoFound, bool isPreRelease) { try { var updater = new GitHubRelease(Owner, Repo); var url = updater.AllReleaseUrl; var json = WebUtil.DownloadString(WebUtil.CreateRequest(url)); var releases = JsonConvert.DeserializeObject <List <Release> >(json); var latestRelease = VersionUtil.GetLatestRelease(releases, isPreRelease); if (VersionUtil.CompareVersion(latestRelease.tag_name, Version) > 0) { LatestVersionNumber = latestRelease.tag_name; LatestVersionUrl = latestRelease.html_url; NewVersionFound?.Invoke(this, new EventArgs()); } else { LatestVersionNumber = latestRelease.tag_name; if (notifyNoFound) { NewVersionNotFound?.Invoke(this, new EventArgs()); } } } catch (Exception e) { Logging.Error(e.ToString()); if (notifyNoFound) { NewVersionFoundFailed?.Invoke(this, new EventArgs()); } } }
private void UpdateCurrentProfile(GitHubRelease onlineRelease) { switch (MessageBox.Show(string.Format(LocalizationUI.GetString("UpdateAvailable"), CurrentProfile.Version, onlineRelease.Version), LocalizationUI.GetString("UpdateAvailableTitle"), MessageBoxButtons.YesNo)) { case DialogResult.Yes: using (var directUpdater = new ReleaseDownloaderForm(onlineRelease.ReleaseAsset, CurrentProfile.Folder)) directUpdater.ShowDialog(); break; case DialogResult.No: return; /* * case DialogResult.Yes: * //MessageBox.Show(LocalizationUI.GetString("UpdateDisabled"), LocalizationUI.GetString("UpdateDisabledTitle"), MessageBoxButtons.OK); * if (Settings.SelectedDL != null && !string.IsNullOrEmpty(Settings.SelectedDL.AbsolutePath)) * //using (var customUpdater = new PerFileUpdaterForm(onlineRelease.UpdateInfoAsset, CurrentProfile.Folder, new Uri(Settings.SelectedDL, $"{onlineRelease.Version}/"))) * // customUpdater.ShowDialog(); * ; * else * MessageBox.Show(LocalizationUI.GetString("DLNotSelected"), LocalizationUI.GetString("DLNotSelectedTitle"), MessageBoxButtons.OK); * break; * * case DialogResult.No: * //case DialogResult.Cancel: * using (var directUpdater = new ReleaseDownloaderForm(onlineRelease.ReleaseAsset, CurrentProfile.Folder)) * directUpdater.ShowDialog(); * break; * * case DialogResult.Cancel: * //case DialogResult.No: * return; */ } }
public async Task Check(bool notifyNoFound, bool isPreRelease) { try { var updater = new GitHubRelease(Owner, Repo); var url = updater.AllReleaseUrl; var json = await GetAsync(url); var releases = JsonSerializer.Deserialize <List <Release> >(json); var latestRelease = VersionUtil.GetLatestRelease(releases, isPreRelease); if (VersionUtil.CompareVersion(latestRelease.tag_name, Version) > 0) { LatestVersionNumber = latestRelease.tag_name; LatestVersionUrl = latestRelease.html_url; NewVersionFound?.Invoke(this, new EventArgs()); } else { LatestVersionNumber = latestRelease.tag_name; if (notifyNoFound) { NewVersionNotFound?.Invoke(this, new EventArgs()); } } } catch { if (notifyNoFound) { NewVersionFoundFailed?.Invoke(this, new EventArgs()); } } }
private GitHubRelease LoadGitHubRelease() { //인터넷 연결 확인 GitHubRelease ret = null; try { string json = string.Empty; HttpWebRequest req = WebRequest.Create("https://api.github.com/repos/hanalen-/Dalsae_WPF/releases/latest") as HttpWebRequest; ServicePointManager.Expect100Continue = true; ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; req.Timeout = 5000; req.UserAgent = "Dalsae_WPF"; using (WebResponse res = req.GetResponse()) using (Stream stream = res.GetResponseStream()) using (StreamReader streamRead = new StreamReader(stream)) json = streamRead.ReadToEnd(); if (json != string.Empty) { ret = JsonConvert.DeserializeObject <GitHubRelease>(json); } } catch (Exception e) { App.SendException(e); } catch { } return(ret); }
private void quotationComboBox_SelectedIndexChanged(object sender, EventArgs e) { GitHubRelease customer = (GitHubRelease)customerCombobox.SelectedItem; showquotationdata(customer); }
public GitHubRelease GetLatestRelease() { try { HttpWebRequest request = WebRequest.Create("https://api.github.com/repos/EDDiscovery/EDDiscovery/releases/latest") as HttpWebRequest; request.UserAgent = "TestApp"; using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) { StreamReader reader = new StreamReader(response.GetResponseStream()); string content1 = reader.ReadToEnd(); JObject ja = JObject.Parse(content1); if (ja != null) { GitHubRelease rel = new GitHubRelease(ja); return(rel); } else { return(null); }; } } catch (Exception ex) { Trace.WriteLine($"Exception: {ex.Message}"); Trace.WriteLine($"ETrace: {ex.StackTrace}"); return(null); } }
public async void CheckForUpdates(bool popupIfNoneFound = false) { if (Updater.IsDownloadInProgress) { ShowInfo("An update is in progress!", "Updater"); return; } GitHubRelease updateInfo = await Updater.CheckForUpdate(); if (updateInfo == null) { if (popupIfNoneFound) { ShowInfo("No updates available.", "Updater"); } return; } SetTimedStatusText("Update available!", duration: 10); UpdateWindowRequest?.Invoke(this, new UpdateInfoEventArgs() { UpdateInfo = updateInfo, InstallCallback = InstallUpdate_Confirm }); }
private bool CheckForNewinstaller() { try { GitHubClass github = new GitHubClass(LogLine); GitHubRelease rel = github.GetLatestRelease(); if (rel != null) { //string newInstaller = jo["Filename"].Value<string>(); var currentVersion = Application.ProductVersion; Version v1, v2; v1 = new Version(rel.ReleaseVersion); v2 = new Version(currentVersion); if (v1.CompareTo(v2) > 0) // Test if newer installer exists: { newRelease = rel; this.BeginInvoke(new Action(() => Controller.LogLineHighlight("New EDDiscovery installer available: " + rel.ReleaseName))); this.BeginInvoke(new Action(() => PanelInfoNewRelease())); return(true); } } } catch (Exception) { } return(false); }
/** * Checks if the current installation is the latest version. Prompts user if not. **/ private void CheckUpdate() { if (Properties.Settings.Default.UpdateSettings) // If true, then first launch of latest SpotBlocker { try { if (File.Exists(nircmdPath)) { File.Delete(nircmdPath); } if (File.Exists(jsonPath)) { File.Delete(jsonPath); } if (File.Exists(coreaudioPath)) { File.Delete(coreaudioPath); } Properties.Settings.Default.Upgrade(); Properties.Settings.Default.UpdateSettings = false; Properties.Settings.Default.UserEducated = false; Properties.Settings.Default.Save(); } catch (Exception ex) { Debug.WriteLine(ex); MessageBox.Show("There was an error updating SpotBlocker. Please run as Administrator to update."); } } try { string releaseText = GetPage(Properties.Settings.Default.VersionCheckUrl, SpotBlockerUA); GitHubRelease release = Newtonsoft.Json.JsonConvert.DeserializeObject <GitHubRelease>(releaseText); int[] releaseSemanticVersion = Regex.Replace(release.tag_name, "[^\\d.]", "").Split(new[] { '.' }).Select(n => Convert.ToInt32(n)).ToArray(); if (releaseSemanticVersion.Length != 4) { throw new Exception(string.Format("Invalid release semantic versioning [{0}]", releaseSemanticVersion.ToString())); } Version releaseVersion = new Version(releaseSemanticVersion[0], releaseSemanticVersion[1], releaseSemanticVersion[2], releaseSemanticVersion[3]); Version currentVersion = Assembly.GetExecutingAssembly().GetName().Version; if (releaseVersion <= currentVersion) { return; } if (MessageBox.Show("There is a newer version of SpotBlocker available. Would you like to upgrade?", "SpotBlocker", MessageBoxButtons.YesNo) == DialogResult.Yes) { Process.Start(Properties.Settings.Default.WebsiteUrl); Application.Exit(); } } catch { MessageBox.Show("Error checking for update.", "SpotBlocker"); } }
public GitHubRelease MapGitHubRelease(JToken jToken) { GitHubRelease gitHubRelease = new GitHubRelease(); gitHubRelease.Degree = GetDegree(jToken); gitHubRelease.EducationLevel = GetEducationLevel(jToken); return(gitHubRelease); }
private GitHubAsset GetValidAsset(GitHubRelease release, WowClientType clientType) { return(release.Assets .Where(asset => IsNotNoLib(asset) && IsValidContentType(asset) && IsValidClientType(clientType, asset)) .FirstOrDefault()); }
public UpdateForm(GitHubRelease release, Configuration configuration) { _configuration = configuration; InitializeComponent(); LoadLocalization(); autocheckCheckBox.Checked = _configuration.ApplicationConfiguration.CheckLauncherUpdates; Text = $"Found update: {release.Name}"; changelogBox.Text = $"{release.Description}"; }
static SemanticVersion GetReleaseVersion(GitHubRelease release) { SemanticVersion version; if (!SemanticVersion.TryParse(release.Name.TrimStart('v'), out version)) { SemanticVersion.TryParse(release.TagName.TrimStart('v'), out version); } return(version); }
private void customerComboBox_SelectedIndexChanged(object sender, EventArgs e) { GitHubRelease contracts = (GitHubRelease)customerComboBox.SelectedItem; contractComboBox.Items.Clear(); contractComboBox.Text = ""; foreach (var item in contracts.companydetail.lease) { contractComboBox.Items.Add("Contract: " + item.id); } }
private void contractComboBox_SelectedIndexChanged(object sender, EventArgs e) { GitHubRelease invoices = (GitHubRelease)customerComboBox.SelectedItem; invoiceComboBox.Items.Clear(); invoiceComboBox.Text = ""; /* aan de hand van de gekozen waarde in de contract combobox worden de bijbehorende * facturen in de facturen combobox gestopt */ foreach (var item in invoices.companydetail.lease[contractComboBox.SelectedIndex].invoice) { invoiceComboBox.Items.Add("Invoice: " + item.id); } }
public async Task <string> DownloadAsset(GitHubRelease release, GitHubAsset asset) { var tempPath = Path.GetTempPath(); var tempFileName = Path.Combine(tempPath, asset.Name); if (!File.Exists(tempFileName)) { var downloadUrl = string.Format(AssetBaseUrl, release.TagName, asset.Name); var webClient = CreateWebClient(); await webClient.DownloadFileTaskAsync(downloadUrl, tempFileName); } return(tempFileName); }
public VersionWindow(GitHubRelease release) { _release = release; InitializeComponent(); versionAlertText.Text = String.Format(@"Version {0} of the Admin Toolkit is now available!", _release.version.ToString()); versionDetails.Text = String.Format(@"Release Notes:{0}{1}", Environment.NewLine, _release.description); if (_release.downloadUri != null) { downloadButton.Text = @"Download Release"; } else { downloadButton.Text = @"View Details"; } downloadButton.Focus(); }
private void customerCombobox_SelectedIndexChanged_1(object sender, EventArgs e) { GitHubRelease customer = (GitHubRelease)customerCombobox.SelectedItem; showcustomerdata(customer); quotationComboBox.Items.Clear(); quotationComboBox.Text = ""; foreach (var item in customer.companydetail.quotations) { quotationComboBox.Items.Add(item); } // aan de hand van de gekozen klant worden de bijbehorende offertes in de quotation combobox gestopt }
public static async Task <GitHubRelease> GitHubGetLastReleaseAsync(string repoUrl, string accessToken = null, bool acceptPrerelease = false) { var repoUri = new Uri(repoUrl); var userAgent = new ProductInfoHeaderValue(Updater.AppName + "_Updater", Assembly.GetExecutingAssembly().GetName().Version.ToString()); if (repoUri.Segments.Length != 3) { throw new UriFormatException("Repo URL must be to the root URL of the repo e.g. https://github.com/myuser/myrepo"); } //Building the GitHub API URL var repoApiUrl = new StringBuilder("repos"); repoApiUrl.Append(repoUri.AbsolutePath); repoApiUrl.Append("/releases"); //Adding access token when present if (!string.IsNullOrWhiteSpace(accessToken)) { repoApiUrl.Append("?access_token=").Append(accessToken); } using (var httpClient = new HttpClient()) { //Disable SSLv3 ServicePointManager.SecurityProtocol &= ~SecurityProtocolType.Ssl3; httpClient.BaseAddress = new Uri("https://api.github.com/"); httpClient.DefaultRequestHeaders.UserAgent.Clear(); httpClient.DefaultRequestHeaders.UserAgent.Add(userAgent); httpClient.DefaultRequestHeaders.Accept.Clear(); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage result = await httpClient.GetAsync(repoApiUrl.ToString()); //Make an exception if the result is not valid result.EnsureSuccessStatusCode(); var releases = JsonConvert.DeserializeObject <List <GitHubRelease> >(await result.Content.ReadAsStringAsync()); GitHubRelease lastReleases = releases .Where(x => acceptPrerelease || !x.Prerelease) //Exclude or include prerelease .OrderByDescending(x => x.PublishedAt) //Order by publishing date .First(); //Get only the first one back return(lastReleases); } }
public void TestInvalidUpdateDetectionInterval() { var account = GitHubTestAccount.Get(); var checker = new ReleaseChecker(account.Name, account.Repository); GitHubRelease latestRelease = null; Assert.Throws <ArgumentException>(() => { checker.MonitorForUpdates( "v1", (release) => { latestRelease = release; }, 0 ); }); Assert.IsNull(latestRelease); }
private string getBestUrl(GitHubRelease release) { GitHubAsset bestAsset = null; switch (RuntimeInfo.OS) { case RuntimeInfo.Platform.Windows: bestAsset = release.Assets?.Find(f => f.Name.EndsWith(".exe")); break; case RuntimeInfo.Platform.MacOsx: bestAsset = release.Assets?.Find(f => f.Name.EndsWith(".app.zip")); break; } return(bestAsset?.BrowserDownloadUrl ?? release.HtmlUrl); }
public void showquotationdata(GitHubRelease customer) { if (customer.companydetail != null) { if (customer.companydetail.quotations != null) { // de labels worden gevuld met het de bestelde producten + prijs en de klantgegevens if (customer.companydetail.quotations[quotationComboBox.SelectedIndex].italian_light != null) { italian_lightlbl.Text = customer.companydetail.quotations[quotationComboBox.SelectedIndex].italian_light + " x " + "Italian Light: " + "€" + int.Parse(customer.companydetail.quotations[quotationComboBox.SelectedIndex].italian_light) * 280; } if (customer.companydetail.quotations[quotationComboBox.SelectedIndex].italian != null) { italianlbl.Text = customer.companydetail.quotations[quotationComboBox.SelectedIndex].italian + " x " + "Italian: " + "€" + int.Parse(customer.companydetail.quotations[quotationComboBox.SelectedIndex].italian) * 290; } if (customer.companydetail.quotations[quotationComboBox.SelectedIndex].italian_deluxe != null) { italiandeluxelbl.Text = customer.companydetail.quotations[quotationComboBox.SelectedIndex].italian_deluxe + " x " + "Italian Deluxe: " + "€" + int.Parse(customer.companydetail.quotations[quotationComboBox.SelectedIndex].italian_deluxe) * 350; } if (customer.companydetail.quotations[quotationComboBox.SelectedIndex].italian_deluxe_special != null) { italiandeluxespeciallbl.Text = customer.companydetail.quotations[quotationComboBox.SelectedIndex].italian_deluxe_special + " x " + "Italian Deluxe Special: " + "€" + int.Parse(customer.companydetail.quotations[quotationComboBox.SelectedIndex].italian_deluxe_special) * 375; } if (customer.companydetail.quotations[quotationComboBox.SelectedIndex].espresso_beneficio != null) { espressobeneficiolbl.Text = customer.companydetail.quotations[quotationComboBox.SelectedIndex].espresso_beneficio + " x " + "Espresso Beneficio: " + "€" + int.Parse(customer.companydetail.quotations[quotationComboBox.SelectedIndex].espresso_beneficio) * 21.60; } if (customer.companydetail.quotations[quotationComboBox.SelectedIndex].yellow_bourbon_brasil != null) { yellowbourbonbrasillbl.Text = customer.companydetail.quotations[quotationComboBox.SelectedIndex].yellow_bourbon_brasil + " x " + "Yellow Bourbon Brasil: " + "€" + int.Parse(customer.companydetail.quotations[quotationComboBox.SelectedIndex].yellow_bourbon_brasil) * 23.20; } if (customer.companydetail.quotations[quotationComboBox.SelectedIndex].espresso_roma != null) { espressoromalbl.Text = customer.companydetail.quotations[quotationComboBox.SelectedIndex].espresso_roma + " x " + "Espresso Roma: " + "€" + int.Parse(customer.companydetail.quotations[quotationComboBox.SelectedIndex].espresso_roma) * 20.80; } if (customer.companydetail.quotations[quotationComboBox.SelectedIndex].red_honey_honduras != null) { redhoneyhonduraslbl.Text = customer.companydetail.quotations[quotationComboBox.SelectedIndex].red_honey_honduras + " x " + "Red Honey Honduras: " + "€" + int.Parse(customer.companydetail.quotations[quotationComboBox.SelectedIndex].red_honey_honduras) * 27.80; } lease_id = customer.companydetail.lease[quotationComboBox.SelectedIndex].id; price = int.Parse(customer.companydetail.lease[quotationComboBox.SelectedIndex].monthly_costs); } } }
public void TestSerializeObject_EmitDefaultValue() { var gitHubRelease = new GitHubRelease { HtmlUrl = "http://test.url", Prerelease = false, PublishedAt = DateTime.Now }; var jsonString = SimpleJson.SerializeObject(gitHubRelease); Assert.Contains("html_url", jsonString); Assert.DoesNotContain("prerelease", jsonString); gitHubRelease.Prerelease = true; gitHubRelease.HtmlUrl = null; jsonString = SimpleJson.SerializeObject(gitHubRelease); Assert.DoesNotContain("html_url", jsonString); Assert.Contains("prerelease", jsonString); }
public UpdateForm(GitHubRelease release, Configuration configuration, LauncherForm f) { rls = release; _configuration = configuration; InitializeComponent(); LoadLocalization(); update_url = new Uri(@"https://github.com/dommilosz/MLauncher/releases/download/" + rls.Tag + "/MLauncher.exe"); newpatch = Application.ExecutablePath.Replace(".exe", "_" + rls.Tag + ".exe"); update_size = GetUpdateSize(); batchURL = new Uri(@"https://github.com/dommilosz/MLauncher/releases/download/v0.2.0/Update.bat"); autocheckCheckBox.Checked = _configuration.ApplicationConfiguration.CheckLauncherUpdates; Text = $"Found update: {release.Name}"; changelogBox.Text = $"Installed Version : {Application.ProductVersion}" + Environment.NewLine; changelogBox.Text += $"Latest Version : {rls.Tag}" + Environment.NewLine; changelogBox.Text += $"Update Size : {update_size.MB}MB ({update_size.B} bytes)" + Environment.NewLine; changelogBox.Text += $"{release.Description}"; form = f; }
public async void CheckLatestVersion() { GitHubService service = new GitHubService(); Version currentVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; GitHubRelease latestRelease = await service.LatestRelease(); if (latestRelease.version > currentVersion) { this.Hide(); VersionWindow versionWindow = new VersionWindow(latestRelease); versionWindow.StartPosition = FormStartPosition.CenterScreen; versionWindow.MinimizeBox = false; versionWindow.MaximizeBox = false; versionWindow.Show(); versionWindow.Activate(); versionWindow.FormClosed += (sender, e) => { this.Show(); }; } }
public void CheckNewVersion() { patch = LoadGitHubRelease(); if (patch != null) { //어셈블리 정보 가져옴 Assembly assembly = Assembly.GetExecutingAssembly(); FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location); float newVersion = 0.0f, prevVersion = 0.0f; //버전 파싱, 파싱 오류 시 그냥 실행 작업 진행 if (float.TryParse(fvi.FileVersion, out prevVersion) && float.TryParse(patch.tag_name, out newVersion)) { if (newVersion > prevVersion) { ShowMessageBox($"달새의 새로운 버전인 {patch.tag_name}v가 나왔습니다. 패치를 진행하시겠습니까?", "패치 알림", PatchProccess); } } } }
public async void Check(bool isPreRelease) { try { var updater = new GitHubRelease(Owner, Repo); var url = updater.AllReleaseUrl; var json = await WebUtil.DownloadStringAsync(WebUtil.CreateRequest(url)); var releases = JsonConvert.DeserializeObject <List <Release> >(json); var latestRelease = VersionUtil.GetLatestRelease(releases, isPreRelease); LatestVersionNumber = latestRelease.tag_name; LatestVersionUrl = latestRelease.html_url; LatestVersionDownloadUrl = latestRelease.assets[0].browser_download_url; Logging.Info($"Github 最新发布版本: {latestRelease.tag_name}"); if (VersionUtil.CompareVersion(latestRelease.tag_name, Version) > 0) { Logging.Info($"发现新版本"); NewVersionFound?.Invoke(this, new EventArgs()); } else { Logging.Info("目前是最新版本"); NewVersionNotFound?.Invoke(this, new EventArgs()); } } catch (Exception e) { if (e is WebException) { Logging.Warning($"获取新版本失败: {e.Message}"); } else { Logging.Warning(e.ToString()); } NewVersionFoundFailed?.Invoke(this, new EventArgs()); } }
public override TemporaryDirectory DownloadPackage(Upset package) { string sourceName = Regex.Replace(package.MetaInformation.dirName, ".Upset.xml$", ".unitypackage", RegexOptions.IgnoreCase); releases = GetPackagesReleases(); GitHubRelease release = releases.FirstOrDefault(rel => rel.assets.Any(asset => asset.name.Contains(sourceName))); if (release == null) { throw new ArgumentException(string.Format("Package {0} is not present in this repository", package.PackageName)); } GitHubAsset packageAsset = release.assets.First(asset => asset.name.Contains(sourceName)); TemporaryDirectory td = new TemporaryDirectory(); using (StreamReader sr = new StreamReader(GitHub.GetAssetStream(packageAsset, GetToken()))) { UnityPackage unityPackage = new UnityPackage(); unityPackage.Extract(sr.BaseStream, td.Path); } return(td); }