Ejemplo n.º 1
0
        private static void BatchMergeVA(string path, bool deleteSource, string videoPattern,
                                         string[] audioPatterns, string[] resultPatterns)
        {
            var videoMatcher = new Regex(videoPattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);
            var queue        = new LinkedList <Tuple <string, string, string> >
                                   (from p in Directory.EnumerateFiles(FileHelper.GetFilePath(path), "*", SearchOption.AllDirectories)
                                   let input = p.Substring(6) let match = videoMatcher.Match(input) where match.Success
                                                                          let audio = (from ap in audioPatterns let ar = match.Result(ap)
                                                                                                                         where File.Exists(FileHelper.GetFilePath(ar)) select ar).FirstOrDefault() where audio != null
                                                                                      let output = (from op in resultPatterns let or = match.Result(op)
                                                                                                                                       where !File.Exists(FileHelper.GetFilePath(or)) select or).FirstOrDefault() where output != null
                                                                                                   select new Tuple <string, string, string>(input, audio, output));

            while (queue.Count > 0)
            {
                var node = queue.First;
                while (node != null)
                {
                    if (!FileHelper.IsReady(FileHelper.GetDataFilePath(node.Value.Item1)) ||
                        !FileHelper.IsReady(FileHelper.GetDataFilePath(node.Value.Item2)))
                    {
                        node = node.Next;
                        continue;
                    }
                    ConvertTask.Create(node.Value.Item1, node.Value.Item3, null, "copy", "copy", null,
                                       node.Value.Item2).Execute();
                    if (deleteSource)
                    {
                        FileHelper.Delete(node.Value.Item1);
                        FileHelper.Delete(node.Value.Item2);
                    }
                    var previous = node;
                    node = node.Next;
                    queue.Remove(previous);
                }
                Thread.Sleep(1000);
            }
        }
Ejemplo n.º 2
0
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Request.GetUser().OperateTasks)
            {
                Response.StatusCode = 401;
                return;
            }
            Response.Clear();
            Response.ContentType = "application/xml";
            var result = new XElement("result");
            var path   = RouteData.GetRelativePath();

            try
            {
                GeneralTask task;
                switch (RouteData.GetRouteString("Type").ToLowerInvariant())
                {
                case "offline":
                    OfflineDownloadTask.Create(Rbase64.Decode(Request.QueryString["Url"]), path);
                    break;

                case "ftpupload":
                    result.SetAttributeValue("id", (task = new FtpUploadTask(path,
                                                                             Request.QueryString["Files"].Split('|').Select(file => file.UrlDecode()),
                                                                             Request.QueryString["Target"].UrlDecode())));
                    task.Start();
                    break;

                case "compress":
                    new CompressTask(path,
                                     Request.QueryString["Files"].Split('|').Select(file => file.UrlDecode()),
                                     Request.QueryString["BaseFolder"].UrlDecode(),
                                     Request.QueryString["CompressionLevel"]).Start();
                    break;

                case "decompress":
                    result.SetAttributeValue("id", (task = new DecompressTask
                                                               (path, Request.QueryString["Target"].UrlDecode())).ID);
                    task.Start();
                    break;

                case "convert":
                    ConvertTask.Create(path, Request.QueryString["Target"].UrlDecode(),
                                       Request.QueryString["Size"].UrlDecode(),
                                       Request.QueryString["VCodec"].UrlDecode(),
                                       Request.QueryString["ACodec"].UrlDecode(),
                                       Request.QueryString["SCodec"].UrlDecode(),
                                       Request.QueryString["AudioPath"].UrlDecode(),
                                       Request.QueryString["Start"].UrlDecode(),
                                       Request.QueryString["End"].UrlDecode()).Start();
                    break;

                case "crossappcopy":
                    result.SetAttributeValue("id", (task = new CrossAppCopyTask(
                                                        Request.QueryString["Domain"].UrlDecode(), Request.QueryString["Path"].UrlDecode(),
                                                        path, Request.QueryString["Password"].UrlDecode() ?? Request.GetPassword())));
                    task.Start();
                    break;

                case "batchmergeva":
                    TaskHelper.StartRunner(string.Format("{0}\n{1}\n{2}\n{3}\n{4}\n{5}", TaskType.BatchMergeVATask,
                                                         path, Request.QueryString["DeleteSource"],
                                                         Request.QueryString["VideoPattern"],
                                                         Request.QueryString["ResultPattern"],
                                                         Request.QueryString["AudioPatterns"]));
                    break;

                default:
                    throw new FormatException("无法识别的 Type!");
                }
                result.SetAttributeValue("status", "ok");
            }
            catch (Exception exc)
            {
                result.SetAttributeValue("status", "error");
                result.SetAttributeValue("message", exc.GetMessage());
            }
            Response.Write(result.ToString());
        }