use of org.liberty.android.fantastischmemo.dao.LearningDataDao in project AnyMemo by helloworld1.
the class MnemosyneXMLImporterTest method verify.
@Override
protected void verify(String destFilePath) throws Exception {
AnyMemoDBOpenHelper helper = AnyMemoDBOpenHelperManager.getHelper(getContext(), destFilePath);
try {
CardDao cardDao = helper.getCardDao();
CategoryDao categoryDao = helper.getCategoryDao();
LearningDataDao learningDataDao = helper.getLearningDataDao();
List<Card> cards = cardDao.queryForAll();
List<Category> categories = categoryDao.queryForAll();
for (Card c : cards) {
categoryDao.refresh(c.getCategory());
learningDataDao.refresh(c.getLearningData());
}
assertEquals(11, cards.size());
assertEquals(2, categories.size());
assertEquals("q1", cards.get(0).getQuestion());
assertEquals("a1", cards.get(0).getAnswer());
assertEquals("<Standard>", cards.get(0).getCategory().getName());
assertEquals("q2", cards.get(1).getQuestion());
assertEquals("a2", cards.get(1).getAnswer());
assertEquals("<Standard>", cards.get(1).getCategory().getName());
assertEquals("q3", cards.get(2).getQuestion());
assertEquals("a3", cards.get(2).getAnswer());
assertEquals("<Standard>", cards.get(3).getCategory().getName());
assertNotNull(cards.get(3).getQuestion());
assertNotNull(cards.get(3).getAnswer());
assertEquals("<Standard>", cards.get(3).getCategory().getName());
} finally {
helper.close();
}
}
use of org.liberty.android.fantastischmemo.dao.LearningDataDao in project AnyMemo by helloworld1.
the class CardDaoTest method testGetCardsForReviewExclusionList.
@SmallTest
@Test
public void testGetCardsForReviewExclusionList() {
// Setup cards that is schedule for review
CardDao cardDao = helper.getCardDao();
Card c13 = cardDao.queryForId(13);
Card c14 = cardDao.queryForId(14);
Card c15 = cardDao.queryForId(15);
LearningDataDao learningDataDao = helper.getLearningDataDao();
Date testDate = new Date((new Date().getTime() - 1));
learningDataDao.refresh(c13.getLearningData());
LearningData c13Ld = c13.getLearningData();
c13Ld.setAcqReps(1);
c13Ld.setNextLearnDate(testDate);
c13Ld.setEasiness((float) 2.8);
learningDataDao.update(c13Ld);
learningDataDao.refresh(c14.getLearningData());
LearningData c14Ld = c14.getLearningData();
c14Ld.setAcqReps(1);
c14Ld.setNextLearnDate(testDate);
c14Ld.setEasiness((float) 2.6);
learningDataDao.update(c14Ld);
learningDataDao.refresh(c15.getLearningData());
LearningData c15Ld = c15.getLearningData();
c15Ld.setAcqReps(1);
c15Ld.setNextLearnDate(testDate);
c15Ld.setEasiness((float) 2.6);
learningDataDao.update(c15Ld);
// Create exclusion list
List<Card> exclusionList = new ArrayList<Card>();
exclusionList.add(c13);
exclusionList.add(c15);
List<Card> cards = cardDao.getCardsForReview(null, exclusionList, 50, ReviewOrdering.HardestFirst);
// Only card 14 is there
assertEquals(1, cards.size());
assertEquals(14, (int) cards.get(0).getId());
}
use of org.liberty.android.fantastischmemo.dao.LearningDataDao in project AnyMemo by helloworld1.
the class GoogleDriveUploadHelper method createSpreadsheet.
public Spreadsheet createSpreadsheet(String title, String dbPath) throws Exception {
// First read card because if it failed we don't even bother uploading.
AnyMemoDBOpenHelper helper = AnyMemoDBOpenHelperManager.getHelper(mContext, dbPath);
List<Card> cardList = null;
try {
final CardDao cardDao = helper.getCardDao();
final CategoryDao categoryDao = helper.getCategoryDao();
final LearningDataDao learningDataDao = helper.getLearningDataDao();
cardList = cardDao.callBatchTasks(new Callable<List<Card>>() {
public List<Card> call() throws Exception {
List<Card> cards = cardDao.queryForAll();
for (Card c : cards) {
categoryDao.refresh(c.getCategory());
learningDataDao.refresh(c.getLearningData());
}
return cards;
}
});
} finally {
AnyMemoDBOpenHelperManager.releaseHelper(helper);
}
// Find the spreadsheets to delete after the process is done
List<Document> spreadsheetsToDelete = DocumentFactory.findDocuments(title, authToken);
// Create the AnyMemo folder if needed
Folder folder = FolderFactory.createOrReturnFolder("AnyMemo", authToken);
// Create new spreadsheet
Document newSpreadsheetDocument = DocumentFactory.createSpreadsheet(title, authToken);
List<Spreadsheet> spreadsheetList = SpreadsheetFactory.getSpreadsheets(authToken);
Spreadsheet newSpreadsheet = spreadsheetList.get(0);
// Create worksheets
List<Worksheet> worksheetsToDelete = WorksheetFactory.getWorksheets(newSpreadsheet, authToken);
// Delete the worksheets with the duplicated name
// First create a dummy worksheet so we have at least one worksheet
boolean needsToCreateDummy = true;
for (Worksheet ws : worksheetsToDelete) {
if (ws.getTitle().equals("dummy")) {
needsToCreateDummy = false;
break;
}
}
// Dummy worksheet will be deleted at the last step
if (needsToCreateDummy) {
Worksheet dummyWorksheet = WorksheetFactory.createWorksheet(newSpreadsheet, "dummy", 1, 1, authToken);
worksheetsToDelete.add(dummyWorksheet);
}
Iterator<Worksheet> worksheetToDeleteIterator = worksheetsToDelete.iterator();
while (worksheetToDeleteIterator.hasNext()) {
Worksheet ws = worksheetToDeleteIterator.next();
if (ws.getTitle().equals("cards")) {
WorksheetFactory.deleteWorksheet(newSpreadsheet, ws, authToken);
worksheetToDeleteIterator.remove();
}
if (ws.getTitle().equals("learning_data")) {
WorksheetFactory.deleteWorksheet(newSpreadsheet, ws, authToken);
worksheetToDeleteIterator.remove();
}
}
// setting up the worksheet size is critical.
Worksheet cardsWorksheet = WorksheetFactory.createWorksheet(newSpreadsheet, "cards", cardList.size() + 1, 4, authToken);
Cells cardCells = new Cells();
// Add the header for cards first
cardCells.addCell(1, 1, "question");
cardCells.addCell(1, 2, "answer");
cardCells.addCell(1, 3, "category");
cardCells.addCell(1, 4, "note");
for (int i = 0; i < cardList.size(); i++) {
Card c = cardList.get(i);
// THe first row is the header.
cardCells.addCell(i + 2, 1, c.getQuestion());
cardCells.addCell(i + 2, 2, c.getAnswer());
cardCells.addCell(i + 2, 3, c.getCategory().getName());
cardCells.addCell(i + 2, 4, c.getNote());
}
// upload card's rows into worksheet
CellsFactory.uploadCells(newSpreadsheet, cardsWorksheet, cardCells, authToken);
// Let GC free up memory
cardCells = null;
// Now deal with learning data
Worksheet learningDataWorksheet = WorksheetFactory.createWorksheet(newSpreadsheet, "learning_data", cardList.size() + 1, 9, authToken);
Cells learningDataCells = new Cells();
// The first row is the header.
learningDataCells.addCell(1, 1, "acqReps");
learningDataCells.addCell(1, 2, "acqRepsSinceLapse");
learningDataCells.addCell(1, 3, "easiness");
learningDataCells.addCell(1, 4, "grade");
learningDataCells.addCell(1, 5, "lapses");
learningDataCells.addCell(1, 6, "lastLearnDate");
learningDataCells.addCell(1, 7, "nextLearnDate");
learningDataCells.addCell(1, 8, "retReps");
learningDataCells.addCell(1, 9, "retRepsSinceLapse");
for (int i = 0; i < cardList.size(); i++) {
LearningData ld = cardList.get(i).getLearningData();
learningDataCells.addCell(i + 2, 1, Integer.toString(ld.getAcqReps()));
learningDataCells.addCell(i + 2, 2, Integer.toString(ld.getAcqRepsSinceLapse()));
learningDataCells.addCell(i + 2, 3, Float.toString(ld.getEasiness()));
learningDataCells.addCell(i + 2, 4, Integer.toString(ld.getGrade()));
learningDataCells.addCell(i + 2, 5, Integer.toString(ld.getLapses()));
learningDataCells.addCell(i + 2, 6, ISO8601_FORMATTER.format(ld.getLastLearnDate()));
learningDataCells.addCell(i + 2, 7, ISO8601_FORMATTER.format(ld.getNextLearnDate()));
learningDataCells.addCell(i + 2, 8, Integer.toString(ld.getRetReps()));
learningDataCells.addCell(i + 2, 9, Integer.toString(ld.getRetRepsSinceLapse()));
}
// upload learning data rows into worksheet
CellsFactory.uploadCells(newSpreadsheet, learningDataWorksheet, learningDataCells, authToken);
learningDataCells = null;
// Put new spreadsheet into the folder
FolderFactory.addDocumentToFolder(newSpreadsheetDocument, folder, authToken);
// Finally delete the unneeded worksheets ...
for (Worksheet ws : worksheetsToDelete) {
WorksheetFactory.deleteWorksheet(newSpreadsheet, ws, authToken);
}
// ... And spreadsheets with duplicated names.
for (Document ss : spreadsheetsToDelete) {
DocumentFactory.deleteDocument(ss, authToken);
}
return null;
}
use of org.liberty.android.fantastischmemo.dao.LearningDataDao in project AnyMemo by helloworld1.
the class LearnQueueManager method flushDirtyCache.
private synchronized void flushDirtyCache() {
AnyMemoExecutor.submit(new Runnable() {
public void run() {
// Update the queue
final AnyMemoDBOpenHelper dbOpenHelper = AnyMemoDBOpenHelperManager.getHelper(context, dbPath);
final CardDao cardDao = dbOpenHelper.getCardDao();
final LearningDataDao learningDataDao = dbOpenHelper.getLearningDataDao();
try {
learningDataDao.callBatchTasks(new Callable<Void>() {
public Void call() throws Exception {
Log.i(TAG, "Flushing dirty cache. # of cards to flush: " + dirtyCache.size());
while (!dirtyCache.isEmpty()) {
Card card = dirtyCache.take();
Log.i(TAG, "Flushing card id: " + card.getId() + " with learning data: " + card.getLearningData());
if (learningDataDao.update(card.getLearningData()) == 0) {
Log.w(TAG, "LearningDataDao update failed for : " + card.getLearningData());
throw new RuntimeException("LearningDataDao update failed! LearningData to update: " + card.getLearningData() + " current value: " + learningDataDao.queryForId(card.getLearningData().getId()));
}
if (cardDao.update(card) == 0) {
Log.w(TAG, "CardDao update failed for : " + card.getLearningData());
throw new RuntimeException("CardDao update failed. Card to update: " + card);
}
}
Log.i(TAG, "Flushing dirty cache done.");
return null;
}
});
} finally {
AnyMemoDBOpenHelperManager.releaseHelper(dbOpenHelper);
}
}
});
}
use of org.liberty.android.fantastischmemo.dao.LearningDataDao in project AnyMemo by helloworld1.
the class LearnQueueManager method position.
private synchronized void position(int cardId) {
Iterator<Card> learnIterator = learnQueue.iterator();
Iterator<Card> reviewCacheIterator = reviewCache.iterator();
Iterator<Card> newCacheIterator = newCache.iterator();
int learnQueueRotateDistance = 0;
while (learnIterator.hasNext()) {
Card c = learnIterator.next();
if (c.getId() == cardId) {
int index = learnQueue.indexOf(c);
learnQueueRotateDistance = -index;
Log.i(TAG, "Rotate index: " + index);
}
}
Collections.rotate(learnQueue, learnQueueRotateDistance);
while (reviewCacheIterator.hasNext()) {
Card c = reviewCacheIterator.next();
if (c.getId() == cardId) {
reviewCacheIterator.remove();
}
}
while (newCacheIterator.hasNext()) {
Card c = newCacheIterator.next();
if (c.getId() == cardId) {
newCacheIterator.remove();
}
}
final AnyMemoDBOpenHelper dbOpenHelper = AnyMemoDBOpenHelperManager.getHelper(context, dbPath);
final CardDao cardDao = dbOpenHelper.getCardDao();
final LearningDataDao learningDataDao = dbOpenHelper.getLearningDataDao();
try {
Card headCard = null;
headCard = cardDao.queryForId(cardId);
learningDataDao.refresh(headCard.getLearningData());
learnQueue.add(0, headCard);
} finally {
AnyMemoDBOpenHelperManager.releaseHelper(dbOpenHelper);
}
}
Aggregations