private static ExpandEraFileResult ExpandEraFile(ExpandEraFileParameters args) { var result = ExpandEraFileResult.Error; using (var expander = new KSoft.Phoenix.Resource.EraFileExpander(args.EraPath)) { expander.Options = args.EraOptions; expander.ExpanderOptions = args.EraExpanderOptions; expander.VerboseOutput = args.VerboseOutput; do { if (!expander.Read()) { result = ExpandEraFileResult.ReadFailed; break; } if (!expander.ExpandTo(args.OutputPath, args.ListingName)) { result = ExpandEraFileResult.ExpandFailed; break; } result = ExpandEraFileResult.Success; } while (false); } return(result); }
public void Expand() { if (mEraFilesIndex >= EraFiles.Length) { return; } var args = new ExpandEraFileParameters(ViewModel.Flags.Test(MiscFlags.UseVerboseOutput)); args.EraOptions = EraOptions; args.EraExpanderOptions = EraExpanderOptions; args.OutputPath = OutputPath; string eraFile = EraFiles[mEraFilesIndex++]; Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => { ViewModel.StatusText = string.Format("Expanding {0}", eraFile); })); args.EraPath = eraFile; args.ListingName = Path.GetFileNameWithoutExtension(eraFile); var task = Task.Run(() => { return(ExpandEraFile(args)); }); task.ContinueWith(t => { string message_text = ""; string verbose_output = args.GetVerboseOutput(); if (t.IsFaulted || t.Result != ExpandEraFileResult.Success) { bool verbose = ViewModel.Flags.Test(MiscFlags.UseVerboseOutput); string error_type; string error_hint; if (t.IsFaulted) { error_type = "EXCEPTION"; var e = t.Exception.GetOnlyExceptionOrAll(); error_hint = verbose ? e.ToVerboseString() : e.ToBasicString(); } else { error_type = "FAILED"; switch (t.Result) { case ExpandEraFileResult.Error: error_hint = "NO HINT"; break; case ExpandEraFileResult.ReadFailed: error_hint = "Failed reading ERA file"; break; case ExpandEraFileResult.ExpandFailed: error_hint = "Failed expanding archive (do you have the correct game version selected?)"; break; default: error_hint = "UNKNOWN"; break; } } message_text = string.Format("Expand {0} {1}{2}{3}{4}", error_type, eraFile, Environment.NewLine, error_hint, Environment.NewLine); } if (!string.IsNullOrEmpty(verbose_output)) { message_text = string.Format("VerboseOutput:{0}{1}{2}" + "{3}{4}", Environment.NewLine, args.VerboseOutput.GetStringBuilder(), Environment.NewLine, message_text, Environment.NewLine); } if (!string.IsNullOrEmpty(message_text)) { Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => { ViewModel.MessagesText += message_text; })); } if (mEraFilesIndex < EraFiles.Length) { Expand(); } else { Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => { ViewModel.FinishProcessing(); })); } }); }