private static BuildEcfFileResult BuildEcfFile(BuildEcfFileParameters args) { var result = BuildEcfFileResult.Error; using (var builder = new KSoft.Phoenix.Resource.ECF.EcfFileBuilder(args.ListingPath)) { builder.Options = args.EcfOptions; builder.BuilderOptions = args.EcfBuilderOptions; builder.VerboseOutput = args.VerboseOutput; do { if (!builder.Read()) { result = BuildEcfFileResult.ReadFailed; break; } if (!builder.Build(args.AssetsPath, args.OutputPath)) { result = BuildEcfFileResult.BuildFailed; break; } result = BuildEcfFileResult.Success; } while (false); } return(result); }
private void ProcessEcfListing(string ecfListing) { #if false // #TODO make a EcfBuildOutputPath if (!Directory.Exists(Properties.Settings.Default.EraBuildOutputPath)) { MessagesText = "Cannot expand ECF file(s)\n" + "Specify a valid expand output path"; return; } #endif ClearMessages(); IsProcessing = true; var args = new BuildEcfFileParameters(Flags.Test(MiscFlags.UseVerboseOutput)); if (Properties.Settings.Default.GameVersion == GameVersionType.DefinitiveEdition) { args.EcfOptions.Set(KSoft.Phoenix.Resource.ECF.EcfFileUtilOptions.x64); } if (Flags.Test(MiscFlags.SkipVerification)) { args.EcfOptions.Set(KSoft.Phoenix.Resource.ECF.EcfFileUtilOptions.SkipVerification); } args.AssetsPath = Path.GetDirectoryName(ecfListing); #if false // #TODO make a EcfBuildOutputPath args.OutputPath = Properties.Settings.Default.EraBuildOutputPath; #else args.OutputPath = Path.GetDirectoryName(ecfListing); #endif args.ListingPath = ecfListing; StatusText = string.Format("Building {0} ECF", Path.GetFileNameWithoutExtension(ecfListing)); var scheduler = TaskScheduler.FromCurrentSynchronizationContext(); var task = Task.Run(() => { return(BuildEcfFile(args)); }); task.ContinueWith(t => { string message_text = ""; string verbose_output = args.GetVerboseOutput(); if (t.IsFaulted || t.Result != BuildEcfFileResult.Success) { bool verbose = 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 BuildEcfFileResult.Error: error_hint = "NO HINT"; break; case BuildEcfFileResult.ReadFailed: error_hint = "Failed reading or initializing .ECFDEF data"; break; case BuildEcfFileResult.BuildFailed: error_hint = "Failed building ECF (invalid files?). See PhxGui.log for possible details"; break; default: error_hint = "UNKNOWN"; break; } } message_text += string.Format("Build {0} {1}{2}{3}", error_type, args.ListingPath, Environment.NewLine, error_hint); } 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)) { MessagesText += message_text; } FinishProcessing(); }, scheduler); }