Example #1
0
        /// <summary>
        /// 変換を行います。
        /// </summary>
        /// <param name="parameter">変換パラメーター。</param>
        public ConvertResultType Convert(IConvertParameter parameter)
        {
            var cea = new CancelEventArgs();

            cea.Cancel = false;
            Prepare?.Invoke(parameter, cea);
            if (cea.Cancel)
            {
                var r = new ConvertResultType();
                r = ConvertResultType.Cancelled;
                var ccea = new ConvertCompleteEventArgs();
                ccea.Result = ConvertResultType.Cancelled;
                ConvertCompleted?.Invoke(parameter, ccea);
                return(r);
            }

            try
            {
                return(onConvert(parameter));
            }
            catch (Exception e)
            {
                var result = new ConvertCompleteEventArgs();
                result.Result = ConvertResultType.Failed;
                result.Error  = e;
                ConvertCompleted?.Invoke(parameter, result);
                return(result.Result);
            }
        }
Example #2
0
        /// <summary>
        /// 変換の呼び出しを実施する。
        /// </summary>
        /// <param name="parameter"></param>
        /// <returns></returns>
        private ConvertResultType onConvert(IConvertParameter parameter)
        {
            var result = new ConvertCompleteEventArgs();

            // 変換処理
            DoConvert(parameter);

            result.Result = ConvertResultType.Succeed;
            result.Error  = null;
            ConvertCompleted?.Invoke(parameter, result);
            return(result.Result);
        }
Example #3
0
        /// <summary>
        /// 変換を行います。
        /// </summary>
        /// <param name="parameter">変換パラメーター。</param>
        protected override sealed void DoConvert(IConvertParameter parameter)
        {
            Parameter = parameter as FileConvertParameter;

            // 一時ディレクトリの設定
            Parameter.TemporaryDirectory = SetTemporaryDirectory();

            // 一時ファイルパスの生成
            Parameter.TemporaryFilePath = CreateTemporaryFilePath();

            // 変換先ファイルパスの決定
            Parameter.ConvertingPath = Parameter.UseTemporary
                    ? Parameter.TemporaryFilePath
                    : Parameter.DestinationFilePath;

            // 変換可能なパラメーターであるかを確認する
            if (!CanConvert())
            {
                throw new ArgumentException(ErrorMessage);
            }

            // 一時ファイルパスのディレクトリを作成
            if (Parameter.UseTemporary && !Directory.Exists(Parameter.TemporaryDirectory))
            {
                Directory.CreateDirectory(Parameter.TemporaryDirectory);
            }

            // 変換実行
            ConvertFile(Parameter);

            // 一時パスのファイルを変換後ファイルパスへ移動
            if (Parameter.UseTemporary)
            {
                try
                {
                    TempFileToDestFile();
                }
                catch
                {
                    File.Delete(Parameter.TemporaryFilePath);
                    throw;
                }
            }
        }
Example #4
0
        /// <summary>
        /// 変換を行います。
        /// </summary>
        /// <param name="parameter">変換パラメーター。</param>
        /// <returns>ConvertResult のタスク。</returns>
        public async Task <ConvertResultType> ConvertAsync(IConvertParameter parameter)
        {
            var e = new CancelEventArgs();

            e.Cancel = false;
            Prepare?.Invoke(parameter, e);
            if (e.Cancel)
            {
                var r = new ConvertResultType();
                r = ConvertResultType.Cancelled;
                var cea = new ConvertCompleteEventArgs();
                cea.Result = ConvertResultType.Cancelled;
                ConvertCompleted?.Invoke(parameter, cea);
                return(r);
            }

            var result = await onConvertTask(parameter);

            return(result);
        }
Example #5
0
        /// <summary>
        /// 非同期で変換を行うためのタスクメソッド。
        /// </summary>
        /// <param name="parameter">変換パラメーター。</param>
        /// <returns>ConvertResult のタスク。</returns>
        private Task <ConvertResultType> onConvertTask(IConvertParameter parameter)
        {
            var task = new Task <ConvertResultType>(() =>
            {
                try
                {
                    return(onConvert(parameter));
                }
                catch (Exception e)
                {
                    var result    = new ConvertCompleteEventArgs();
                    result.Result = ConvertResultType.Failed;
                    result.Error  = e;
                    ConvertCompleted?.Invoke(parameter, result);
                    return(result.Result);
                }
            });

            task.Start();
            return(task);
        }
Example #6
0
 /// <summary>
 /// 変換を行います。
 /// </summary>
 /// <param name="parameter">変換パラメーター</param>
 protected abstract void DoConvert(IConvertParameter parameter);