add new simulcasts and new titles to home screen
* simulcasts and new titles * update some libraries * don't crash if AoDPraser fails to parse mediaId
This commit is contained in:
		| @ -45,10 +45,12 @@ object AoDParser { | ||||
|     private var csrfToken: String = "" | ||||
|     private var loginSuccess = false | ||||
|  | ||||
|     private val mediaList = arrayListOf<Media>() | ||||
|     val itemMediaList = arrayListOf<ItemMedia>() | ||||
|     private val mediaList = arrayListOf<Media>() // actual media (data) | ||||
|     val itemMediaList = arrayListOf<ItemMedia>() // gui media | ||||
|     val highlightsList = arrayListOf<ItemMedia>() | ||||
|     val newEpisodesList = arrayListOf<ItemMedia>() | ||||
|     val newSimulcastsList = arrayListOf<ItemMedia>() | ||||
|     val newTitlesList = arrayListOf<ItemMedia>() | ||||
|  | ||||
|     fun login(): Boolean = runBlocking { | ||||
|  | ||||
| @ -95,7 +97,7 @@ object AoDParser { | ||||
|      * -> blocking | ||||
|      */ | ||||
|     fun initialLoading() = runBlocking { | ||||
|         val newEPJob = GlobalScope.async { | ||||
|         val loadHomeJob = GlobalScope.async { | ||||
|             loadHome() | ||||
|         } | ||||
|  | ||||
| @ -103,7 +105,7 @@ object AoDParser { | ||||
|             listAnimes() | ||||
|         } | ||||
|  | ||||
|         newEPJob.await() | ||||
|         loadHomeJob.await() | ||||
|         listJob.await() | ||||
|     } | ||||
|  | ||||
| @ -183,7 +185,7 @@ object AoDParser { | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * load new episodes and highlights | ||||
|      * load new episodes, titles and highlights | ||||
|      */ | ||||
|     private fun loadHome() = runBlocking { | ||||
|         if (sessionCookies.isEmpty()) login() | ||||
| @ -193,19 +195,6 @@ object AoDParser { | ||||
|                 .cookies(sessionCookies) | ||||
|                 .get() | ||||
|  | ||||
|             // get all new episodes from AoD | ||||
|             newEpisodesList.clear() | ||||
|             resHome.select("div.jcarousel-container-new").select("li").forEach { | ||||
|                 if (it.select("span").hasClass("neweps")) { | ||||
|                     val mediaId = it.select("a.thumbs").attr("href") | ||||
|                         .substringAfterLast("/").toInt() | ||||
|                     val mediaImage = it.select("a.thumbs > img").attr("src") | ||||
|                     val mediaTitle = "${it.select("a").text()} - ${it.select("span.neweps").text()}" | ||||
|  | ||||
|                     newEpisodesList.add(ItemMedia(mediaId, mediaTitle, mediaImage)) | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             // get highlights from AoD | ||||
|             highlightsList.clear() | ||||
|             resHome.select("#aod-highlights").select("div.news-item").forEach { | ||||
| @ -219,6 +208,45 @@ object AoDParser { | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             // get all new episodes from AoD | ||||
|             newEpisodesList.clear() | ||||
|             resHome.select("h2:contains(Neue Episoden)").next().select("li").forEach { | ||||
|                 val mediaId = it.select("a.thumbs").attr("href") | ||||
|                     .substringAfterLast("/").toIntOrNull() | ||||
|                 val mediaImage = it.select("a.thumbs > img").attr("src") | ||||
|                 val mediaTitle = "${it.select("a").text()} - ${it.select("span.neweps").text()}" | ||||
|  | ||||
|                 if (mediaId != null) { | ||||
|                     newEpisodesList.add(ItemMedia(mediaId, mediaTitle, mediaImage)) | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             // get new simulcasts from AoD | ||||
|             newSimulcastsList.clear() | ||||
|             resHome.select("h2:contains(Neue Simulcasts)").next().select("li").forEach { | ||||
|                 val mediaId = it.select("a.thumbs").attr("href") | ||||
|                     .substringAfterLast("/").toIntOrNull() | ||||
|                 val mediaImage = it.select("a.thumbs > img").attr("src") | ||||
|                 val mediaTitle = it.select("a").text() | ||||
|  | ||||
|                 if (mediaId != null) { | ||||
|                     newSimulcastsList.add(ItemMedia(mediaId, mediaTitle, mediaImage)) | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             // get new titles from AoD | ||||
|             newTitlesList.clear() | ||||
|             resHome.select("h2:contains(Neue Anime-Titel)").next().select("li").forEach { | ||||
|                 val mediaId = it.select("a.thumbs").attr("href") | ||||
|                     .substringAfterLast("/").toIntOrNull() | ||||
|                 val mediaImage = it.select("a.thumbs > img").attr("src") | ||||
|                 val mediaTitle = it.select("a").text() | ||||
|  | ||||
|                 if (mediaId != null) { | ||||
|                     newTitlesList.add(ItemMedia(mediaId, mediaTitle, mediaImage)) | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
| @ -28,6 +28,8 @@ class HomeFragment : Fragment() { | ||||
|     private lateinit var binding: FragmentHomeBinding | ||||
|     private lateinit var adapterMyList: MediaItemAdapter | ||||
|     private lateinit var adapterNewEpisodes: MediaItemAdapter | ||||
|     private lateinit var adapterNewSimulcasts: MediaItemAdapter | ||||
|     private lateinit var adapterNewTitles: MediaItemAdapter | ||||
|  | ||||
|     private lateinit var highlightMedia: ItemMedia | ||||
|  | ||||
| @ -65,6 +67,8 @@ class HomeFragment : Fragment() { | ||||
|     private fun initRecyclerViews() { | ||||
|         binding.recyclerMyList.addItemDecoration(MediaItemDecoration(9)) | ||||
|         binding.recyclerNewEpisodes.addItemDecoration(MediaItemDecoration(9)) | ||||
|         binding.recyclerNewSimulcasts.addItemDecoration(MediaItemDecoration(9)) | ||||
|         binding.recyclerNewTitles.addItemDecoration(MediaItemDecoration(9)) | ||||
|  | ||||
|         // my list | ||||
|         val myListMedia = StorageController.myList.map { elementId -> | ||||
| @ -81,6 +85,14 @@ class HomeFragment : Fragment() { | ||||
|         // new episodes | ||||
|         adapterNewEpisodes = MediaItemAdapter(AoDParser.newEpisodesList) | ||||
|         binding.recyclerNewEpisodes.adapter = adapterNewEpisodes | ||||
|  | ||||
|         // new simulcasts | ||||
|         adapterNewSimulcasts = MediaItemAdapter(AoDParser.newSimulcastsList) | ||||
|         binding.recyclerNewSimulcasts.adapter = adapterNewSimulcasts | ||||
|  | ||||
|         // new titles | ||||
|         adapterNewTitles = MediaItemAdapter(AoDParser.newTitlesList) | ||||
|         binding.recyclerNewTitles.adapter = adapterNewTitles | ||||
|     } | ||||
|  | ||||
|     private fun initActions() { | ||||
| @ -114,6 +126,14 @@ class HomeFragment : Fragment() { | ||||
|         adapterNewEpisodes.onItemClick = { mediaId, _ -> | ||||
|             (activity as MainActivity).showFragment(MediaFragment(mediaId)) | ||||
|         } | ||||
|  | ||||
|         adapterNewSimulcasts.onItemClick = { mediaId, _ -> | ||||
|             (activity as MainActivity).showFragment(MediaFragment(mediaId)) | ||||
|         } | ||||
|  | ||||
|         adapterNewTitles.onItemClick = { mediaId, _ -> | ||||
|             (activity as MainActivity).showFragment(MediaFragment(mediaId)) | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|  | ||||
| @ -163,6 +163,62 @@ | ||||
|                     tools:listitem="@layout/item_media" /> | ||||
|             </LinearLayout> | ||||
|  | ||||
|             <LinearLayout | ||||
|                 android:id="@+id/linear_new_simulcasts" | ||||
|                 android:layout_width="match_parent" | ||||
|                 android:layout_height="match_parent" | ||||
|                 android:orientation="vertical" | ||||
|                 android:paddingBottom="7dp"> | ||||
|  | ||||
|                 <TextView | ||||
|                     android:id="@+id/text_new_simulcasts" | ||||
|                     android:layout_width="match_parent" | ||||
|                     android:layout_height="wrap_content" | ||||
|                     android:paddingStart="10dp" | ||||
|                     android:paddingTop="15dp" | ||||
|                     android:paddingEnd="5dp" | ||||
|                     android:paddingBottom="5dp" | ||||
|                     android:text="@string/new_simulcasts" | ||||
|                     android:textSize="16sp" | ||||
|                     android:textStyle="bold" /> | ||||
|  | ||||
|                 <androidx.recyclerview.widget.RecyclerView | ||||
|                     android:id="@+id/recycler_new_simulcasts" | ||||
|                     android:layout_width="match_parent" | ||||
|                     android:layout_height="match_parent" | ||||
|                     android:orientation="horizontal" | ||||
|                     app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" | ||||
|                     tools:listitem="@layout/item_media" /> | ||||
|             </LinearLayout> | ||||
|  | ||||
|             <LinearLayout | ||||
|                 android:id="@+id/linear_new_titles" | ||||
|                 android:layout_width="match_parent" | ||||
|                 android:layout_height="match_parent" | ||||
|                 android:orientation="vertical" | ||||
|                 android:paddingBottom="7dp"> | ||||
|  | ||||
|                 <TextView | ||||
|                     android:id="@+id/text_new_titles" | ||||
|                     android:layout_width="match_parent" | ||||
|                     android:layout_height="wrap_content" | ||||
|                     android:paddingStart="10dp" | ||||
|                     android:paddingTop="15dp" | ||||
|                     android:paddingEnd="5dp" | ||||
|                     android:paddingBottom="5dp" | ||||
|                     android:text="@string/new_titles" | ||||
|                     android:textSize="16sp" | ||||
|                     android:textStyle="bold" /> | ||||
|  | ||||
|                 <androidx.recyclerview.widget.RecyclerView | ||||
|                     android:id="@+id/recycler_new_titles" | ||||
|                     android:layout_width="match_parent" | ||||
|                     android:layout_height="match_parent" | ||||
|                     android:orientation="horizontal" | ||||
|                     app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" | ||||
|                     tools:listitem="@layout/item_media" /> | ||||
|             </LinearLayout> | ||||
|  | ||||
|         </LinearLayout> | ||||
|     </ScrollView> | ||||
|  | ||||
|  | ||||
| @ -9,6 +9,8 @@ | ||||
|     <string name="highlight_media">Highlight</string> | ||||
|     <string name="my_list">Meine Liste</string> | ||||
|     <string name="new_episodes">Neue Episoden</string> | ||||
|     <string name="new_simulcasts">Neue Simulcasts</string> | ||||
|     <string name="new_titles">Neue Titel</string> | ||||
|  | ||||
|     <!-- search fragment --> | ||||
|     <string name="search_hint">Suche nach Filmen und Serien</string> | ||||
|  | ||||
| @ -9,6 +9,8 @@ | ||||
|     <string name="highlight_media">Highlight</string> | ||||
|     <string name="my_list">My list</string> | ||||
|     <string name="new_episodes">New episodes</string> | ||||
|     <string name="new_simulcasts">New simulcasts</string> | ||||
|     <string name="new_titles">New titles</string> | ||||
|  | ||||
|     <!-- search fragment --> | ||||
|     <string name="search_hint">Search for movies and series</string> | ||||
|  | ||||
		Reference in New Issue
	
	Block a user