public override void ProcessItem(IJob job, IJobItem item) { var tempfile = Path.Combine(Path.GetTempPath(), DateTime.Now.Ticks + ".wav"); item.TemporaryFiles.Add(tempfile); using (var reader = new MediaFoundationReader(item.SourceFile)) { WaveFileWriter.CreateWaveFile(tempfile, reader); } }
/// <summary>报告状态(进度、成功、错误)</summary> /// <param name="task"></param> /// <param name="ext"></param> /// <returns></returns> public Boolean Report(IJobItem task, Object ext = null) { var dic = new { item = task }.ToDictionary(); if (ext != null) { dic = dic.Merge(ext); } var retry = 3; var lastex = new Exception(); while (retry-- > 0) { try { return(Invoke <Boolean>(nameof(Report), dic)); } catch (Exception ex) { lastex = ex; } } throw lastex; }
public override void ProcessItem(IJob job, IJobItem item) { foreach (var file in item.TemporaryFiles) { File.Delete(file); } }
/// <summary> /// /// </summary> /// <param name="ijob"></param> /// <param name="element"></param> /// <param name="options"></param> public Job(Type ijob, IJobItem element, Dictionary <string, string> options) { _JobType = ijob; this._Enabled = element.Enabled; this._EnableShutDown = element.EnableShutDown; this._Name = element.Name; this.Interval = element.Period; this._ExecuteOnOwnThread = element.ExecuteOnOwnThread; this._FirstRunAtInitialization = element.FirstRunAtInitialization; this._ExecuteDaily = element.ExecuteDaily; this.UsePreciseTimer = element.UsePreciseTimer; this.PreciseTimerCallbackMode = element.PreciseTimerCallbackMode; if (this._ExecuteDaily) { if (TimeZoneUtility.HasTimeZone(element.DailyLocalizedExecutionTimeZoneName)) { this.DailyLocalizedExecutionTimeZoneInfo = TimeZoneUtility.GetTimeZoneInfo(element.DailyLocalizedExecutionTimeZoneName); this.DailyLocalizedExecutionTime = element.DailyLocalizedExecutionTime; this.DailyExecutionDateTimeKind = DateTimeKind.Local; } else { this._DailyUTCExecutionTime = element.DailyUTCExecutionTime; this.DailyExecutionDateTimeKind = DateTimeKind.Utc; } } this._Options = options; }
public override void ProcessItem(IJob job, IJobItem item) { var bitRate = job.Preset.BitRate; var sampleRate = job.Preset.SampleRate; var tempdir = Path.GetTempPath(); var tempfile = Path.Combine(tempdir, DateTime.Now.Ticks + "." + job.Preset.Extension); var subType = this.GetAudioSubtypeForExtension(job.Preset.Extension); var waveFormat = new WaveFormat(sampleRate, 2); var mediaType = MediaFoundationEncoder.SelectMediaType(subType, waveFormat, bitRate); if (mediaType != null) { using (var decoder = new MediaFoundationReader(item.LastFile)) { using (var encoder = new MediaFoundationEncoder(mediaType)) { encoder.Encode(tempfile, decoder); } } } item.TemporaryFiles.Add(tempfile); }
public override void ProcessItem(IJob job, IJobItem item) { var sourceFile = new FileInfo(item.SourceFile); var sourceName = this.GetSourceName(sourceFile); item.DestinationFile = this.CreateDestinationFilePath(sourceName, job); }
public void ReportProgress(IJobItem file, bool result) { m_ProcessedFiles++; var prg = m_ProcessedFiles / (double)m_TotalFiles; Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine($"Progress: {(prg * 100).ToString("F")}%"); Console.ResetColor(); }
public override void ProcessItem(IJob job, IJobItem item) { if (!Directory.Exists(job.OutputFolder)) { Directory.CreateDirectory(job.OutputFolder); } File.Copy(item.LastFile, item.DestinationFile, true); }
public override void ProcessItem(IJob job, IJobItem item) { var bitRate = job.Preset.BitRate; var sampleRate = job.Preset.SampleRate; var tempdir = Path.GetTempPath(); var tempfile = Path.Combine(tempdir, DateTime.Now.Ticks + "." + job.Preset.Extension); var exec = string.Format(CultureInfo.InvariantCulture, "-i \"{0}\" -ab {1} -ar {2} -ac 2 \"{3}\"", item.LastFile, bitRate, sampleRate, tempfile); this.Execute(exec); item.TemporaryFiles.Add(tempfile); }
private void ProcessItem(Job worker, IJobItem task) { if (task == null) { return; } // 准备就绪,增加Busy,避免超额分配 worker.Prepare(task); // 使用线程池调度,避免Task排队影响使用 ThreadPoolX.QueueUserWorkItem(worker.Process, task); }
/// <summary>分批抽取数据,一个任务内多次调用</summary> /// <param name="ctx">上下文</param> /// <param name="set"></param> /// <returns></returns> protected override Object Fetch(JobContext ctx, IJobItem set) { if (set == null) { throw new ArgumentNullException(nameof(set), "没有设置数据抽取配置"); } // 验证时间段 var start = set.Start; var end = set.End; // 区间无效 if (start >= end) { return(null); } // 分批获取数据,如果没有取到,则结束 var fi = Field; var exp = new WhereExpression(); if (start > DateTime.MinValue && start < DateTime.MaxValue) { exp &= fi >= start; } if (end > DateTime.MinValue && end < DateTime.MaxValue) { exp &= fi < end; } if (!Where.IsNullOrEmpty()) { exp &= Where; } var list = Factory.FindAll(exp, OrderBy, Selects, set.Row, set.BatchSize); // 取到数据,需要滑动窗口 if (list.Count > 0) { set.Row += list.Count; } return(list); }
/// <summary>解析出来一批消息</summary> /// <param name="ctx"></param> /// <param name="set"></param> /// <returns></returns> protected override Object Fetch(JobContext ctx, IJobItem set) { // 只有蚂蚁调度支持消息 if (!(set is JobItem ji)) { return(null); } var ss = ji.Data.ToJsonEntity <String[]>(); if (ss == null || ss.Length == 0) { return(null); } // 消息工作者特殊优待字符串,不需要再次Json解码 if (typeof(TModel) == typeof(String)) { return(ss); } return(ss.Select(e => e.ToJsonEntity <TModel>()).ToArray()); }
public override void ProcessItem(IJob job, IJobItem item) { var sourceTagFile = File.Create(item.SourceFile); var targetTagFile = File.Create(item.LastFile); var allTagTypes = (TagTypes[])Enum.GetValues(typeof(TagTypes)); foreach (var type in allTagTypes) { var sourceTag = sourceTagFile.GetTag(type, false); if (sourceTag != null) { foreach (var tagType in job.Preset.TagTypes) { var targetTag = targetTagFile.GetTag(tagType, true); if (targetTag != null) { CopyTags(sourceTag, targetTag); } } } } targetTagFile.Save(); }
public abstract void ProcessItem(IJob job, IJobItem item);
public JobItemVM(IJobItem jobItem) { m_JobItem = jobItem; m_JobItem.StatusChanged += OnJobItemFileStatusChanged; m_JobItem.IssuesChanged += OnIssuesChanged; }
private void OnIssuesChanged(IJobItem item) => this.NotifyChanged(nameof(Issues));
private void OnJobItemFileStatusChanged(IJobItem item, JobItemStatus_e newStatus) => this.NotifyChanged(nameof(Status));
private void OnJobItemMacroStatusChanged(IJobItem item, JobItemStatus_e newStatus) { this.NotifyChanged(nameof(Status)); }
private void RemoveFiles() { var selectedItems = new IJobItem[this.job.SelectedJobItems.Count]; this.job.SelectedJobItems.CopyTo(selectedItems, 0); foreach (var item in selectedItems) { this.job.JobItems.Remove(item); } this.job.SelectedJobItems.Clear(); }
public override void ProcessItem(IJob job, IJobItem item) { var tempfile = Path.Combine(Path.GetTempPath(), DateTime.Now.Ticks + ".wav"); item.TemporaryFiles.Add(tempfile); this.Execute(string.Format(CultureInfo.InvariantCulture, "-i \"{0}\" \"{1}\" ", item.SourceFile, tempfile)); }
private void OnProgressChanged(IJobItem file, bool result) { ProgressChanged?.Invoke(file, result); }
public void ReportProgress(IJobItem file, bool result) => ProgressChanged?.Invoke(file, result);
private void OnProgressChanged(IJobItem file, bool res) { m_ProcessedFiles++; ProgressChanged?.Invoke(m_ProcessedFiles / (double)m_TotalFiles); }
public ProgressJobItem(IJobItem wrappedJobItem) { _wrappedJobItem = wrappedJobItem; }