diff options
Diffstat (limited to 'app/src/main/java/net/lacolaco/smileessence/entity/Account.java')
-rw-r--r-- | app/src/main/java/net/lacolaco/smileessence/entity/Account.java | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/app/src/main/java/net/lacolaco/smileessence/entity/Account.java b/app/src/main/java/net/lacolaco/smileessence/entity/Account.java index bcb1d6cb..d5cc6b1b 100644 --- a/app/src/main/java/net/lacolaco/smileessence/entity/Account.java +++ b/app/src/main/java/net/lacolaco/smileessence/entity/Account.java @@ -28,6 +28,11 @@ import com.activeandroid.Model; import com.activeandroid.annotation.Column; import com.activeandroid.annotation.Table; import com.activeandroid.query.Delete; +import net.lacolaco.smileessence.twitter.task.ShowDirectMessageTask; +import net.lacolaco.smileessence.twitter.task.ShowStatusTask; +import net.lacolaco.smileessence.twitter.task.ShowUserTask; +import net.lacolaco.smileessence.twitter.task.TwitterTask; +import net.lacolaco.smileessence.util.Consumer; import twitter4j.Twitter; import twitter4j.TwitterFactory; import twitter4j.TwitterStream; @@ -48,6 +53,8 @@ public class Account extends Model { @Column(name = "ScreenName", notNull = true) public String screenName; + private User user; + // -------------------------- STATIC METHODS -------------------------- public Account() { @@ -79,4 +86,117 @@ public class Account extends Model { stream.setOAuthAccessToken(new AccessToken(accessToken, accessSecret)); return stream; } + + public User getCachedUser() { + if (user == null) { + user = User.fetch(userID); // 強い参照をもたせる + } + return user; // null かも + } + + public void tryGetMessage(long messageID, final MessageCallback callback) { + DirectMessage message = DirectMessage.fetch(messageID); + if (message != null) { + callback.success(message); + } else { + ShowDirectMessageTask task = new ShowDirectMessageTask(getTwitter(), messageID) { + @Override + protected void onPostExecute(DirectMessage directMessage) { + super.onPostExecute(directMessage); + if (directMessage != null) { + callback.success(directMessage); + } else { + callback.error(); + } + } + }; + task.execute(); + } + } + + /** + * Get status from api if not cached + */ + public void tryGetUser(long userID, final UserCallback callback) { + User user = User.fetch(userID); + if (user != null) { + callback.success(user); + ShowUserTask task = new ShowUserTask(getTwitter(), userID); + task.execute(); + } else { + ShowUserTask task = new ShowUserTask(getTwitter(), userID) { + @Override + protected void onPostExecute(User user) { + super.onPostExecute(user); + if (user != null) { + callback.success(user); + } else { + callback.error(); + } + + } + }; + task.execute(); + } + } + + public void fetchTweet(long statusId, Consumer<Tweet> callback, boolean forceRetrieve) { + Tweet tweet = Tweet.fetch(statusId); + if (forceRetrieve || tweet == null) { + new ShowStatusTask(getTwitter(), statusId) { + @Override + protected void onPostExecute(Tweet tweet) { + callback.accept(tweet); + } + }.execute(); + } else { + callback.accept(tweet); + } + } + public void fetchTweet(long statusId, Consumer<Tweet> callback) { + fetchTweet(statusId, callback, false); + } + + public TwitterTask<Tweet> tryGetStatus(long statusID, final StatusCallback callback) { + ShowStatusTask task; + Tweet tweet = Tweet.fetch(statusID); + if (tweet != null) { + callback.success(tweet); + //update cache + task = new ShowStatusTask(getTwitter(), statusID); + } else { + task = new ShowStatusTask(getTwitter(), statusID) { + @Override + protected void onPostExecute(Tweet tweet) { + if (tweet != null) { + callback.success(tweet); + } else { + callback.error(); + } + } + }; + } + return (TwitterTask<Tweet>) task.execute(); + } + + public interface StatusCallback { + + void success(Tweet status); + + void error(); + } + + public interface UserCallback { + + void success(User user); + + void error(); + } + + public interface MessageCallback { + + void success(DirectMessage message); + + void error(); + } } |