diff -r 19a7b798f73a -r 0f52c68efc70 project_files/Android-build/SDL-android-project/src/org/hedgewars/mobile/DownloadAsyncTask.java --- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/mobile/DownloadAsyncTask.java Thu Jul 14 15:59:29 2011 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,111 +0,0 @@ -package org.hedgewars.mobile; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.zip.ZipEntry; -import java.util.zip.ZipInputStream; - -import android.os.AsyncTask; -import android.util.Log; -/** - * This is an AsyncTask which will download a zip from an URL and unzip it to a specified path - * - * a typical call to start the task would be new DownloadAsyncTask().execute(getExternalStorage(), "www.hedgewars.org/data.zip"); - * @author Xeli - * - */ -public class DownloadAsyncTask extends AsyncTask { - - private DownloadService service; - private long lastUpdateMillis = 0; - - public DownloadAsyncTask(DownloadService _service){ - service = _service; - } - - /** - * - * @param params - 2 Strings, first is the path where the unzipped files will be stored, second is the URL to download from - */ - protected Long doInBackground(String... params) { - HttpURLConnection conn = null; - try { - String rootZipDest = params[0]; - - URL url = new URL(params[1]); - conn = (HttpURLConnection)url.openConnection(); - String contentType = conn.getContentType(); - - if(contentType == null || contentType.contains("zip")){ //Seeing as we provide the url if the contentType is unknown lets assume zips - ZipInputStream input = new ZipInputStream(conn.getInputStream()); - int bytesDecompressed = 0; - final int kbytesToProcess = conn.getContentLength()/1024; - - service.start(kbytesToProcess); - - ZipEntry entry = null; - while((entry = input.getNextEntry()) != null){ - String fileName = entry.getName(); - - if(isCancelled()) break; - else if(System.currentTimeMillis() - lastUpdateMillis > 1000){ - lastUpdateMillis = System.currentTimeMillis(); - publishProgress(bytesDecompressed, kbytesToProcess, fileName); - } - - bytesDecompressed += entry.getCompressedSize(); - - File f = new File(rootZipDest + fileName); - - if(entry.isDirectory()){ - f.mkdir(); - }else{ - if(f.exists()){ - f.delete(); - } - - try { - f.createNewFile(); - FileOutputStream out = new FileOutputStream(f); - - byte[] buffer = new byte[1024]; - int count = 0; - while((count = input.read(buffer)) != -1){ - out.write(buffer, 0, count); - } - out.flush(); - out.close(); - input.closeEntry(); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - input.close(); - }else{ - Log.e("bla", "contenttype = " + contentType); - } - } catch (IOException e) { - e.printStackTrace(); - }finally{ - if(conn != null) conn.disconnect(); - } - return null; - } - - //TODO propper result handling - protected void onPostExecute(Long result){ - service.done(true); - } - - protected void onProgressUpdate(Object...objects){ - service.update((Integer)objects[0], (Integer)objects[1], (String)objects[2]); - } - -}