public virtual async Task <ActionResult> Details(string id)
        {
            var      cts  = TaskHelper.CreateChildCancellationTokenSource(ClientDisconnectedToken());
            FileInfo data = null;

            try
            {
                var repository = FileSystemGenericRepositoryFactory.CreateFileRepositoryReadOnly(cts.Token, PhysicalPath, IncludeSubDirectories);

                data = await repository.GetByPathAsync(id.Replace("/", "\\"));

                if (data == null)
                {
                    return(HandleReadException());
                }
            }
            catch
            {
                return(HandleReadException());
            }

            ViewBag.PageTitle = Title;
            ViewBag.Admin     = Admin;

            var dto = Mapper.Map <FileMetadataDto>(data);

            dto.Id = dto.Id.Replace(PhysicalPath, "");

            //  return View("Details", dto);
            return(View("~/Views/Bootstrap4/Details.cshtml", dto));
        }
        public virtual async Task <ActionResult> Index(int page = 1, int pageSize = 10, string orderColumn = nameof(FileInfo.LastWriteTime), string orderType = "desc", string search = "")
        {
            var cts = TaskHelper.CreateChildCancellationTokenSource(ClientDisconnectedToken());

            try
            {
                var repository = FileSystemGenericRepositoryFactory.CreateFileRepositoryReadOnly(cts.Token, PhysicalPath, IncludeSubDirectories);
                var dataTask   = repository.SearchAsync(search, null, LamdaHelper.GetOrderByFunc <FileInfo>(orderColumn, orderType), (page - 1) * pageSize, pageSize);
                var totalTask  = repository.GetSearchCountAsync(search, null);

                await TaskHelper.WhenAllOrException(cts, dataTask, totalTask);

                var data  = dataTask.Result;
                var total = totalTask.Result;

                var rows = data.ToList().Select(Mapper.Map <FileInfo, FileMetadataDto>).ToList();

                foreach (FileMetadataDto dto in rows)
                {
                    dto.Id = dto.Id.Replace(PhysicalPath, "");
                }

                var response = new WebApiPagedResponseDto <FileMetadataDto>
                {
                    Page        = page,
                    PageSize    = pageSize,
                    Records     = total,
                    Rows        = rows,
                    OrderColumn = orderColumn,
                    OrderType   = orderType,
                    Search      = search
                };

                ViewBag.Search      = search;
                ViewBag.Page        = page;
                ViewBag.PageSize    = pageSize;
                ViewBag.OrderColumn = orderColumn;
                ViewBag.OrderType   = orderType;

                ViewBag.DisableCreate  = true;
                ViewBag.DisableSorting = true;
                ViewBag.DisableDelete  = false;

                ViewBag.PageTitle = Title;
                ViewBag.Admin     = Admin;
                return(View("List", response));
            }
            catch
            {
                return(HandleReadException());
            }
        }
        public virtual async Task <ActionResult> Index(int p = 1, int pageSize = 10, string orderBy = nameof(FileInfo.LastWriteTime) + " desc", string search = "")
        {
            var cts = TaskHelper.CreateChildCancellationTokenSource(ClientDisconnectedToken());

            try
            {
                var repository = FileSystemGenericRepositoryFactory.CreateFileRepositoryReadOnly(cts.Token, PhysicalPath, IncludeSubDirectories);

                var data = await repository.SearchAsync(search, null, UIHelper.GetOrderByIQueryableDelegate <FileInfo>(orderBy), (p - 1) *pageSize, pageSize);

                var total = await repository.GetSearchCountAsync(search, null);

                var rows = data.ToList().Select(Mapper.Map <FileInfo, FileMetadataDto>).ToList();

                foreach (FileMetadataDto dto in rows)
                {
                    dto.Id = dto.Id.Replace(PhysicalPath, "");
                }

                var response = new WebApiPagedResponseDto <FileMetadataDto>
                {
                    Page     = p,
                    PageSize = pageSize,
                    Records  = total,
                    Rows     = rows,
                    OrderBy  = orderBy,
                    Search   = search
                };

                ViewBag.Search   = search;
                ViewBag.Page     = p;
                ViewBag.PageSize = pageSize;
                ViewBag.OrderBy  = orderBy;

                ViewBag.DisableCreate  = true;
                ViewBag.DisableSorting = true;
                ViewBag.DisableDelete  = false;

                ViewBag.PageTitle = Title;
                ViewBag.Admin     = Admin;
                //return View("List", response);
                return(View("~/Views/Bootstrap4/List.cshtml", response));
            }
            catch
            {
                return(HandleReadException());
            }
        }
        public virtual async Task <ActionResult> Delete(string id)
        {
            var          cts  = TaskHelper.CreateChildCancellationTokenSource(ClientDisconnectedToken());
            JpegMetadata data = null;

            try
            {
                var repository = FileSystemGenericRepositoryFactory.CreateJpegMetadataRepositoryReadOnly(cts.Token, PhysicalPath, IncludeSubDirectories);
                data = await repository.MetadataGetByPathAsync(id.Replace("/", "\\"));

                var dto = Mapper.Map <JpegMetadataDto>(data);

                ViewBag.PageTitle = Title;
                ViewBag.Admin     = Admin;
                return(View("Delete", dto));
            }
            catch
            {
                return(HandleReadException());
            }
        }
        public virtual ActionResult DeleteConfirmed(string id)
        {
            var cts = TaskHelper.CreateChildCancellationTokenSource(ClientDisconnectedToken());

            if (ModelState.IsValid)
            {
                try
                {
                    var repository = FileSystemGenericRepositoryFactory.CreateFolderRepository(cts.Token, PhysicalPath, IncludeSubDirectories);
                    repository.Delete(id.Replace("/", "\\"));

                    return(RedirectToControllerDefault().WithSuccess(this, Messages.DeleteSuccessful));
                }
                catch (Exception ex)
                {
                    HandleUpdateException(ex);
                }
            }
            ViewBag.PageTitle = Title;
            ViewBag.Admin     = Admin;
            return(View("Delete", id));
        }