Example #1
0
        public async Task <IActionResult> UploadFile(IFormFile file, MinimizationType opt)
        {
            // путь к папке Temp
            string name = GetRandomString(20);

            var ms = new MemoryStream();
            await file.CopyToAsync(ms);

            ms.Position = 0;
            Dictionary <string, Stream> files = null;

            try {
                files = archiveManager.Uncompress(ms);
            } catch {
                return(BadRequest("Не удалось разобрать архив"));
            }

            var manager = new Manager(files);

            var folder = new Folder {
                Id           = name,
                Files        = files,
                IsProcessing = true,
                Manager      = manager
            };

            foldersService.Folders.Add(folder);

            Task.Run(() => {
                return(manager.ToMinimize(opt));
            }).ContinueWith((result) => {
                var findFolder          = foldersService.Folders.FirstOrDefault(i => i.Id == name);
                findFolder.Messages     = result.Result;
                findFolder.IsProcessing = false;
            });

            return(RedirectToRoute(new { id = name }));
        }
Example #2
0
        public List <IOutputMessage> ToMinimize(MinimizationType min)
        {
            valueProvider = new ValueProvider();

            var csso = new CssOptimizer.Csso();
            var jso  = new JsOptimizerFacade();

            Parallel.ForEach(files, item => {
                var filePath = item.Key.Replace('/', '\\');

                var type      = fileIdentifying.GetType(filePath, item.Value);
                Stream stream = item.Value;

                if (type == Entities.FileType.Css &&
                    min.IsCommonCss)
                {
                    stream = csso.ToOptimize(item.Value) ?? stream;
                }
                else if (type == Entities.FileType.Js &&
                         min.IsCommonJs)
                {
                    stream = jso.ToOptimize(filePath, item.Value, valueProvider.GetOutputMessages()) ?? stream;
                }

                valueProvider.AddFile(parseFile.ToParse(filePath, stream, type));
            });

            List <Abstract.IEditor> listOpt = new List <Abstract.IEditor>();

            if (min.IsLoadExtJsFile)
            {
                listOpt.Add(new HtmlLoadExtJsEditor());
            }

            listOpt.Add(new HtmlInternalContentEditor());

            if (min.IsUnionJsFile)
            {
                listOpt.Add(new HtmlUnionJsEditor());
            }

            if (min.IsUnionCssFile)
            {
                listOpt.Add(new HtmlUnionCssEditor());
            }

            listOpt.Add(new JsWsSymbolsEditor());
            listOpt.Add(new JsEofTokenRemover());
            listOpt.Add(new HtmlWsSymbolsEditor());

            if (min.IsCommentHtml)
            {
                listOpt.Add(new HtmlCommentEditor());
            }

            if (min.IsCommonJs)
            {
                listOpt.Add(new JsMinifyingEditor());
                if (min.IsUnionJsFile)
                {
                    listOpt.Add(new JsMinifyingEditor(false));
                }
            }

            if (min.IsCommonCss)
            {
                listOpt.Add(new CssMinifyingEditor());
                if (min.IsUnionCssFile)
                {
                    listOpt.Add(new CssMinifyingEditor(false));
                }
            }

            if (min.IsNames)
            {
                listOpt.Add(new NamesEditor());
            }

            if (min.IsImage)
            {
                listOpt.Add(new ImageEditor());
            }

            listOpt.ForEach(i => i.ToEdit(valueProvider));

            var list = new List <IOutputMessage>();

            list.AddRange(valueProvider.GetOutputMessages());

            return(list);
        }