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