2020-10-11 10:02:00 +02:00
package org.mosad.teapod.ui
import android.os.Bundle
2020-10-11 23:16:47 +02:00
import android.util.Log
2020-10-11 10:02:00 +02:00
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
2020-10-12 09:54:32 +02:00
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
2020-10-11 10:02:00 +02:00
import com.bumptech.glide.Glide
import kotlinx.android.synthetic.main.fragment_media.*
2020-10-11 13:18:20 +02:00
import org.mosad.teapod.MainActivity
2020-10-11 10:02:00 +02:00
import org.mosad.teapod.R
2020-10-11 23:16:47 +02:00
import org.mosad.teapod.util.DataTypes.MediaType
2020-10-12 09:54:32 +02:00
import org.mosad.teapod.util.EpisodesAdapter
2020-10-12 17:52:24 +02:00
import org.mosad.teapod.util.Media
2020-10-12 20:30:45 +02:00
import org.mosad.teapod.util.TMDBResponse
2020-10-11 10:02:00 +02:00
2020-10-12 20:30:45 +02:00
class MediaFragment ( private val media : Media , private val tmdb : TMDBResponse ) : Fragment ( ) {
2020-10-11 23:16:47 +02:00
2020-10-12 09:54:32 +02:00
private lateinit var adapterRecEpisodes : EpisodesAdapter
private lateinit var viewManager : RecyclerView . LayoutManager
2020-10-11 10:02:00 +02:00
override fun onCreateView ( inflater : LayoutInflater , container : ViewGroup ? , savedInstanceState : Bundle ? ) : View ? {
return inflater . inflate ( R . layout . fragment _media , container , false )
}
override fun onViewCreated ( view : View , savedInstanceState : Bundle ? ) {
super . onViewCreated ( view , savedInstanceState )
2020-10-11 23:16:47 +02:00
// generic gui
2020-10-12 17:52:24 +02:00
text _title . text = media . title
2020-10-12 20:30:45 +02:00
if ( tmdb . posterUrl . isNotEmpty ( ) ) {
Glide . with ( requireContext ( ) ) . load ( tmdb . posterUrl ) . into ( image _poster )
text _desc . text = tmdb . overview
Log . d ( javaClass . name , " TMDB data present " )
} else {
Glide . with ( requireContext ( ) ) . load ( media . posterLink ) . into ( image _poster )
text _desc . text = media . shortDesc
Log . d ( javaClass . name , " No TMDB data present, using Aod " )
}
2020-10-11 23:16:47 +02:00
// specific gui
2020-10-12 17:52:24 +02:00
if ( media . type == MediaType . TVSHOW ) {
val episodeTitles = media . episodes . map { it . title }
2020-10-12 09:54:32 +02:00
2020-10-12 17:52:24 +02:00
adapterRecEpisodes = EpisodesAdapter ( episodeTitles )
2020-10-12 09:54:32 +02:00
viewManager = LinearLayoutManager ( context )
recycler _episodes . layoutManager = viewManager
recycler _episodes . adapter = adapterRecEpisodes
2020-10-11 23:16:47 +02:00
2020-10-12 17:52:24 +02:00
} else if ( media . type == MediaType . MOVIE ) {
2020-10-12 09:54:32 +02:00
recycler _episodes . visibility = View . GONE
2020-10-11 23:16:47 +02:00
}
2020-10-11 10:02:00 +02:00
2020-10-11 23:16:47 +02:00
2020-10-12 17:52:24 +02:00
println ( " media streams: ${media.episodes} " )
2020-10-11 10:02:00 +02:00
initActions ( )
}
private fun initActions ( ) {
2020-10-11 23:16:47 +02:00
button _play . setOnClickListener {
2020-10-12 17:52:24 +02:00
when ( media . type ) {
MediaType . MOVIE -> playStream ( media . episodes . first ( ) . streamUrl )
MediaType . TVSHOW -> playStream ( media . episodes . first ( ) . streamUrl )
MediaType . OTHER -> Log . e ( javaClass . name , " Wrong Type, please report this issue. " )
}
2020-10-11 23:16:47 +02:00
}
2020-10-12 09:54:32 +02:00
// set onItemClick only in adapter is initialized
if ( this :: adapterRecEpisodes . isInitialized ) {
adapterRecEpisodes . onItemClick = { item , position ->
2020-10-12 17:52:24 +02:00
playStream ( media . episodes [ position ] . streamUrl )
2020-10-12 09:54:32 +02:00
}
2020-10-11 23:16:47 +02:00
}
2020-10-11 10:02:00 +02:00
}
2020-10-11 23:16:47 +02:00
private fun playStream ( url : String ) {
2020-10-11 13:18:20 +02:00
val mainActivity = activity as MainActivity
2020-10-11 23:16:47 +02:00
mainActivity . startPlayer ( url )
2020-10-11 10:02:00 +02:00
}
}