/*
* Copyright (C) 2015 Actor LLC. <https://actor.im>
*/
package im.actor.core.entity;
import com.google.j2objc.annotations.Property;
import java.io.IOException;
import im.actor.core.entity.content.AbsContent;
import im.actor.core.entity.content.ContactContent;
import im.actor.core.entity.content.DocumentContent;
import im.actor.core.entity.content.JsonContent;
import im.actor.core.entity.content.LocationContent;
import im.actor.core.entity.content.PhotoContent;
import im.actor.core.entity.content.ServiceCallEnded;
import im.actor.core.entity.content.ServiceCallMissed;
import im.actor.core.entity.content.ServiceContent;
import im.actor.core.entity.content.ServiceGroupAvatarChanged;
import im.actor.core.entity.content.ServiceGroupAboutChanged;
import im.actor.core.entity.content.ServiceGroupTopicChanged;
import im.actor.core.entity.content.ServiceGroupCreated;
import im.actor.core.entity.content.ServiceGroupTitleChanged;
import im.actor.core.entity.content.ServiceGroupUserInvited;
import im.actor.core.entity.content.ServiceGroupUserJoined;
import im.actor.core.entity.content.ServiceGroupUserKicked;
import im.actor.core.entity.content.ServiceGroupUserLeave;
import im.actor.core.entity.content.ServiceUserRegistered;
import im.actor.core.entity.content.StickerContent;
import im.actor.core.entity.content.TextContent;
import im.actor.core.entity.content.VideoContent;
import im.actor.core.entity.content.VoiceContent;
import im.actor.runtime.bser.Bser;
import im.actor.runtime.bser.BserObject;
import im.actor.runtime.bser.BserValues;
import im.actor.runtime.bser.BserWriter;
public class ContentDescription extends BserObject {
public static ContentDescription fromBytes(byte[] data) throws IOException {
return Bser.parse(new ContentDescription(), data);
}
public static ContentDescription fromContent(AbsContent msg) {
if (msg instanceof TextContent) {
return new ContentDescription(ContentType.TEXT,
((TextContent) msg).getText());
} else if (msg instanceof PhotoContent) {
return new ContentDescription(ContentType.DOCUMENT_PHOTO);
} else if (msg instanceof VideoContent) {
return new ContentDescription(ContentType.DOCUMENT_VIDEO);
} else if (msg instanceof VoiceContent) {
return new ContentDescription(ContentType.DOCUMENT_AUDIO);
} else if (msg instanceof DocumentContent) {
return new ContentDescription(ContentType.DOCUMENT);
} else if (msg instanceof LocationContent) {
return new ContentDescription(ContentType.LOCATION);
} else if (msg instanceof ContactContent) {
return new ContentDescription(ContentType.CONTACT);
} else if (msg instanceof StickerContent) {
return new ContentDescription(ContentType.STICKER);
} else if (msg instanceof ServiceUserRegistered) {
return new ContentDescription(ContentType.SERVICE_REGISTERED);
} else if (msg instanceof ServiceCallEnded) {
return new ContentDescription(ContentType.SERVICE_CALL_ENDED);
} else if (msg instanceof ServiceCallMissed) {
return new ContentDescription(ContentType.SERVICE_CALL_MISSED);
} else if (msg instanceof ServiceGroupAvatarChanged) {
if (((ServiceGroupAvatarChanged) msg).getNewAvatar() == null) {
return new ContentDescription(ContentType.SERVICE_AVATAR_REMOVED);
} else {
return new ContentDescription(ContentType.SERVICE_AVATAR);
}
} else if (msg instanceof ServiceGroupTitleChanged) {
return new ContentDescription(ContentType.SERVICE_TITLE,
((ServiceGroupTitleChanged) msg).getNewTitle());
} else if (msg instanceof ServiceGroupTopicChanged) {
return new ContentDescription(ContentType.SERVICE_TOPIC,
((ServiceGroupTopicChanged) msg).getNewTopic());
} else if (msg instanceof ServiceGroupAboutChanged) {
return new ContentDescription(ContentType.SERVICE_ABOUT,
((ServiceGroupAboutChanged) msg).getNewAbout());
} else if (msg instanceof ServiceGroupCreated) {
return new ContentDescription(ContentType.SERVICE_CREATED);
} else if (msg instanceof ServiceGroupUserInvited) {
return new ContentDescription(ContentType.SERVICE_ADD, "",
((ServiceGroupUserInvited) msg).getAddedUid(), false);
} else if (msg instanceof ServiceGroupUserKicked) {
return new ContentDescription(ContentType.SERVICE_KICK, "",
((ServiceGroupUserKicked) msg).getKickedUid(), false);
} else if (msg instanceof ServiceGroupUserLeave) {
return new ContentDescription(ContentType.SERVICE_LEAVE, "",
0, true);
} else if (msg instanceof ServiceGroupUserJoined) {
return new ContentDescription(ContentType.SERVICE_JOINED, "",
0, false);
} else if (msg instanceof ServiceContent) {
return new ContentDescription(ContentType.SERVICE,
((ServiceContent) msg).getCompatText(), 0, false);
} else if (msg instanceof JsonContent) {
return new ContentDescription(ContentType.TEXT, ((JsonContent) msg).getContentDescription());
} else {
return new ContentDescription(ContentType.UNKNOWN_CONTENT);
}
}
@Property("readonly, nonatomic")
private ContentType contentType;
@Property("readonly, nonatomic")
private String text;
@Property("readonly, nonatomic")
private int relatedUser;
@Property("readonly, nonatomic")
private boolean isSilent;
public ContentDescription(ContentType contentType, String text, int relatedUser,
boolean isSilent) {
this.contentType = contentType;
this.text = text;
this.relatedUser = relatedUser;
this.isSilent = isSilent;
}
public ContentDescription(ContentType contentType, String text) {
this(contentType, text, 0, false);
}
public ContentDescription(ContentType contentType) {
this(contentType, "", 0, false);
}
private ContentDescription() {
}
public ContentType getContentType() {
return contentType;
}
public String getText() {
return text;
}
public int getRelatedUser() {
return relatedUser;
}
public boolean isSilent() {
return isSilent;
}
@Override
public void parse(BserValues values) throws IOException {
contentType = ContentType.fromValue(values.getInt(1));
text = values.getString(2);
relatedUser = values.getInt(3);
isSilent = values.getBool(4);
}
@Override
public void serialize(BserWriter writer) throws IOException {
writer.writeInt(1, contentType.getValue());
writer.writeString(2, text);
writer.writeInt(3, relatedUser);
writer.writeBool(4, isSilent);
}
}