/// <summary> </summary>
        JsonResult IDriver.Open(string target, bool tree, Hashtable posting_json_obj)
        {
            FullPath     fullPath = ParsePath(target);
            OpenResponse answer   = new OpenResponse(DTOBase.Create(fullPath.Directory, fullPath.Root), fullPath);

            foreach (var item in fullPath.Directory.GetFiles())
            {
                if (HttpContext.Current.Request.Params.AllKeys.Contains("mimes[]"))
                {
                    if (file_mime.mime_type(item.Extension.Trim('.')).IndexOf(HttpContext.Current.Request.Params["mimes[]"]) > -1)
                    {
                        answer.AddResponse(DTOBase.Create(item, fullPath.Root, posting_json_obj));
                    }
                }
                else
                {
                    answer.AddResponse(DTOBase.Create(item, fullPath.Root, posting_json_obj));
                }
            }
            foreach (var item in fullPath.Directory.GetDirectories())
            {
                answer.AddResponse(DTOBase.Create(item, fullPath.Root));
            }
            return(Json(answer));
        }
Exemple #2
0
 public AddResponse(DirInfo newDir, DirInfo parent, WebDavRoot root)
 {
     _added = new List <DTOBase>()
     {
         DTOBase.Create(newDir, parent, root)
     };
 }
Exemple #3
0
        JsonResult IDriver.Rename(string target, string name)
        {
            string     oldTarget = target;
            WebDavRoot lroot     = this.GetRoot(target);

            target = this.GetCorectTarget(target);
            target = this.DecodeTarget(target);
            DirInfo oldDirInfo = client.GetInfo(target);

            if (oldDirInfo == null)
            {
                throw new ElFinderFileNotExists();
            }
            DirInfo parent = this.GetParent(oldDirInfo);

            client.Rename(target, parent.RelPath + name);
            DirInfo newDirInfo = client.GetInfo(parent.RelPath + name);

            if (newDirInfo == null)
            {
                return(Error.Message("Невозможно переименовать файл. Задано некорректное имя."));
            }
            ReplaceResponse answer = new ReplaceResponse();

            answer.Removed.Add(oldTarget);
            answer.Added.Add(DTOBase.Create(newDirInfo, parent, lroot));
            return(Json(answer));
        }
Exemple #4
0
 public AddResponse(ResourceFolder newDir, Root root)
 {
     _added = new List <DTOBase>()
     {
         DTOBase.Create(newDir, root)
     };
 }
Exemple #5
0
        JsonResult IDriver.Rename(string target, string name)//done didnt tested
        {
            FullPath fullPath = ParsePath(target);
            var      answer   = new ReplaceResponse();

            answer.Removed.Add(target);
            RemoveThumbs(fullPath);
            if (fullPath.Directory != null)
            {
                var oldpathllist   = new List <string>();
                var oldfolderfiles = Directory.GetFiles(fullPath.Directory.FullName, "*", SearchOption.AllDirectories);
                foreach (var oldfiles in oldfolderfiles)
                {
                    oldpathllist.Add(oldfiles);
                }
                string newPath = Path.Combine(fullPath.Directory.Parent.FullName, name);
                System.IO.Directory.Move(fullPath.Directory.FullName, newPath);
                answer.Added.Add(DTOBase.Create(new DirectoryInfo(newPath), fullPath.Root));//when create new folder dont need add to it in index
                var newfolderfiles = Directory.GetFiles(newPath, "*", SearchOption.AllDirectories);
                var newpathllist   = new List <string>();
                foreach (var newfiles in newfolderfiles)
                {
                    newpathllist.Add(newfiles);
                }
                BackgroundJob.Enqueue(() => IndexCRUD.OnRenameResponseFolder(oldpathllist, newpathllist));
            }
            else
            {
                string newPath = Path.Combine(fullPath.File.DirectoryName, name);
                File.Move(fullPath.File.FullName, newPath);
                IndexCRUD.OnRename(fullPath.File.FullName, newPath); //just rename and change create access time etc
                answer.Added.Add(DTOBase.Create(new FileInfo(newPath), fullPath.Root));
            }
            return(Json(answer));
        }
Exemple #6
0
        private void UserCheck(RequestBase request, DTOBase dto = null)
        {
            if (request.UserID <= 0)
            {
                throw new CustomException("کاربر درخواست کننده نامعتبر است.", $"UserID '{request.UserID}' is not valid");
            }
            var userReq = new UserRequest {
                Filter = new UserFilter {
                    ID = request.UserID
                }
            };
            var response = UserGet(userReq);

            if (!(response?.Success == true))
            {
                throw new CustomException("کاربری با شناسه ارسالی یافت نشد", $"UserID '{request.UserID}' is not bound to any user.");
            }
            else if (dto != null)
            {
                if (dto.ID == 0)
                {
                    dto.CreateUser = request.UserID;
                }
                else
                {
                    dto.ModifyUser = request.UserID;
                }
            }
        }
Exemple #7
0
 public AddResponse(ResourceFile newFile, Root root)
 {
     _added = new List <DTOBase>()
     {
         DTOBase.Create(newFile, root)
     };
 }
Exemple #8
0
 /// <summary> </summary>
 public AddResponse(FileInfo newFile, Root root)
 {
     _added = new List <DTOBase>()
     {
         DTOBase.Create(newFile, root)
     };
 }
        JsonResult IDriver.Tree(string target)
        {
            var fullPath = ParsePath(target);
            var answer   = new TreeResponse();

            if (fullPath.Directory.ResourceId.Equals(Guid.Empty))
            {
                // Volumen path
                var volume = ResourceManager.Instance.GetOrAddVolumeFolder(_project, fullPath.Directory.TypesOfResource);
                if (volume != null)
                {
                    foreach (var item in volume.Children.OfType <ResourceFolder>())
                    {
                        answer.Tree.Add(DTOBase.Create(item, fullPath.Root));
                    }
                }
            }
            else
            {
                foreach (var item in ResourceManager.Instance.GetFolders(fullPath.Directory))
                {
                    answer.Tree.Add(DTOBase.Create(item, fullPath.Root));
                }
            }
            return(Json(answer));
        }
Exemple #10
0
 /// <summary> </summary>
 public AddResponse(DirectoryInfo newDir, Root root)
 {
     _added = new List <DTOBase>()
     {
         DTOBase.Create(newDir, root)
     };
 }
        /// <summary> </summary>
        JsonResult IDriver.Extract(string target, IEnumerable <string> targets)
        {
            FullPath dest     = ParsePath(target);
            var      response = new AddResponse();

            //this should move all files to a temp folder
            //then extract then there
            //then count them and get a list of the names
            //move them all in mass to the target folder
            //then respond with the file info


            foreach (var item in targets)
            {
                FullPath fullPath = ParsePath(item);

                FileInfo fileinfo = new FileInfo(fullPath.File.Name);


                DirectoryInfo newDir = Directory.CreateDirectory(file_info.site_cache_path() + "/temp/");
                file_handler.Decompress(fileinfo);


                response.added.Add((FileDTO)DTOBase.Create(fileinfo, dest.Root));
            }

            return(Json(response));
        }
Exemple #12
0
        JsonResult IDriver.Open(string target, bool tree)
        {
            WebDavRoot lroot = this.GetRoot(target);

            target = this.GetCorectTarget(target);

            target = this.DecodeTarget(target, lroot.Directory.RelPath);
            List <DirInfo> filesFormWebFav = client.GetDirectories(target, true);
            List <DirInfo> directories     = filesFormWebFav.FindAll(d => d.IsDirectory);
            DirInfo        targetDirInfo   = directories[0];
            DirInfo        parentDirInfo   = this.GetParent(targetDirInfo);

            targetDirInfo.HasSubDirectories = filesFormWebFav != null && directories != null && directories.Count > 1;

            OpenResponseBase answer = new OpenResponseBase(DTOBase.Create(targetDirInfo, parentDirInfo, lroot));

            if (filesFormWebFav != null)
            {
                filesFormWebFav.Remove(targetDirInfo);
                foreach (DirInfo dirInfo in filesFormWebFav)
                {
                    dirInfo.HasSubDirectories = IsConstainsChild(dirInfo);
                    answer.Files.Add(DTOBase.Create(dirInfo, targetDirInfo, lroot));
                }
            }
            //HttpContext.Current.Session[RetTarget] = answer.CurrentWorkingDirectory.Hash;
            return(Json(answer));
        }
Exemple #13
0
        JsonResult IDriver.Filter(string target, string query)
        {
            WebDavRoot lroot = this.GetRoot(target);

            target = this.GetCorectTarget(target);

            target = this.DecodeTarget(target, lroot.Directory.RelPath);
            List <DirInfo> filesFormWebFav = client.GetDirectories(target, true);
            List <DirInfo> directories     = filesFormWebFav.FindAll(d => d.IsDirectory);
            DirInfo        targetDirInfo   = directories[0];
            DirInfo        parentDirInfo   = this.GetParent(targetDirInfo);

            targetDirInfo.HasSubDirectories = filesFormWebFav != null && directories != null && directories.Count > 1;

            OpenResponseBase answer = new OpenResponseBase(DTOBase.Create(targetDirInfo, parentDirInfo, lroot));

            if (filesFormWebFav != null)
            {
                filesFormWebFav.Remove(targetDirInfo);
                foreach (DirInfo dirInfo in filesFormWebFav)
                {
                    if (!Filter(dirInfo, query))
                    {
                        continue;
                    }

                    answer.Files.Add(DTOBase.Create(dirInfo, targetDirInfo, lroot));
                }
            }
            var r = Json(answer);

            return(r);
        }
        JsonResult IDriver.Duplicate(IEnumerable <string> targets)
        {
            AddResponse response = new AddResponse();

            foreach (var target in targets)
            {
                FullPath fullPath = ParsePath(target);
                if (fullPath.Directory != null)
                {
                    var parentPath = fullPath.Directory.Parent.FullName;
                    var name       = fullPath.Directory.Name;
                    var newName    = string.Format(@"{0}\{1} copy", parentPath, name);
                    if (!Directory.Exists(newName))
                    {
                        DirectoryCopy(fullPath.Directory, newName, true);
                    }
                    else
                    {
                        for (int i = 1; i < 100; i++)
                        {
                            newName = string.Format(@"{0}\{1} copy {2}", parentPath, name, i);
                            if (!Directory.Exists(newName))
                            {
                                DirectoryCopy(fullPath.Directory, newName, true);
                                break;
                            }
                        }
                    }
                    response.Added.Add(DTOBase.Create(new DirectoryInfo(newName), fullPath.Root));
                }
                else
                {
                    var parentPath = fullPath.File.Directory.FullName;
                    var name       = fullPath.File.Name.Substring(0, fullPath.File.Name.Length - fullPath.File.Extension.Length);
                    var ext        = fullPath.File.Extension;

                    var newName = string.Format(@"{0}\{1} copy{2}", parentPath, name, ext);

                    if (!File.Exists(newName))
                    {
                        fullPath.File.CopyTo(newName);
                    }
                    else
                    {
                        for (int i = 1; i < 100; i++)
                        {
                            newName = string.Format(@"{0}\{1} copy {2}{3}", parentPath, name, i, ext);
                            if (!File.Exists(newName))
                            {
                                fullPath.File.CopyTo(newName);
                                break;
                            }
                        }
                    }
                    response.Added.Add(DTOBase.Create(new FileInfo(newName), fullPath.Root));
                }
            }
            return(Json(response));
        }
        /// <summary> </summary>
        JsonResult IDriver.retrive_object(string target)
        {
            FullPath     fullPath = ParsePath(target);
            OpenResponse answer   = new OpenResponse(DTOBase.Create(fullPath.File.Directory, fullPath.Root), fullPath);

            answer.AddResponse(DTOBase.Create(fullPath.File, fullPath.Root));
            return(Json(answer));
        }
        JsonResult IDriver.Rotate(string target, int degree)
        {
            FullPath path = ParsePath(target);

            path.Root.PicturesEditor.Rotate(path.File.FullName, degree);
            var output = new ChangedResponse();

            output.Changed.Add((FileDTO)DTOBase.Create(path.File, path.Root));
            return(Json(output));
        }
        JsonResult IDriver.Crop(string target, int x, int y, int width, int height)
        {
            var path = ParsePath(target);

            path.Root.PicturesEditor.Crop(path.File.FullName, x, y, width, height);
            var output = new ChangedResponse();

            output.Changed.Add((FileDTO)DTOBase.Create(path.File, path.Root));
            return(Json(output));
        }
        public JsonResult Upload(string target, string name, byte[] fileBytes)
        {
            FullPath dest     = ParsePath(target);
            var      response = new AddResponse();

            if (dest.Root.MaxUploadSize.HasValue)
            {
                if (fileBytes.Length > dest.Root.MaxUploadSize.Value)
                {
                    return(Error.MaxUploadFileSize());
                }
            }

            FileInfo path = new FileInfo(Path.Combine(dest.Directory.FullName, name));

            if (path.Exists)
            {
                if (dest.Root.UploadOverwrite)
                {
                    //if file already exist we rename the current file,
                    //and if upload is succesfully delete temp file, in otherwise we restore old file
                    string tmpPath  = path.FullName + Guid.NewGuid();
                    bool   uploaded = false;
                    try
                    {
                        File.WriteAllBytes(tmpPath, fileBytes);
                        uploaded = true;
                    }
                    catch { }
                    finally
                    {
                        if (uploaded)
                        {
                            File.Delete(path.FullName);
                            File.Move(tmpPath, path.FullName);
                        }
                        else
                        {
                            File.Delete(tmpPath);
                        }
                    }
                }
                else
                {
                    File.WriteAllBytes(Path.Combine(path.DirectoryName, Helper.GetDuplicatedName(path)), fileBytes);
                }
            }
            else
            {
                File.WriteAllBytes(path.FullName, fileBytes);
            }
            response.Added.Add((FileDTO)DTOBase.Create(new FileInfo(path.FullName), dest.Root));

            return(Json(response));
        }
        JsonResult IDriver.Resize(string target, int width, int height)
        {
            FullPath path = ParsePath(target);

            RemoveThumbs(path);
            path.Root.PicturesEditor.Resize(path.File.FullName, width, height);
            var output = new ChangedResponse();

            output.Changed.Add((FileDTO)DTOBase.Create(path.File, path.Root));
            return(Json(output));
        }
        /// <summary> </summary>
        JsonResult IDriver.Put(string target, string content)
        {
            FullPath    fullPath = ParsePath(target);
            PutResponse answer   = new PutResponse();

            using (StreamWriter writer = new StreamWriter(fullPath.File.FullName, false)) {
                writer.Write(content);
            }
            answer.changed.Add((FileDTO)DTOBase.Create(fullPath.File, fullPath.Root));
            return(Json(answer));
        }
        JsonResult IDriver.Tree(string target)
        {
            FullPath     fullPath = ParsePath(target);
            TreeResponse answer   = new TreeResponse();

            foreach (var item in fullPath.Directory.GetDirectories())
            {
                answer.Tree.Add(DTOBase.Create(item, fullPath.Root));
            }
            return(Json(answer));
        }
        JsonResult IDriver.Init(string target)
        {
            FullPath fullPath;

            if (string.IsNullOrEmpty(target))
            {
                Root root = _roots.FirstOrDefault(r => r.StartPath != null);
                if (root == null)
                {
                    root = _roots.First();
                }
                fullPath = new FullPath(root, root.StartPath ?? root.Directory);
            }
            else
            {
                fullPath = ParsePath(target);
            }
            InitResponse answer = new InitResponse(DTOBase.Create(fullPath.Directory, fullPath.Root), new Options(fullPath));

            foreach (FileInfo item in fullPath.Directory.GetFiles())
            {
                if ((item.Attributes & FileAttributes.Hidden) != FileAttributes.Hidden)
                {
                    answer.Files.Add(DTOBase.Create(item, fullPath.Root));
                }
            }
            foreach (DirectoryInfo item in fullPath.Directory.GetDirectories())
            {
                if ((item.Attributes & FileAttributes.Hidden) != FileAttributes.Hidden)
                {
                    answer.Files.Add(DTOBase.Create(item, fullPath.Root));
                }
            }
            foreach (Root item in _roots)
            {
                answer.Files.Add(DTOBase.Create(item.Directory, item));
            }
            if (fullPath.Root.Directory.FullName != fullPath.Directory.FullName)
            {
                foreach (DirectoryInfo item in fullPath.Root.Directory.GetDirectories())
                {
                    if ((item.Attributes & FileAttributes.Hidden) != FileAttributes.Hidden)
                    {
                        answer.Files.Add(DTOBase.Create(item, fullPath.Root));
                    }
                }
            }
            if (fullPath.Root.MaxUploadSize.HasValue)
            {
                answer.UploadMaxSize = fullPath.Root.MaxUploadSizeInKb.Value + "K";
            }
            return(Json(answer));
        }
        JsonResult IDriver.Put(string target, string content)
        {
            var fullPath = ParsePath(target);
            var answer   = new ChangedResponse();

            using (var blob = BlobFactory.GetBlobStorage(fullPath.File.ResourceId, BlobFactory.Container.Resources)) {
                blob.Content = Encoding.ASCII.GetBytes(content);
                blob.Save();
            }
            answer.Changed.Add((FileDTO)DTOBase.Create(fullPath.File, fullPath.Root));
            return(Json(answer));
        }
Exemple #24
0
        JsonResult IDriver.Duplicate(IEnumerable <string> targets)
        {
            AddResponse response = new AddResponse();

            foreach (string target in targets)
            {
                WebDavRoot lroot = this.GetRoot(target);
                string     ext = "", path = "", nameWithoutExt = "";
                string     targetDecrypted = this.DecodeTarget(this.GetCorectTarget(target));
                DirInfo    targetInfo      = client.GetInfo(targetDecrypted);
                if (targetInfo == null)
                {
                    throw new ElFinderFileNotExists();
                }
                string destinationFileName;
                if (targetInfo.IsDirectory && targetDecrypted.EndsWith("/"))
                {
                    destinationFileName = targetDecrypted.Substring(0, targetDecrypted.Length - 1) + " (1)";
                }
                else
                {
                    path                = targetDecrypted.Replace(targetInfo.DisplayName, "");
                    ext                 = Path.GetExtension(targetInfo.DisplayName);
                    nameWithoutExt      = targetInfo.DisplayName.Replace(ext, "");
                    destinationFileName = string.Format("{0}{1} (1){2}", path, nameWithoutExt, ext);
                }

                DirInfo destInfo = client.GetInfo(destinationFileName);
                int     i        = 2;
                while (destInfo != null)
                {
                    if (targetInfo.IsDirectory && targetDecrypted.EndsWith("/"))
                    {
                        destinationFileName = string.Format("{0} ({1})", targetDecrypted.Substring(0, targetDecrypted.Length - 1), i);
                    }
                    else
                    {
                        destinationFileName = string.Format("{0}{1} ({3}){2}", path, nameWithoutExt, ext, i);
                    }

                    destInfo = client.GetInfo(destinationFileName);
                    i++;
                }

                client.Copy(targetDecrypted, destinationFileName);
                destInfo = client.GetInfo(destinationFileName);
                DirInfo parent = this.GetParent(destInfo);
                response.Added.Add(DTOBase.Create(destInfo, parent, lroot));
            }

            return(Json(response));
        }
Exemple #25
0
        public JsonResult Tree(string target)
        {
            FullPath     fullPath = ParsePath(target);
            TreeResponse answer   = new TreeResponse();

            foreach (var item in fullPath.Directory.GetDirectories())
            {
                if ((item.Attributes & FileAttributes.Hidden) != FileAttributes.Hidden)
                {
                    answer.Tree.Add(DTOBase.Create(item, fullPath.Root));
                }
            }
            return(Json(answer));
        }
        JsonResult IDriver.Init(string target)
        {
            FullPath fullPath;

            if (string.IsNullOrEmpty(target))
            {
                var root = _roots.FirstOrDefault(r => r.StartPath != null);
                if (root == null)
                {
                    root = _roots.First();
                }
                fullPath = new FullPath(root, root.Directory);
            }
            else
            {
                fullPath = ParsePath(target);
            }
            var answer = new InitResponse(DTOBase.Create(fullPath.Directory, fullPath.Root), new Options(fullPath));

            foreach (var item in _roots)
            {
                answer.Files.Add(DTOBase.Create(item.Directory, item));
            }
            if (fullPath.Root.Directory.FullName != fullPath.Directory.FullName)
            {
                foreach (var item in ResourceManager.Instance.GetFiles(fullPath.Directory).Where(item => item.CanRead()))
                {
                    answer.Files.Add(DTOBase.Create(item, fullPath.Root));
                }
            }
            else
            {
                foreach (var item in ResourceManager.Instance.GetFiles(fullPath.Directory).Where(item => item.CanRead()))
                {
                    fullPath.Root.Directory = fullPath.Directory;
                    answer.Files.Add(DTOBase.Create(item, fullPath.Root));
                }
            }
            foreach (var item in ResourceManager.Instance.GetFolders(fullPath.Directory).Where(item => item.CanRead()))
            {
                //sfullPath.Root.Directory = fullPath.Directory;
                answer.Files.Add(DTOBase.Create(item, fullPath.Root));
            }

            if (fullPath.Root.MaxUploadSize.HasValue)
            {
                answer.UploadMaxSize = fullPath.Root.MaxUploadSizeInKb.Value + "K";
            }
            return(Json(answer));
        }
        JsonResult IDriver.Paste(string source, string dest, IEnumerable <string> targets, bool isCut)
        {
            FullPath        destPath = ParsePath(dest);
            ReplaceResponse response = new ReplaceResponse();

            foreach (var item in targets)
            {
                FullPath src = ParsePath(item);
                if (src.Directory != null)
                {
                    DirectoryInfo newDir = new DirectoryInfo(Path.Combine(destPath.Directory.FullName, src.Directory.Name));
                    if (newDir.Exists)
                    {
                        Directory.Delete(newDir.FullName, true);
                    }
                    if (isCut)
                    {
                        RemoveThumbs(src);
                        src.Directory.MoveTo(newDir.FullName);
                        response.Removed.Add(item);
                    }
                    else
                    {
                        DirectoryCopy(src.Directory, newDir.FullName, true);
                    }
                    response.Added.Add(DTOBase.Create(newDir, destPath.Root));
                }
                else
                {
                    string newFilePath = Path.Combine(destPath.Directory.FullName, src.File.Name);
                    if (File.Exists(newFilePath))
                    {
                        File.Delete(newFilePath);
                    }
                    if (isCut)
                    {
                        RemoveThumbs(src);
                        src.File.MoveTo(newFilePath);
                        response.Removed.Add(item);
                    }
                    else
                    {
                        File.Copy(src.File.FullName, newFilePath);
                    }
                    response.Added.Add(DTOBase.Create(new FileInfo(newFilePath), destPath.Root));
                }
            }
            return(Json(response));
        }
        JsonResult IDriver.Init(string target)
        {
            Root          root;
            DirectoryInfo dir;

            if (string.IsNullOrEmpty(target))
            {
                root = _roots.FirstOrDefault(r => r.StartPath != null);
                if (root == null)
                {
                    root = _roots.First();
                }
                dir = root.StartPath == null ? root.Directory : root.StartPath;
            }
            else
            {
                FullPath fullPath = ParsePath(target);
                root = fullPath.Root;
                dir  = fullPath.Directory;
            }
            InitResponse answer = new InitResponse(DTOBase.Create(dir, root));


            foreach (var item in dir.GetFiles())
            {
                answer.AddResponse(DTOBase.Create(item, root));
            }
            foreach (var item in dir.GetDirectories())
            {
                answer.AddResponse(DTOBase.Create(item, root));
            }
            foreach (var item in _roots)
            {
                answer.AddResponse(DTOBase.Create(item.Directory, item));
            }
            if (root.Directory.FullName != dir.FullName)
            {
                foreach (var item in root.Directory.GetDirectories())
                {
                    answer.AddResponse(DTOBase.Create(item, root));
                }
            }
            string parentPath = string.IsNullOrEmpty(target) ? root.Alias : root.Alias + dir.FullName.Substring(root.Directory.FullName.Length).Replace('\\', '/');

            answer.Options.Path          = parentPath;
            answer.Options.Url           = root.Url;
            answer.Options.ThumbnailsUrl = root.TmbUrl;
            return(Json(answer));
        }
        JsonResult IDriver.Open(string target, bool tree)
        {
            FullPath     fullPath = ParsePath(target);
            OpenResponse answer   = new OpenResponse(DTOBase.Create(fullPath.Directory, fullPath.Root), fullPath);

            foreach (var item in fullPath.Directory.GetFiles())
            {
                answer.AddResponse(DTOBase.Create(item, fullPath.Root));
            }
            foreach (var item in fullPath.Directory.GetDirectories())
            {
                answer.AddResponse(DTOBase.Create(item, fullPath.Root));
            }
            return(Json(answer));
        }
Exemple #30
0
        JsonResult IDriver.Rotate(string target, int degree)
        {
            WebDavRoot lroot = this.GetRoot(target);

            target = this.GetCorectTarget(target);
            string decodedTarget = this.DecodeTarget(target);
            WebDavPicturesEditor pictureEditor = new WebDav.WebDavPicturesEditor(client);

            pictureEditor.Rotate(decodedTarget, degree);
            DirInfo         targetInfo = client.GetInfo(decodedTarget);
            DirInfo         parentInfo = this.GetParent(targetInfo);
            ChangedResponse response   = new ChangedResponse();

            response.Changed.Add((FileDTO)DTOBase.Create(targetInfo, parentInfo, lroot));
            return(Json(response));
        }