diff options
Diffstat (limited to 'app/src/main/java/net/lacolaco/smileessence/entity')
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); |