package com.eveningoutpost.dexdrip.utils;
import android.content.Context;
import android.net.Uri;
import android.os.Environment;
import android.text.format.DateFormat;
import com.activeandroid.Configuration;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.channels.FileChannel;
import static com.eveningoutpost.dexdrip.utils.FileUtils.*;
/**
* Save the SQL database to file.
*/
public class DatabaseUtil {
public static String saveSql(Context context) {
try {
final String databaseName = new Configuration.Builder(context).create().getDatabaseName();
final String dir = getExternalDir();
makeSureDirectoryExists(dir);
final StringBuilder sb = new StringBuilder();
sb.append(dir);
sb.append("/export");
sb.append(DateFormat.format("yyyyMMdd-kkmmss", System.currentTimeMillis()));
sb.append(".sqlite");
final String filename = sb.toString();
final File sd = Environment.getExternalStorageDirectory();
if (sd.canWrite()) {
final File currentDB = context.getDatabasePath(databaseName);
final File backupDB = new File(filename);
if (currentDB.exists()) {
final FileInputStream srcStream = new FileInputStream(currentDB);
final FileChannel src = srcStream.getChannel();
final FileOutputStream destStream = new FileOutputStream(backupDB);
final FileChannel dst = destStream.getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
srcStream.close();
dst.close();
destStream.close();
}
}
return filename;
} catch (final Exception e) {
throw new RuntimeException(e);
}
}
public static void loadSql(Context context, Uri uri) {
try {
final String databaseName = new Configuration.Builder(context).create().getDatabaseName();
final File currentDB = context.getDatabasePath(databaseName);
final File replacement = new File(uri.getPath());
if (currentDB.canWrite()) {
final FileInputStream srcStream = new FileInputStream(replacement);
final FileChannel src = srcStream.getChannel();
final FileOutputStream destStream = new FileOutputStream(currentDB);
final FileChannel dst = destStream.getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
srcStream.close();
dst.close();
destStream.close();
} else {
throw new RuntimeException("Couldn't write to " + currentDB);
}
} catch (final Exception e) {
throw new RuntimeException(e);
}
}
}