aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/net/lacolaco/smileessence/entity
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/net/lacolaco/smileessence/entity')
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/entity/DirectMessage.java39
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/entity/Event.java62
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/entity/SavedSearch.java27
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/entity/Tweet.java51
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/entity/User.java51
5 files changed, 126 insertions, 104 deletions
diff --git a/app/src/main/java/net/lacolaco/smileessence/entity/DirectMessage.java b/app/src/main/java/net/lacolaco/smileessence/entity/DirectMessage.java
index 67524c36..5b19ee74 100644
--- a/app/src/main/java/net/lacolaco/smileessence/entity/DirectMessage.java
+++ b/app/src/main/java/net/lacolaco/smileessence/entity/DirectMessage.java
@@ -1,27 +1,26 @@
package net.lacolaco.smileessence.entity;
-import com.google.common.cache.Cache;
-import com.google.common.cache.CacheBuilder;
import net.lacolaco.smileessence.util.ListUtils;
-import java.util.ArrayList;
import java.util.Date;
import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
-public class DirectMessage extends EntitySupport {
- private static Cache<Long, DirectMessage> storage = CacheBuilder.newBuilder().weakValues().build();
-
- public synchronized static DirectMessage fetch(long statusId) {
- return storage.getIfPresent(statusId);
- }
+public class DirectMessage extends EntitySupport implements IdObject {
+ private static Map<Long, DirectMessage> storage = new ConcurrentHashMap<>();
+ private long id;
+ private User sender;
+ private User recipient;
+ private String text;
+ private Date createdAt;
- @Deprecated
- public synchronized static List<DirectMessage> cached() {
- return new ArrayList<>(storage.asMap().values());
+ private DirectMessage(twitter4j.DirectMessage st) {
+ update(st);
}
- public synchronized static void remove(long statusId) {
- storage.invalidate(statusId);
+ public synchronized static DirectMessage fetch(long statusId) {
+ return storage.get(statusId);
}
public synchronized static DirectMessage fromTwitter(twitter4j.DirectMessage st) {
@@ -39,17 +38,6 @@ public class DirectMessage extends EntitySupport {
return ListUtils.map(sts, DirectMessage::fromTwitter);
}
- // インスタンス
- private long id;
- private User sender;
- private User recipient;
- private String text;
- private Date createdAt;
-
- private DirectMessage(twitter4j.DirectMessage st) {
- update(st);
- }
-
private void update(twitter4j.DirectMessage message) {
id = message.getId();
sender = User.fromTwitter(message.getSender());
@@ -60,6 +48,7 @@ public class DirectMessage extends EntitySupport {
updateEntities(message);
}
+ @Override
public long getId() {
return id;
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/entity/Event.java b/app/src/main/java/net/lacolaco/smileessence/entity/Event.java
new file mode 100644
index 00000000..e2002cb9
--- /dev/null
+++ b/app/src/main/java/net/lacolaco/smileessence/entity/Event.java
@@ -0,0 +1,62 @@
+package net.lacolaco.smileessence.entity;
+
+import java.util.Date;
+
+public class Event {
+ private final Date createdAt;
+ private final EnumEvent event;
+ private final User source;
+ private final Tweet targetObject;
+
+ public Event(EnumEvent e, User s) {
+ this(e, s, null);
+ }
+
+ public Event(EnumEvent e, User s, Tweet t) {
+ event = e;
+ createdAt = new Date();
+ source = s;
+ targetObject = t;
+ }
+
+ public Date getCreatedAt() {
+ return createdAt;
+ }
+
+ public EnumEvent getEvent() {
+ return event;
+ }
+
+ public User getSource() {
+ return source;
+ }
+
+ public Tweet getTargetObject() {
+ return targetObject;
+ }
+
+ public String getFormattedString() {
+ return String.format(event.getFormat(), source.getScreenName());
+ }
+
+ public enum EnumEvent {
+ FAVORITED("Favorited by %s"),
+ UNFAVORITED("Unfavorited by %s"),
+ RETWEETED("Retweeted by %s"),
+ MENTIONED("Replied by %s"),
+ FOLLOWED("Followed by %s"),
+ BLOCKED("Blocked by %s"),
+ UNBLOCKED("Unblocked by %s"),
+ RECEIVE_MESSAGE("Received a direct message from %s");
+
+ private final String format;
+
+ EnumEvent(String f) {
+ format = f;
+ }
+
+ public String getFormat() {
+ return format;
+ }
+ }
+}
diff --git a/app/src/main/java/net/lacolaco/smileessence/entity/SavedSearch.java b/app/src/main/java/net/lacolaco/smileessence/entity/SavedSearch.java
index 6ea6dea4..fcb87605 100644
--- a/app/src/main/java/net/lacolaco/smileessence/entity/SavedSearch.java
+++ b/app/src/main/java/net/lacolaco/smileessence/entity/SavedSearch.java
@@ -6,29 +6,6 @@ import java.util.List;
import java.util.Map;
public class SavedSearch implements IdObject {
- private static Map<Long, SavedSearch> storage = new HashMap<>();
-
- public synchronized static Collection<SavedSearch> cached() {
- return storage.values();
- }
-
- public synchronized static void replace(List<SavedSearch> list) {
- storage = new HashMap<>();
- for (SavedSearch ss : list)
- storage.put(ss.getId(), ss);
- }
-
- public synchronized static SavedSearch fromTwitter(twitter4j.SavedSearch obj) {
- SavedSearch cached = storage.get(obj.getId());
-
- /* SavedSearch should be immutable */
- if (cached == null) {
- cached = new SavedSearch(obj.getId(), obj.getQuery());
- }
- return cached;
- }
-
- // インスタンス
private long id;
private String query;
@@ -37,6 +14,10 @@ public class SavedSearch implements IdObject {
this.query = query;
}
+ public synchronized static SavedSearch fromTwitter(twitter4j.SavedSearch obj) {
+ return new SavedSearch(obj.getId(), obj.getQuery());
+ }
+
public long getId() {
return id;
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/entity/Tweet.java b/app/src/main/java/net/lacolaco/smileessence/entity/Tweet.java
index 2e70d705..4aa461fa 100644
--- a/app/src/main/java/net/lacolaco/smileessence/entity/Tweet.java
+++ b/app/src/main/java/net/lacolaco/smileessence/entity/Tweet.java
@@ -1,8 +1,6 @@
package net.lacolaco.smileessence.entity;
import android.net.Uri;
-import com.google.common.cache.Cache;
-import com.google.common.cache.CacheBuilder;
import net.lacolaco.smileessence.data.Account;
import net.lacolaco.smileessence.twitter.task.Tweets;
import net.lacolaco.smileessence.util.BackgroundTask;
@@ -12,11 +10,27 @@ import twitter4j.Status;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
-public class Tweet extends EntitySupport {
- private static Cache<Long, Tweet> storage = CacheBuilder.newBuilder().softValues().build();
+public class Tweet extends EntitySupport implements IdObject {
+ private static Map<Long, Tweet> storage = new ConcurrentHashMap<>();
+ private final long id;
+ private User user;
+ private String text;
+ private Date createdAt;
+ private String source;
+ private boolean isRetweet;
+ private Tweet retweetedTweet;
+ private long inReplyToStatusId;
+ private int favoriteCount;
+ private int retweetCount;
+ private Set<Long> favoriters;
+ private Map<Long, Long> retweets;
+
+ private Tweet(long id) {
+ this.id = id;
+ }
public synchronized static Tweet fetch(long statusId) {
- return storage.getIfPresent(statusId);
+ return storage.get(statusId);
}
public synchronized static BackgroundTask<Tweet, Void> fetchTask(long statusId, Account account) {
@@ -33,14 +47,10 @@ public class Tweet extends EntitySupport {
}
}
- public synchronized static void remove(long statusId) {
- storage.invalidate(statusId);
- }
-
public synchronized static Tweet fromTwitter(final twitter4j.Status st, long myUserId) {
Tweet t = fetch(st.getId());
if (t == null) {
- t = new Tweet();
+ t = new Tweet(st.getId());
storage.put(st.getId(), t);
}
@@ -52,23 +62,6 @@ public class Tweet extends EntitySupport {
return ListUtils.map(sts, st -> fromTwitter(st, myUserId));
}
- // インスタンス
- private long id;
- private User user;
- private String text;
- private Date createdAt;
- private String source;
- private boolean isRetweet;
- private Tweet retweetedTweet;
- private long inReplyToStatusId;
- private int favoriteCount;
- private int retweetCount;
- private Set<Long> favoriters;
- private Map<Long, Long> retweets;
-
- private Tweet() {
- }
-
@Override
protected void finalize() throws Throwable {
try {
@@ -82,7 +75,8 @@ public class Tweet extends EntitySupport {
}
private void update(twitter4j.Status status, long myUserId) {
- id = status.getId();
+ if (id != status.getId())
+ throw new IllegalStateException("Invalid update");
user = User.fromTwitter(status.getUser());
createdAt = status.getCreatedAt();
source = status.getSource();
@@ -126,6 +120,7 @@ public class Tweet extends EntitySupport {
return String.format("https://twitter.com/%s/status/%s", getUser().getScreenName(), id);
}
+ @Override
public long getId() {
return id;
}
diff --git a/app/src/main/java/net/lacolaco/smileessence/entity/User.java b/app/src/main/java/net/lacolaco/smileessence/entity/User.java
index e1e3013f..a460fff2 100644
--- a/app/src/main/java/net/lacolaco/smileessence/entity/User.java
+++ b/app/src/main/java/net/lacolaco/smileessence/entity/User.java
@@ -1,14 +1,32 @@
package net.lacolaco.smileessence.entity;
-import com.google.common.cache.Cache;
-import com.google.common.cache.CacheBuilder;
import net.lacolaco.smileessence.util.UIObservable;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
public class User extends UIObservable {
- private static Cache<Long, User> storage = CacheBuilder.newBuilder().weakValues().build();
+ private static Map<Long, User> storage = new ConcurrentHashMap<>();
+ private long id;
+ private boolean isProtected;
+ private String screenName;
+ private String name;
+ private String profileImageUrl;
+ private String profileBannerUrl;
+ private String description;
+ private String location;
+ private String url;
+ private int favoritesCount;
+ private int statusesCount;
+ private int friendsCount;
+ private int followersCount;
+ private boolean isVerified;
+
+ private User() {
+ }
public synchronized static User fetch(long userId) {
- return storage.getIfPresent(userId);
+ return storage.get(userId);
}
public synchronized static User fromTwitter(final twitter4j.User st) {
@@ -36,25 +54,6 @@ public class User extends UIObservable {
}
}
- // インスタンス
- private long id;
- private boolean isProtected;
- private String screenName;
- private String name;
- private String profileImageUrl;
- private String profileBannerUrl;
- private String description;
- private String location;
- private String url;
- private int favoritesCount;
- private int statusesCount;
- private int friendsCount;
- private int followersCount;
- private boolean isVerified;
-
- private User() {
- }
-
private void update(twitter4j.User user) {
id = user.getId();
@@ -120,13 +119,9 @@ public class User extends UIObservable {
}
public String getProfileImageUrlOriginal() {
- return getProfileImageUrlWithSuffix("");
- }
-
- private String getProfileImageUrlWithSuffix(String suffix) {
String original = profileImageUrl;
if (original != null) {
- String url = original.substring(0, original.lastIndexOf("_")) + suffix;
+ String url = original.substring(0, original.lastIndexOf("_"));
int extIndex = original.lastIndexOf(".");
if (extIndex > original.lastIndexOf("/")) {
url += original.substring(extIndex);