Search in sources :

Example 6 with LearningDataDao

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();
    }
}
Also used : AnyMemoDBOpenHelper(org.liberty.android.fantastischmemo.common.AnyMemoDBOpenHelper) Category(org.liberty.android.fantastischmemo.entity.Category) CategoryDao(org.liberty.android.fantastischmemo.dao.CategoryDao) LearningDataDao(org.liberty.android.fantastischmemo.dao.LearningDataDao) CardDao(org.liberty.android.fantastischmemo.dao.CardDao) Card(org.liberty.android.fantastischmemo.entity.Card)

Example 7 with LearningDataDao

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());
}
Also used : ArrayList(java.util.ArrayList) LearningDataDao(org.liberty.android.fantastischmemo.dao.LearningDataDao) LearningData(org.liberty.android.fantastischmemo.entity.LearningData) CardDao(org.liberty.android.fantastischmemo.dao.CardDao) Date(java.util.Date) Card(org.liberty.android.fantastischmemo.entity.Card) Test(org.junit.Test) SmallTest(android.support.test.filters.SmallTest) AbstractExistingDBTest(org.liberty.android.fantastischmemo.test.AbstractExistingDBTest) SmallTest(android.support.test.filters.SmallTest)

Example 8 with LearningDataDao

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;
}
Also used : CategoryDao(org.liberty.android.fantastischmemo.dao.CategoryDao) LearningDataDao(org.liberty.android.fantastischmemo.dao.LearningDataDao) Callable(java.util.concurrent.Callable) Card(org.liberty.android.fantastischmemo.entity.Card) AnyMemoDBOpenHelper(org.liberty.android.fantastischmemo.common.AnyMemoDBOpenHelper) LearningData(org.liberty.android.fantastischmemo.entity.LearningData) CardDao(org.liberty.android.fantastischmemo.dao.CardDao)

Example 9 with LearningDataDao

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);
            }
        }
    });
}
Also used : AnyMemoDBOpenHelper(org.liberty.android.fantastischmemo.common.AnyMemoDBOpenHelper) LearningDataDao(org.liberty.android.fantastischmemo.dao.LearningDataDao) CardDao(org.liberty.android.fantastischmemo.dao.CardDao) Callable(java.util.concurrent.Callable) Card(org.liberty.android.fantastischmemo.entity.Card)

Example 10 with LearningDataDao

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);
    }
}
Also used : AnyMemoDBOpenHelper(org.liberty.android.fantastischmemo.common.AnyMemoDBOpenHelper) LearningDataDao(org.liberty.android.fantastischmemo.dao.LearningDataDao) CardDao(org.liberty.android.fantastischmemo.dao.CardDao) Card(org.liberty.android.fantastischmemo.entity.Card)

Aggregations

CardDao (org.liberty.android.fantastischmemo.dao.CardDao)13 LearningDataDao (org.liberty.android.fantastischmemo.dao.LearningDataDao)13 Card (org.liberty.android.fantastischmemo.entity.Card)13 AnyMemoDBOpenHelper (org.liberty.android.fantastischmemo.common.AnyMemoDBOpenHelper)9 CategoryDao (org.liberty.android.fantastischmemo.dao.CategoryDao)8 LearningData (org.liberty.android.fantastischmemo.entity.LearningData)8 SmallTest (android.support.test.filters.SmallTest)5 Test (org.junit.Test)5 Category (org.liberty.android.fantastischmemo.entity.Category)5 AbstractExistingDBTest (org.liberty.android.fantastischmemo.test.AbstractExistingDBTest)5 Date (java.util.Date)4 BufferedWriter (java.io.BufferedWriter)2 FileWriter (java.io.FileWriter)2 PrintWriter (java.io.PrintWriter)2 Callable (java.util.concurrent.Callable)2 File (java.io.File)1 IOException (java.io.IOException)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 List (java.util.List)1