Twidere-App-Android-Twitter.../twidere.component.common/src/main/java/org/mariotaku/microblog/library/twitter/model/TwitterStreamObject.java

253 lines
7.7 KiB
Java

/*
* Twidere - Twitter client for Android
*
* Copyright 2012-2017 Mariotaku Lee <mariotaku.lee@gmail.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.mariotaku.microblog.library.twitter.model;
import androidx.annotation.StringDef;
import com.bluelinelabs.logansquare.annotation.JsonField;
import com.bluelinelabs.logansquare.annotation.JsonObject;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* Created by mariotaku on 16/2/26.
*/
@JsonObject
public class TwitterStreamObject {
@JsonField(name = "sender")
EmptyObject sender;
@JsonField(name = "event")
String event;
@JsonField(name = "text")
String text;
@JsonField(name = "direct_message")
DirectMessage directMessage;
@JsonField(name = "delete")
Delete delete;
@JsonField(name = "disconnect")
Disconnect disconnect;
@JsonField(name = "limit")
Limit limit;
@JsonField(name = "warning")
Warning warning;
@JsonField(name = "scrub_geo")
ScrubGeo scrubGeo;
@JsonField(name = {"friends", "friends_str"})
String[] friends;
@Type
public String determine() {
// This code originally lived in AbstractStreamImplementation.
// I've moved it in here to expose it as a public encapsulation of
// the object type determination logic.
if (sender == null && text != null) {
return Type.STATUS;
} else if (directMessage != null) {
return Type.DIRECT_MESSAGE;
} else if (delete != null) {
return Type.DELETE;
} else if (limit != null) {
return Type.LIMIT;
} else if (warning != null) {
return Type.STALL_WARNING;
} else if (scrubGeo != null) {
return Type.SCRUB_GEO;
} else if (friends != null) {
return Type.FRIENDS;
} else if (disconnect != null) {
return Type.DISCONNECTION;
} else if (event != null) {
switch (event) {
case "favorite":
return Type.FAVORITE;
case "unfavorite":
return Type.UNFAVORITE;
case "follow":
return Type.FOLLOW;
case "unfollow":
return Type.UNFOLLOW;
case "list_member_added":
return Type.USER_LIST_MEMBER_ADDED;
case "list_member_removed":
return Type.USER_LIST_MEMBER_DELETED;
case "list_user_subscribed":
return Type.USER_LIST_SUBSCRIBED;
case "list_user_unsubscribed":
return Type.USER_LIST_UNSUBSCRIBED;
case "list_created":
return Type.USER_LIST_CREATED;
case "list_updated":
return Type.USER_LIST_UPDATED;
case "list_destroyed":
return Type.USER_LIST_DESTROYED;
case "user_update":
return Type.USER_UPDATE;
case "block":
return Type.BLOCK;
case "unblock":
return Type.UNBLOCK;
case "quoted_tweet":
return Type.QUOTED_TWEET;
case "favorited_retweet":
return Type.FAVORITED_RETWEET;
case "retweeted_retweet":
return Type.RETWEETED_RETWEET;
}
}
return Type.UNKNOWN;
}
public DirectMessage getDirectMessage() {
return directMessage;
}
public Delete getDelete() {
return delete;
}
public ScrubGeo getScrubGeo() {
return scrubGeo;
}
public Limit getLimit() {
return limit;
}
public Disconnect getDisconnect() {
return disconnect;
}
public String[] getFriends() {
return friends;
}
public Warning getWarning() {
return warning;
}
@Retention(RetentionPolicy.SOURCE)
@StringDef({Type.STATUS, Type.DIRECT_MESSAGE, Type.DELETE, Type.LIMIT,
Type.STALL_WARNING, Type.SCRUB_GEO, Type.FRIENDS, Type.FAVORITE, Type.UNFAVORITE,
Type.FOLLOW, Type.UNFOLLOW, Type.USER_LIST_MEMBER_ADDED, Type.USER_LIST_MEMBER_DELETED,
Type.USER_LIST_SUBSCRIBED, Type.USER_LIST_UNSUBSCRIBED, Type.USER_LIST_CREATED,
Type.USER_LIST_UPDATED, Type.USER_LIST_DESTROYED, Type.USER_UPDATE, Type.BLOCK,
Type.UNBLOCK, Type.DISCONNECTION, Type.QUOTED_TWEET, Type.FAVORITED_RETWEET,
Type.RETWEETED_RETWEET, Type.UNKNOWN})
public @interface Type {
String STATUS = "status";
String DIRECT_MESSAGE = "direct_message";
String DELETE = "delete";
String LIMIT = "limit";
String STALL_WARNING = "stall_warning";
String SCRUB_GEO = "scrub_geo";
String FRIENDS = "friends";
String FAVORITE = "favorite";
String UNFAVORITE = "unfavorite";
String FOLLOW = "follow";
String UNFOLLOW = "unfollow";
String USER_LIST_MEMBER_ADDED = "user_list_member_added";
String USER_LIST_MEMBER_DELETED = "user_list_member_deleted";
String USER_LIST_SUBSCRIBED = "user_list_subscribed";
String USER_LIST_UNSUBSCRIBED = "user_list_unsubscribed";
String USER_LIST_CREATED = "user_list_created";
String USER_LIST_UPDATED = "user_list_updated";
String USER_LIST_DESTROYED = "user_list_destroyed";
String USER_UPDATE = "user_update";
String BLOCK = "block";
String UNBLOCK = "unblock";
String DISCONNECTION = "disconnection";
String QUOTED_TWEET = "quoted_tweet";
String FAVORITED_RETWEET = "favorited_retweet";
String RETWEETED_RETWEET = "retweeted_retweet";
String UNKNOWN = "unknown";
}
@JsonObject
public static class EmptyObject {
}
@JsonObject
public static class Delete {
@JsonField(name = "status")
DeletionEvent status;
@JsonField(name = "direct_message")
DeletionEvent directMessage;
public DeletionEvent getStatus() {
return status;
}
public DeletionEvent getDirectMessage() {
return directMessage;
}
}
@JsonObject
public static class ScrubGeo {
@JsonField(name = "user_id")
String userId;
@JsonField(name = "up_to_status_id")
String upToStatusId;
public String getUserId() {
return userId;
}
public String getUpToStatusId() {
return upToStatusId;
}
}
@JsonObject
public static class Limit {
@JsonField(name = "track")
int track;
public int getTrack() {
return track;
}
}
@JsonObject
public static class Disconnect {
@JsonField(name = "code")
int code;
@JsonField(name = "stream_name")
String streamName;
@JsonField(name = "reason")
String reason;
public int getCode() {
return code;
}
public String getStreamName() {
return streamName;
}
public String getReason() {
return reason;
}
}
}