2019-04-28 22:43:52 +02:00
|
|
|
package org.schabi.newpipe.database.feed.dao
|
|
|
|
|
2019-12-16 08:36:04 +01:00
|
|
|
import androidx.room.*
|
2019-04-28 22:43:52 +02:00
|
|
|
import io.reactivex.Flowable
|
|
|
|
import org.schabi.newpipe.database.feed.model.FeedEntity
|
2019-12-16 08:36:04 +01:00
|
|
|
import org.schabi.newpipe.database.feed.model.FeedLastUpdatedEntity
|
2019-04-28 22:43:52 +02:00
|
|
|
import org.schabi.newpipe.database.stream.model.StreamEntity
|
2019-12-16 08:36:04 +01:00
|
|
|
import org.schabi.newpipe.database.subscription.SubscriptionEntity
|
2019-04-28 22:43:54 +02:00
|
|
|
import java.util.*
|
2019-04-28 22:43:52 +02:00
|
|
|
|
|
|
|
@Dao
|
|
|
|
abstract class FeedDAO {
|
|
|
|
@Query("DELETE FROM feed")
|
|
|
|
abstract fun deleteAll(): Int
|
|
|
|
|
|
|
|
@Query("""
|
|
|
|
SELECT s.* FROM streams s
|
|
|
|
|
|
|
|
INNER JOIN feed f
|
|
|
|
ON s.uid = f.stream_id
|
|
|
|
|
2019-04-28 22:43:54 +02:00
|
|
|
ORDER BY s.upload_date IS NULL DESC, s.upload_date DESC, s.uploader ASC
|
|
|
|
|
|
|
|
LIMIT 500
|
2019-04-28 22:43:52 +02:00
|
|
|
""")
|
|
|
|
abstract fun getAllStreams(): Flowable<List<StreamEntity>>
|
|
|
|
|
|
|
|
@Query("""
|
|
|
|
SELECT s.* FROM streams s
|
|
|
|
|
|
|
|
INNER JOIN feed f
|
|
|
|
ON s.uid = f.stream_id
|
|
|
|
|
|
|
|
INNER JOIN feed_group_subscription_join fgs
|
|
|
|
ON fgs.subscription_id = f.subscription_id
|
|
|
|
|
|
|
|
INNER JOIN feed_group fg
|
|
|
|
ON fg.uid = fgs.group_id
|
|
|
|
|
|
|
|
WHERE fgs.group_id = :groupId
|
2019-04-28 22:43:54 +02:00
|
|
|
|
|
|
|
ORDER BY s.upload_date IS NULL DESC, s.upload_date DESC, s.uploader ASC
|
|
|
|
LIMIT 500
|
2019-04-28 22:43:52 +02:00
|
|
|
""")
|
|
|
|
abstract fun getAllStreamsFromGroup(groupId: Long): Flowable<List<StreamEntity>>
|
|
|
|
|
2019-04-28 22:43:54 +02:00
|
|
|
@Query("""
|
|
|
|
DELETE FROM feed WHERE
|
|
|
|
|
|
|
|
feed.stream_id IN (
|
|
|
|
SELECT s.uid FROM streams s
|
|
|
|
|
|
|
|
INNER JOIN feed f
|
|
|
|
ON s.uid = f.stream_id
|
|
|
|
|
|
|
|
WHERE s.upload_date < :date
|
|
|
|
)
|
|
|
|
""")
|
|
|
|
abstract fun unlinkStreamsOlderThan(date: Date)
|
|
|
|
|
|
|
|
@Query("""
|
|
|
|
DELETE FROM feed
|
|
|
|
|
|
|
|
WHERE feed.subscription_id = :subscriptionId
|
|
|
|
|
|
|
|
AND feed.stream_id IN (
|
|
|
|
SELECT s.uid FROM streams s
|
|
|
|
|
|
|
|
INNER JOIN feed f
|
|
|
|
ON s.uid = f.stream_id
|
|
|
|
|
|
|
|
WHERE s.stream_type = "LIVE_STREAM" OR s.stream_type = "AUDIO_LIVE_STREAM"
|
|
|
|
)
|
|
|
|
""")
|
|
|
|
abstract fun unlinkOldLivestreams(subscriptionId: Long)
|
|
|
|
|
|
|
|
@Insert(onConflict = OnConflictStrategy.IGNORE)
|
2019-04-28 22:43:52 +02:00
|
|
|
abstract fun insert(feedEntity: FeedEntity)
|
|
|
|
|
2019-04-28 22:43:54 +02:00
|
|
|
@Insert(onConflict = OnConflictStrategy.IGNORE)
|
2019-04-28 22:43:52 +02:00
|
|
|
abstract fun insertAll(entities: List<FeedEntity>): List<Long>
|
2019-12-16 08:36:04 +01:00
|
|
|
|
|
|
|
@Insert(onConflict = OnConflictStrategy.IGNORE)
|
|
|
|
internal abstract fun insertLastUpdated(lastUpdatedEntity: FeedLastUpdatedEntity): Long
|
|
|
|
|
|
|
|
@Update(onConflict = OnConflictStrategy.IGNORE)
|
|
|
|
internal abstract fun updateLastUpdated(lastUpdatedEntity: FeedLastUpdatedEntity)
|
|
|
|
|
|
|
|
@Transaction
|
|
|
|
open fun setLastUpdatedForSubscription(lastUpdatedEntity: FeedLastUpdatedEntity) {
|
|
|
|
val id = insertLastUpdated(lastUpdatedEntity)
|
|
|
|
|
|
|
|
if (id == -1L) {
|
|
|
|
updateLastUpdated(lastUpdatedEntity)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Query("""
|
|
|
|
SELECT MIN(lu.last_updated) FROM feed_last_updated lu
|
|
|
|
|
|
|
|
INNER JOIN feed_group_subscription_join fgs
|
|
|
|
ON fgs.subscription_id = lu.subscription_id AND fgs.group_id = :groupId
|
|
|
|
""")
|
|
|
|
abstract fun oldestSubscriptionUpdate(groupId: Long): Flowable<List<Date>>
|
|
|
|
|
|
|
|
@Query("SELECT MIN(last_updated) FROM feed_last_updated")
|
|
|
|
abstract fun oldestSubscriptionUpdateFromAll(): Flowable<List<Date>>
|
|
|
|
|
|
|
|
@Query("SELECT COUNT(*) FROM feed_last_updated WHERE last_updated IS NULL")
|
|
|
|
abstract fun notLoadedCount(): Flowable<Long>
|
|
|
|
|
|
|
|
@Query("""
|
|
|
|
SELECT COUNT(*) FROM subscriptions s
|
|
|
|
|
|
|
|
INNER JOIN feed_group_subscription_join fgs
|
|
|
|
ON s.uid = fgs.subscription_id AND fgs.group_id = :groupId
|
|
|
|
|
|
|
|
LEFT JOIN feed_last_updated lu
|
|
|
|
ON s.uid = lu.subscription_id
|
|
|
|
|
|
|
|
WHERE lu.last_updated IS NULL
|
|
|
|
""")
|
|
|
|
abstract fun notLoadedCountForGroup(groupId: Long): Flowable<Long>
|
|
|
|
|
|
|
|
@Query("""
|
|
|
|
SELECT s.* FROM subscriptions s
|
|
|
|
|
|
|
|
LEFT JOIN feed_last_updated lu
|
|
|
|
ON s.uid = lu.subscription_id
|
|
|
|
|
|
|
|
WHERE lu.last_updated IS NULL OR lu.last_updated < :outdatedThreshold
|
|
|
|
""")
|
|
|
|
abstract fun getAllOutdated(outdatedThreshold: Date): Flowable<List<SubscriptionEntity>>
|
|
|
|
|
|
|
|
@Query("""
|
|
|
|
SELECT s.* FROM subscriptions s
|
|
|
|
|
|
|
|
INNER JOIN feed_group_subscription_join fgs
|
|
|
|
ON s.uid = fgs.subscription_id AND fgs.group_id = :groupId
|
|
|
|
|
|
|
|
LEFT JOIN feed_last_updated lu
|
|
|
|
ON s.uid = lu.subscription_id
|
|
|
|
|
|
|
|
WHERE lu.last_updated IS NULL OR lu.last_updated < :outdatedThreshold
|
|
|
|
""")
|
|
|
|
abstract fun getAllOutdatedForGroup(groupId: Long, outdatedThreshold: Date): Flowable<List<SubscriptionEntity>>
|
2019-04-28 22:43:52 +02:00
|
|
|
}
|