Exemplo n.º 1
0
  /*
   * Given a query string, actually do the query for the messages and
   * call the MessageRetrievalListener for each one
   */
  List<LocalMessage> getMessages(
      final MessageRetrievalListener<LocalMessage> listener,
      final LocalFolder folder,
      final String queryString,
      final String[] placeHolders)
      throws MessagingException {
    final List<LocalMessage> messages = new ArrayList<>();
    final int j =
        database.execute(
            false,
            new DbCallback<Integer>() {
              @Override
              public Integer doDbWork(final SQLiteDatabase db) throws WrappedException {
                Cursor cursor = null;
                int i = 0;
                try {
                  cursor = db.rawQuery(queryString + " LIMIT 10", placeHolders);

                  while (cursor.moveToNext()) {
                    LocalMessage message = new LocalMessage(LocalStore.this, null, folder);
                    message.populateFromGetMessageCursor(cursor);

                    messages.add(message);
                    if (listener != null) {
                      listener.messageFinished(message, i, -1);
                    }
                    i++;
                  }
                  cursor.close();
                  cursor = db.rawQuery(queryString + " LIMIT -1 OFFSET 10", placeHolders);

                  while (cursor.moveToNext()) {
                    LocalMessage message = new LocalMessage(LocalStore.this, null, folder);
                    message.populateFromGetMessageCursor(cursor);

                    messages.add(message);
                    if (listener != null) {
                      listener.messageFinished(message, i, -1);
                    }
                    i++;
                  }
                } catch (Exception e) {
                  Log.d(K9.LOG_TAG, "Got an exception", e);
                } finally {
                  Utility.closeQuietly(cursor);
                }
                return i;
              }
            });
    if (listener != null) {
      listener.messagesFinished(j);
    }

    return Collections.unmodifiableList(messages);
  }