Exemplo n.º 1
0
        public async Task AddQueue(AddQueueDirectory dir)
        {
            // 既に追加されているファイルは除外する
            var ignoreSet = new HashSet <string>(queue
                                                 .Where(t => t.Path == dir.DirPath)
                                                 .SelectMany(t => t.Items)
                                                 .Select(item => item.Path));

            var items = ((dir.Targets != null)
                ? dir.Targets
                : Directory.GetFiles(dir.DirPath)
                         .Where(s => {
                string lower = s.ToLower();
                return(lower.EndsWith(".ts") || lower.EndsWith(".m2t") || lower.EndsWith(".mp4"));
            }))
                        .Where(f => !ignoreSet.Contains(f));

            if (dir.DstPath != null && Directory.Exists(dir.DstPath) == false)
            {
                await client.OnOperationResult(
                    "出力先フォルダが存在しません:" + dir.DstPath);

                return;
            }

            var target = new QueueDirectory()
            {
                Path  = dir.DirPath,
                Items = items.Select(f => new QueueItem()
                {
                    Path = f
                }).ToList(),
                DstPath = (dir.DstPath != null) ? dir.DstPath : Path.Combine(dir.DirPath, "encoded")
            };

            if (target.Items.Count == 0)
            {
                await client.OnOperationResult(
                    "エンコード対象ファイルが見つかりません。パス:" + dir.DirPath);

                return;
            }
            queue.Add(target);
            Task task = client.OnQueueUpdate(new QueueUpdate()
            {
                Type      = UpdateType.Add,
                Directory = target
            });
            Task task2 = RequestFreeSpace();

            if (encodePaused == false && nowEncoding == false)
            {
                await StartEncode();
            }
            await task;
            await task2;
        }
Exemplo n.º 2
0
            public async Task ProcessDiretoryItem(EncodeServer server, QueueDirectory dir)
            {
                succeeded = Path.Combine(dir.Path, "succeeded");
                failed    = Path.Combine(dir.Path, "failed");
                encoded   = dir.DstPath;
                Directory.CreateDirectory(succeeded);
                Directory.CreateDirectory(failed);
                Directory.CreateDirectory(encoded);

                int failCount = 0;

                // 待たなくてもいいタスクリスト
                waitList = new List <Task>();

                var itemList = dir.Items.ToArray();

                while (dir.CurrentHead < itemList.Length)
                {
                    if (failCount > 0)
                    {
                        int waitSec = (failCount * 10 + 10);
                        waitList.Add(server.AddEncodeLog("エンコードに失敗したので" + waitSec + "秒待機します。(parallel=" + id + ")"));
                        await Task.Delay(waitSec * 1000);

                        if (server.encodePaused)
                        {
                            break;
                        }
                    }

                    if (dir.CurrentHead >= itemList.Length)
                    {
                        break;
                    }
                    var src = itemList[dir.CurrentHead++];

                    waitList.Add(server.UpdateItemState(true, false, src, dir));

                    var logItem = await ProcessItem(server, src);

                    if (logItem.Success)
                    {
                        File.Move(src.Path, succeeded + "\\" + Path.GetFileName(src.Path));
                        failCount = 0;
                    }
                    else
                    {
                        File.Move(src.Path, failed + "\\" + Path.GetFileName(src.Path));
                        ++failCount;
                    }

                    server.log.Items.Add(logItem);
                    server.WriteLog();
                    waitList.Add(server.UpdateItemState(false, true, src, dir));
                    waitList.Add(server.client.OnLogUpdate(server.log.Items.Last()));
                    waitList.Add(server.RequestFreeSpace());

                    if (server.encodePaused)
                    {
                        break;
                    }
                }

                await Task.WhenAll(waitList.ToArray());
            }
Exemplo n.º 3
0
        private Task UpdateItemState(bool isEncoding, bool isComplete, QueueItem item, QueueDirectory dir)
        {
            item.IsEncoding = isEncoding;
            item.IsComplete = isComplete;

            return(client.OnQueueUpdate(new QueueUpdate()
            {
                Type = UpdateType.Update,
                DirPath = dir.Path,
                Item = item
            }));
        }