diff --git a/rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/internal/services/ssh/files/SftpFileService.java b/rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/internal/services/ssh/files/SftpFileService.java index 1ebcf061285..67e88c52015 100644 --- a/rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/internal/services/ssh/files/SftpFileService.java +++ b/rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/internal/services/ssh/files/SftpFileService.java @@ -43,6 +43,7 @@ import java.util.regex.Pattern; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.osgi.util.NLS; import com.jcraft.jsch.Channel; @@ -348,6 +349,15 @@ public class SftpFileService extends AbstractFileService implements IFileService return fChannelSftp; } + protected void progressTick(IProgressMonitor monitor, int ticks) throws RemoteFileCancelledException { + if (monitor!=null) { + if (monitor.isCanceled()) { + throw new RemoteFileCancelledException(); + } + monitor.worked(ticks); + } + } + public void disconnect() { //disconnect-service may be called after the session is already //disconnected (due to event handling). Therefore, don't try to @@ -457,8 +467,14 @@ public class SftpFileService extends AbstractFileService implements IFileService } List results = new ArrayList(); if (fDirChannelMutex.waitForLock(monitor, fDirChannelTimeout)) { + boolean haveSubMonitor = false; try { Vector vv=getChannel("SftpFileService.internalFetch: "+parentPath).ls(recodeSafe(parentPath)); //$NON-NLS-1$ + progressTick(monitor, 40); + if (vv.size()>1 && monitor!=null) { + monitor = new SubProgressMonitor(monitor, 40); + monitor.beginTask(null, vv.size()); + } for(int ii=0; ii