diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt index 0ca7bf63..20035ac4 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt @@ -41,6 +41,7 @@ import com.google.android.material.button.MaterialButton import com.lagradost.cloudstream3.* import com.lagradost.cloudstream3.APIHolder.getApiFromName import com.lagradost.cloudstream3.APIHolder.getId +import com.lagradost.cloudstream3.APIHolder.unixTime import com.lagradost.cloudstream3.APIHolder.updateHasTrailers import com.lagradost.cloudstream3.AcraApplication.Companion.setKey import com.lagradost.cloudstream3.CommonActivity.getCastSession @@ -100,6 +101,8 @@ import kotlinx.coroutines.Job import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext import java.io.File +import java.util.concurrent.TimeUnit + const val MAX_SYNO_LENGH = 1000 @@ -654,6 +657,55 @@ class ResultFragment : ResultTrailerPlayer() { loadTrailer() } + private fun setNextEpisode(nextAiring: NextAiring?) { + result_next_airing_holder?.isVisible = + if (nextAiring == null || nextAiring.episode <= 0 || nextAiring.unixTime <= unixTime) { + false + } else { + val seconds = nextAiring.unixTime - unixTime + val days = TimeUnit.SECONDS.toDays(seconds) + val hours: Long = TimeUnit.SECONDS.toHours(seconds) - days * 24 + val minute = + TimeUnit.SECONDS.toMinutes(seconds) - TimeUnit.SECONDS.toHours(seconds) * 60 + // val second = + // TimeUnit.SECONDS.toSeconds(seconds) - TimeUnit.SECONDS.toMinutes(seconds) * 60 + try { + val ctx = context + if (ctx == null) { + false + } else { + when { + days > 0 -> { + ctx.getString(R.string.next_episode_time_day_format).format( + days, + hours, + minute + ) + } + hours > 0 -> ctx.getString(R.string.next_episode_time_hour_format) + .format( + hours, + minute + ) + minute > 0 -> ctx.getString(R.string.next_episode_time_min_format) + .format( + minute + ) + else -> null + }?.also { text -> + result_next_airing_time?.text = text + result_next_airing?.text = + ctx.getString(R.string.next_episode_format).format(nextAiring.episode) + } != null + } + } catch (e: Exception) { // mistranslation + result_next_airing_holder?.isVisible = false + logError(e) + false + } + } + } + private fun setActors(actors: List?) { if (actors.isNullOrEmpty()) { result_cast_text?.isVisible = false @@ -1801,7 +1853,7 @@ class ResultFragment : ResultTrailerPlayer() { setRating(d.rating) setRecommendations(d.recommendations, null) setActors(d.actors) - + setNextEpisode(if (d is EpisodeResponse) d.nextAiring else null) setTrailers(d.trailers) if (syncModel.addSyncs(d.syncData)) { diff --git a/app/src/main/res/layout/fragment_result.xml b/app/src/main/res/layout/fragment_result.xml index 32ea4de6..9024858f 100644 --- a/app/src/main/res/layout/fragment_result.xml +++ b/app/src/main/res/layout/fragment_result.xml @@ -139,6 +139,7 @@ android:orientation="vertical"> + app:shimmer_highlight_alpha="0.3"> + + + - + + + + + %d %s Ep %d Cast: %s + Episode %d will be released in + %dd %dh %dm + %dh %dm + %dm Poster