Ejemplo n.º 1
0
        private void UpdateTreeNode(TreeNode node, SFTPFileInfo fileInfo)
        {
            NodeTag nodeTag = NodeTag.CreateForFileOrDirectory(fileInfo);

            node.SelectedImageIndex = node.ImageIndex = GetNodeImageIndex(nodeTag.Type);
            node.Tag         = nodeTag;
            node.ToolTipText = GetTooltipText(fileInfo);
        }
Ejemplo n.º 2
0
 private string GetTooltipText(SFTPFileInfo fileInfo)
 {
     return(new StringBuilder()
            .Append(UnixPermissions.Format(fileInfo.Permissions))
            .Append(' ')
            .Append(fileInfo.FileSize)
            .Append(' ')
            .Append(fileInfo.FileName)
            .ToString());
 }
Ejemplo n.º 3
0
        private TreeNode CreateFileOrDirectoryNode(SFTPFileInfo fileInfo)
        {
            NodeTag  nodeTag   = NodeTag.CreateForFileOrDirectory(fileInfo);
            int      iconIndex = GetNodeImageIndex(nodeTag.Type);
            TreeNode node      = new TreeNode(fileInfo.FileName, iconIndex, iconIndex);

            node.Name        = fileInfo.FileName; // TreeNodeCollection uses this as a key.
            node.Tag         = nodeTag;
            node.ToolTipText = GetTooltipText(fileInfo);
            return(node);
        }
Ejemplo n.º 4
0
        private void SFTPOpenDirectory_Core(string fullPath, bool expand)
        {
            Log("Retrieving directory entries...: " + fullPath);
            SFTPFileInfo[] entries = _sftp.GetDirectoryEntries(fullPath);

            for (int i = 0; i < entries.Length; i++)
            {
                SFTPFileInfo ent = entries[i];
                if (UnixPermissions.IsSymbolicLink(ent.Permissions))
                {
                    // If the symbolic link points a directory,
                    // replace the file information so as to open the node.
                    string             path = CombineUnixPath(fullPath, ent.FileName);
                    SFTPFileAttributes attr;
                    try {
                        attr = _sftp.GetFileInformations(path, false);
                    }
                    catch (SFTPClientException e) {
                        if (!IsSFTPError(e, SFTPStatusCode.SSH_FX_NO_SUCH_FILE))
                        {
                            throw;
                        }
                        // file missing or dead symbolic link ?
                        attr = null;
                    }
                    if (attr != null)
                    {
                        if (UnixPermissions.IsDirectory(attr.Permissions))
                        {
                            entries[i] = new SFTPFileInfo(ent.FileName, ent.LongName, attr);
                        }
                    }
                }
            }

            this.Invoke((MethodInvoker) delegate() {
                treeViewRemote.BeginUpdate();
                TreeNode dirNode = MakeDirectoryTree(fullPath, expand);
                UpdateTreeDirectoryEntries(dirNode, entries);
                dirNode.EnsureVisible();
                treeViewRemote.EndUpdate();
            });
            Log("...Done");
        }
Ejemplo n.º 5
0
            public static NodeTag CreateForFileOrDirectory(SFTPFileInfo fileInfo)
            {
                NodeType nodeType;
                string   prefix;

                if (UnixPermissions.IsDirectory(fileInfo.Permissions))
                {
                    nodeType = NodeType.Directory;
                    prefix   = "D:";
                }
                else if (UnixPermissions.IsSymbolicLink(fileInfo.Permissions))
                {
                    nodeType = NodeType.SymbolicLink;
                    prefix   = "F:";
                }
                else
                {
                    nodeType = NodeType.File;
                    prefix   = "F:";
                }
                return(new NodeTag(nodeType, prefix + fileInfo.FileName, fileInfo));
            }
Ejemplo n.º 6
0
 private NodeTag(NodeType nodeType, string sortKey, SFTPFileInfo fileInfo)
 {
     this.Type     = nodeType;
     this.SortKey  = sortKey;
     this.FileInfo = fileInfo;
 }