예제 #1
0
        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();
        }
예제 #2
0
        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);
        }
예제 #3
0
 public EncodingTask(string taskName, EncodingAction action)
 {
     TaskName       = taskName;
     EncodingAction = action;
     Progress       = 0;
 }