Ejemplo n.º 1
0
 public FsFolder(string fullPath, TreeId treeId, CloudFolderType cloudFolderType, FsFolder parent, ulong?size)
 {
     FullPath = fullPath;
     _treeId  = treeId;
     Type     = cloudFolderType;
     Parent   = parent;
     Size     = size;
 }
Ejemplo n.º 2
0
        public override void CopyToFolder(FsFolder destination)
        {
            var target = destination.CombineFolder(Name).Create();

            foreach (var folder in Folders)
            {
                var subFolder = folder.Path.Substring(Path.Length);
                target.CombineFolder(subFolder).Create();
            }

            foreach (var file in Files)
            {
                var subFile = file.Path.Substring(Path.Length);
                file.CopyToFolder(target.CombineFile(subFile).Parent);
            }
        }
Ejemplo n.º 3
0
        public override void Copy(FsFolder destination)
        {
            destination.Create();

            foreach (var subFolder in SearchFolders())
            {
                var subpath = subFolder.Path.Substring(Path.Length);
                destination.CombineFolder(subpath).Create();
            }

            foreach (var file in SearchFiles())
            {
                var subFile = file.Path.Substring(Path.Length);
                file.Copy(destination.CombineFile(subFile));
            }
        }
Ejemplo n.º 4
0
        public static YaR.MailRuCloud.Api.Base.Folder ToFolder(this FsFolder data)
        {
            var res = new Folder((long)data.Size, data.FullPath)
            {
                IsChildsLoaded = data.IsChildsLoaded
            };

            res.Files.AddRange(data.Items
                               .OfType <FsFile>()
                               .Select(f => f.ToFile())
                               .ToGroupedFiles());

            foreach (var it in data.Items.OfType <FsFolder>())
            {
                res.Folders.Add(it.ToFolder());
            }

            return(res);
        }
Ejemplo n.º 5
0
        public override void SyncStructure(FsFolder destination, bool force)
        {
            var folders     = Folders.ToList();
            var destFolders = destination.Folders.ToList();

            foreach (var subFolder in destFolders.Except(folders))
            {
                destination.CombineFolder(subFolder.SubPath).Remove();
            }

            foreach (var subFile in destination.Files.Except(Files))
            {
                destination.CombineFile(subFile.SubPath).Remove();
            }

            foreach (var folder in folders.Except(destFolders))
            {
                destination.CombineFolder(folder.SubPath).Create();
            }
        }
Ejemplo n.º 6
0
        private FsItem GetItem(ResponseBodyStream data, FsFolder folder)
        {
            FsItem item;
            TreeId treeId;

            int head = data.ReadIntSpl();

            if ((head & 4096) != 0)
            {
                byte[] nodeId = data.ReadNBytes(16);
            }
            string name = data.ReadNBytesAsString(data.ReadShort());

            data.ReadULong(); // dunno

            ulong?GetFolderSize() => (Options & Option.FolderSize) != 0
                ? (ulong?)data.ReadULong()
                : null;

            void ProcessDelete()
            {
                if ((Options & Option.Delete) != 0)
                {
                    data.ReadPu32();  // dunno
                    data.ReadPu32();  // dunno
                }
            }

            int opresult = head & 3;

            switch (opresult)
            {
            case 0:               // folder?
                treeId = data.ReadTreeId();
                data.ReadULong(); // dunno
                data.ReadULong(); // dunno
                ProcessDelete();

                item = new FsFolder(WebDavPath.Combine(folder.FullPath, name), treeId, CloudFolderType.MountPoint, folder, GetFolderSize());
                break;

            case 1:
                var    modifDate = data.ReadDate();
                ulong  size      = data.ReadULong();
                byte[] sha1      = data.ReadNBytes(20);

                //item = new FsFile(WebDavPath.Combine(folder.FullPath == string.Empty ? _fullPath : folder.FullPath, name), modifDate, sha1, size);
                item = new FsFile(WebDavPath.Combine(folder.FullPath, name), modifDate, sha1, size);
                break;

            case 2:
                data.ReadULong();     // dunno
                ProcessDelete();

                item = new FsFolder(WebDavPath.Combine(folder.FullPath, name), null, CloudFolderType.Generic, folder, GetFolderSize());
                break;

            case 3:
                data.ReadULong();     // dunno
                treeId = data.ReadTreeId();
                ProcessDelete();

                item = new FsFolder(WebDavPath.Combine(folder.FullPath, name), treeId, CloudFolderType.Shared, folder, GetFolderSize());
                break;

            default:
                throw new Exception("unknown opresult " + opresult);
            }

            return(item);
        }
Ejemplo n.º 7
0
        private FsItem Deserialize(ResponseBodyStream data, string fullPath)
        {
            fullPath = WebDavPath.Clean(fullPath);

            var      fakeRoot      = new FsFolder(WebDavPath.Parent(fullPath), null, CloudFolderType.Generic, null, null);
            FsFolder currentFolder = fakeRoot;
            FsFolder lastFolder    = null;
            int      lvl           = 0;

            var parseOp = (ParseOp)data.ReadShort();

            while (parseOp != ParseOp.Done)
            {
                switch (parseOp)
                {
                case ParseOp.ReadItem:
                    break;

                case ParseOp.Pin:
                    if (lastFolder != null)
                    {
                        currentFolder = lastFolder;
                        lvl++;
                        parseOp = (ParseOp)data.ReadShort();
                        continue;
                    }
                    else
                    {
                        throw new Exception("lastFolder = null");
                    }

                case ParseOp.PinUpper:
                    if (currentFolder == fakeRoot)
                    {
                        parseOp = (ParseOp)data.ReadShort();
                        continue;
                    }
                    else if (currentFolder.Parent != null)
                    {
                        currentFolder = currentFolder.Parent;
                        lvl--;
                        parseOp = (ParseOp)data.ReadShort();
                        if (currentFolder == null)
                        {
                            throw new Exception("No parent folder A");
                        }
                        continue;
                    }
                    else
                    {
                        throw new Exception("No parent folder B");
                    }

                case ParseOp.Unknown15:
                    long skip = data.ReadPu32();
                    for (long i = 0; i < skip; i++)
                    {
                        data.ReadPu32();
                        data.ReadPu32();
                    }
                    break;

                default:
                    throw new Exception("Unknown parse operation");
                }
                FsItem item = GetItem(data, currentFolder);
                currentFolder.Items.Add(item);

                if (item is FsFolder fsFolder)
                {
                    lastFolder = fsFolder;
                    fsFolder.IsChildsLoaded = lvl < Depth;
                }

                parseOp = (ParseOp)data.ReadShort();
            }

            var res = fakeRoot.Items[0];

            return(res);
        }
Ejemplo n.º 8
0
        public void ShouldCompareToNull()
        {
            FsFolder sut = null;

            Assert.That(sut == null, Is.True);
        }
Ejemplo n.º 9
0
        public void ShouldCompareToNull()
        {
            FsFolder sut = null;

            Assert.True(sut == null);
        }
Ejemplo n.º 10
0
 public override FsFolder Move(FsFolder destination)
 {
     Directory.Move(Path, destination);
     return(this);
 }
Ejemplo n.º 11
0
 internal Child(FsFolder parent, T child) : base(parent, child)
 {
 }
Ejemplo n.º 12
0
 protected FsChild(FsFolder parent, T child)
 {
     Parent  = parent;
     Child   = child;
     SubPath = child.Path.Substring(parent.Path.Length).Trim('\\', '/');
 }
Ejemplo n.º 13
0
 public DirNode(FsFolder<Name> dirInfo, DirNode parent, Dictionary<Name, FsFile<Name>> files)
 {
     _folderInfo = dirInfo;
     _parent = parent;
     _directories = new Dictionary<Name, DirNode>();
     _files = files;
 }
Ejemplo n.º 14
0
 public DirNode(Name name, DirNode parent)
 {
     _folderInfo = new FsFolder<Name>(name);
     _parent = parent;
     _directories = new Dictionary<Name, DirNode>();
     _files = new Dictionary<Name, FsFile<Name>>();
 }
Ejemplo n.º 15
0
        private FsItem Deserialize(ResponseBodyStream data, string fullPath)
        {
            var      fakeFolder    = new FsFolder(string.Empty, null, CloudFolderType.Generic, null, null);
            FsFolder currentFolder = fakeFolder;
            FsFolder lastFolder    = null;

            int itemStart = data.ReadShort();

            while (itemStart != 0)
            {
                switch (itemStart)
                {
                case 1:
                    break;

                case 2:
                    if (lastFolder != null)
                    {
                        currentFolder = lastFolder;
                        itemStart     = data.ReadShort();
                        continue;
                    }
                    else
                    {
                        throw new Exception("lastFolder = null");
                    }

                case 3:
                    if (currentFolder == fakeFolder)
                    {
                        itemStart = data.ReadShort();
                        continue;
                    }
                    else if (currentFolder.Parent != null)
                    {
                        currentFolder = currentFolder.Parent;
                        if (currentFolder == null)
                        {
                            throw new Exception("No parent folder");
                        }

                        continue;
                    }
                    else
                    {
                        throw new Exception("No parent folder");
                    }

                case 15:
                    var skip = data.ReadPu32();
                    for (int i = 0; i < skip; i++)
                    {
                        data.ReadPu32();
                        data.ReadPu32();
                    }
                    break;

                default:
                    throw new Exception("Unknown itemStart");
                }
                FsItem item = GetItem(data, currentFolder);
                currentFolder.Items.Add(item);

                if (item is FsFolder fsFolder)
                {
                    lastFolder = fsFolder;
                }

                itemStart = data.ReadShort();
            }

            var res = fakeFolder.Items[0];

            return(res);
        }