aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/net/lacolaco/smileessence/entity/Account.java
diff options
context:
space:
mode:
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.java120
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();
+ }
}