Пример #1
0
        public void DetectAD(string json, IJavascriptCallback callback, IJavascriptCallback progress)
        {
            var task = new Task(() => {
                var files = JsonConvert.DeserializeObject <string[]>(json);

                var notify = new Action <int, int>((used, left) => {
                    progress.ExecuteAsync(used, left);
                });

                var result = CutAD.DetectAD(files, notify);

                var ret = result.Select(kv => {
                    var ranges = kv.Key;
                    var length = kv.Value;
                    return(new {
                        length = length * 100,
                        ads = ranges.Select(r => new {
                            type = r.type,
                            count = r.count,
                            start = r.begin * 100,
                            end = r.end * 100,
                        }).ToArray()
                    });
                }).ToArray();

                callback.ExecuteJsonAsync(null, ret);
            });

            task.Start();
        }
Пример #2
0
        public void Cut(string json, int minLength, int minCount, string outputDirectory, IJavascriptCallback callback, IJavascriptCallback progress)
        {
            var task = new Task(() => {
                var example = new[] {
                    new {
                        fullname  = "",
                        filename  = "",
                        directory = "",
                        basename  = "",
                        extname   = "",
                        length    = 0,
                        ads       = new[] {
                            new {
                                ignored = false,
                                type    = 0,
                                count   = 1,
                                start   = 0,
                                end     = 0,
                            }
                        },
                    }
                };
                var files = JsonConvert.DeserializeAnonymousType(json, example);

                var args = files.ToDictionary(
                    file => file.fullname,
                    file => new CutAD.CutPara(
                        file.length / 100,
                        file.ads
                        .Where(ad => !ad.ignored)
                        .Where(ad => minLength > 0 && (ad.end - ad.start) >= minLength * 1000)
                        .Where(ad => minCount > 1 && ad.count >= minCount)
                        .Select(ad => new Range(ad.start / 100, ad.end / 100))
                        .ToList()
                        )
                    );

                var notify = new Action <int, int>((used, left) => {
                    progress.ExecuteAsync(used, left);
                });

                CutAD.Cut(args, outputDirectory, notify);

                var timeSaved = args.Aggregate(0, (acc, pair) => {
                    return(acc + pair.Value.range.Aggregate(0, (acc2, r) => acc2 + (r.end - r.begin) / 10));
                });

                callback.ExecuteJsonAsync(null, timeSaved);
            });

            task.Start();
        }
Пример #3
0
        public void SelectDirectory(string initialPath, IJavascriptCallback callback)
        {
            var dialog = new FolderBrowserDialog();

            dialog.SelectedPath = initialPath;

            var result = form.Invoke <DialogResult>(dialog.ShowDialog);

            var dir = "";

            if (result == DialogResult.OK)
            {
                dir = dialog.SelectedPath;
            }

            callback.ExecuteJsonAsync(null, dir);
        }
Пример #4
0
        /// <summary>
        /// 打开文件选择对话框
        /// </summary>
        /// <param name="title">标题</param>
        /// <param name="filter">过滤器:例 音频文件(*.mp3)|*.mp3</param>
        /// <param name="callback">回调,返回选中的所有文件</param>
        public void OpenFile(string initialPath, string title, string filter, IJavascriptCallback callback)
        {
            var dialog = new OpenFileDialog();

            dialog.Multiselect      = true;
            dialog.Title            = title;
            dialog.Filter           = filter;
            dialog.InitialDirectory = initialPath;

            var result = form.Invoke <DialogResult>(dialog.ShowDialog);

            var fileNames = new string[0];

            if (result == DialogResult.OK)
            {
                fileNames = dialog.FileNames;
            }

            callback.ExecuteJsonAsync(null, fileNames);
        }
Пример #5
0
        /// <summary>
        /// 打开目录选择对话框
        /// </summary>
        /// <param name="filter">文件过滤器:例 *.mp3</param>
        /// <param name="callback">回调,返回该目录内所有符合过滤规则的文件(不递归)</param>
        public void OpenDirectory(string initialPath, string filter, IJavascriptCallback callback)
        {
            var dialog = new FolderBrowserDialog();

            dialog.SelectedPath        = initialPath;
            dialog.ShowNewFolderButton = false;

            var result = form.Invoke <DialogResult>(dialog.ShowDialog);

            var fileNames = new string[0];

            if (result == DialogResult.OK)
            {
                var dir = new DirectoryInfo(dialog.SelectedPath);
                fileNames = dir.GetFiles(filter, SearchOption.TopDirectoryOnly)
                            .Select(f => f.FullName)
                            .ToArray();
            }

            callback.ExecuteJsonAsync(null, fileNames);
        }