diff --git a/app/src/main/java/org/mosad/teapod/MainActivity.kt b/app/src/main/java/org/mosad/teapod/MainActivity.kt
index 9302079..65ab332 100644
--- a/app/src/main/java/org/mosad/teapod/MainActivity.kt
+++ b/app/src/main/java/org/mosad/teapod/MainActivity.kt
@@ -18,6 +18,7 @@ import org.mosad.teapod.ui.home.HomeFragment
import org.mosad.teapod.ui.library.LibraryFragment
import org.mosad.teapod.ui.search.SearchFragment
import org.mosad.teapod.util.Media
+import org.mosad.teapod.util.TMDBApiController
class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemSelectedListener {
@@ -90,7 +91,9 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS
fun showDetailFragment(media: Media) {
media.episodes = AoDParser().loadStreams(media) // load the streams for the selected media
- val mediaFragment = MediaFragment(media)
+ val tmdb = TMDBApiController().search(media.title, media.type)
+
+ val mediaFragment = MediaFragment(media, tmdb)
supportFragmentManager.commit {
add(R.id.nav_host_fragment, mediaFragment, "MediaFragment")
addToBackStack(null)
diff --git a/app/src/main/java/org/mosad/teapod/parser/AoDParser.kt b/app/src/main/java/org/mosad/teapod/parser/AoDParser.kt
index 92250a4..69868f8 100644
--- a/app/src/main/java/org/mosad/teapod/parser/AoDParser.kt
+++ b/app/src/main/java/org/mosad/teapod/parser/AoDParser.kt
@@ -14,7 +14,7 @@ import kotlin.collections.ArrayList
class AoDParser {
- private val baseURL = "https://www.anime-on-demand.de"
+ private val baseUrl = "https://www.anime-on-demand.de"
private val loginPath = "/users/sign_in"
private val libraryPath = "/animes"
@@ -31,7 +31,7 @@ class AoDParser {
withContext(Dispatchers.Default) {
// get the authenticity token
- val resAuth = Jsoup.connect(baseURL + loginPath)
+ val resAuth = Jsoup.connect(baseUrl + loginPath)
.header("User-Agent", userAgent)
.execute()
@@ -49,7 +49,7 @@ class AoDParser {
Pair("authenticity_token", authenticityToken)
)
- val resLogin = Jsoup.connect(baseURL + loginPath)
+ val resLogin = Jsoup.connect(baseUrl + loginPath)
.method(Connection.Method.POST)
.data(data)
.postDataCharset("UTF-8")
@@ -72,7 +72,7 @@ class AoDParser {
if (sessionCookies.isEmpty()) login()
withContext(Dispatchers.Default) {
- val resAnimes = Jsoup.connect(baseURL + libraryPath)
+ val resAnimes = Jsoup.connect(baseUrl + libraryPath)
.cookies(sessionCookies)
.get()
@@ -115,7 +115,7 @@ class AoDParser {
withContext(Dispatchers.Default) {
- val res = Jsoup.connect(baseURL + media.link)
+ val res = Jsoup.connect(baseUrl + media.link)
.cookies(sessionCookies)
.get()
@@ -144,7 +144,7 @@ class AoDParser {
Pair("X-Requested-With", "XMLHttpRequest"),
)
- val res = Jsoup.connect(baseURL + playlistPath)
+ val res = Jsoup.connect(baseUrl + playlistPath)
.ignoreContentType(true)
.cookies(sessionCookies)
.headers(headers)
diff --git a/app/src/main/java/org/mosad/teapod/ui/MediaFragment.kt b/app/src/main/java/org/mosad/teapod/ui/MediaFragment.kt
index 8a4bc5a..148bdb5 100644
--- a/app/src/main/java/org/mosad/teapod/ui/MediaFragment.kt
+++ b/app/src/main/java/org/mosad/teapod/ui/MediaFragment.kt
@@ -15,8 +15,9 @@ import org.mosad.teapod.R
import org.mosad.teapod.util.DataTypes.MediaType
import org.mosad.teapod.util.EpisodesAdapter
import org.mosad.teapod.util.Media
+import org.mosad.teapod.util.TMDBResponse
-class MediaFragment(private val media: Media) : Fragment() {
+class MediaFragment(private val media: Media, private val tmdb: TMDBResponse) : Fragment() {
private lateinit var adapterRecEpisodes: EpisodesAdapter
private lateinit var viewManager: RecyclerView.LayoutManager
@@ -30,13 +31,20 @@ class MediaFragment(private val media: Media) : Fragment() {
super.onViewCreated(view, savedInstanceState)
// generic gui
- Glide.with(requireContext()).load(media.posterLink).into(image_poster)
text_title.text = media.title
- text_desc.text = media.shortDesc
+
+ 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")
+ }
// specific gui
if (media.type == MediaType.TVSHOW) {
- // TODO
val episodeTitles = media.episodes.map { it.title }
adapterRecEpisodes = EpisodesAdapter(episodeTitles)
diff --git a/app/src/main/java/org/mosad/teapod/ui/library/LibraryFragment.kt b/app/src/main/java/org/mosad/teapod/ui/library/LibraryFragment.kt
index fca99f4..8e9c5c9 100644
--- a/app/src/main/java/org/mosad/teapod/ui/library/LibraryFragment.kt
+++ b/app/src/main/java/org/mosad/teapod/ui/library/LibraryFragment.kt
@@ -31,8 +31,10 @@ class LibraryFragment : Fragment() {
// create and set the adapter, needs context
withContext(Dispatchers.Main) {
- adapter = CustomAdapter(requireContext(), AoDParser.mediaList)
- list_library.adapter = adapter
+ context?.let {
+ adapter = CustomAdapter(it, AoDParser.mediaList)
+ list_library.adapter = adapter
+ }
}
}
diff --git a/app/src/main/java/org/mosad/teapod/ui/search/SearchFragment.kt b/app/src/main/java/org/mosad/teapod/ui/search/SearchFragment.kt
index 9f16f39..c0db7d0 100644
--- a/app/src/main/java/org/mosad/teapod/ui/search/SearchFragment.kt
+++ b/app/src/main/java/org/mosad/teapod/ui/search/SearchFragment.kt
@@ -16,6 +16,7 @@ import org.mosad.teapod.util.Media
class SearchFragment : Fragment() {
+ private val instance = this
private lateinit var adapter : CustomAdapter
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
@@ -32,13 +33,14 @@ class SearchFragment : Fragment() {
// create and set the adapter, needs context
withContext(Dispatchers.Main) {
- adapter = CustomAdapter(requireContext(), AoDParser.mediaList)
- list_search.adapter = adapter
- //adapter.notifyDataSetChanged()
+ context?.let {
+ adapter = CustomAdapter(it, AoDParser.mediaList)
+ list_search.adapter = adapter
+ }
}
-
- initActions()
}
+
+ initActions()
}
private fun initActions() {
diff --git a/app/src/main/java/org/mosad/teapod/util/DataTypes.kt b/app/src/main/java/org/mosad/teapod/util/DataTypes.kt
index ee9ea95..e3610b2 100644
--- a/app/src/main/java/org/mosad/teapod/util/DataTypes.kt
+++ b/app/src/main/java/org/mosad/teapod/util/DataTypes.kt
@@ -14,4 +14,6 @@ data class Media(val title: String, val link: String, val type: DataTypes.MediaT
}
}
-data class Episode(val title: String = "", val streamUrl: String = "", var watched: Boolean = false)
+data class Episode(val title: String = "", val streamUrl: String = "", val posterLink: String = "", var watched: Boolean = false)
+
+data class TMDBResponse(val title: String = "", val overview: String = "", val posterUrl: String = "", val backdropUrl: String = "")
diff --git a/app/src/main/java/org/mosad/teapod/util/TMDBApiController.kt b/app/src/main/java/org/mosad/teapod/util/TMDBApiController.kt
new file mode 100644
index 0000000..0b5ee90
--- /dev/null
+++ b/app/src/main/java/org/mosad/teapod/util/TMDBApiController.kt
@@ -0,0 +1,88 @@
+package org.mosad.teapod.util
+
+import android.util.Log
+import com.google.gson.JsonParser
+import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.async
+import kotlinx.coroutines.runBlocking
+import java.net.URL
+import java.net.URLEncoder
+import org.mosad.teapod.util.DataTypes.MediaType
+
+class TMDBApiController {
+
+ private val apiUrl = "https://api.themoviedb.org/3"
+ private val searchMovieUrl = "$apiUrl/search/movie"
+ private val searchTVUrl = "$apiUrl/search/tv"
+ private val apiKey = "de959cf9c07a08b5ca7cb51cda9a40c2"
+ private val language = "de"
+ private val preparedParamters = "?api_key=$apiKey&language=$language"
+
+ private val imageUrl = "https://image.tmdb.org/t/p/w500"
+
+ fun search(title: String, type: MediaType): TMDBResponse {
+ return when (type) {
+ MediaType.MOVIE -> {
+ val test = searchMovie(title)
+ println("test: $test")
+ test
+ }
+ MediaType.TVSHOW -> {
+ val test = searchTVShow(title)
+ println("test: $test")
+ test
+ }
+ MediaType.OTHER -> {
+ Log.e(javaClass.name, "Error")
+ TMDBResponse()
+ }
+ }
+
+ }
+
+ fun searchTVShow(title: String) = runBlocking {
+ val url = URL("$searchTVUrl$preparedParamters&query=${URLEncoder.encode(title, "UTF-8")}")
+
+ GlobalScope.async {
+ val response = JsonParser.parseString(url.readText()).asJsonObject
+ println(response)
+
+ return@async if (response.get("total_results").asInt > 0) {
+ response.get("results").asJsonArray.first().let {
+ val overview = it.asJsonObject.get("overview").asString
+ val posterPath = imageUrl + it.asJsonObject.get("poster_path").asString
+ val backdropPath = imageUrl + it.asJsonObject.get("backdrop_path").asString
+
+ TMDBResponse("", overview, posterPath, backdropPath)
+ }
+ } else {
+ TMDBResponse()
+ }
+ }.await()
+
+ }
+
+ fun searchMovie(title: String) = runBlocking {
+ val url = URL("$searchMovieUrl$preparedParamters&query=${URLEncoder.encode(title, "UTF-8")}")
+
+ GlobalScope.async {
+ val response = JsonParser.parseString(url.readText()).asJsonObject
+ println(response)
+
+ return@async if (response.get("total_results").asInt > 0) {
+ response.get("results").asJsonArray.first().let {
+ val overview = it.asJsonObject.get("overview").asString
+ val posterPath = imageUrl + it.asJsonObject.get("poster_path").asString
+ val backdropPath = imageUrl + it.asJsonObject.get("backdrop_path").asString
+
+ TMDBResponse("", overview, posterPath, backdropPath)
+ }
+ } else {
+ TMDBResponse()
+ }
+
+
+ }.await()
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_media.xml b/app/src/main/res/layout/fragment_media.xml
index 2356aa3..c21f2e4 100644
--- a/app/src/main/res/layout/fragment_media.xml
+++ b/app/src/main/res/layout/fragment_media.xml
@@ -20,11 +20,11 @@
+ android:layout_marginTop="20dp"
+ android:minHeight="200dp"
+ android:src="@drawable/ic_launcher_background" />