use File.getParentFile() to get the tiles file path

This commit is contained in:
Philipp Schaefer 2014-01-03 17:46:35 +01:00
parent cfdaf17ee6
commit 0c4cb8479e
2 changed files with 8 additions and 19 deletions

View File

@ -39,25 +39,17 @@ public class IITC_TileManager {
String path = mIitc.getApplication().getFilesDir().toString() + "/" + hostId + filePath; String path = mIitc.getApplication().getFilesDir().toString() + "/" + hostId + filePath;
if (uri.getQuery() != null) path += uri.getQuery(); if (uri.getQuery() != null) path += uri.getQuery();
/*
* unfortunately, the filename is included in our path. since we may need to create directories,
* we need filename and filepath split.
*/
String[] split = path.split("/");
String fileName = split[split.length - 1];
path = path.replace(fileName, "");
// do the tile management // do the tile management
File file = new File(path, fileName); File file = new File(path);
if (file.exists()) { if (file.exists()) {
// asynchronously download tile if outdated, ignore date if not connected to wifi // asynchronously download tile if outdated, ignore date if not connected to wifi
if (mIitc.getWebView().isConnectedToWifi()) new DownloadTile(path, fileName).execute(url); if (mIitc.getWebView().isConnectedToWifi()) new DownloadTile(path).execute(url);
// return tile from storage // return tile from storage
InputStream in = new BufferedInputStream(new FileInputStream(file)); InputStream in = new BufferedInputStream(new FileInputStream(file));
return new WebResourceResponse(TYPE, ENCODING, in); return new WebResourceResponse(TYPE, ENCODING, in);
} else { } else {
// asynchronously download tile to cache and let webviewclient load the resource // asynchronously download tile to cache and let webviewclient load the resource
new DownloadTile(path, fileName).execute(url); new DownloadTile(path).execute(url);
return null; return null;
} }
} }

View File

@ -13,11 +13,9 @@ import java.net.URLConnection;
public class DownloadTile extends AsyncTask<String, Void, Boolean> { public class DownloadTile extends AsyncTask<String, Void, Boolean> {
private String mFilePath; private String mFilePath;
private String mFileName;
public DownloadTile(String path, String fileName) { public DownloadTile(String path) {
mFilePath = path; mFilePath = path;
mFileName = fileName;
} }
@ -28,13 +26,13 @@ public class DownloadTile extends AsyncTask<String, Void, Boolean> {
try { try {
tileUrl = new URL(urls[0]); tileUrl = new URL(urls[0]);
conn = tileUrl.openConnection(); conn = tileUrl.openConnection();
File file = new File(mFilePath, mFileName); File file = new File(mFilePath);
// update tile if needed, else return // update tile if needed, else return
if (conn.getLastModified() < file.lastModified()) return true; if (conn.getLastModified() < file.lastModified()) return true;
InputStream is = null; InputStream is = null;
is = conn.getInputStream(); is = conn.getInputStream();
Log.d("iitcm", "writing to file: " + file.toString()); Log.d("iitcm", "writing to file: " + file.toString());
writeTileToFile(is, file, mFilePath); writeTileToFile(is, file);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
return false; return false;
@ -45,9 +43,8 @@ public class DownloadTile extends AsyncTask<String, Void, Boolean> {
return true; return true;
} }
private void writeTileToFile(InputStream inStream, File file, String path) throws Exception { private void writeTileToFile(InputStream inStream, File file) throws Exception {
File filePath = new File(path); file.getParentFile().mkdirs();
filePath.mkdirs();
FileOutputStream outStream = new FileOutputStream(file); FileOutputStream outStream = new FileOutputStream(file);
int bufferSize = 1024; int bufferSize = 1024;
byte[] buffer = new byte[bufferSize]; byte[] buffer = new byte[bufferSize];