private void update(FeedType feedType, UpdateType updateType) {
    ArticleDao articleDao = DbConnection.getSession().getArticleDao();
    SQLiteDatabase db = articleDao.getDatabase();

    db.beginTransaction();
    try {

      Integer latestID = null;
      if (feedType == FeedType.Main || feedType == FeedType.Archive) {
        WhereCondition cond =
            feedType == FeedType.Main
                ? ArticleDao.Properties.Archive.notEq(true)
                : ArticleDao.Properties.Archive.eq(true);
        List<Article> l =
            articleDao
                .queryBuilder()
                .where(cond)
                .orderDesc(ArticleDao.Properties.ArticleId)
                .limit(1)
                .list();

        if (!l.isEmpty()) {
          latestID = l.get(0).getArticleId();
        }
      }

      if (!updateByFeed(articleDao, feedType, updateType, latestID)) {
        return;
      }

      db.setTransactionSuccessful();
    } finally {
      db.endTransaction();
    }
  }
  private void updateAllFeeds() {
    Log.i(TAG, "updateAllFeeds() started");

    ArticleDao articleDao = DbConnection.getSession().getArticleDao();
    SQLiteDatabase db = articleDao.getDatabase();

    Log.d(TAG, "updateAllFeeds() beginning transaction");
    db.beginTransaction();
    try {
      Log.d(TAG, "updateAllFeeds() deleting old articles");
      articleDao.deleteAll();

      Log.d(TAG, "updateAllFeeds() updating Main feed");
      if (!updateByFeed(articleDao, FeedType.Main, UpdateType.Full, 0)) {
        Log.w(TAG, "updateAllFeeds() Main feed update failed; exiting");
        return;
      }

      Log.d(TAG, "updateAllFeeds() updating Archive feed");
      if (!updateByFeed(articleDao, FeedType.Archive, UpdateType.Full, 0)) {
        Log.w(TAG, "updateAllFeeds() Archive feed update failed; exiting");
        return;
      }

      Log.d(TAG, "updateAllFeeds() updating Favorite feed");
      if (!updateByFeed(articleDao, FeedType.Favorite, UpdateType.Fast, 0)) {
        Log.w(TAG, "updateAllFeeds() Favorite feed update failed; exiting");
        return;
      }

      Log.d(TAG, "updateAllFeeds() setting transaction successful");
      db.setTransactionSuccessful();
    } finally {
      Log.d(TAG, "updateAllFeeds() ending transaction");
      db.endTransaction();
    }

    Log.d(TAG, "updateAllFeeds() finished");
  }