internal void UpdateFromInfo(SharedDirectoryInfo info) { var newDirectories = new RemoteDirectory[info.Directories.Length]; for (int x = 0; x < info.Directories.Length; x++) { RemoteDirectory dir = (RemoteDirectory)GetSubdirectory(info.Directories[x]); if (dir == null) { dir = new RemoteDirectory(PathUtil.Join(m_FullPath, info.Directories[x])); } newDirectories[x] = dir; } var newFiles = new RemoteFile[info.Files.Length]; for (int x = 0; x < info.Files.Length; x++) { RemoteFile file = (RemoteFile)GetFile(info.Files[x].Name); if (file == null) { file = new RemoteFile(this, info.Files[x]); } else { file.UpdateFromInfo(info.Files[x]); } newFiles[x] = file; } m_SubDirectories = newDirectories; m_Files = newFiles; m_State = RemoteDirectoryState.ContentsReceived; }
internal RemoteFile CreateFile(SharedFileListing listing) { var file = new RemoteFile(this, listing); var newFiles = new RemoteFile[m_Files.Length + 1]; Array.Copy(m_Files, newFiles, m_Files.Length); newFiles[newFiles.Length - 1] = file; m_Files = newFiles; return(file); }
public void ProcessFileDetailsMessage(Network network, Node messageFrom, SharedFileListing info) { string fullPath = PathUtil.Join(messageFrom.Directory.FullPath, info.FullPath); var node = PathUtil.GetNode(fullPath); if (node != messageFrom) { throw new Exception("Directory was for a different node"); } bool created = false; RemoteFile remoteFile = GetOrCreateRemoteFile(fullPath, info, out created); if (!created) { remoteFile.UpdateFromInfo(info); } lock (remoteFileCallbacks) { if (remoteFileCallbacks.ContainsKey(fullPath)) { foreach (var callback in remoteFileCallbacks[fullPath]) { callback(remoteFile); } } remoteFileCallbacks.Remove(fullPath); } network.RaiseReceivedFileDetails(remoteFile); // FIXME: Get rid of all this, just listen for above network.ReceivedFileDetails event! var transfer = this.fileTransferManager.Transfers.SingleOrDefault(t => t.File == remoteFile); if (transfer != null && transfer.Status == FileTransferStatus.WaitingForInfo) { ((IFileTransferInternal)transfer).DetailsReceived(); } }
internal void UpdateFromInfo(SharedDirectoryInfo info) { var newDirectories = new RemoteDirectory[info.Directories.Length]; for (int x = 0; x < info.Directories.Length; x++) { RemoteDirectory dir = (RemoteDirectory) GetSubdirectory(info.Directories[x]); if (dir == null) dir = new RemoteDirectory(PathUtil.Join(m_FullPath, info.Directories[x])); newDirectories[x] = dir; } var newFiles = new RemoteFile[info.Files.Length]; for (int x = 0; x < info.Files.Length; x++) { RemoteFile file = (RemoteFile) GetFile(info.Files[x].Name); if (file == null) file = new RemoteFile(this, info.Files[x]); else file.UpdateFromInfo(info.Files[x]); newFiles[x] = file; } m_SubDirectories = newDirectories; m_Files = newFiles; m_State = RemoteDirectoryState.ContentsReceived; }
internal RemoteFile CreateFile(SharedFileListing listing) { var file = new RemoteFile(this, listing); var newFiles = new RemoteFile[m_Files.Length + 1]; Array.Copy(m_Files, newFiles, m_Files.Length); newFiles[newFiles.Length - 1] = file; m_Files = newFiles; return file; }
public IFileTransfer DownloadFile(Node node, RemoteFile file) { if (node == null) throw new ArgumentNullException("node"); if (file == null) throw new ArgumentNullException("file"); return Core.FileTransferManager.StartTransfer(this, node, file); }
internal void RaiseReceivedFileDetails(RemoteFile file) { if (ReceivedFileDetails != null) ReceivedFileDetails(this, file); }