Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
            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();
                        }));
                    }
                });
            }