Fixed download progress bar for updates

This commit is contained in:
Souryo 2017-01-14 11:04:38 -05:00
parent 1bff8affb9
commit 08a94d7cec
8 changed files with 48 additions and 39 deletions

View file

@ -41,7 +41,7 @@
<Message ID="MesenUpToDate">You are running the latest version of Mesen</Message>
<Message ID="PatchAndReset">Patch and reset the current game?</Message>
<Message ID="SelectRomIps">Please select a ROM matching the IPS patch file.</Message>
<Message ID="UnableToDownload">Unable to download file. Check your internet connection and try again.&#xA;&#xA;Details:</Message>
<Message ID="UnableToDownload">Unable to download file. Check your internet connection and try again.&#xA;&#xA;Details:&#xA;{0}</Message>
<Message ID="UnableToStartMissingDependencies">Mesen could not launch because it was unable to load MesenCore.dll due to missing dependencies.</Message>
<Message ID="UnableToStartMissingFiles">Mesen was unable to start due to missing files.&#xA;&#xA;Error: MesenCore.dll is missing.</Message>
<Message ID="UnexpectedError">An unexpected error has occurred.&#xA;&#xA;Error details:&#xA;{0}</Message>

View file

@ -531,7 +531,7 @@
<Message ID="MesenUpToDate">Ya utiliza la versión mas reciente de Mesen.</Message>
<Message ID="PatchAndReset">¿Aplicar el parche y reiniciar el juego?</Message>
<Message ID="SelectRomIps">Elija la ROM que corresponde al archivo IPS seleccionado.</Message>
<Message ID="UnableToDownload">No se puede descargar el archivo. Compruebe su conexión a Internet e inténtelo de nuevo.&#xA;&#xA;Detalles del error:</Message>
<Message ID="UnableToDownload">No se puede descargar el archivo. Compruebe su conexión a Internet e inténtelo de nuevo.&#xA;&#xA;Detalles del error:&#xA;{0}</Message>
<Message ID="UnableToStartMissingDependencies">Mesen no puede inciarse porque porque no puede cargar MesenCore.dll debido a dependencias no encontradas.</Message>
<Message ID="UnableToStartMissingFiles">Mesen no puede iniciarse debido a que faltan archivos.&#xA;&#xA;Error: No se encuentra el archivo MesenCore.dll.</Message>
<Message ID="UnexpectedError">Se ha producido un error inesperado.&#xA;&#xA;Detalles del error:&#xA;{0}</Message>

View file

@ -545,7 +545,7 @@
<Message ID="MesenUpToDate">Vous utilisez déjà la version la plus récente de Mesen.</Message>
<Message ID="PatchAndReset">Appliquer la patch et faire un reset du jeu?</Message>
<Message ID="SelectRomIps">Choisissez un ROM qui correspond au fichier IPS choisi.</Message>
<Message ID="UnableToDownload">Impossible de télécharger le fichier. Vérifier votre connexion internet et essayez à nouveau.&#xA;&#xA;Détails de l'erreur:</Message>
<Message ID="UnableToDownload">Impossible de télécharger le fichier. Vérifier votre connexion internet et essayez à nouveau.&#xA;&#xA;Détails de l'erreur:&#xA;{0}</Message>
<Message ID="UnableToStartMissingDependencies">Mesen n'a pas été en mesure de charger le fichier MesenCore.dll, et ne peut donc pas être lancé.</Message>
<Message ID="UnableToStartMissingFiles">Mesen est incapable de démarrer puisqu'il manque des fichiers.&#xA;&#xA;Erreur: Le fichier MesenCore.dll est introuvable.</Message>
<Message ID="UnexpectedError">Une erreur inattendue s'est produite.&#xA;&#xA;Détails de l'erreur :&#xA;{0}</Message>

View file

@ -527,7 +527,7 @@
<Message ID="MesenUpToDate">既にMesenの最新のバージョンを使っています。</Message>
<Message ID="PatchAndReset">IPSパッチを当てて、ゲームをリセットしますか</Message>
<Message ID="SelectRomIps">IPSファイルに合うゲームファイルを選んでください。</Message>
<Message ID="UnableToDownload">ファイルをダウンロードできませんでした。ネット接続を確認してから、再試行してください。&#xA;&#xA;エラーの詳細:</Message>
<Message ID="UnableToDownload">ファイルをダウンロードできませんでした。ネット接続を確認してから、再試行してください。&#xA;&#xA;エラーの詳細:&#xA;{0}</Message>
<Message ID="UnableToStartMissingDependencies">MesenはMesenCore.dllをロード出来なかったため、起動できませんでした。</Message>
<Message ID="UnableToStartMissingFiles">必要なファイルはロード出来なかったため、Mesenは起動できません。&#xA;&#xA;エラー: MesenCore.dllはロードできません。</Message>
<Message ID="UnexpectedError">予期しないエラーが発生しました。&#xA;&#xA;エラーの詳細:&#xA;{0}</Message>

View file

@ -531,7 +531,7 @@
<Message ID="MesenUpToDate">Já utiliza a versão mais recente do Mesen.</Message>
<Message ID="PatchAndReset">Aplicar o patch e reiniciar o jogo?</Message>
<Message ID="SelectRomIps">Selecione a ROM que corresponde ao arquivo IPS selecionado.</Message>
<Message ID="UnableToDownload">Não foi possível baixar o arquivo. Verifique sua conexão com a internet e tente de novo.&#xA;&#xA;Detalhes do erro:</Message>
<Message ID="UnableToDownload">Não foi possível baixar o arquivo. Verifique sua conexão com a internet e tente de novo.&#xA;&#xA;Detalhes do erro:&#xA;{0}</Message>
<Message ID="UnableToStartMissingDependencies">Mesen não pode iniciar pois foi incapaz de carregar MesenCore.dll devido a falta de dependências.</Message>
<Message ID="UnableToStartMissingFiles">Mesen não pode iniciar devido a falta de arquivos.&#xA;&#xA;Erro: Não se encontra o arquivo MesenCore.dll.</Message>
<Message ID="UnexpectedError">Houve um erro inesperado.&#xA;&#xA;Detalhes do erro:&#xA;{0}</Message>

View file

@ -536,7 +536,7 @@
<Message ID="MesenUpToDate">Вы используете последнюю версию Mesen</Message>
<Message ID="PatchAndReset">Пропатчить и сбросить текущую игру?</Message>
<Message ID="SelectRomIps">Пожалуйста выберите ROM соответствующий IPS.</Message>
<Message ID="UnableToDownload">Невозможно загрузить файл. Проверьте ваше соединение с интернетом и попробуйте ещё раз.&#xA;&#xA;Подробно:</Message>
<Message ID="UnableToDownload">Невозможно загрузить файл. Проверьте ваше соединение с интернетом и попробуйте ещё раз.&#xA;&#xA;Подробно:&#xA;{0}</Message>
<Message ID="UnableToStartMissingDependencies">Mesen could not launch because it was unable to load MesenCore.dll due to missing dependencies.</Message>
<Message ID="UnableToStartMissingFiles">Mesen не может запуститься из за отсутствующих файлов.&#xA;&#xA;Ошибка: MesenCore.dll не найден.</Message>
<Message ID="UnexpectedError">Неизвестная ошибка.&#xA;&#xA;Подробно:&#xA;{0}</Message>

View file

@ -535,7 +535,7 @@
<Message ID="MesenUpToDate">Ви використовуєте останню версію Mesen</Message>
<Message ID="PatchAndReset">Пропатчити і скинути поточну гру?</Message>
<Message ID="SelectRomIps">Будь ласка, оберіть ROM відповідний IPS.</Message>
<Message ID="UnableToDownload">Неможливо завантажити файл. Перевірте ваше з'єднання з інтернетом і спробуйте ще раз.&#xA;&#xA;Детально:</Message>
<Message ID="UnableToDownload">Неможливо завантажити файл. Перевірте ваше з'єднання з інтернетом і спробуйте ще раз.&#xA;&#xA;Детально:&#xA;{0}</Message>
<Message ID="UnableToStartMissingDependencies">Mesen could not launch because it was unable to load MesenCore.dll due to missing dependencies.</Message>
<Message ID="UnableToStartMissingFiles">Mesen не може запуститися через відсутні файли.&#xA;&#xA;Помилка: MesenCore.dll не знайдений.</Message>
<Message ID="UnexpectedError">Невідома помилка.&#xA;&#xA;Детально:&#xA;{0}</Message>

View file

@ -46,44 +46,53 @@ namespace Mesen.GUI.Forms
DialogResult result = System.Windows.Forms.DialogResult.None;
using(var client = new WebClient()) {
client.DownloadProgressChanged += (object s, DownloadProgressChangedEventArgs args) => {
progressDownload.Value = args.ProgressPercentage;
};
client.DownloadFileCompleted += (object s, AsyncCompletedEventArgs args) => {
if(!args.Cancelled && args.Error == null && File.Exists(_filename)) {
result = System.Windows.Forms.DialogResult.OK;
} else if(args.Error != null) {
MesenMsgBox.Show("UnableToDownload", MessageBoxButtons.OK, MessageBoxIcon.Error, args.Error.ToString());
Task.Run(() => {
using(var client = new WebClient()) {
client.DownloadProgressChanged += (object s, DownloadProgressChangedEventArgs args) => {
this.BeginInvoke((Action)(() => {
lblFilename.Text = string.Format("{0} ({1:0.00}Mb)", _link, (double)args.TotalBytesToReceive/1024/1024);
progressDownload.Value = args.ProgressPercentage;
}));
};
client.DownloadFileCompleted += (object s, AsyncCompletedEventArgs args) => {
if(!args.Cancelled && args.Error == null && File.Exists(_filename)) {
result = System.Windows.Forms.DialogResult.OK;
} else if(args.Error != null) {
MesenMsgBox.Show("UnableToDownload", MessageBoxButtons.OK, MessageBoxIcon.Error, args.Error.ToString());
result = System.Windows.Forms.DialogResult.Cancel;
}
};
Task downloadTask = null;
try {
downloadTask = client.DownloadFileTaskAsync(_link, _filename);
} catch(Exception ex) {
MesenMsgBox.Show("UnableToDownload", MessageBoxButtons.OK, MessageBoxIcon.Error, ex.ToString());
result = System.Windows.Forms.DialogResult.Cancel;
}
};
Task downloadTask = null;
try {
downloadTask = client.DownloadFileTaskAsync(_link, _filename);
} catch(Exception ex) {
MesenMsgBox.Show("UnableToDownload", MessageBoxButtons.OK, MessageBoxIcon.Error, ex.ToString());
result = System.Windows.Forms.DialogResult.Cancel;
}
if(downloadTask == null) {
result = System.Windows.Forms.DialogResult.Cancel;
} else {
while(!downloadTask.IsCompleted && !_cancel) {
System.Threading.Thread.Sleep(200);
}
if(downloadTask == null) {
result = System.Windows.Forms.DialogResult.Cancel;
} else {
while(!downloadTask.IsCompleted && !_cancel) {
System.Threading.Thread.Sleep(200);
Application.DoEvents();
}
if(_cancel) {
client.CancelAsync();
} else if(result == System.Windows.Forms.DialogResult.None) {
result = System.Windows.Forms.DialogResult.OK;
if(_cancel) {
client.CancelAsync();
} else if(result == System.Windows.Forms.DialogResult.None) {
result = System.Windows.Forms.DialogResult.OK;
}
}
}
}
DialogResult = result;
this.Close();
//Wait a bit for the progress bar to update to 100% (display updates are slower than the .Value updates)
System.Threading.Thread.Sleep(500);
this.BeginInvoke((Action)(() => {
DialogResult = result;
this.Close();
}));
});
}
}
}