Inheritance: AbstractFile, IRemoteDirectoryItem
Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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();
            }
        }
Exemplo n.º 4
0
        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;
        }
Exemplo n.º 5
0
        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;
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
 internal void RaiseReceivedFileDetails(RemoteFile file)
 {
     if (ReceivedFileDetails != null)
         ReceivedFileDetails(this, file);
 }