diff --git a/app/src/main/java/org/mosad/teapod/MainActivity.kt b/app/src/main/java/org/mosad/teapod/MainActivity.kt index d3e29fd..b4dd703 100644 --- a/app/src/main/java/org/mosad/teapod/MainActivity.kt +++ b/app/src/main/java/org/mosad/teapod/MainActivity.kt @@ -151,10 +151,10 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS } } - fun startPlayer(streamUrl: String, title: String) { + fun startPlayer(mediaId: Int, episodeId: Int) { val intent = Intent(this, PlayerActivity::class.java).apply { - putExtra(getString(R.string.intent_stream_url), streamUrl) - putExtra(getString(R.string.intent_title), title) + putExtra(getString(R.string.intent_media_id), mediaId) + putExtra(getString(R.string.intent_episode_id), episodeId) } startActivity(intent) } diff --git a/app/src/main/java/org/mosad/teapod/PlayerActivity.kt b/app/src/main/java/org/mosad/teapod/PlayerActivity.kt index 5fe4c2b..cacaf31 100644 --- a/app/src/main/java/org/mosad/teapod/PlayerActivity.kt +++ b/app/src/main/java/org/mosad/teapod/PlayerActivity.kt @@ -19,6 +19,11 @@ import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory import com.google.android.exoplayer2.util.Util import kotlinx.android.synthetic.main.activity_player.* import kotlinx.android.synthetic.main.player_controls.* +import org.mosad.teapod.parser.AoDParser +import org.mosad.teapod.preferences.Preferences +import org.mosad.teapod.util.DataTypes.MediaType +import org.mosad.teapod.util.Episode +import org.mosad.teapod.util.Media import java.util.concurrent.TimeUnit class PlayerActivity : AppCompatActivity() { @@ -29,7 +34,13 @@ class PlayerActivity : AppCompatActivity() { private lateinit var gestureDetector: GestureDetectorCompat private var streamUrl = "" - private var title = "" + + private var mediaId = 0 + private var episodeId = 0 + + private var media: Media = Media(0, "", MediaType.OTHER) + private var currentEpisode = Episode() + private var nextEpisode: Episode? = null private var playWhenReady = true private var currentWindow = 0 @@ -49,8 +60,9 @@ class PlayerActivity : AppCompatActivity() { playbackPosition = it.getLong(getString(R.string.state_resume_position)) playWhenReady = it.getBoolean(getString(R.string.state_is_playing)) } - streamUrl = intent.getStringExtra(getString(R.string.intent_stream_url)).toString() - title = intent.getStringExtra(getString(R.string.intent_title)).toString() + + mediaId = intent.getIntExtra(getString(R.string.intent_media_id), 0) + episodeId = intent.getIntExtra(getString(R.string.intent_episode_id), 0) gestureDetector = GestureDetectorCompat(this, PlayerGestureListener()) @@ -98,16 +110,30 @@ class PlayerActivity : AppCompatActivity() { } private fun initPlayer() { - if (streamUrl.isEmpty()) { - Log.e(javaClass.name, "No stream url was set.") - return + if (mediaId <= 0) { + Log.e(javaClass.name, "No media id was set.") + this.finish() } + initMedia() initExoPlayer() initVideoView() initController() } + private fun initMedia() { + media = AoDParser.getMediaById(mediaId) + currentEpisode = media.episodes.first { it.id == episodeId } + streamUrlFromEp(currentEpisode) // get current stream + + // get next episode if present + val nextEpIndex = media.episodes.indexOfFirst { it.id == episodeId } + 1 + if (nextEpIndex < (media.episodes.size - 1)) { + println("has next episode") + nextEpisode = media.episodes[nextEpIndex] + } + } + private fun initExoPlayer() { player = SimpleExoPlayer.Builder(this).build() dataSourceFactory = DefaultDataSourceFactory(this, Util.getUserAgent(this, "Teapod")) @@ -174,7 +200,7 @@ class PlayerActivity : AppCompatActivity() { } } - exo_text_title.text = title // set media title + exo_text_title.text = currentEpisode.title // set media title } private fun initActions() { @@ -200,6 +226,30 @@ class PlayerActivity : AppCompatActivity() { player.seekTo(player.currentPosition + fwdTime) } + @Suppress("unused") + private fun playNextEpisode() { + nextEpisode?.let { streamUrlFromEp(it) } + // TODO play + // TODO set next episode if present + } + + /** + * If preferSecondary or priStreamUrl is empty and secondary is present (secStreamOmU), + * use the secondary stream. Else, if the primary stream is set use the primary stream. + * If no stream is present, close the activity. + */ + private fun streamUrlFromEp(episode: Episode) { + streamUrl = if ((Preferences.preferSecondary || episode.priStreamUrl.isEmpty()) && episode.secStreamOmU) { + episode.secStreamUrl + } else if (episode.priStreamUrl.isNotEmpty()) { + episode.priStreamUrl + } else { + Log.e(javaClass.name, "No stream url set.") + this.finish() + return + } + } + /** * hide the status and navigation bar diff --git a/app/src/main/java/org/mosad/teapod/ui/fragments/MediaFragment.kt b/app/src/main/java/org/mosad/teapod/ui/fragments/MediaFragment.kt index 14ec0fc..ea77f36 100644 --- a/app/src/main/java/org/mosad/teapod/ui/fragments/MediaFragment.kt +++ b/app/src/main/java/org/mosad/teapod/ui/fragments/MediaFragment.kt @@ -148,23 +148,9 @@ class MediaFragment(private val media: Media, private val tmdb: TMDBResponse) : text_title.text = nextEpisode.title } - /** - * Play the media's stream - * If prefer secondary or primary is empty and secondary is present (secStreamOmU), - * use the secondary stream. Else, if the primary stream is set use the primary stream. - */ private fun playStream(ep: Episode) { - val streamUrl = if ((Preferences.preferSecondary || ep.priStreamUrl.isEmpty()) && ep.secStreamOmU) { - ep.secStreamUrl - } else if (ep.priStreamUrl.isNotEmpty()) { - ep.priStreamUrl - } else { - Log.e(javaClass.name, "No stream url set.") - "" - } - - Log.d(javaClass.name, "Playing stream: $streamUrl") - (activity as MainActivity).startPlayer(streamUrl, ep.title) + Log.d(javaClass.name, "Starting Player with mediaId: ${media.id}") + (activity as MainActivity).startPlayer(media.id, ep.id) } } \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d821c67..430fde1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -65,8 +65,8 @@ org.mosad.teapod.prefer_secondary - intent_stream_url - intent_title + intent_media_id + intent_episode_id state_resume_window state_resume_position state_is_playing