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);
            }
        }
示例#2
0
        /// <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;
        }
示例#3
0
 public override void ProcessItem(IJob job, IJobItem item)
 {
     foreach (var file in item.TemporaryFiles)
     {
         File.Delete(file);
     }
 }
示例#4
0
        /// <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);
        }
示例#7
0
        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();
        }
示例#8
0
        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);
 }
示例#10
0
        private void ProcessItem(Job worker, IJobItem task)
        {
            if (task == null)
            {
                return;
            }

            // 准备就绪,增加Busy,避免超额分配
            worker.Prepare(task);

            // 使用线程池调度,避免Task排队影响使用
            ThreadPoolX.QueueUserWorkItem(worker.Process, task);
        }
示例#11
0
        /// <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);
        }
示例#12
0
        /// <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());
        }
示例#13
0
        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();
        }
示例#14
0
 public abstract void ProcessItem(IJob job, IJobItem item);
示例#15
0
 public JobItemVM(IJobItem jobItem)
 {
     m_JobItem = jobItem;
     m_JobItem.StatusChanged += OnJobItemFileStatusChanged;
     m_JobItem.IssuesChanged += OnIssuesChanged;
 }
示例#16
0
 private void OnIssuesChanged(IJobItem item)
 => this.NotifyChanged(nameof(Issues));
示例#17
0
 private void OnJobItemFileStatusChanged(IJobItem item, JobItemStatus_e newStatus)
 => this.NotifyChanged(nameof(Status));
示例#18
0
 private void OnJobItemMacroStatusChanged(IJobItem item, JobItemStatus_e newStatus)
 {
     this.NotifyChanged(nameof(Status));
 }
示例#19
0
        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));
 }
示例#21
0
 private void OnProgressChanged(IJobItem file, bool result)
 {
     ProgressChanged?.Invoke(file, result);
 }
示例#22
0
 public void ReportProgress(IJobItem file, bool result) => ProgressChanged?.Invoke(file, result);
示例#23
0
        private void OnProgressChanged(IJobItem file, bool res)
        {
            m_ProcessedFiles++;

            ProgressChanged?.Invoke(m_ProcessedFiles / (double)m_TotalFiles);
        }
示例#24
0
 public ProgressJobItem(IJobItem wrappedJobItem)
 {
     _wrappedJobItem = wrappedJobItem;
 }