Skip to content

Commit abe77f4

Browse files
FineFindusBnyro
authored andcommitted
feat(Feed): update local feed data when watching video
As local feed videos are only fetched once, this can lead to outdated data being displayed in the feed. As we already fetch the metadata when the video is being played, use this data to update the locally stored feed data.
1 parent 9d4a2d7 commit abe77f4

5 files changed

Lines changed: 20 additions & 1 deletion

File tree

app/src/main/java/com/github/libretube/api/SubscriptionHelper.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.github.libretube.api
33
import android.content.Context
44
import com.github.libretube.R
55
import com.github.libretube.constants.PreferenceKeys
6+
import com.github.libretube.db.obj.SubscriptionsFeedItem
67
import com.github.libretube.helpers.PreferenceHelper
78
import com.github.libretube.repo.AccountSubscriptionsRepository
89
import com.github.libretube.repo.FeedProgress
@@ -49,6 +50,7 @@ object SubscriptionHelper {
4950
suspend fun getSubscriptionChannelIds() = subscriptionsRepository.getSubscriptionChannelIds()
5051
suspend fun getFeed(forceRefresh: Boolean, onProgressUpdate: (FeedProgress) -> Unit = {}) =
5152
feedRepository.getFeed(forceRefresh, onProgressUpdate)
53+
suspend fun submitFeedItemChange(feedItem: SubscriptionsFeedItem) = feedRepository.submitFeedItemChange(feedItem)
5254

5355
fun handleUnsubscribe(
5456
context: Context,

app/src/main/java/com/github/libretube/db/dao/SubscriptionsFeedDao.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import androidx.room.Dao
44
import androidx.room.Insert
55
import androidx.room.OnConflictStrategy
66
import androidx.room.Query
7+
import androidx.room.Update
78
import com.github.libretube.db.obj.SubscriptionsFeedItem
89

910
@Dao
@@ -14,6 +15,9 @@ interface SubscriptionsFeedDao {
1415
@Insert(onConflict = OnConflictStrategy.REPLACE)
1516
suspend fun insertAll(feedItems: List<SubscriptionsFeedItem>)
1617

18+
@Update
19+
suspend fun update(feedItem: SubscriptionsFeedItem)
20+
1721
@Query("SELECT EXISTS (SELECT * FROM feedItem WHERE videoId = :videoId)")
1822
suspend fun contains(videoId: String): Boolean
1923

app/src/main/java/com/github/libretube/repo/FeedRepository.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.github.libretube.repo
22

33
import com.github.libretube.api.obj.StreamItem
4+
import com.github.libretube.db.obj.SubscriptionsFeedItem
45

56
data class FeedProgress(
67
val currentProgress: Int,
@@ -12,4 +13,5 @@ interface FeedRepository {
1213
forceRefresh: Boolean,
1314
onProgressUpdate: (FeedProgress) -> Unit
1415
): List<StreamItem>
16+
suspend fun submitFeedItemChange(feedItem: SubscriptionsFeedItem) {}
1517
}

app/src/main/java/com/github/libretube/repo/LocalFeedRepository.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ class LocalFeedRepository : FeedRepository {
3535
if (filter.isEnabled) tab else null
3636
}.toTypedArray()
3737

38+
override suspend fun submitFeedItemChange(feedItem: SubscriptionsFeedItem) {
39+
DatabaseHolder.Database.feedDao().update(feedItem)
40+
}
41+
3842
override suspend fun getFeed(
3943
forceRefresh: Boolean,
4044
onProgressUpdate: (FeedProgress) -> Unit

app/src/main/java/com/github/libretube/services/OnlinePlayerService.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,13 @@ import com.github.libretube.R
1414
import com.github.libretube.api.JsonHelper
1515
import com.github.libretube.api.RetrofitInstance
1616
import com.github.libretube.api.StreamsExtractor
17+
import com.github.libretube.api.SubscriptionHelper
1718
import com.github.libretube.api.obj.Segment
1819
import com.github.libretube.api.obj.Streams
1920
import com.github.libretube.constants.IntentData
2021
import com.github.libretube.constants.PreferenceKeys
2122
import com.github.libretube.db.DatabaseHelper
23+
import com.github.libretube.db.DatabaseHolder
2224
import com.github.libretube.enums.PlayerCommand
2325
import com.github.libretube.extensions.parcelable
2426
import com.github.libretube.extensions.setMetadata
@@ -138,9 +140,14 @@ open class OnlinePlayerService : AbstractPlayerService() {
138140
PlayingQueue.insertRelatedStreams(streams!!.relatedStreams)
139141
}
140142

141-
// save the current stream to the queue
142143
streams?.toStreamItem(videoId)?.let {
144+
// save the current stream to the queue
143145
PlayingQueue.updateCurrent(it)
146+
147+
// update feed item with newer information, e.g. more up-to-date views
148+
SubscriptionHelper.submitFeedItemChange(
149+
it.toFeedItem()
150+
)
144151
}
145152

146153
withContext(Dispatchers.Main) {

0 commit comments

Comments
 (0)