@@ -9,7 +9,7 @@ import androidx.lifecycle.ViewModelProvider
99import androidx.preference.PreferenceManager
1010import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
1111import io.reactivex.rxjava3.core.Flowable
12- import io.reactivex.rxjava3.functions.Function4
12+ import io.reactivex.rxjava3.functions.Function5
1313import io.reactivex.rxjava3.processors.BehaviorProcessor
1414import io.reactivex.rxjava3.schedulers.Schedulers
1515import org.schabi.newpipe.R
@@ -28,7 +28,8 @@ import java.util.concurrent.TimeUnit
2828class FeedViewModel (
2929 private val applicationContext : Context ,
3030 groupId : Long = FeedGroupEntity .GROUP_ALL_ID ,
31- initialShowPlayedItems : Boolean = true
31+ initialShowPlayedItems : Boolean = true ,
32+ initialShowFutureItems : Boolean = true
3233) : ViewModel() {
3334 private var feedDatabaseManager: FeedDatabaseManager = FeedDatabaseManager (applicationContext)
3435
@@ -37,29 +38,36 @@ class FeedViewModel(
3738 .startWithItem(initialShowPlayedItems)
3839 .distinctUntilChanged()
3940
41+ private val toggleShowFutureItems = BehaviorProcessor .create<Boolean >()
42+ private val toggleShowFutureItemsFlowable = toggleShowFutureItems
43+ .startWithItem(initialShowFutureItems)
44+ .distinctUntilChanged()
45+
4046 private val mutableStateLiveData = MutableLiveData <FeedState >()
4147 val stateLiveData: LiveData <FeedState > = mutableStateLiveData
4248
4349 private var combineDisposable = Flowable
4450 .combineLatest(
4551 FeedEventManager .events(),
4652 toggleShowPlayedItemsFlowable,
53+ toggleShowFutureItemsFlowable,
4754 feedDatabaseManager.notLoadedCount(groupId),
4855 feedDatabaseManager.oldestSubscriptionUpdate(groupId),
4956
50- Function4 { t1: FeedEventManager .Event , t2: Boolean ,
51- t3 : Long , t4 : List <OffsetDateTime > ->
52- return @Function4 CombineResultEventHolder (t1, t2, t3, t4.firstOrNull())
57+ Function5 { t1: FeedEventManager .Event , t2: Boolean , t3 : Boolean ,
58+ t4 : Long , t5 : List <OffsetDateTime > ->
59+ return @Function5 CombineResultEventHolder (t1, t2, t3, t4, t5 .firstOrNull())
5360 }
5461 )
5562 .throttleLatest(DEFAULT_THROTTLE_TIMEOUT , TimeUnit .MILLISECONDS )
5663 .subscribeOn(Schedulers .io())
5764 .observeOn(Schedulers .io())
58- .map { (event, showPlayedItems, notLoadedCount, oldestUpdate) ->
65+ .map { (event, showPlayedItems, showFutureItems, notLoadedCount, oldestUpdate) ->
5966 val streamItems = if (event is SuccessResultEvent || event is IdleEvent )
6067 feedDatabaseManager
6168 .getStreams(groupId, showPlayedItems)
6269 .blockingGet(arrayListOf ())
70+ .filter { s -> showFutureItems || s.stream.uploadDate?.isBefore(OffsetDateTime .now()) ? : true }
6371 else
6472 arrayListOf ()
6573
@@ -89,8 +97,9 @@ class FeedViewModel(
8997 private data class CombineResultEventHolder (
9098 val t1 : FeedEventManager .Event ,
9199 val t2 : Boolean ,
92- val t3 : Long ,
93- val t4 : OffsetDateTime ?
100+ val t3 : Boolean ,
101+ val t4 : Long ,
102+ val t5 : OffsetDateTime ?
94103 )
95104
96105 private data class CombineResultDataHolder (
@@ -112,10 +121,25 @@ class FeedViewModel(
112121
113122 fun getShowPlayedItemsFromPreferences () = getShowPlayedItemsFromPreferences(applicationContext)
114123
124+ fun toggleFutureItems (showFutureItems : Boolean ) {
125+ toggleShowFutureItems.onNext(showFutureItems)
126+ }
127+
128+ fun saveShowFutureItemsToPreferences (showFutureItems : Boolean ) =
129+ PreferenceManager .getDefaultSharedPreferences(applicationContext).edit {
130+ this .putBoolean(applicationContext.getString(R .string.feed_show_future_items_key), showFutureItems)
131+ this .apply ()
132+ }
133+
134+ fun getShowFutureItemsFromPreferences () = getShowFutureItemsFromPreferences(applicationContext)
135+
115136 companion object {
116137 private fun getShowPlayedItemsFromPreferences (context : Context ) =
117138 PreferenceManager .getDefaultSharedPreferences(context)
118139 .getBoolean(context.getString(R .string.feed_show_played_items_key), true )
140+ private fun getShowFutureItemsFromPreferences (context : Context ) =
141+ PreferenceManager .getDefaultSharedPreferences(context)
142+ .getBoolean(context.getString(R .string.feed_show_future_items_key), true )
119143 }
120144
121145 class Factory (
@@ -128,7 +152,8 @@ class FeedViewModel(
128152 context.applicationContext,
129153 groupId,
130154 // Read initial value from preferences
131- getShowPlayedItemsFromPreferences(context.applicationContext)
155+ getShowPlayedItemsFromPreferences(context.applicationContext),
156+ getShowFutureItemsFromPreferences(context.applicationContext)
132157 ) as T
133158 }
134159 }
0 commit comments