Changeset 9411 in josm for trunk/src/org


Ignore:
Timestamp:
2016-01-11T18:03:13+01:00 (9 years ago)
Author:
simon04
Message:

see #8824 - Allow to cancel download of style/preset list in preferences

Location:
trunk/src/org/openstreetmap/josm
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java

    r9334 r9411  
    13191319        private final String url;
    13201320        private final List<SourceProvider> sourceProviders;
    1321         private BufferedReader reader;
    1322         private boolean canceled;
     1321        private transient CachedFile cachedFile;
     1322        private transient boolean canceled;
    13231323        private final List<ExtendedSourceEntry> sources = new ArrayList<>();
    13241324
     
    13321332        protected void cancel() {
    13331333            canceled = true;
    1334             Utils.close(reader);
     1334            Utils.close(cachedFile);
    13351335        }
    13361336
     
    13561356        @Override
    13571357        protected void realRun() throws SAXException, IOException, OsmTransferException {
    1358             String lang = LanguageInfo.getLanguageCodeXML();
    13591358            try {
    13601359                sources.addAll(getDefault());
     
    13671366                    }
    13681367                }
    1369 
    1370                 InputStream stream = new CachedFile(url).getInputStream();
    1371                 reader = new BufferedReader(new InputStreamReader(stream, StandardCharsets.UTF_8));
     1368                readFile();
     1369            } catch (IOException e) {
     1370                if (canceled)
     1371                    // ignore the exception and return
     1372                    return;
     1373                OsmTransferException ex = new OsmTransferException(e);
     1374                ex.setUrl(url);
     1375                warn(ex);
     1376            }
     1377        }
     1378
     1379        protected void readFile() throws IOException {
     1380            final String lang = LanguageInfo.getLanguageCodeXML();
     1381            cachedFile = new CachedFile(url);
     1382            try (final BufferedReader reader = cachedFile.getContentReader()) {
    13721383
    13731384                String line;
     
    14341445                    }
    14351446                }
    1436             } catch (IOException e) {
    1437                 if (canceled)
    1438                     // ignore the exception and return
    1439                     return;
    1440                 OsmTransferException ex = new OsmTransferException(e);
    1441                 ex.setUrl(url);
    1442                 warn(ex);
    1443                 return;
    14441447            }
    14451448        }
  • trunk/src/org/openstreetmap/josm/io/CachedFile.java

    r9353 r9411  
    55
    66import java.io.BufferedInputStream;
     7import java.io.BufferedReader;
     8import java.io.Closeable;
    79import java.io.File;
    810import java.io.FileInputStream;
     
    4143 * you can also get the mirrored copy with {@link #getFile()}.
    4244 */
    43 public class CachedFile {
     45public class CachedFile implements Closeable {
    4446
    4547    /**
     
    6769    protected CachingStrategy cachingStrategy;
    6870
     71    private transient HttpClient activeConnection;
    6972    protected File cacheFile;
    7073    protected boolean initialized;
     
    197200        }
    198201        return new FileInputStream(file);
     202    }
     203
     204    /**
     205     * Returns {@link #getInputStream()} wrapped in a buffered reader.
     206     * <p/>
     207     * Detects Unicode charset in use utilizing {@link UTFInputStreamReader}.
     208     *
     209     * @return buffered reader
     210     * @throws IOException if any I/O error occurs
     211     * @since 9411
     212     */
     213    public BufferedReader getContentReader() throws IOException {
     214        return new BufferedReader(UTFInputStreamReader.create(getInputStream()));
    199215    }
    200216
     
    413429        destDirFile = new File(destDir, localPath + ".tmp");
    414430        try {
    415             final HttpClient.Response con = HttpClient.create(url)
     431            activeConnection = HttpClient.create(url)
    416432                    .setAccept(httpAccept)
    417433                    .setIfModifiedSince(ifModifiedSince == null ? 0L : ifModifiedSince)
    418                     .setHeaders(httpHeaders)
    419                     .connect();
     434                    .setHeaders(httpHeaders);
     435            final HttpClient.Response con = activeConnection.connect();
    420436            if (ifModifiedSince != null && con.getResponseCode() == HttpURLConnection.HTTP_NOT_MODIFIED) {
    421437                if (Main.isDebugEnabled()) {
     
    431447                Files.copy(bis, destDirFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
    432448            }
     449            activeConnection = null;
    433450            localFile = new File(destDir, localPath);
    434451            if (Main.platform.rename(destDirFile, localFile)) {
     
    456473    }
    457474
     475    /**
     476     * Attempts to disconnect an URL connection.
     477     * @see HttpClient#disconnect()
     478     * @since 9411
     479     */
     480    @Override
     481    public void close() {
     482        if (activeConnection != null) {
     483            activeConnection.disconnect();
     484        }
     485    }
    458486}
Note: See TracChangeset for help on using the changeset viewer.