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

775 lines
23 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 android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.StringDef;
import com.bluelinelabs.logansquare.annotation.JsonField;
import com.bluelinelabs.logansquare.annotation.JsonObject;
import com.hannesdorfmann.parcelableplease.annotation.Bagger;
import com.hannesdorfmann.parcelableplease.annotation.ParcelablePlease;
import org.mariotaku.microblog.library.twitter.model.util.ParcelMapBagger;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Arrays;
import java.util.Map;
/**
* Created by mariotaku on 16/3/1.
*/
@ParcelablePlease
@JsonObject
public class DMResponse implements Parcelable {
@JsonField(name = "status")
@Status
String status;
@JsonField(name = "cursor")
String cursor;
@JsonField(name = "min_entry_id")
long minEntryId;
@JsonField(name = "max_entry_id")
long maxEntryId;
@JsonField(name = "last_seen_event_id")
long lastSeenEvent;
@JsonField(name = "users")
@Bagger(UserMapBagger.class)
Map<String, User> users;
@JsonField(name = "conversations")
@Bagger(ConversationMapBagger.class)
Map<String, Conversation> conversations;
@JsonField(name = "entries")
Entry[] entries;
public String getStatus() {
return status;
}
public String getCursor() {
return cursor;
}
public long getMinEntryId() {
return minEntryId;
}
public long getMaxEntryId() {
return maxEntryId;
}
public Map<String, User> getUsers() {
return users;
}
public Map<String, Conversation> getConversations() {
return conversations;
}
public User getUser(String userId) {
return users.get(userId);
}
public Conversation getConversation(String conversationId) {
return conversations.get(conversationId);
}
public Entry[] getEntries() {
return entries;
}
@StringDef({DMResponse.Status.HAS_MORE, DMResponse.Status.AT_END})
@Retention(RetentionPolicy.SOURCE)
public @interface Status {
String HAS_MORE = "HAS_MORE";
String AT_END = "AT_END";
}
@ParcelablePlease
@JsonObject
public static class Entry implements Parcelable {
@JsonField(name = "conversation_create")
Message conversationCreate;
@JsonField(name = "join_conversation")
Message joinConversation;
@JsonField(name = "message")
Message message;
@JsonField(name = "participants_leave")
Message participantsLeave;
@JsonField(name = "participants_join")
Message participantsJoin;
@JsonField(name = "conversation_name_update")
Message conversationNameUpdate;
@JsonField(name = "conversation_avatar_update")
Message conversationAvatarUpdate;
@JsonField(name = "conversation_read")
Message conversationRead;
@JsonField(name = "message_delete")
Message messageDelete;
@JsonField(name = "remove_conversation")
Message removeConversation;
@JsonField(name = "disable_notifications")
Message disableNotifications;
public Message getJoinConversation() {
return joinConversation;
}
public Message getConversationCreate() {
return conversationCreate;
}
public Message getMessage() {
return message;
}
public Message getParticipantsLeave() {
return participantsLeave;
}
public Message getParticipantsJoin() {
return participantsJoin;
}
public Message getConversationNameUpdate() {
return conversationNameUpdate;
}
public Message getConversationAvatarUpdate() {
return conversationAvatarUpdate;
}
public Message getConversationRead() {
return conversationRead;
}
public Message getMessageDelete() {
return messageDelete;
}
public Message getRemoveConversation() {
return removeConversation;
}
public Message getDisableNotifications() {
return disableNotifications;
}
@Override
public String toString() {
return "Entry{" +
"conversationAvatarUpdate=" + conversationAvatarUpdate +
", conversationCreate=" + conversationCreate +
", joinConversation=" + joinConversation +
", message=" + message +
", participantsLeave=" + participantsLeave +
", participantsJoin=" + participantsJoin +
", conversationNameUpdate=" + conversationNameUpdate +
", conversationRead=" + conversationRead +
", messageDelete=" + messageDelete +
", removeConversation=" + removeConversation +
", disableNotifications=" + disableNotifications +
'}';
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
DMResponse$EntryParcelablePlease.writeToParcel(this, dest, flags);
}
public static final Creator<Entry> CREATOR = new Creator<Entry>() {
@Override
public Entry createFromParcel(Parcel source) {
Entry target = new Entry();
DMResponse$EntryParcelablePlease.readFromParcel(target, source);
return target;
}
@Override
public Entry[] newArray(int size) {
return new Entry[size];
}
};
/**
* Created by mariotaku on 2017/2/13.
*/
@ParcelablePlease
@JsonObject
public static class Message implements Parcelable {
@JsonField(name = "id")
long id;
@JsonField(name = "time")
long time;
@JsonField(name = "affects_sort")
boolean affectsSort;
@JsonField(name = "conversation_id")
String conversationId;
@JsonField(name = "conversation_name")
String conversationName;
@JsonField(name = "conversation_avatar_image_https")
String conversationAvatarImageHttps;
@JsonField(name = "request_id")
String requestId;
@JsonField(name = "sender_id")
String senderId;
@JsonField(name = "by_user_id")
String byUserId;
@JsonField(name = "message_data")
Data messageData;
@JsonField(name = "participants")
Conversation.Participant[] participants;
@JsonField(name = "messages")
MessageIds[] messages;
public boolean isAffectsSort() {
return affectsSort;
}
public String getConversationId() {
return conversationId;
}
public long getId() {
return id;
}
public long getTime() {
return time;
}
public String getRequestId() {
return requestId;
}
public String getSenderId() {
return senderId;
}
public Data getMessageData() {
return messageData;
}
public Conversation.Participant[] getParticipants() {
return participants;
}
public String getConversationName() {
return conversationName;
}
public String getConversationAvatarImageHttps() {
return conversationAvatarImageHttps;
}
public String getByUserId() {
return byUserId;
}
public MessageIds[] getMessages() {
return messages;
}
@Override
public String toString() {
return "Message{" +
"affectsSort=" + affectsSort +
", id=" + id +
", time=" + time +
", conversationId='" + conversationId + '\'' +
", conversationName='" + conversationName + '\'' +
", conversationAvatarImageHttps='" + conversationAvatarImageHttps + '\'' +
", requestId='" + requestId + '\'' +
", senderId='" + senderId + '\'' +
", byUserId='" + byUserId + '\'' +
", messageData=" + messageData +
", participants=" + Arrays.toString(participants) +
", messages=" + Arrays.toString(messages) +
'}';
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
DMResponse$Entry$MessageParcelablePlease.writeToParcel(this, dest, flags);
}
public static final Creator<Message> CREATOR = new Creator<Message>() {
public Message createFromParcel(Parcel source) {
Message target = new Message();
DMResponse$Entry$MessageParcelablePlease.readFromParcel(target, source);
return target;
}
public Message[] newArray(int size) {
return new Message[size];
}
};
@ParcelablePlease
@JsonObject
public static class MessageIds implements Parcelable {
@JsonField(name = "message_create_event_id")
String messageCreateEventId;
@JsonField(name = "message_id")
String messageId;
public String getMessageCreateEventId() {
return messageCreateEventId;
}
public String getMessageId() {
return messageId;
}
@Override
public String toString() {
return "MessageIds{" +
"messageCreateEventId='" + messageCreateEventId + '\'' +
", messageId='" + messageId + '\'' +
'}';
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
DMResponse$Entry$Message$MessageIdsParcelablePlease.writeToParcel(this, dest, flags);
}
public static final Creator<MessageIds> CREATOR = new Creator<MessageIds>() {
public MessageIds createFromParcel(Parcel source) {
MessageIds target = new MessageIds();
DMResponse$Entry$Message$MessageIdsParcelablePlease.readFromParcel(target, source);
return target;
}
public MessageIds[] newArray(int size) {
return new MessageIds[size];
}
};
}
@ParcelablePlease
@JsonObject
public static class Data implements EntitySupport, Parcelable {
@JsonField(name = "id")
String id;
@JsonField(name = "time")
long time;
@JsonField(name = "sender_id")
String senderId;
@JsonField(name = "recipient_id")
String recipientId;
@JsonField(name = "text")
String text;
@JsonField(name = "entities")
Entities entities;
@JsonField(name = "attachment")
Attachment attachment;
public String getText() {
return text;
}
public String getRecipientId() {
return recipientId;
}
public String getSenderId() {
return senderId;
}
@Override
public HashtagEntity[] getHashtagEntities() {
if (entities == null) return null;
return entities.getHashtags();
}
@Override
public UrlEntity[] getUrlEntities() {
if (entities == null) return null;
return entities.getUrls();
}
@Override
public MediaEntity[] getMediaEntities() {
if (entities == null) return null;
return entities.getMedia();
}
@Override
public UserMentionEntity[] getUserMentionEntities() {
if (entities == null) return null;
return entities.getUserMentions();
}
public Attachment getAttachment() {
return attachment;
}
public Entities getEntities() {
return entities;
}
public long getTime() {
return time;
}
public String getId() {
return id;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
DMResponse$Entry$Message$DataParcelablePlease.writeToParcel(this, dest, flags);
}
public static final Creator<Data> CREATOR = new Creator<Data>() {
public Data createFromParcel(Parcel source) {
Data target = new Data();
DMResponse$Entry$Message$DataParcelablePlease.readFromParcel(target, source);
return target;
}
public Data[] newArray(int size) {
return new Data[size];
}
};
@ParcelablePlease
@JsonObject
public static class Attachment implements Parcelable {
@JsonField(name = "photo")
MediaEntity photo;
@JsonField(name = "video")
MediaEntity video;
@JsonField(name = "animated_gif")
MediaEntity animatedGif;
@JsonField(name = "sticker")
StickerEntity sticker;
public MediaEntity getPhoto() {
return photo;
}
public MediaEntity getVideo() {
return video;
}
public MediaEntity getAnimatedGif() {
return animatedGif;
}
public StickerEntity getSticker() {
return sticker;
}
@Override
public String toString() {
return "Attachment{" +
"photo=" + photo +
", sticker=" + sticker +
'}';
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
DMResponse$Entry$Message$Data$AttachmentParcelablePlease.writeToParcel(this, dest, flags);
}
public static final Creator<Attachment> CREATOR = new Creator<Attachment>() {
public Attachment createFromParcel(Parcel source) {
Attachment target = new Attachment();
DMResponse$Entry$Message$Data$AttachmentParcelablePlease.readFromParcel(target, source);
return target;
}
public Attachment[] newArray(int size) {
return new Attachment[size];
}
};
}
}
}
}
@ParcelablePlease
@JsonObject
public static class Conversation implements Parcelable {
@JsonField(name = "conversation_id")
String conversationId;
@JsonField(name = "last_read_event_id")
String lastReadEventId;
@JsonField(name = "max_entry_id")
String maxEntryId;
@JsonField(name = "min_entry_id")
String minEntryId;
@JsonField(name = "notifications_disabled")
boolean notificationsDisabled;
@JsonField(name = "participants")
Participant[] participants;
@JsonField(name = "read_only")
boolean readOnly;
@JsonField(name = "sort_event_id")
String sortEventId;
@JsonField(name = "sort_timestamp")
long sortTimestamp;
@JsonField(name = "status")
@Status
String status;
@JsonField(name = "type")
@Type
String type;
@JsonField(name = "created_by_user_id")
String createdByUserId;
@JsonField(name = "created_time")
String createdTime;
@JsonField(name = "name")
String name;
@JsonField(name = "avatar_image_https")
String avatarImageHttps;
public String getType() {
return type;
}
public String getStatus() {
return status;
}
public long getSortTimestamp() {
return sortTimestamp;
}
public String getSortEventId() {
return sortEventId;
}
public boolean isReadOnly() {
return readOnly;
}
public Participant[] getParticipants() {
return participants;
}
public String getConversationId() {
return conversationId;
}
public String getLastReadEventId() {
return lastReadEventId;
}
public String getMaxEntryId() {
return maxEntryId;
}
public String getMinEntryId() {
return minEntryId;
}
public boolean isNotificationsDisabled() {
return notificationsDisabled;
}
public String getCreatedByUserId() {
return createdByUserId;
}
public String getCreatedTime() {
return createdTime;
}
public String getName() {
return name;
}
public String getAvatarImageHttps() {
return avatarImageHttps;
}
@StringDef({Type.ONE_TO_ONE, Type.GROUP_DM})
@Retention(RetentionPolicy.SOURCE)
public @interface Type {
String ONE_TO_ONE = "ONE_TO_ONE", GROUP_DM = "GROUP_DM";
}
@ParcelablePlease
@JsonObject
public static class Participant implements Parcelable {
@JsonField(name = "user_id")
String userId;
@JsonField(name = "join_time")
long joinTime;
@JsonField(name = "last_read_event_id")
String lastReadEventId;
public String getUserId() {
return userId;
}
public long getJoinTime() {
return joinTime;
}
public String getLastReadEventId() {
return lastReadEventId;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
DMResponse$Conversation$ParticipantParcelablePlease.writeToParcel(this, dest, flags);
}
public static final Creator<Participant> CREATOR = new Creator<Participant>() {
@Override
public Participant createFromParcel(Parcel source) {
Participant target = new Participant();
DMResponse$Conversation$ParticipantParcelablePlease.readFromParcel(target, source);
return target;
}
@Override
public Participant[] newArray(int size) {
return new Participant[size];
}
};
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
DMResponse$ConversationParcelablePlease.writeToParcel(this, dest, flags);
}
public static final Creator<Conversation> CREATOR = new Creator<Conversation>() {
@Override
public Conversation createFromParcel(Parcel source) {
Conversation target = new Conversation();
DMResponse$ConversationParcelablePlease.readFromParcel(target, source);
return target;
}
@Override
public Conversation[] newArray(int size) {
return new Conversation[size];
}
};
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
DMResponseParcelablePlease.writeToParcel(this, dest, flags);
}
public static final Creator<DMResponse> CREATOR = new Creator<DMResponse>() {
@Override
public DMResponse createFromParcel(Parcel source) {
DMResponse target = new DMResponse();
DMResponseParcelablePlease.readFromParcel(target, source);
return target;
}
@Override
public DMResponse[] newArray(int size) {
return new DMResponse[size];
}
};
public static class UserMapBagger extends ParcelMapBagger<User> {
public UserMapBagger() {
super(User.class);
}
}
public static class ConversationMapBagger extends ParcelMapBagger<Conversation> {
public ConversationMapBagger() {
super(Conversation.class);
}
}
}