package org.libre.agosto.p2play.ajax import android.util.JsonReader import android.util.JsonToken import org.libre.agosto.p2play.ManagerSingleton import org.libre.agosto.p2play.models.VideoModel import java.io.InputStreamReader class Videos: Client() { private fun parseVideos(data: JsonReader): ArrayList{ val videos = arrayListOf() data.beginObject() while (data.hasNext()){ when(data.nextName()){ "data"->{ data.beginArray() while (data.hasNext()) { val video = VideoModel() data.beginObject() while (data.hasNext()){ val key = data.nextName() when (key.toString()) { "id"-> video.id = data.nextInt() "name"->{ video.name= data.nextString() } "description"->{ if(data.peek() == JsonToken.STRING) video.description = data.nextString() else data.skipValue() } "duration"->{ video.duration = data.nextInt() } "thumbnailPath"->{ video.thumbUrl = data.nextString() } "embedPath"->{ video.embedUrl = data.nextString() } "views"->{ video.views = data.nextInt() } "channel"->{ data.beginObject() while (data.hasNext()){ val acKey = data.nextName() when(acKey.toString()){ "displayName"-> video.username=data.nextString() "avatar"-> { if(data.peek() == JsonToken.BEGIN_OBJECT){ data.beginObject() while (data.hasNext()){ val avKey = data.nextName() when(avKey){ "path"-> video.userImageUrl = data.nextString() else-> data.skipValue() } } data.endObject() } else data.skipValue() } "uuid" -> video.userUuid = data.nextString() "host" -> video.userHost = data.nextString() "name" -> video.nameChannel = data.nextString() else-> data.skipValue() } } data.endObject() } else->{ data.skipValue() } } } data.endObject() videos.add(video) } data.endArray() } else-> data.skipValue() } } data.endObject() return videos } private fun getVideos(start:Int, sort:String = "-publishedAt", filter:String = ""):ArrayList{ val nsfw = ManagerSingleton.nfsw val count = ManagerSingleton.videos_count var params = "start=$start&count=$count&sort=$sort&nsfw=$nsfw" if(filter != "") params+="&filter=$filter" val con = this._newCon("videos?$params","GET") var videos = arrayListOf() try { if (con.responseCode == 200) { val response = InputStreamReader(con.inputStream) val data = JsonReader(response) videos = parseVideos(data) } } catch(err:Exception){ err.printStackTrace() } return videos } fun getLastVideos(start:Int = 0): ArrayList{ return this.getVideos(start) } fun getPopularVideos(start:Int = 0): ArrayList{ return this.getVideos(start,"-views") } fun getTrendingVideos(start:Int = 0): ArrayList{ return this.getVideos(start,"-trending") } fun getLocalVideos(start:Int = 0): ArrayList{ return this.getVideos(start,"-publishedAt", "local") } fun myVideos(token: String, start: Int = 0): ArrayList{ val count = ManagerSingleton.videos_count val params = "start=$start&count=$count" val con = this._newCon("users/me/videos?$params","GET", token) var videos = arrayListOf() try { if (con.responseCode == 200) { val response = InputStreamReader(con.inputStream) val data = JsonReader(response) videos = parseVideos(data) } } catch(err:Exception){ err.printStackTrace() } return videos } fun videoSubscriptions(token: String, start: Int = 0): ArrayList{ val count = ManagerSingleton.videos_count val params = "start=$start&count=$count" val con = this._newCon("users/me/subscriptions/videos?$params","GET", token) var videos = arrayListOf() try { if (con.responseCode == 200) { val response = InputStreamReader(con.inputStream) val data = JsonReader(response) videos = parseVideos(data) } } catch(err:Exception){ err.printStackTrace() } return videos } fun search(text: String, start: Int = 0): ArrayList{ val count = ManagerSingleton.videos_count val nsfw = ManagerSingleton.nfsw val params = "search=$text&start=$start&count=$count&nsfw=$nsfw" val con = this._newCon("search/videos?$params","GET") var videos = arrayListOf() try { if (con.responseCode == 200) { val response = InputStreamReader(con.inputStream) val data = JsonReader(response) videos = parseVideos(data) } } catch(err:Exception){ err.printStackTrace() } return videos } fun fullDescription(videoId: Int): String{ val con = this._newCon("videos/$videoId/description","GET") var description = "" try { if (con.responseCode == 200) { val response = InputStreamReader(con.inputStream) val data = JsonReader(response) data.beginObject() while (data.hasNext()){ val name = data.nextName() when(name){ "description" -> description = data.nextString() else -> data.skipValue() } } data.endObject() data.close() } } catch(err:Exception){ err.printStackTrace() description = "Error!" } return description } }