mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-04-29 00:10:32 +05:30
fix: auto-delete feed videos when unsubscribing from channel when using local feed extraction
This commit is contained in:
parent
f38f0ed706
commit
5e6a42c629
@ -17,6 +17,9 @@ interface SubscriptionsFeedDao {
|
|||||||
@Query("DELETE FROM feedItem WHERE uploaded < :olderThan")
|
@Query("DELETE FROM feedItem WHERE uploaded < :olderThan")
|
||||||
suspend fun cleanUpOlderThan(olderThan: Long)
|
suspend fun cleanUpOlderThan(olderThan: Long)
|
||||||
|
|
||||||
|
@Query("DELETE FROM feedItem WHERE uploaderUrl NOT IN (:channelUrls)")
|
||||||
|
suspend fun deleteAllExcept(channelUrls: List<String>)
|
||||||
|
|
||||||
@Query("DELETE FROM feedItem")
|
@Query("DELETE FROM feedItem")
|
||||||
suspend fun deleteAll()
|
suspend fun deleteAll()
|
||||||
}
|
}
|
@ -23,6 +23,11 @@ class LocalFeedRepository : FeedRepository {
|
|||||||
|
|
||||||
override suspend fun getFeed(forceRefresh: Boolean): List<StreamItem> {
|
override suspend fun getFeed(forceRefresh: Boolean): List<StreamItem> {
|
||||||
val nowMillis = Instant.now().toEpochMilli()
|
val nowMillis = Instant.now().toEpochMilli()
|
||||||
|
val minimumDateMillis = nowMillis - Duration.ofDays(MAX_FEED_AGE_DAYS).toMillis()
|
||||||
|
|
||||||
|
val channelIds = SubscriptionHelper.getSubscriptionChannelIds()
|
||||||
|
// remove videos from channels that are no longer subscribed
|
||||||
|
DatabaseHolder.Database.feedDao().deleteAllExcept(channelIds.map { id -> "/channel/${id}" })
|
||||||
|
|
||||||
if (!forceRefresh) {
|
if (!forceRefresh) {
|
||||||
val feed = DatabaseHolder.Database.feedDao().getAll()
|
val feed = DatabaseHolder.Database.feedDao().getAll()
|
||||||
@ -37,18 +42,14 @@ class LocalFeedRepository : FeedRepository {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val minimumDateMillis = nowMillis - Duration.ofDays(MAX_FEED_AGE_DAYS).toMillis()
|
|
||||||
DatabaseHolder.Database.feedDao().cleanUpOlderThan(minimumDateMillis)
|
DatabaseHolder.Database.feedDao().cleanUpOlderThan(minimumDateMillis)
|
||||||
|
refreshFeed(channelIds, minimumDateMillis)
|
||||||
refreshFeed(minimumDateMillis)
|
|
||||||
PreferenceHelper.putLong(PreferenceKeys.LAST_FEED_REFRESH_TIMESTAMP_MILLIS, nowMillis)
|
PreferenceHelper.putLong(PreferenceKeys.LAST_FEED_REFRESH_TIMESTAMP_MILLIS, nowMillis)
|
||||||
|
|
||||||
return DatabaseHolder.Database.feedDao().getAll().map(SubscriptionsFeedItem::toStreamItem)
|
return DatabaseHolder.Database.feedDao().getAll().map(SubscriptionsFeedItem::toStreamItem)
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun refreshFeed(minimumDateMillis: Long) {
|
private suspend fun refreshFeed(channelIds: List<String>, minimumDateMillis: Long) {
|
||||||
val channelIds = SubscriptionHelper.getSubscriptionChannelIds()
|
|
||||||
|
|
||||||
for (channelIdChunk in channelIds.chunked(CHUNK_SIZE)) {
|
for (channelIdChunk in channelIds.chunked(CHUNK_SIZE)) {
|
||||||
val collectedFeedItems = channelIdChunk.parallelMap { channelId ->
|
val collectedFeedItems = channelIdChunk.parallelMap { channelId ->
|
||||||
try {
|
try {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user