/*
* Copyright (C) 2014 Peter Cai
*
* This file is part of BlackLight
*
* BlackLight is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* BlackLight is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with BlackLight. If not, see <http://www.gnu.org/licenses/>.
*/
package com.shaweibo.biu.model;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.SpannableString;
import java.util.ArrayList;
/*
This class represents a message (or comment)
In timelines or message pages
Including auto-highlight function
Matching with Json from Weibo Api
credits to: qii(github.com/qii/weiciyuan)
author: PeterCxy
*/
public class MessageModel implements Parcelable
{
public static class PictureUrl implements Parcelable {
// Picture url
// OMG Sina why you use a special class for a simple data!
private String thumbnail_pic;
public String getThumbnail() {
return thumbnail_pic;
}
public String getLarge() {
return thumbnail_pic.replace("thumbnail", "large");
}
public String getMedium() {
return thumbnail_pic.replace("thumbnail", "bmiddle");
}
public boolean isGif(){
return thumbnail_pic.endsWith(".gif");
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(thumbnail_pic);
}
public static final Creator<PictureUrl> CREATOR = new Creator<PictureUrl>() {
@Override
public MessageModel.PictureUrl createFromParcel(Parcel in) {
MessageModel.PictureUrl ret = new MessageModel.PictureUrl();
ret.thumbnail_pic = in.readString();
return ret;
}
@Override
public MessageModel.PictureUrl[] newArray(int size) {
return new MessageModel.PictureUrl[size];
}
};
}
// Json mapping fields
public String created_at;
public long id;
public long mid;
public String idstr;
public String text; // content of this weibo
public String source;
public boolean favorited;
public boolean truncated;
public boolean liked;
public String in_reply_to_status_id;
public String in_reply_to_user_id;
public String in_reply_to_screen_name;
public String thumbnail_pic;
public String bmiddle_pic;
public String original_pic;
public GeoModel geo;
public UserModel user;
public MessageModel retweeted_status; // if retweeted, this field will be the original post
public int reposts_count;
public int comments_count;
public int attitudes_count;
public transient SpannableString span, origSpan;
public transient long millis;
// public Object visible; ignored. We do not need this field at all.
// Array field
public ArrayList<PictureUrl> pic_urls = new ArrayList<PictureUrl>();
public boolean hasMultiplePictures() {
return pic_urls.size() > 1;
}
@Override
public boolean equals(Object o) {
if (o instanceof MessageModel) {
return ((MessageModel) o).id == id;
} else {
return super.equals(o);
}
}
@Override
public int hashCode() {
return idstr.hashCode();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(created_at);
dest.writeLong(id);
dest.writeLong(mid);
dest.writeString(idstr);
dest.writeString(text);
dest.writeString(source);
dest.writeBooleanArray(new boolean[]{favorited, truncated, liked});
dest.writeString(in_reply_to_status_id);
dest.writeString(in_reply_to_user_id);
dest.writeString(in_reply_to_screen_name);
dest.writeString(thumbnail_pic);
dest.writeString(bmiddle_pic);
dest.writeString(original_pic);
dest.writeParcelable(geo, flags);
dest.writeParcelable(user, flags);
dest.writeParcelable(retweeted_status, flags);
dest.writeInt(reposts_count);
dest.writeInt(comments_count);
dest.writeInt(attitudes_count);
dest.writeTypedList(pic_urls);
dest.writeLong(millis);
}
public static final Creator<MessageModel> CREATOR = new Creator<MessageModel>() {
@Override
public MessageModel createFromParcel(Parcel in) {
MessageModel ret = new MessageModel();
ret.created_at = in.readString();
ret.id = in.readLong();
ret.mid = in.readLong();
ret.idstr = in.readString();
ret.text = in.readString();
ret.source = in.readString();
boolean[] array = new boolean[3];
in.readBooleanArray(array);
ret.favorited = array[0];
ret.truncated = array[1];
ret.liked = array[2];
ret.in_reply_to_status_id = in.readString();
ret.in_reply_to_user_id = in.readString();
ret.in_reply_to_screen_name = in.readString();
ret.thumbnail_pic = in.readString();
ret.bmiddle_pic = in.readString();
ret.original_pic = in.readString();
ret.geo = in.readParcelable(GeoModel.class.getClassLoader());
ret.user = in.readParcelable(UserModel.class.getClassLoader());
ret.retweeted_status = in.readParcelable(MessageModel.class.getClassLoader());
ret.reposts_count = in.readInt();
ret.comments_count = in.readInt();
ret.attitudes_count = in.readInt();
in.readTypedList(ret.pic_urls, PictureUrl.CREATOR);
ret.millis = in.readLong();
return ret;
}
@Override
public MessageModel[] newArray(int size) {
return new MessageModel[size];
}
};
}