public static void AddEncodingTask(EncodingAction action, string param, Preset currentPreset, List <FileSelector.FileInfo> selectPaths, string input, string output, string extra) { if (!TaskArgBuilders.ContainsKey(action)) { AppContext.Status.MainStatus = $"Error: 没有找到可用的处理流程模板:{action}"; return; } var taskArgBuilder = TaskArgBuilders[action]; var useHdr = false; if (param == "HDR" || AppContext.Config.ForceHDR) { useHdr = true; } var(ext, _) = FileSelector.FileName.GetOutputExt(currentPreset.OutputFormat); //为每个选中的项目生成任务并推入任务队列 foreach (var filePath in selectPaths) { var name = filePath.Filename; var newTask = new EncodingTask(name, action); AppContext.Status.MainStatus = $"生成任务 {name}"; var thisInput = filePath.Path; var thisOutput = FileSelector.FileName.RecalcOutputPath(thisInput, output, "_neenc", ext); if (thisInput == input) { thisOutput = output; } var(exeFile, exeArgs) = taskArgBuilder.Invoke(param, thisInput, thisOutput, currentPreset, useHdr, input, extra); newTask.RegTask(exeFile, exeArgs); newTask.RegInputOutput(thisInput, thisOutput); newTask.RunLog += $"{exeFile} {exeArgs}\n"; newTask.ProcessStop += async sender => { AppContext.Status.MainStatus = $"{name} 任务完成"; await Task.Delay(500); TaskProvider.Schedule(); }; AppContext.EncodingContext.TaskQueue.Add(newTask); } //调度任务 AppContext.Status.MainStatus = "开始任务调度"; TaskProvider.Schedule(); }
private void BuildTaskAndAddEncodingQueueAction(EncodingAction action, string param, string extra) { var input = AppContext.PresetContext.InputFile; var output = AppContext.PresetContext.OutputFile; var preset = Utils.DeepCompare.CloneDeep1(AppContext.PresetContext.CurrentPreset); //调用GetAndRemoveAllSelectFilePath后会引起列表改变,进而修改input和output的值,因此必须在获取input和output值后再调用 var mainWindow = (MainWindow)Window.GetWindow(this); var selectPaths = mainWindow.MainFileList.GetAndRemoveAllSelectFilePath(); EncodingTask.TaskBuilder.AddEncodingTask(action, param, preset, selectPaths, input, output, extra); }
public EncodingTask(string taskName, EncodingAction action) { TaskName = taskName; EncodingAction = action; Progress = 0; }