@@ -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