package org.liberty.android.fantastischmemo.utils;
import android.content.Context;
import org.liberty.android.fantastischmemo.common.AMEnv;
import org.liberty.android.fantastischmemo.common.AnyMemoDBOpenHelper;
import org.liberty.android.fantastischmemo.common.AnyMemoDBOpenHelperManager;
import org.liberty.android.fantastischmemo.dao.CardDao;
import org.liberty.android.fantastischmemo.dao.CategoryDao;
import org.liberty.android.fantastischmemo.dao.LearningDataDao;
import org.liberty.android.fantastischmemo.dao.SettingDao;
import org.liberty.android.fantastischmemo.entity.Card;
import org.liberty.android.fantastischmemo.entity.Setting;
import org.liberty.android.fantastischmemo.modules.ForApplication;
import org.liberty.android.fantastischmemo.modules.PerApplication;
import java.io.File;
import java.util.List;
import java.util.concurrent.Callable;
import javax.inject.Inject;
@PerApplication
public class DatabaseUtil {
private Context mContext;
@Inject
public DatabaseUtil(@ForApplication Context context) {
mContext = context;
}
public Setting readDefaultSetting() {
String emptyDbPath = mContext.getApplicationContext().getFilesDir().getAbsolutePath() + "/" + AMEnv.EMPTY_DB_NAME;
AnyMemoDBOpenHelper helper = AnyMemoDBOpenHelperManager.getHelper(mContext, emptyDbPath);
try {
SettingDao settingDao = helper.getSettingDao();
return settingDao.queryForId(1);
} finally {
AnyMemoDBOpenHelperManager.releaseHelper(helper);
}
}
public void mergeDatabases(String destPath, String srcPath) throws Exception {
AnyMemoDBOpenHelper destHelper = AnyMemoDBOpenHelperManager.getHelper(mContext, destPath);
AnyMemoDBOpenHelper srcHelper = AnyMemoDBOpenHelperManager.getHelper(mContext, srcPath);
final CardDao cardDaoDest = destHelper.getCardDao();
final LearningDataDao learningDataDaoSrc= srcHelper.getLearningDataDao();
final CategoryDao categoryDaoSrc = srcHelper.getCategoryDao();
final CardDao cardDaoSrc = srcHelper.getCardDao();
final List<Card> srcCards = cardDaoSrc.queryForAll();
cardDaoSrc.callBatchTasks(
new Callable<Void>() {
public Void call() throws Exception {
for (Card c : srcCards) {
// Make sure to create a new ordinal
c.setOrdinal(null);
learningDataDaoSrc.refresh(c.getLearningData());
categoryDaoSrc.refresh(c.getCategory());
}
return null;
}
});
cardDaoDest.createCards(srcCards);
System.out.println("DatabaseUtils release destPath");
AnyMemoDBOpenHelperManager.releaseHelper(destHelper);
System.out.println("DatabaseUtils release srcPath");
AnyMemoDBOpenHelperManager.releaseHelper(srcHelper);
}
/*
* Check if the database is in the correct format
*/
public boolean checkDatabase(String dbPath) {
if (!(new File(dbPath)).exists()) {
return false;
}
AnyMemoDBOpenHelper helper = null;
try {
helper = AnyMemoDBOpenHelperManager.getHelper(mContext, dbPath);
helper.getCardDao().getTotalCount(null);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
if (helper != null) {
AnyMemoDBOpenHelperManager.releaseHelper(helper);
}
}
}
}