Ticket #9813: osm-ondisktile.diff
File osm-ondisktile.diff, 4.2 KB (added by , 11 years ago) |
---|
-
src/org/openstreetmap/gui/jmapviewer/OsmFileCacheTileLoader.java
300 300 if (fin != null) { 301 301 fin.close(); 302 302 tileFile.delete(); 303 pruneTileDirectory(tileFile); 303 304 } 304 305 } catch (Exception e1) { 305 306 } … … 381 382 } 382 383 383 384 protected File getTileFile() { 384 return new File(tileCacheDir + "/" + tile.getZoom() + " _" + tile.getXtile() + "_" + tile.getYtile() + "."385 return new File(tileCacheDir + "/" + tile.getZoom() + "/" + tile.getXtile() + "/" + tile.getYtile() + "." 385 386 + tile.getSource().getTileType()); 386 387 } 387 388 388 389 protected File getTagsFile() { 389 return new File(tileCacheDir + "/" + tile.getZoom() + " _" + tile.getXtile() + "_" + tile.getYtile()390 return new File(tileCacheDir + "/" + tile.getZoom() + "/" + tile.getXtile() + "/" + tile.getYtile() 390 391 + TAGS_FILE_EXT); 391 392 } 392 393 394 protected void prepareTileDirectory(File path) { 395 new File(path.getParent()).mkdirs(); 396 } 397 398 protected void pruneTileDirectory(File path) { 399 // Cleanup Y/X/Z in turn 400 File parent = path; 401 for (int i = 0; i < 3; ++i) { 402 parent = new File(parent.getParent()); 403 if (!parent.delete()) break; 404 } 405 } 406 393 407 protected void saveTileToFile(byte[] rawData) { 394 408 try { 395 FileOutputStream f = new FileOutputStream(tileCacheDir + "/" + tile.getZoom() + "_" + tile.getXtile() 396 + "_" + tile.getYtile() + "." + tile.getSource().getTileType()); 409 File file = new File(tileCacheDir + "/" + tile.getZoom() + "/" + tile.getXtile() 410 + "/" + tile.getYtile() + "." + tile.getSource().getTileType()); 411 prepareTileDirectory(file); 412 FileOutputStream f = new FileOutputStream(file); 397 413 f.write(rawData); 398 414 f.close(); 399 415 // System.out.println("Saved tile to file: " + tile); … … 404 420 405 421 protected void saveTagsToFile() { 406 422 File tagsFile = getTagsFile(); 423 prepareTileDirectory(tagsFile); 407 424 if (tile.getMetadata() == null) { 408 425 tagsFile.delete(); 426 pruneTileDirectory(tagsFile); 409 427 return; 410 428 } 411 429 try { … … 499 517 clearCache(source, null); 500 518 } 501 519 502 @Override 503 public void clearCache(TileSource source, TileClearController controller) { 504 File dir = getSourceCacheDir(source); 520 public void clearDirectory(TileClearController controller, File dir) throws IOException { 505 521 if (dir != null) { 506 if ( controller != null) controller.initClearDir(dir);507 if (dir.isDirectory()) {522 if (dir.isDirectory() && dir.getAbsolutePath().equals(dir.getCanonicalPath())) { 523 if (controller != null) controller.initClearDir(dir); 508 524 File[] files = dir.listFiles(); 509 525 if (controller != null) controller.initClearFiles(files); 510 526 for (File file : files) { 511 527 if (controller != null && controller.cancel()) return; 512 file.delete();528 clearDirectory(controller, file); 513 529 if (controller != null) controller.fileDeleted(file); 514 530 } 515 531 } 516 532 dir.delete(); 533 if (controller != null) controller.fileDeleted(dir); 517 534 } 518 if (controller != null) controller.clearFinished();519 535 } 536 537 @Override 538 public void clearCache(TileSource source, TileClearController controller) { 539 File dir = getSourceCacheDir(source); 540 try { 541 clearDirectory(controller, dir); 542 if (controller != null) controller.clearFinished(); 543 } catch(IOException i) { 544 } 545 } 520 546 }