Ticket #19920: 19920.patch
File 19920.patch, 2.6 KB (added by , 4 years ago) |
---|
-
src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java
327 327 jobs.add(ecs.submit(new Fetcher(type, extractIdPackage(toFetch), progressMonitor))); 328 328 } 329 329 // Run the fetchers 330 for (int i = 0; i < jobs.size() && !isCanceled() ; i++) {330 for (int i = 0; i < jobs.size() && !isCanceled() && !progressMonitor.isCanceled(); i++) { 331 331 progressMonitor.subTask(msg + "... " + progressMonitor.getTicks() + '/' + progressMonitor.getTicksCount()); 332 332 try { 333 333 FetchResult result = ecs.take().get(); … … 348 348 Logging.error(e); 349 349 } 350 350 } 351 if (progressMonitor.isCanceled() && !isCanceled()) 352 cancel(); 351 353 exec.shutdown(); 352 354 // Cancel requests if the user chose to 353 355 if (isCanceled()) { … … 441 443 */ 442 444 private void downloadRelations(ProgressMonitor progressMonitor) throws OsmTransferException { 443 445 Set<Long> toDownload = new LinkedHashSet<>(relations); 446 if (toDownload.isEmpty()) 447 return; 444 448 fetchPrimitives(toDownload, OsmPrimitiveType.RELATION, progressMonitor); 445 449 if (!recurseDownRelations) { 446 450 return; … … 450 454 if (!r.isVisible()) 451 455 toDownload.remove(r.getUniqueId()); 452 456 } 457 // remember downloaded relations 458 DataSet invisible = new DataSet(); 459 new DataSetMerger(invisible, outputDataSet).merge(); 460 // clear dataset so that merge() doesn't find the incomplete relation(s) 461 outputDataSet.clear(); 453 462 // fetch full info for all visible relations 454 463 for (long id : toDownload) { 455 464 if (isCanceled()) … … 458 467 DataSet ds = reader.parseOsm(progressMonitor.createSubTaskMonitor(1, false)); 459 468 merge(ds); 460 469 } 470 // merge possibly invisible relations back 471 new DataSetMerger(outputDataSet, invisible).merge(); 461 472 } 462 473 463 474 /** … … 585 596 Logging.info(tr("Server replied with response code 404, retrying with an individual request for each object.")); 586 597 return singleGetIdPackage(type, pkg, progressMonitor); 587 598 } 588 } else {589 throw e;590 599 } 600 throw e; 591 601 } 592 602 } 593 603