//
// Copyright (c) 2014 VK.com
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of
// this software and associated documentation files (the "Software"), to deal in
// the Software without restriction, including without limitation the rights to
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
// the Software, and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
/**
* Post.java
* vk-android-sdk
*
* Created by Babichev Vitaly on 19.01.14.
* Copyright (c) 2014 VK. All rights reserved.
*/
package com.vk.sdk.api.model;
import android.os.Parcel;
import org.json.JSONException;
import org.json.JSONObject;
/**
* A post object describes a wall post.
*/
@SuppressWarnings("unused")
public class VKApiPost extends VKAttachments.VKApiAttachment implements Identifiable, android.os.Parcelable {
/**
* Post ID on the wall, positive number
*/
public int id;
/**
* Wall owner ID.
*/
public int to_id;
/**
* ID of the user who posted.
*/
public int from_id;
/**
* Date (in Unix time) the post was added.
*/
public long date;
/**
* Text of the post.
*/
public String text;
/**
* ID of the wall owner the post to which the reply is addressed (if the post is a reply to another wall post).
*/
public int reply_owner_id;
/**
* ID of the wall post to which the reply is addressed (if the post is a reply to another wall post).
*/
public int reply_post_id;
/**
* True, if the post was created with "Friends only" option.
*/
public boolean friends_only;
/**
* Number of comments.
*/
public int comments_count;
/**
* Whether the current user can leave comments to the post (false — cannot, true — can)
*/
public boolean can_post_comment;
/**
* Number of users who liked the post.
*/
public int likes_count;
/**
* Whether the user liked the post (false — not liked, true — liked)
*/
public boolean user_likes;
/**
* Whether the user can like the post (false — cannot, true — can).
*/
public boolean can_like;
/**
* Whether the user can repost (false — cannot, true — can).
*/
public boolean can_publish;
/**
* Number of users who copied the post.
*/
public int reposts_count;
/**
* Whether the user reposted the post (false — not reposted, true — reposted).
*/
public boolean user_reposted;
/**
* Type of the post, can be: post, copy, reply, postpone, suggest.
*/
public String post_type;
/**
* Information about attachments to the post (photos, links, etc.), if any;
*/
public VKAttachments attachments = new VKAttachments();
/**
* Information about location.
*/
public VKApiPlace geo;
/**
* ID of the author (if the post was published by a community and signed by a user).
*/
public int signer_id;
/**
* List of history of the reposts.
*/
public VKList<VKApiPost> copy_history;
public VKApiPost(JSONObject from) throws JSONException
{
parse(from);
}
/**
* Fills a Post instance from JSONObject.
*/
public VKApiPost parse(JSONObject source) throws JSONException {
id = source.optInt("id");
to_id = source.optInt("to_id");
from_id = source.optInt("from_id");
date = source.optLong("date");
text = source.optString("text");
reply_owner_id = source.optInt("reply_owner_id");
reply_post_id = source.optInt("reply_post_id");
friends_only = ParseUtils.parseBoolean(source, "friends_only");
JSONObject comments = source.optJSONObject("comments");
if(comments != null) {
comments_count = comments.optInt("count");
can_post_comment = ParseUtils.parseBoolean(comments, "can_post");
}
JSONObject likes = source.optJSONObject("likes");
if(likes != null) {
likes_count = likes.optInt("count");
user_likes = ParseUtils.parseBoolean(likes, "user_likes");
can_like = ParseUtils.parseBoolean(likes, "can_like");
can_publish = ParseUtils.parseBoolean(likes, "can_publish");
}
JSONObject reposts = source.optJSONObject("reposts");
if(reposts != null) {
reposts_count = reposts.optInt("count");
user_reposted = ParseUtils.parseBoolean(reposts, "user_reposted");
}
post_type = source.optString("post_type");
attachments.fill(source.optJSONArray("attachments"));
JSONObject geo = source.optJSONObject("geo");
if(geo != null) {
this.geo = new VKApiPlace().parse(geo);
}
signer_id = source.optInt("signer_id");
copy_history = new VKList<VKApiPost>(source.optJSONArray("copy_history"), VKApiPost.class);
return this;
}
/**
* Creates a Post instance from Parcel.
*/
public VKApiPost(Parcel in) {
this.id = in.readInt();
this.to_id = in.readInt();
this.from_id = in.readInt();
this.date = in.readLong();
this.text = in.readString();
this.reply_owner_id = in.readInt();
this.reply_post_id = in.readInt();
this.friends_only = in.readByte() != 0;
this.comments_count = in.readInt();
this.can_post_comment = in.readByte() != 0;
this.likes_count = in.readInt();
this.user_likes = in.readByte() != 0;
this.can_like = in.readByte() != 0;
this.can_publish = in.readByte() != 0;
this.reposts_count = in.readInt();
this.user_reposted = in.readByte() != 0;
this.post_type = in.readString();
this.attachments = in.readParcelable(VKAttachments.class.getClassLoader());
this.geo = in.readParcelable(VKApiPlace.class.getClassLoader());
this.signer_id = in.readInt();
}
/**
* Creates empty Post instance.
*/
public VKApiPost() {
}
@Override
public int getId() {
return id;
}
@Override
public CharSequence toAttachmentString() {
return new StringBuilder(VKAttachments.TYPE_POST).append(to_id).append('_').append(id);
}
@Override
public String getType() {
return VKAttachments.TYPE_POST;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(this.id);
dest.writeInt(this.to_id);
dest.writeInt(this.from_id);
dest.writeLong(this.date);
dest.writeString(this.text);
dest.writeInt(this.reply_owner_id);
dest.writeInt(this.reply_post_id);
dest.writeByte(friends_only ? (byte) 1 : (byte) 0);
dest.writeInt(this.comments_count);
dest.writeByte(can_post_comment ? (byte) 1 : (byte) 0);
dest.writeInt(this.likes_count);
dest.writeByte(user_likes ? (byte) 1 : (byte) 0);
dest.writeByte(can_like ? (byte) 1 : (byte) 0);
dest.writeByte(can_publish ? (byte) 1 : (byte) 0);
dest.writeInt(this.reposts_count);
dest.writeByte(user_reposted ? (byte) 1 : (byte) 0);
dest.writeString(this.post_type);
dest.writeParcelable(attachments, flags);
dest.writeParcelable(this.geo, flags);
dest.writeInt(this.signer_id);
}
public static Creator<VKApiPost> CREATOR = new Creator<VKApiPost>() {
public VKApiPost createFromParcel(Parcel source) {
return new VKApiPost(source);
}
public VKApiPost[] newArray(int size) {
return new VKApiPost[size];
}
};
}