public FsFolder(string fullPath, TreeId treeId, CloudFolderType cloudFolderType, FsFolder parent, ulong?size) { FullPath = fullPath; _treeId = treeId; Type = cloudFolderType; Parent = parent; Size = size; }
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); } }
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)); } }
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); }
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(); } }
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); }
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); }
public void ShouldCompareToNull() { FsFolder sut = null; Assert.That(sut == null, Is.True); }
public void ShouldCompareToNull() { FsFolder sut = null; Assert.True(sut == null); }
public override FsFolder Move(FsFolder destination) { Directory.Move(Path, destination); return(this); }
internal Child(FsFolder parent, T child) : base(parent, child) { }
protected FsChild(FsFolder parent, T child) { Parent = parent; Child = child; SubPath = child.Path.Substring(parent.Path.Length).Trim('\\', '/'); }
public DirNode(FsFolder<Name> dirInfo, DirNode parent, Dictionary<Name, FsFile<Name>> files) { _folderInfo = dirInfo; _parent = parent; _directories = new Dictionary<Name, DirNode>(); _files = files; }
public DirNode(Name name, DirNode parent) { _folderInfo = new FsFolder<Name>(name); _parent = parent; _directories = new Dictionary<Name, DirNode>(); _files = new Dictionary<Name, FsFile<Name>>(); }
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); }