parent
4ae23c4380
commit
6100533c4d
|
@ -26,10 +26,10 @@ import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import com.google.android.material.bottomnavigation.BottomNavigationView
|
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.commit
|
import androidx.fragment.app.commit
|
||||||
|
import com.google.android.material.bottomnavigation.BottomNavigationView
|
||||||
import kotlinx.android.synthetic.main.activity_main.*
|
import kotlinx.android.synthetic.main.activity_main.*
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
@ -41,7 +41,10 @@ import org.mosad.teapod.ui.components.LoginDialog
|
||||||
import org.mosad.teapod.ui.home.HomeFragment
|
import org.mosad.teapod.ui.home.HomeFragment
|
||||||
import org.mosad.teapod.ui.library.LibraryFragment
|
import org.mosad.teapod.ui.library.LibraryFragment
|
||||||
import org.mosad.teapod.ui.search.SearchFragment
|
import org.mosad.teapod.ui.search.SearchFragment
|
||||||
import org.mosad.teapod.util.*
|
import org.mosad.teapod.util.LoadingFragment
|
||||||
|
import org.mosad.teapod.util.Media
|
||||||
|
import org.mosad.teapod.util.TMDBApiController
|
||||||
|
import kotlin.system.measureTimeMillis
|
||||||
|
|
||||||
class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemSelectedListener {
|
class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemSelectedListener {
|
||||||
|
|
||||||
|
@ -109,7 +112,11 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO save last loginSuccess, if false show login dialog even if credentials are present
|
// TODO save last loginSuccess, if false show login dialog even if credentials are present
|
||||||
AoDParser().listAnimes()
|
// running login and list in parallel does not bring any speed improvements
|
||||||
|
val time = measureTimeMillis {
|
||||||
|
AoDParser().listAnimes()
|
||||||
|
}
|
||||||
|
Log.i(javaClass.name, "login and list in $time ms")
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -22,6 +22,8 @@ class AoDParser {
|
||||||
private val loginPath = "/users/sign_in"
|
private val loginPath = "/users/sign_in"
|
||||||
private val libraryPath = "/animes"
|
private val libraryPath = "/animes"
|
||||||
|
|
||||||
|
private val userAgent = "Mozilla/5.0 (X11; Linux x86_64; rv:80.0) Gecko/20100101 Firefox/80.0"
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private var csrfToken: String = ""
|
private var csrfToken: String = ""
|
||||||
private var sessionCookies = mutableMapOf<String, String>()
|
private var sessionCookies = mutableMapOf<String, String>()
|
||||||
|
@ -32,8 +34,6 @@ class AoDParser {
|
||||||
|
|
||||||
fun login(): Boolean = runBlocking {
|
fun login(): Boolean = runBlocking {
|
||||||
|
|
||||||
val userAgent = "Mozilla/5.0 (X11; Linux x86_64; rv:80.0) Gecko/20100101 Firefox/80.0"
|
|
||||||
|
|
||||||
withContext(Dispatchers.Default) {
|
withContext(Dispatchers.Default) {
|
||||||
// get the authenticity token
|
// get the authenticity token
|
||||||
val resAuth = Jsoup.connect(baseUrl + loginPath)
|
val resAuth = Jsoup.connect(baseUrl + loginPath)
|
||||||
|
@ -64,7 +64,6 @@ class AoDParser {
|
||||||
//println(resLogin.body())
|
//println(resLogin.body())
|
||||||
sessionCookies = resLogin.cookies()
|
sessionCookies = resLogin.cookies()
|
||||||
loginSuccess = resLogin.body().contains("Hallo, du bist jetzt angemeldet.")
|
loginSuccess = resLogin.body().contains("Hallo, du bist jetzt angemeldet.")
|
||||||
|
|
||||||
Log.i(javaClass.name, "Status: ${resLogin.statusCode()} (${resLogin.statusMessage()}), login successful: $loginSuccess")
|
Log.i(javaClass.name, "Status: ${resLogin.statusCode()} (${resLogin.statusMessage()}), login successful: $loginSuccess")
|
||||||
|
|
||||||
loginSuccess
|
loginSuccess
|
||||||
|
@ -207,9 +206,10 @@ class AoDParser {
|
||||||
MediaType.MOVIE -> {
|
MediaType.MOVIE -> {
|
||||||
val movie = JsonParser.parseString(res.body()).asJsonObject
|
val movie = JsonParser.parseString(res.body()).asJsonObject
|
||||||
.get("playlist").asJsonArray
|
.get("playlist").asJsonArray
|
||||||
|
.first().asJsonObject
|
||||||
|
|
||||||
movie.first().asJsonObject.get("sources").asJsonArray.toList().forEach {
|
movie.get("sources").asJsonArray.first().apply {
|
||||||
episodes.first().streamUrl = it.asJsonObject.get("file").asString
|
episodes.first().streamUrl = this.asJsonObject.get("file").asString
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -217,7 +217,6 @@ class AoDParser {
|
||||||
val episodesJson = JsonParser.parseString(res.body()).asJsonObject
|
val episodesJson = JsonParser.parseString(res.body()).asJsonObject
|
||||||
.get("playlist").asJsonArray
|
.get("playlist").asJsonArray
|
||||||
|
|
||||||
|
|
||||||
episodesJson.forEach { jsonElement ->
|
episodesJson.forEach { jsonElement ->
|
||||||
val episodeId = jsonElement.asJsonObject.get("mediaid")
|
val episodeId = jsonElement.asJsonObject.get("mediaid")
|
||||||
val episodeStream = jsonElement.asJsonObject.get("sources").asJsonArray
|
val episodeStream = jsonElement.asJsonObject.get("sources").asJsonArray
|
||||||
|
|
|
@ -46,7 +46,6 @@ class MediaFragment(private val media: Media, private val tmdb: TMDBResponse) :
|
||||||
// generic gui
|
// generic gui
|
||||||
val backdropUrl = if (tmdb.backdropUrl.isNotEmpty()) tmdb.backdropUrl else media.info.posterLink
|
val backdropUrl = if (tmdb.backdropUrl.isNotEmpty()) tmdb.backdropUrl else media.info.posterLink
|
||||||
val posterUrl = if (tmdb.posterUrl.isNotEmpty()) tmdb.posterUrl else media.info.posterLink
|
val posterUrl = if (tmdb.posterUrl.isNotEmpty()) tmdb.posterUrl else media.info.posterLink
|
||||||
val posterCornerRadius = if (tmdb.posterUrl.isNotEmpty()) 60 else 30
|
|
||||||
|
|
||||||
Glide.with(requireContext()).load(backdropUrl)
|
Glide.with(requireContext()).load(backdropUrl)
|
||||||
.apply(RequestOptions.placeholderOf(ColorDrawable(Color.DKGRAY)))
|
.apply(RequestOptions.placeholderOf(ColorDrawable(Color.DKGRAY)))
|
||||||
|
@ -82,6 +81,9 @@ class MediaFragment(private val media: Media, private val tmdb: TMDBResponse) :
|
||||||
|
|
||||||
private fun initActions() {
|
private fun initActions() {
|
||||||
button_play.setOnClickListener {
|
button_play.setOnClickListener {
|
||||||
|
println(media.episodes)
|
||||||
|
|
||||||
|
|
||||||
when (media.type) {
|
when (media.type) {
|
||||||
MediaType.MOVIE -> playStream(media.episodes.first().streamUrl)
|
MediaType.MOVIE -> playStream(media.episodes.first().streamUrl)
|
||||||
MediaType.TVSHOW -> playStream(media.episodes.first().streamUrl)
|
MediaType.TVSHOW -> playStream(media.episodes.first().streamUrl)
|
||||||
|
@ -104,6 +106,9 @@ class MediaFragment(private val media: Media, private val tmdb: TMDBResponse) :
|
||||||
|
|
||||||
private fun playStream(url: String) {
|
private fun playStream(url: String) {
|
||||||
val mainActivity = activity as MainActivity
|
val mainActivity = activity as MainActivity
|
||||||
|
|
||||||
|
println("url is: $url")
|
||||||
|
|
||||||
mainActivity.startPlayer(url)
|
mainActivity.startPlayer(url)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,7 @@ class SearchFragment : Fragment() {
|
||||||
layoutManager = GridLayoutManager(context, 2)
|
layoutManager = GridLayoutManager(context, 2)
|
||||||
adapter = MediaItemAdapter(AoDParser.mediaList)
|
adapter = MediaItemAdapter(AoDParser.mediaList)
|
||||||
adapter!!.onItemClick = { media, _ ->
|
adapter!!.onItemClick = { media, _ ->
|
||||||
|
search_text.clearFocus()
|
||||||
(activity as MainActivity).showMediaFragment(media)
|
(activity as MainActivity).showMediaFragment(media)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue