Skip to content

Commit cb12c83

Browse files
committed
Added fallback for update checker
1 parent 712a751 commit cb12c83

1 file changed

Lines changed: 71 additions & 62 deletions

File tree

ZuneModdingHelper/MainWindow.xaml.cs

Lines changed: 71 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -158,78 +158,87 @@ private async void UpdatesButton_Click(object sender, RoutedEventArgs e)
158158
var checkDialog = await this.ShowProgressAsync("Checking for updates...", "Please wait.", settings: defaultMetroDialogSettings);
159159
checkDialog.SetIndeterminate();
160160

161-
// Get releases list from GitHub
162-
List<JObject> releases = await "https://api.github.com/repos/ZuneDev/ZuneModdingHelper/releases"
163-
.WithHeader("User-Agent", App.Title.Replace(" ", "") + "/" + App.Version)
164-
.GetJsonAsync<List<JObject>>();
165-
JObject latest = releases[0];
166-
if (!App.CheckIfNewerVersion(latest["tag_name"].Value<string>()))
161+
try
167162
{
168-
// Already up-to-date
169-
170-
Analytics.TrackEvent("Checked for updates", new Dictionary<string, string> {
171-
{ "UpdatesFound", bool.FalseString },
172-
});
173-
174-
await checkDialog.CloseAsync();
175-
await this.ShowMessageAsync("No updates available", "You're already using the latest version.", settings: defaultMetroDialogSettings);
176-
return;
177-
}
178-
179-
// Newer version available, prompt user to download
180-
MetroDialogSettings promptSettings = new()
181-
{
182-
ColorScheme = MetroDialogColorScheme.Accented,
183-
AnimateShow = true,
184-
AnimateHide = true,
185-
AffirmativeButtonText = "Download",
186-
NegativeButtonText = "Later"
187-
};
188-
await checkDialog.CloseAsync();
189-
var promptResult = await this.ShowMessageAsync("Update available", $"Relase {latest["name"]} is available. Would you like to download it now?",
190-
MessageDialogStyle.AffirmativeAndNegative, promptSettings);
191-
bool acceptedUpdate = promptResult == MessageDialogResult.Affirmative;
192-
193-
if (acceptedUpdate)
194-
{
195-
var progDialog = await this.ShowProgressAsync("Downloading update...", "This may take a few minutes.", settings: defaultMetroDialogSettings);
196-
progDialog.Maximum = 100;
197-
progDialog.SetIndeterminate();
198-
199-
// Download new version to AppData
200-
JObject asset = latest["assets"].ToObject<List<JObject>>()[0];
201-
string assetName = asset["name"].Value<string>();
202-
string downloadedFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), assetName);
203-
if (File.Exists(downloadedFile)) File.Delete(downloadedFile);
204-
using (var client = new System.Net.WebClient())
163+
// Get releases list from GitHub
164+
List<JObject> releases = await "https://api.github.com/repos/ZuneDev/ZuneModdingHelper/releases"
165+
.WithHeader("User-Agent", App.Title.Replace(" ", "") + "/" + App.Version)
166+
.GetJsonAsync<List<JObject>>();
167+
JObject latest = releases[0];
168+
if (!App.CheckIfNewerVersion(latest["tag_name"].Value<string>()))
205169
{
206-
client.DownloadProgressChanged += (object sender, System.Net.DownloadProgressChangedEventArgs e) => {
207-
// Update UI with download progress
208-
progDialog.SetProgress(e.ProgressPercentage);
209-
};
170+
// Already up-to-date
171+
172+
Analytics.TrackEvent("Checked for updates", new Dictionary<string, string> {
173+
{ "UpdatesFound", bool.FalseString },
174+
});
210175

211-
progDialog.SetProgress(0);
212-
await client.DownloadFileTaskAsync(new Uri(asset["browser_download_url"].Value<string>()), downloadedFile);
176+
await checkDialog.CloseAsync();
177+
await this.ShowMessageAsync("No updates available", "You're already using the latest version.", settings: defaultMetroDialogSettings);
178+
return;
213179
}
214180

215-
// Ask user to save file
216-
Microsoft.Win32.SaveFileDialog saveFileDialog = new()
181+
// Newer version available, prompt user to download
182+
MetroDialogSettings promptSettings = new()
217183
{
218-
FileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Downloads", assetName)
184+
ColorScheme = MetroDialogColorScheme.Accented,
185+
AnimateShow = true,
186+
AnimateHide = true,
187+
AffirmativeButtonText = "Download",
188+
NegativeButtonText = "Later"
219189
};
220-
bool dialogResult = saveFileDialog.ShowDialog() ?? false;
221-
await progDialog.CloseAsync();
222-
if (dialogResult)
190+
await checkDialog.CloseAsync();
191+
var promptResult = await this.ShowMessageAsync("Update available", $"Relase {latest["name"]} is available. Would you like to download it now?",
192+
MessageDialogStyle.AffirmativeAndNegative, promptSettings);
193+
bool acceptedUpdate = promptResult == MessageDialogResult.Affirmative;
194+
195+
if (acceptedUpdate)
223196
{
224-
File.Copy(downloadedFile, saveFileDialog.FileName, true);
225-
await this.ShowMessageAsync("Update complete", "You may now exit this program and open the new version.", settings: defaultMetroDialogSettings);
197+
var progDialog = await this.ShowProgressAsync("Downloading update...", "This may take a few minutes.", settings: defaultMetroDialogSettings);
198+
progDialog.Maximum = 100;
199+
progDialog.SetIndeterminate();
200+
201+
// Download new version to AppData
202+
JObject asset = latest["assets"].ToObject<List<JObject>>()[0];
203+
string assetName = asset["name"].Value<string>();
204+
string downloadedFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), assetName);
205+
if (File.Exists(downloadedFile)) File.Delete(downloadedFile);
206+
using (var client = new System.Net.WebClient())
207+
{
208+
client.DownloadProgressChanged += (object sender, System.Net.DownloadProgressChangedEventArgs e) => {
209+
// Update UI with download progress
210+
progDialog.SetProgress(e.ProgressPercentage);
211+
};
212+
213+
progDialog.SetProgress(0);
214+
await client.DownloadFileTaskAsync(new Uri(asset["browser_download_url"].Value<string>()), downloadedFile);
215+
}
216+
217+
// Ask user to save file
218+
Microsoft.Win32.SaveFileDialog saveFileDialog = new()
219+
{
220+
FileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Downloads", assetName)
221+
};
222+
bool dialogResult = saveFileDialog.ShowDialog() ?? false;
223+
await progDialog.CloseAsync();
224+
if (dialogResult)
225+
{
226+
File.Copy(downloadedFile, saveFileDialog.FileName, true);
227+
await this.ShowMessageAsync("Update complete", "You may now exit this program and open the new version.", settings: defaultMetroDialogSettings);
228+
}
226229
}
227-
}
228230

229-
Analytics.TrackEvent("Checked for updates", new Dictionary<string, string> {
230-
{ "UpdatesFound", bool.TrueString },
231-
{ "Accepted", acceptedUpdate.ToString() },
232-
});
231+
Analytics.TrackEvent("Checked for updates", new Dictionary<string, string> {
232+
{ "UpdatesFound", bool.TrueString },
233+
{ "Accepted", acceptedUpdate.ToString() },
234+
});
235+
}
236+
catch
237+
{
238+
App.OpenInBrowser("https://github.com/ZuneDev/ZuneModdingHelper/releases");
239+
if (checkDialog.IsOpen)
240+
await checkDialog.CloseAsync();
241+
}
233242
}
234243

235244
private void DonateButton_Click(object sender, RoutedEventArgs e) => App.OpenInBrowser(App.DonateLink);

0 commit comments

Comments
 (0)