forked from recloudstream/cloudstream
fixed #1170 - Next episode release date
This commit is contained in:
parent
03b2197bbc
commit
1eb67ade7e
3 changed files with 96 additions and 12 deletions
|
@ -41,6 +41,7 @@ import com.google.android.material.button.MaterialButton
|
||||||
import com.lagradost.cloudstream3.*
|
import com.lagradost.cloudstream3.*
|
||||||
import com.lagradost.cloudstream3.APIHolder.getApiFromName
|
import com.lagradost.cloudstream3.APIHolder.getApiFromName
|
||||||
import com.lagradost.cloudstream3.APIHolder.getId
|
import com.lagradost.cloudstream3.APIHolder.getId
|
||||||
|
import com.lagradost.cloudstream3.APIHolder.unixTime
|
||||||
import com.lagradost.cloudstream3.APIHolder.updateHasTrailers
|
import com.lagradost.cloudstream3.APIHolder.updateHasTrailers
|
||||||
import com.lagradost.cloudstream3.AcraApplication.Companion.setKey
|
import com.lagradost.cloudstream3.AcraApplication.Companion.setKey
|
||||||
import com.lagradost.cloudstream3.CommonActivity.getCastSession
|
import com.lagradost.cloudstream3.CommonActivity.getCastSession
|
||||||
|
@ -100,6 +101,8 @@ import kotlinx.coroutines.Job
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
import java.util.concurrent.TimeUnit
|
||||||
|
|
||||||
|
|
||||||
const val MAX_SYNO_LENGH = 1000
|
const val MAX_SYNO_LENGH = 1000
|
||||||
|
|
||||||
|
@ -654,6 +657,55 @@ class ResultFragment : ResultTrailerPlayer() {
|
||||||
loadTrailer()
|
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<ActorData>?) {
|
private fun setActors(actors: List<ActorData>?) {
|
||||||
if (actors.isNullOrEmpty()) {
|
if (actors.isNullOrEmpty()) {
|
||||||
result_cast_text?.isVisible = false
|
result_cast_text?.isVisible = false
|
||||||
|
@ -1801,7 +1853,7 @@ class ResultFragment : ResultTrailerPlayer() {
|
||||||
setRating(d.rating)
|
setRating(d.rating)
|
||||||
setRecommendations(d.recommendations, null)
|
setRecommendations(d.recommendations, null)
|
||||||
setActors(d.actors)
|
setActors(d.actors)
|
||||||
|
setNextEpisode(if (d is EpisodeResponse) d.nextAiring else null)
|
||||||
setTrailers(d.trailers)
|
setTrailers(d.trailers)
|
||||||
|
|
||||||
if (syncModel.addSyncs(d.syncData)) {
|
if (syncModel.addSyncs(d.syncData)) {
|
||||||
|
|
|
@ -139,6 +139,7 @@
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<com.facebook.shimmer.ShimmerFrameLayout
|
<com.facebook.shimmer.ShimmerFrameLayout
|
||||||
|
tools:visibility="gone"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
android:id="@+id/result_trailer_loading"
|
android:id="@+id/result_trailer_loading"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
@ -148,8 +149,7 @@
|
||||||
app:shimmer_auto_start="true"
|
app:shimmer_auto_start="true"
|
||||||
app:shimmer_base_alpha="0.2"
|
app:shimmer_base_alpha="0.2"
|
||||||
app:shimmer_duration="@integer/loading_time"
|
app:shimmer_duration="@integer/loading_time"
|
||||||
app:shimmer_highlight_alpha="0.3"
|
app:shimmer_highlight_alpha="0.3">
|
||||||
tools:visibility="visible">
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
@ -423,6 +423,7 @@
|
||||||
tools:text="Cast: Joe Ligma" />
|
tools:text="Cast: Joe Ligma" />
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
tools:visibility="gone"
|
||||||
android:nextFocusUp="@id/result_bookmark_button"
|
android:nextFocusUp="@id/result_bookmark_button"
|
||||||
android:nextFocusDown="@id/result_play_movie"
|
android:nextFocusDown="@id/result_play_movie"
|
||||||
|
|
||||||
|
@ -669,6 +670,7 @@
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
tools:visibility="visible">
|
tools:visibility="visible">
|
||||||
|
|
||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
<com.google.android.material.button.MaterialButton
|
||||||
android:id="@+id/result_resume_series_button"
|
android:id="@+id/result_resume_series_button"
|
||||||
style="@style/WhiteButton"
|
style="@style/WhiteButton"
|
||||||
|
@ -747,6 +749,7 @@
|
||||||
tools:text="69m\nremaining" />
|
tools:text="69m\nremaining" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/result_episodes_tab"
|
android:id="@+id/result_episodes_tab"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
@ -765,6 +768,7 @@
|
||||||
style="@style/MultiSelectButton"
|
style="@style/MultiSelectButton"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_marginStart="0dp"
|
android:layout_marginStart="0dp"
|
||||||
|
android:layout_marginEnd="10dp"
|
||||||
android:nextFocusLeft="@id/result_episode_select"
|
android:nextFocusLeft="@id/result_episode_select"
|
||||||
android:nextFocusRight="@id/result_episode_select"
|
android:nextFocusRight="@id/result_episode_select"
|
||||||
android:nextFocusUp="@id/result_description"
|
android:nextFocusUp="@id/result_description"
|
||||||
|
@ -779,6 +783,8 @@
|
||||||
|
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_marginStart="0dp"
|
android:layout_marginStart="0dp"
|
||||||
|
android:layout_marginEnd="10dp"
|
||||||
|
|
||||||
android:nextFocusLeft="@id/result_season_button"
|
android:nextFocusLeft="@id/result_season_button"
|
||||||
android:nextFocusRight="@id/result_season_button"
|
android:nextFocusRight="@id/result_season_button"
|
||||||
|
|
||||||
|
@ -794,6 +800,7 @@
|
||||||
|
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_marginStart="0dp"
|
android:layout_marginStart="0dp"
|
||||||
|
android:layout_marginEnd="10dp"
|
||||||
android:nextFocusLeft="@id/result_season_button"
|
android:nextFocusLeft="@id/result_season_button"
|
||||||
android:nextFocusRight="@id/result_season_button"
|
android:nextFocusRight="@id/result_season_button"
|
||||||
|
|
||||||
|
@ -816,16 +823,37 @@
|
||||||
tools:text="8 Episodes" />
|
tools:text="8 Episodes" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
<!--TODO add next airing-->
|
<!--TODO add next airing-->
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/result_next_airing_holder"
|
||||||
|
android:layout_gravity="start"
|
||||||
|
android:paddingBottom="15dp"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
<TextView
|
<TextView
|
||||||
android:visibility="gone"
|
android:gravity="center"
|
||||||
|
|
||||||
android:id="@+id/result_next_airing"
|
android:id="@+id/result_next_airing"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:textColor="?attr/grayTextColor"
|
||||||
|
android:textSize="17sp"
|
||||||
|
android:textStyle="normal"
|
||||||
|
android:text="Episode 1022 will be released in" />
|
||||||
|
<TextView
|
||||||
|
android:paddingStart="5dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:id="@+id/result_next_airing_time"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
android:textColor="?attr/textColor"
|
android:textColor="?attr/textColor"
|
||||||
android:textSize="17sp"
|
android:textSize="17sp"
|
||||||
android:textStyle="bold"
|
android:textStyle="normal"
|
||||||
tools:text="Episode 1022 will be released in" />
|
tools:text="5d 3h 30m" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<com.facebook.shimmer.ShimmerFrameLayout
|
<com.facebook.shimmer.ShimmerFrameLayout
|
||||||
android:id="@+id/result_episode_loading"
|
android:id="@+id/result_episode_loading"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|
|
@ -67,6 +67,10 @@
|
||||||
<string name="year_format" translatable="false" formatted="true">%d</string>
|
<string name="year_format" translatable="false" formatted="true">%d</string>
|
||||||
<string name="app_dub_sub_episode_text_format" formatted="true">%s Ep %d</string>
|
<string name="app_dub_sub_episode_text_format" formatted="true">%s Ep %d</string>
|
||||||
<string name="cast_format" formatted="true">Cast: %s</string>
|
<string name="cast_format" formatted="true">Cast: %s</string>
|
||||||
|
<string name="next_episode_format" formatted="true">Episode %d will be released in</string>
|
||||||
|
<string name="next_episode_time_day_format" formatted="true">%dd %dh %dm</string>
|
||||||
|
<string name="next_episode_time_hour_format" formatted="true">%dh %dm</string>
|
||||||
|
<string name="next_episode_time_min_format" formatted="true">%dm</string>
|
||||||
|
|
||||||
<!-- IS NOT NEEDED TO TRANSLATE AS THEY ARE ONLY USED FOR SCREEN READERS AND WONT SHOW UP TO NORMAL USERS -->
|
<!-- IS NOT NEEDED TO TRANSLATE AS THEY ARE ONLY USED FOR SCREEN READERS AND WONT SHOW UP TO NORMAL USERS -->
|
||||||
<string name="result_poster_img_des">Poster</string>
|
<string name="result_poster_img_des">Poster</string>
|
||||||
|
|
Loading…
Reference in a new issue