/*
* Copyright (C) 2013 Chris Lacy
*
* 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.tweetalib.android.model;
import android.text.Html;
import android.text.Spanned;
import org.json.JSONException;
import org.json.JSONObject;
import org.tweetalib.android.TwitterManager;
import org.tweetalib.android.TwitterUtil;
import org.tweetalib.android.widget.URLSpanNoUnderline;
import java.util.Date;
import twitter4j.DirectMessage;
import twitter4j.MediaEntity;
import twitter4j.URLEntity;
import twitter4j.User;
public class TwitterDirectMessage implements Comparable<TwitterDirectMessage> {
/*
*
*/
public enum MessageType {
SENT, RECEIVED
}
/*
*
*/
public TwitterDirectMessage(DirectMessage message, User otherUser) {
mId = message.getId();
mText = message.getText();
mStatusFullMarkup = TwitterUtil.getStatusMarkup(mText, message.getMediaEntities(), message.getURLEntities());
mTextSpanned = URLSpanNoUnderline.stripUnderlines(Html.fromHtml(mStatusFullMarkup.replace("\n", "<br/>") + " "));
mCreatedAt = message.getCreatedAt();
mOtherUserId = otherUser.getId();
mRecipientUserId = message.getRecipientId();
mOtherUserScreenName = otherUser.getScreenName();
mOtherUserName = otherUser.getName();
mOtherUserProfileImageOriginalUrl = otherUser.getOriginalProfileImageURL();
mOtherUserProfileImageMiniUrl = otherUser.getMiniProfileImageURL();
mOtherUserProfileImageNormalUrl = otherUser.getProfileImageURL();
mOtherUserProfileImageBiggerUrl = otherUser.getBiggerProfileImageURL();
TwitterUser sender = new TwitterUser(message.getSender());
mSenderProfileImageOriginalUrl = sender.getProfileImageUrlOriginal();
mSenderProfileImageMiniUrl = sender.getProfileImageUrlMini();
mSenderProfileImageNormalUrl = sender.getProfileImageUrlNormal();
mSenderProfileImageBiggerUrl = sender.getProfileImageUrlBigger();
mMessageType = mRecipientUserId == mOtherUserId ? MessageType.SENT : MessageType.RECEIVED;
}
public TwitterDirectMessage(String jsonAsString) {
try {
JSONObject object = new JSONObject(jsonAsString);
if (object.has(KEY_ID)) {
mId = object.getLong(KEY_ID);
}
if (object.has(KEY_TEXT)) {
mText = object.getString(KEY_TEXT);
}
if (object.has(KEY_STATUS_MARKUP)) {
mStatusFullMarkup = object.getString(KEY_STATUS_MARKUP);
} else if(mText != null) {
mStatusFullMarkup = TwitterUtil.getStatusMarkup(mText, new MediaEntity[0], new URLEntity[0]);
}
if(mStatusFullMarkup!= null)
{
mTextSpanned = URLSpanNoUnderline.stripUnderlines(Html.fromHtml(mStatusFullMarkup.replace("\n", "<br/>") + " "));
}
if (object.has(KEY_CREATED_AT)) {
long createdAt = object.getLong(KEY_CREATED_AT);
mCreatedAt = new Date(createdAt);
}
if (object.has(KEY_RECIPIENT_USER_ID)) {
mRecipientUserId = object.getLong(KEY_RECIPIENT_USER_ID);
}
if (object.has(KEY_OTHER_USER_ID)) {
mOtherUserId = object.getLong(KEY_OTHER_USER_ID);
}
mMessageType = mRecipientUserId == mOtherUserId ? MessageType.SENT : MessageType.RECEIVED;
if (object.has(KEY_OTHER_USER_SCREEN_NAME)) {
mOtherUserScreenName = object.getString(KEY_OTHER_USER_SCREEN_NAME);
}
if (object.has(KEY_OTHER_USER_NAME)) {
mOtherUserName = object.getString(KEY_OTHER_USER_NAME);
}
if (object.has(KEY_PROFILE_IMAGE_OTHER_USER_ORIGINAL_URL)) {
String url = object.getString(KEY_PROFILE_IMAGE_OTHER_USER_ORIGINAL_URL);
if (url != null) {
mOtherUserProfileImageOriginalUrl = url;
}
}
if (object.has(KEY_PROFILE_IMAGE_OTHER_USER_NORMAL_URL)) {
String url = object.getString(KEY_PROFILE_IMAGE_OTHER_USER_NORMAL_URL);
if (url != null) {
mOtherUserProfileImageNormalUrl = url;
}
}
if (object.has(KEY_PROFILE_IMAGE_OTHER_USER_MINI_URL)) {
String url = object.getString(KEY_PROFILE_IMAGE_OTHER_USER_MINI_URL);
if (url != null) {
mOtherUserProfileImageMiniUrl = url;
}
}
if (object.has(KEY_PROFILE_IMAGE_OTHER_USER_BIGGER_URL)) {
String url = object.getString(KEY_PROFILE_IMAGE_OTHER_USER_BIGGER_URL);
if (url != null) {
mOtherUserProfileImageBiggerUrl = url;
}
}
if (object.has(KEY_PROFILE_IMAGE_SENDER_BIGGER_URL)) {
String url = object.getString(KEY_PROFILE_IMAGE_SENDER_ORIGINAL_URL);
if (url != null) {
mSenderProfileImageOriginalUrl = url;
}
}
if (object.has(KEY_PROFILE_IMAGE_SENDER_NORMAL_URL)) {
String url = object.getString(KEY_PROFILE_IMAGE_SENDER_NORMAL_URL);
if (url != null) {
mSenderProfileImageNormalUrl = url;
}
}
if (object.has(KEY_PROFILE_IMAGE_SENDER_MINI_URL)) {
String url = object.getString(KEY_PROFILE_IMAGE_SENDER_MINI_URL);
if (url != null) {
mSenderProfileImageMiniUrl = url;
}
}
if (object.has(KEY_PROFILE_IMAGE_SENDER_BIGGER_URL)) {
String url = object.getString(KEY_PROFILE_IMAGE_SENDER_BIGGER_URL);
if (url != null) {
mSenderProfileImageBiggerUrl = url;
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
public String toString() {
JSONObject object = new JSONObject();
try {
object.put(KEY_ID, mId);
object.put(KEY_TEXT, mText);
object.put(KEY_STATUS_MARKUP, mStatusFullMarkup);
object.put(KEY_CREATED_AT, mCreatedAt.getTime());
object.put(KEY_RECIPIENT_USER_ID, mRecipientUserId);
object.put(KEY_OTHER_USER_ID, mOtherUserId);
object.put(KEY_OTHER_USER_SCREEN_NAME, mOtherUserScreenName);
object.put(KEY_OTHER_USER_NAME, mOtherUserName);
if (mOtherUserProfileImageOriginalUrl != null) {
String url = mOtherUserProfileImageOriginalUrl;
object.put(KEY_PROFILE_IMAGE_OTHER_USER_ORIGINAL_URL, url);
}
if (mOtherUserProfileImageMiniUrl != null) {
String url = mOtherUserProfileImageMiniUrl;
object.put(KEY_PROFILE_IMAGE_OTHER_USER_MINI_URL, url);
}
if (mOtherUserProfileImageNormalUrl != null) {
String url = mOtherUserProfileImageNormalUrl;
object.put(KEY_PROFILE_IMAGE_OTHER_USER_NORMAL_URL, url);
}
if (mOtherUserProfileImageBiggerUrl != null) {
String url = mOtherUserProfileImageBiggerUrl;
object.put(KEY_PROFILE_IMAGE_OTHER_USER_BIGGER_URL, url);
}
if (mSenderProfileImageOriginalUrl != null) {
String url = mSenderProfileImageOriginalUrl;
object.put(KEY_PROFILE_IMAGE_SENDER_ORIGINAL_URL, url);
}
if (mSenderProfileImageMiniUrl != null) {
String url = mSenderProfileImageMiniUrl;
object.put(KEY_PROFILE_IMAGE_SENDER_MINI_URL, url);
}
if (mSenderProfileImageNormalUrl != null) {
String url = mSenderProfileImageNormalUrl;
object.put(KEY_PROFILE_IMAGE_SENDER_NORMAL_URL, url);
}
if (mSenderProfileImageBiggerUrl != null) {
String url = mSenderProfileImageBiggerUrl;
object.put(KEY_PROFILE_IMAGE_SENDER_BIGGER_URL, url);
}
} catch (JSONException e) {
e.printStackTrace();
}
return object.toString();
}
private final String KEY_ID = "mId";
private final String KEY_TEXT = "mText";
private final String KEY_STATUS_MARKUP = "mStatusFullMarkup";
private final String KEY_CREATED_AT = "mCreatedAt";
private final String KEY_OTHER_USER_ID = "mOtherUserId";
private final String KEY_RECIPIENT_USER_ID = "mRecipientUserId";
private final String KEY_OTHER_USER_SCREEN_NAME = "mOtherUserScreenName";
private final String KEY_OTHER_USER_NAME = "mOtherUserName";
private final String KEY_PROFILE_IMAGE_OTHER_USER_ORIGINAL_URL = "mOtherUserProfileImageOriginalUrl";
private final String KEY_PROFILE_IMAGE_OTHER_USER_MINI_URL = "mOtherUserProfileImageMiniUrl";
private final String KEY_PROFILE_IMAGE_OTHER_USER_NORMAL_URL = "mOtherUserProfileImageNormalUrl";
private final String KEY_PROFILE_IMAGE_OTHER_USER_BIGGER_URL = "mOtherUserProfileImageBiggerUrl";
private final String KEY_PROFILE_IMAGE_SENDER_ORIGINAL_URL = "mSenderProfileImageOriginalUrl";
private final String KEY_PROFILE_IMAGE_SENDER_MINI_URL = "mSenderProfileImageMiniUrl";
private final String KEY_PROFILE_IMAGE_SENDER_NORMAL_URL = "mSenderProfileImageNormalUrl";
private final String KEY_PROFILE_IMAGE_SENDER_BIGGER_URL = "mSenderProfileImageBiggerUrl";
/*
*
*/
public long getId() {
return mId;
}
public MessageType getMessageType() {
return mMessageType;
}
public String getText() {
return mText;
}
public Date getCreatedAt() {
return mCreatedAt;
}
public long getOtherUserId() {
return mOtherUserId;
}
public String getOtherUserScreenName() {
return mOtherUserScreenName;
}
public String getOtherUserName() {
return mOtherUserName;
}
public String getOtherUserProfileImageUrl(TwitterManager.ProfileImageSize size) {
switch (size) {
case MINI:
return mOtherUserProfileImageMiniUrl;
case NORMAL:
return mOtherUserProfileImageNormalUrl;
case BIGGER:
return mOtherUserProfileImageBiggerUrl;
case ORIGINAL:
return mOtherUserProfileImageOriginalUrl;
}
return "";
}
public String getSenderProfileImageUrl(TwitterManager.ProfileImageSize size) {
switch (size) {
case MINI:
return mSenderProfileImageMiniUrl;
case NORMAL:
return mSenderProfileImageNormalUrl;
case BIGGER:
return mSenderProfileImageBiggerUrl;
case ORIGINAL:
return mSenderProfileImageOriginalUrl;
}
return "";
}
/*
*
*/
private long mId;
private MessageType mMessageType;
private String mText;
public Spanned mTextSpanned;
private Date mCreatedAt;
private long mRecipientUserId;
private long mOtherUserId;
private String mOtherUserScreenName;
private String mOtherUserName;
private String mOtherUserProfileImageOriginalUrl;
private String mOtherUserProfileImageMiniUrl;
private String mOtherUserProfileImageNormalUrl;
private String mOtherUserProfileImageBiggerUrl;
private String mSenderProfileImageOriginalUrl;
private String mSenderProfileImageMiniUrl;
private String mSenderProfileImageNormalUrl;
private String mSenderProfileImageBiggerUrl;
private String mStatusFullMarkup;
/*
* (non-Javadoc)
*
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
@Override
public int compareTo(TwitterDirectMessage another) {
// TODO: Change to use messageID
if (mCreatedAt.before(another.mCreatedAt)) {
return 1;
}
return -1;
}
}