package com.vaguehope.onosendai.storage; import java.util.List; import java.util.Map; import java.util.Set; import android.database.Cursor; import android.support.v4.util.Pair; import com.vaguehope.onosendai.config.Column; import com.vaguehope.onosendai.model.Meta; import com.vaguehope.onosendai.model.MetaType; import com.vaguehope.onosendai.model.OutboxTweet; import com.vaguehope.onosendai.model.OutboxTweet.OutboxTweetStatus; import com.vaguehope.onosendai.model.ScrollState; import com.vaguehope.onosendai.model.Tweet; public interface DbInterface extends KvStore { void storeTweets(Column column, List<Tweet> tweets); void storeTweets(int columnId, List<Tweet> tweets); void appendToTweet(Tweet tweet, Meta meta); void deleteTweet(Column column, Tweet tweet); void deleteTweets(Column column); void updateTweetFiltered(List<Pair<Long, Boolean>> uidToFiltered); public enum Selection { ALL, FILTERED; } List<Tweet> getTweets(int columnId, int numberOf, Selection selection); List<Tweet> getTweets(int columnId, int numberOf, Selection selection, Set<Integer> excludeColumnIds); Cursor getTweetsCursor(int columnId, Selection selection); Cursor getTweetsCursor(int columnId, Selection selection, boolean withInlineMediaOnly); Cursor getTweetsCursor(int columnId, Selection selection, Set<Integer> excludeColumnIds, boolean withInlineMediaOnly); List<Tweet> getTweetsSinceTime (final int columnId, final long earliestTime, final int numberOf); List<Tweet> getTweetsWithSid (String sid); List<Tweet> findTweetsWithMeta (MetaType metaType, String data, final int numberOf); List<Tweet> findTweetsWithMeta (final int columnId, MetaType metaType, String data, final int numberOf); List<Tweet> findTweetsWithAvatarUrl (String avatarUrl, final int numberOf); List<Tweet> searchTweets(String searchTerm, List<Column> columns, int numberOf); Tweet getTweetDetails(int columnId, Tweet tweet); Tweet getTweetDetails(int columnId, String tweetSid); Tweet getTweetDetails(String tweetSid); Tweet getTweetDetails(long tweetUid); List<Meta> getTweetMetas(long tweetUid); List<Meta> getTweetMetasOfType(long tweetUid, MetaType metaType); List<String> getUsernames(String prefix, int numberOf); List<String> getHashtags(String prefix, int numberOf); int getUnreadCount(Column column); int getUnreadCount(int columnId, Set<Integer> excludeColumnIds, ScrollState scroll); int getScrollUpCount(int columnId, Selection selection, Set<Integer> excludeColumnIds, boolean withInlineMediaOnly, ScrollState scroll); void addTwUpdateListener (TwUpdateListener listener); void removeTwUpdateListener (TwUpdateListener listener); void storeScroll(int columnId, ScrollState state); void storeUnreadTime(int columnId, long unreadTime); void mergeAndStoreScrolls(Map<Column, ScrollState> colToSs, ScrollChangeType type); ScrollState getScroll(int columnId); void notifyTwListenersColumnState (final int columnId, final ColumnState state); /** * Returns column IDs of saves requested. */ Set<Integer> requestStoreScrollNow(); enum ColumnState { /** * Always called before and instead of UPDATE_RUNNING. */ NOT_STARTED, UPDATE_RUNNING, /** * Always once after each UPDATE_RUNNING event. */ UPDATE_OVER; } enum ScrollChangeType { UNREAD, UNREAD_AND_SCROLL } interface TwUpdateListener { void columnChanged(int columnId); void columnStatus(int columnId, ColumnState state); void unreadOrScrollChanged(int columnId, ScrollChangeType type); /** * returns columnId or null. */ Integer requestStoreScrollStateNow(); void scrollStored(int columnId); } long addPostToOutput (OutboxTweet ot); void updateOutboxEntry (OutboxTweet ot); OutboxTweet getOutboxEntry(long uid); List<OutboxTweet> getUnsentOutboxEntries(); List<OutboxTweet> getAllOutboxEntries(); /** * Returned in ascending ID order. */ List<OutboxTweet> getOutboxEntries(OutboxTweetStatus status); void deleteFromOutbox(OutboxTweet ot); void addOutboxListener (OutboxListener listener); void removeOutboxListener (OutboxListener listener); interface OutboxListener { void outboxChanged(); } void cacheString(CachedStringGroup group, String key, String value); String cachedString(CachedStringGroup group, String key); void housekeep (); long getTotalTweetsEverSeen (); double getTweetsPerHour (int columnId); }