//
// 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.
//
/**
* Video.java
* VK Dev
*
* Created by Babichev Vitaly on 29.09.13.
* Copyright (c) 2013 VK. All rights reserved.
*/
package com.vk.sdk.api.model;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
import org.json.JSONException;
import org.json.JSONObject;
import static com.vk.sdk.api.model.ParseUtils.parseBoolean;
import static com.vk.sdk.api.model.VKAttachments.TYPE_VIDEO;
/**
* A video object describes an video file.
*/
@SuppressWarnings("unused")
public class VKApiVideo extends VKAttachments.VKApiAttachment implements Parcelable, Identifiable {
/**
* Video ID.
*/
public int id;
/**
* Video owner ID.
*/
public int owner_id;
/**
* Video album ID.
*/
public int album_id;
/**
* Video title.
*/
public String title;
/**
* Text describing video.
*/
public String description;
/**
* Duration of the video in seconds.
*/
public int duration;
/**
* String with video+vid key.
*/
public String link;
/**
* Date when the video was added, as unixtime.
*/
public long date;
/**
* Number of views of the video.
*/
public int views;
/**
* URL of the page with a player that can be used to play a video in the browser.
* Flash and HTML5 video players are supported; the player is always zoomed to fit
* the window size.
*/
public String player;
/**
* URL of the video cover image with the size of 130x98px.
*/
public String photo_130;
/**
* URL of the video cover image with the size of 320x240px.
*/
public String photo_320;
/**
* URL of the video cover image with the size of 640x480px (if available).
*/
public String photo_640;
/**
* Array of all photos.
*/
public VKPhotoSizes photo = new VKPhotoSizes();
/**
* An access key using for get information about hidden objects.
*/
public String access_key;
/**
* Number of comments on the video.
*/
public int comments;
/**
* Whether the current user can comment on the video
*/
public boolean can_comment;
/**
* Whether the current user can repost this video
*/
public boolean can_repost;
/**
* Information whether the current user liked the video.
*/
public boolean user_likes;
/**
* Information whether the the video should be repeated.
*/
public boolean repeat;
/**
* Number of likes on the video.
*/
public int likes;
/**
* Privacy to view of this video.
*/
public int privacy_view;
/**
* Privacy to comment of this video.
*/
public int privacy_comment;
/**
* URL of video with height of 240 pixels. Returns only if you use direct auth.
*/
public String mp4_240;
/**
* URL of video with height of 360 pixels. Returns only if you use direct auth.
*/
public String mp4_360;
/**
* URL of video with height of 480 pixels. Returns only if you use direct auth.
*/
public String mp4_480;
/**
* URL of video with height of 720 pixels. Returns only if you use direct auth.
*/
public String mp4_720;
/**
* URL of the external video link.
*/
public String external;
public VKApiVideo(JSONObject from) throws JSONException
{
parse(from);
}
/**
* Fills a Video instance from JSONObject.
*/
public VKApiVideo parse(JSONObject from) {
id = from.optInt("id");
owner_id = from.optInt("owner_id");
title = from.optString("title");
description = from.optString("description");
duration = from.optInt("duration");
link = from.optString("link");
date = from.optLong("date");
views = from.optInt("views");
comments = from.optInt("comments");
player = from.optString("player");
access_key = from.optString("access_key");
//Log.d("_________________________________________________________", access_key);
album_id = from.optInt("album_id");
JSONObject likes = from.optJSONObject("likes");
if(likes != null) {
this.likes = likes.optInt("count");
user_likes = parseBoolean(likes, "user_likes");
}
can_comment = parseBoolean(from, "can_comment");
can_repost = parseBoolean(from, "can_repost");
repeat = parseBoolean(from, "repeat");
privacy_view = VKPrivacy.parsePrivacy(from.optJSONObject("privacy_view"));
privacy_comment = VKPrivacy.parsePrivacy(from.optJSONObject("privacy_comment"));
JSONObject files = from.optJSONObject("files");
if(files != null) {
mp4_240 = files.optString("mp4_240");
mp4_360 = files.optString("mp4_360");
mp4_480 = files.optString("mp4_480");
mp4_720 = files.optString("mp4_720");
external = files.optString("external");
}
photo_130 = from.optString("photo_130");
if(!TextUtils.isEmpty(photo_130)) {
photo.add(VKApiPhotoSize.create(photo_130, 130));
}
photo_320 = from.optString("photo_320");
if(!TextUtils.isEmpty(photo_320)) {
photo.add(VKApiPhotoSize.create(photo_320, 320));
}
photo_640 = from.optString("photo_640");
if(!TextUtils.isEmpty(photo_640)) {
photo.add(VKApiPhotoSize.create(photo_640, 640));
}
return this;
}
/**
* Creates a Video instance from Parcel.
*/
public VKApiVideo(Parcel in) {
this.id = in.readInt();
this.owner_id = in.readInt();
this.album_id = in.readInt();
this.title = in.readString();
this.description = in.readString();
this.duration = in.readInt();
this.link = in.readString();
this.date = in.readLong();
this.views = in.readInt();
this.player = in.readString();
this.photo_130 = in.readString();
this.photo_320 = in.readString();
this.photo_640 = in.readString();
this.photo = in.readParcelable(VKPhotoSizes.class.getClassLoader());
this.access_key = in.readString();
this.comments = in.readInt();
this.can_comment = in.readByte() != 0;
this.can_repost = in.readByte() != 0;
this.user_likes = in.readByte() != 0;
this.repeat = in.readByte() != 0;
this.likes = in.readInt();
this.privacy_view = in.readInt();
this.privacy_comment = in.readInt();
this.mp4_240 = in.readString();
this.mp4_360 = in.readString();
this.mp4_480 = in.readString();
this.mp4_720 = in.readString();
this.external = in.readString();
}
/**
* Creates empty Video instance.
*/
public VKApiVideo() {
}
@Override
public int getId() {
return id;
}
public static String getVideoUrl(long owner_id, long video_id) {
String res = null;
String base_url = "http://vk.com/";
res = base_url + "video" + owner_id + "_" + video_id;
//sample http://vkontakte.ru/video4491835_158963813
//http://79.gt2.vkadre.ru/assets/videos/f6b1af1e4258-24411750.vk.flv
return res;
}
@Override
public CharSequence toAttachmentString() {
StringBuilder result = new StringBuilder(TYPE_VIDEO).append(owner_id).append('_').append(id);
if(!TextUtils.isEmpty(access_key)) {
result.append('_');
result.append(access_key);
}
return result;
}
@Override
public String getType() {
return TYPE_VIDEO;
}
@Override
public String toString() {
return title;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(this.id);
dest.writeInt(this.owner_id);
dest.writeInt(this.album_id);
dest.writeString(this.title);
dest.writeString(this.description);
dest.writeInt(this.duration);
dest.writeString(this.link);
dest.writeLong(this.date);
dest.writeInt(this.views);
dest.writeString(this.player);
dest.writeString(this.photo_130);
dest.writeString(this.photo_320);
dest.writeString(this.photo_640);
dest.writeParcelable(this.photo, flags);
dest.writeString(this.access_key);
dest.writeInt(this.comments);
dest.writeByte(can_comment ? (byte) 1 : (byte) 0);
dest.writeByte(can_repost ? (byte) 1 : (byte) 0);
dest.writeByte(user_likes ? (byte) 1 : (byte) 0);
dest.writeByte(repeat ? (byte) 1 : (byte) 0);
dest.writeInt(this.likes);
dest.writeInt(this.privacy_view);
dest.writeInt(this.privacy_comment);
dest.writeString(this.mp4_240);
dest.writeString(this.mp4_360);
dest.writeString(this.mp4_480);
dest.writeString(this.mp4_720);
dest.writeString(this.external);
}
public static Creator<VKApiVideo> CREATOR = new Creator<VKApiVideo>() {
public VKApiVideo createFromParcel(Parcel source) {
return new VKApiVideo(source);
}
public VKApiVideo[] newArray(int size) {
return new VKApiVideo[size];
}
};
}