Skip to content

Commit

Permalink
Fix #8723.
Browse files Browse the repository at this point in the history
Former-commit-id: 6c599d401290c4a78a7fe3531096a0ed5ca0a74d
  • Loading branch information
dkocher committed Apr 2, 2015
1 parent 386b13e commit e018f03
Showing 1 changed file with 55 additions and 57 deletions.
112 changes: 55 additions & 57 deletions source/ch/cyberduck/core/worker/AbstractTransferWorker.java
Expand Up @@ -350,74 +350,72 @@ public void transfer(final TransferItem item, final TransferPathFilter filter) t
// Only transfer if accepted by filter and stored in table with transfer status
if(table.containsKey(item.remote)) {
final TransferStatus status = table.get(item.remote);
if(status.isSegmented()) {
// Handle submit of all segments
final List<TransferStatus> segments = status.getSegments();
for(final TransferStatus segment : segments) {
this.submit(new TransferCallable() {
@Override
public TransferStatus call() throws BackgroundException {
// Transfer
final Session<?> session = borrow();
// Handle submit of one or more segments
final List<TransferStatus> segments = status.getSegments();
for(final TransferStatus segment : segments) {
this.submit(new TransferCallable() {
@Override
public TransferStatus call() throws BackgroundException {
// Transfer
final Session<?> session = borrow();
try {
try {
try {
AbstractTransferWorker.this.transfer.transfer(session,
segment.getRename().remote != null ? segment.getRename().remote : item.remote,
segment.getRename().local != null ? segment.getRename().local : item.local,
options, segment, connectionCallback, progressListener, streamListener);
transferItemCallback.complete(item);
AbstractTransferWorker.this.transfer.transfer(session,
segment.getRename().remote != null ? segment.getRename().remote : item.remote,
segment.getRename().local != null ? segment.getRename().local : item.local,
options, segment, connectionCallback, progressListener, streamListener);
transferItemCallback.complete(item);
}
catch(ConnectionCanceledException e) {
throw e;
}
catch(BackgroundException e) {
segment.setFailure();
if(isCanceled()) {
throw new ConnectionCanceledException(e);
}
if(diagnostics.determine(e) == FailureDiagnostics.Type.network) {
throw e;
}
catch(ConnectionCanceledException e) {
if(table.size() == 0) {
throw e;
}
catch(BackgroundException e) {
segment.setFailure();
if(isCanceled()) {
throw new ConnectionCanceledException(e);
}
if(diagnostics.determine(e) == FailureDiagnostics.Type.network) {
throw e;
}
if(table.size() == 0) {
throw e;
}
// Prompt to continue or abort for application errors
if(error.prompt(e)) {
// Continue
log.warn(String.format("Ignore transfer failure %s", e));
}
else {
throw new ConnectionCanceledException(e);
}
// Prompt to continue or abort for application errors
if(error.prompt(e)) {
// Continue
log.warn(String.format("Ignore transfer failure %s", e));
}
// Recursive
if(item.remote.isDirectory()) {
for(TransferItem f : cache.get(item)) {
// Recursive
transfer(f, filter);
}
cache.remove(item);
else {
throw new ConnectionCanceledException(e);
}
if(!segment.isFailure()) {
// Post process of file.
filter.complete(item.remote, item.local, options, segment, progressListener);
}
// Recursive
if(item.remote.isDirectory()) {
for(TransferItem f : cache.get(item)) {
// Recursive
transfer(f, filter);
}
return segment;
cache.remove(item);
}
finally {
release(session);
if(!segment.isFailure()) {
// Post process of file.
filter.complete(item.remote, item.local, options, segment, progressListener);
}
return segment;
}

@Override
public String toString() {
final StringBuilder sb = new StringBuilder("TransferCallable{");
sb.append("status=").append(segment);
sb.append('}');
return sb.toString();
finally {
release(session);
}
});
}
}

@Override
public String toString() {
final StringBuilder sb = new StringBuilder("TransferCallable{");
sb.append("status=").append(segment);
sb.append('}');
return sb.toString();
}
});
}
this.submit(new TransferCallable() {
@Override
Expand Down

0 comments on commit e018f03

Please sign in to comment.