/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import android.app.ProgressDialog; import android.content.Context; import android.os.AsyncTask; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.util.Log; import com.galaxy.meetup.client.android.content.EsAccount; import com.galaxy.meetup.client.android.content.EsAccountsData; import com.galaxy.meetup.client.android.content.EsProvider; /** * * @author sihai * */ public class DumpDatabase { private final Context mContext; private final Handler mHandler; private ProgressDialog mProgressDialog; private DumpDatabase(Context context, DatabaseAction databaseaction) { mHandler = new Handler() { public final void handleMessage(Message message) { int i = message.arg1; mProgressDialog.setProgress(i); } }; mContext = context; if(databaseaction == DatabaseAction.DUMP) { mProgressDialog = ProgressDialog.show(mContext, "Dump database", "Dumping ...", false, false, null); (new DumpTask()).execute(new Void[] { null }); } else if(databaseaction == DatabaseAction.CLEAN) { mProgressDialog = ProgressDialog.show(mContext, "Clean database", "Cleaning ...", false, false, null); (new CleanTask()).execute(new Void[] { null }); } } public static void cleanNow(Context context) { new DumpDatabase(context, DatabaseAction.CLEAN); } public static void dumpNow(Context context) { new DumpDatabase(context, DatabaseAction.DUMP); } final class CleanTask extends AsyncTask { private Void doInBackground() { String s; long l; EsAccount esaccount = EsAccountsData.getActiveAccount(mContext); int i = esaccount.getIndex(); s = (new StringBuilder("es")).append(i).append(".db").toString(); File file = mContext.getDatabasePath(s); File file2; if(file.exists() && file.isFile()) l = file.length(); else l = 0L; EsProvider.cleanupData(mContext, esaccount, true); file2 = mContext.getDatabasePath(s); Log.i("DumpDatabase", (new StringBuilder("Clean complete; orig size: ")).append(l).append(", copy size: ").append(file2.length()).toString()); mProgressDialog.dismiss(); return null; } protected final Object doInBackground(Object aobj[]) { return doInBackground(); } } private static enum DatabaseAction { DUMP, CLEAN; } final class DumpTask extends AsyncTask { private File doDump(String s, String s1) throws IOException { BufferedOutputStream bufferedoutputstream = null; BufferedInputStream bufferedinputstream = null; File file; File file1; bufferedoutputstream = null; bufferedinputstream = null; file = new File(Environment.getExternalStorageDirectory(), s1); if(file.exists()) file.delete(); file1 = mContext.getDatabasePath(s); BufferedOutputStream bufferedoutputstream1; BufferedInputStream bufferedinputstream1; try { file.createNewFile(); bufferedoutputstream = new BufferedOutputStream(new FileOutputStream(file)); bufferedinputstream = new BufferedInputStream(new FileInputStream(file1)); byte abyte0[] = new byte[16384]; do { int i = bufferedinputstream.read(abyte0); if(i <= 0) break; bufferedoutputstream.write(abyte0, 0, i); mTotalBytes = mTotalBytes + (long)i; Message message = mHandler.obtainMessage(); message.arg1 = (int)mTotalBytes; mHandler.sendMessage(message); } while(true); return file; } catch(IOException ioexception) { bufferedinputstream = null; bufferedoutputstream = null; return null; } finally { if(bufferedoutputstream != null) try { bufferedoutputstream.close(); } catch(IOException ioexception4) { } if(bufferedinputstream != null) try { bufferedinputstream.close(); } catch(IOException ioexception3) { } } } protected final Object doInBackground(Object aobj[]) { int i = 0; while(i < 4) { long l = mOriginalSize[i]; String s = mFromDbName[i]; String s1 = mToDbName[i]; if(l == 0L) { Log.w("DumpDatabase", (new StringBuilder("Could not find database: ")).append(s).toString()); } else { try { File file = doDump(s, s1); Log.i("DumpDatabase", (new StringBuilder("Dump complete; orig size: ")).append(l).append(", copy size: ").append(file.length()).toString()); } catch (IOException e) { // TODO } } i++; } mProgressDialog.dismiss(); return null; } protected final void onPreExecute() { int i = EsAccountsData.getActiveAccount(mContext).getIndex(); long l = 0L; mFromDbName[0] = (new StringBuilder("es")).append(i).append(".db").toString(); mFromDbName[1] = "picasa.db"; mFromDbName[2] = "iu.picasa.db"; mFromDbName[3] = "iu.upload.db"; mToDbName[0] = (new StringBuilder("es")).append(i).append("_dump.bin").toString(); mToDbName[1] = "picasa_dump.bin"; mToDbName[2] = "iu.picasa_dump.bin"; mToDbName[3] = "iu.upload_dump.bin"; for(int j = 0; j < 4; j++) { String s = mFromDbName[j]; File file = mContext.getDatabasePath(s); if(file.exists() && file.isFile()) { mOriginalSize[j] = file.length(); l += mOriginalSize[j]; } } mProgressDialog.setMax((int)l); } private String mFromDbName[] = new String[4]; private long mOriginalSize[] = new long[4]; private String mToDbName[] = new String[4]; private long mTotalBytes; } }