@@ -2,7 +2,6 @@ package com.skyd.anivu.model.db.dao
2
2
3
3
import androidx.paging.PagingSource
4
4
import androidx.room.Dao
5
- import androidx.room.Delete
6
5
import androidx.room.Insert
7
6
import androidx.room.OnConflictStrategy
8
7
import androidx.room.Query
@@ -19,6 +18,8 @@ import com.skyd.anivu.model.bean.article.ENCLOSURE_TABLE_NAME
19
18
import com.skyd.anivu.model.bean.article.EnclosureBean
20
19
import com.skyd.anivu.model.bean.feed.FEED_TABLE_NAME
21
20
import com.skyd.anivu.model.bean.feed.FeedBean
21
+ import com.skyd.anivu.model.bean.playlist.PLAYLIST_MEDIA_TABLE_NAME
22
+ import com.skyd.anivu.model.bean.playlist.PlaylistMediaBean
22
23
import com.skyd.anivu.ui.notification.ArticleNotificationManager
23
24
import dagger.hilt.EntryPoint
24
25
import dagger.hilt.InstallIn
@@ -123,42 +124,53 @@ interface ArticleDao {
123
124
}
124
125
125
126
@Transaction
126
- @Delete
127
- suspend fun deleteArticle (articleBean : ArticleBean ): Int
128
-
129
- @Transaction
130
- @Query(" DELETE FROM $ARTICLE_TABLE_NAME WHERE ${ArticleBean .FEED_URL_COLUMN } LIKE :feedUrl" )
131
- suspend fun deleteArticleInFeed (feedUrl : String ): Int
127
+ @Query(
128
+ " DELETE FROM $ARTICLE_TABLE_NAME WHERE ${ArticleBean .FEED_URL_COLUMN } LIKE :feedUrl AND " +
129
+ " NOT (:keepPlaylistArticles AND EXISTS(SELECT 1 FROM $PLAYLIST_MEDIA_TABLE_NAME pl " +
130
+ " WHERE pl.${PlaylistMediaBean .ARTICLE_ID_COLUMN } = $ARTICLE_TABLE_NAME .${ArticleBean .ARTICLE_ID_COLUMN } ))"
131
+ )
132
+ suspend fun deleteArticleInFeed (
133
+ feedUrl : String ,
134
+ keepPlaylistArticles : Boolean ,
135
+ ): Int
132
136
133
137
@Transaction
134
138
@Query(
135
- " DELETE FROM $ARTICLE_TABLE_NAME WHERE ${ArticleBean .FEED_URL_COLUMN } IN (" +
136
- " SELECT ${FeedBean .URL_COLUMN } FROM $FEED_TABLE_NAME " +
137
- " WHERE ${FeedBean .GROUP_ID_COLUMN } IS NULL AND :groupId IS NULL OR " +
138
- " ${FeedBean .GROUP_ID_COLUMN } = :groupId" +
139
- " )"
139
+ " DELETE FROM $ARTICLE_TABLE_NAME WHERE " +
140
+ " ${ArticleBean .FEED_URL_COLUMN } IN (" +
141
+ " SELECT ${FeedBean .URL_COLUMN } FROM $FEED_TABLE_NAME " +
142
+ " WHERE ${FeedBean .GROUP_ID_COLUMN } IS NULL AND :groupId IS NULL OR " +
143
+ " ${FeedBean .GROUP_ID_COLUMN } = :groupId) AND " +
144
+ " NOT (:keepPlaylistArticles AND EXISTS(SELECT 1 FROM $PLAYLIST_MEDIA_TABLE_NAME pl " +
145
+ " WHERE pl.${PlaylistMediaBean .ARTICLE_ID_COLUMN } = $ARTICLE_TABLE_NAME .${ArticleBean .ARTICLE_ID_COLUMN } ))"
140
146
)
141
- suspend fun deleteArticlesInGroup (groupId : String? ): Int
147
+ suspend fun deleteArticlesInGroup (
148
+ groupId : String? ,
149
+ keepPlaylistArticles : Boolean ,
150
+ ): Int
142
151
143
152
@Transaction
144
153
@Query(
145
- """
146
- DELETE FROM $ARTICLE_TABLE_NAME
147
- WHERE ( ${ArticleBean .UPDATE_AT_COLUMN } IS NULL
148
- OR ${ ArticleBean . UPDATE_AT_COLUMN } <= :timestamp)
149
- AND (:keepUnread = 0 OR ${ ArticleBean . IS_READ_COLUMN } = 1)
150
- AND (:keepFavorite = 0 OR ${ArticleBean .IS_FAVORITE_COLUMN } = 0)
151
- "" "
154
+ " DELETE FROM $ARTICLE_TABLE_NAME WHERE " +
155
+ " ( ${ ArticleBean . UPDATE_AT_COLUMN } IS NULL OR " +
156
+ " ${ArticleBean .UPDATE_AT_COLUMN } <= :timestamp) AND " +
157
+ " NOT (:keepPlaylistArticles AND EXISTS(SELECT 1 FROM $PLAYLIST_MEDIA_TABLE_NAME pl " +
158
+ " WHERE pl. ${ PlaylistMediaBean . ARTICLE_ID_COLUMN } = $ARTICLE_TABLE_NAME . ${ ArticleBean . ARTICLE_ID_COLUMN } )) AND " +
159
+ " (:keepUnread = 0 OR ${ArticleBean .IS_READ_COLUMN } = 1) AND " +
160
+ " (:keepFavorite = 0 OR ${ ArticleBean . IS_FAVORITE_COLUMN } = 0) "
152
161
)
153
162
suspend fun deleteArticleBefore (
154
163
timestamp : Long ,
155
- keepUnread : Boolean = true,
156
- keepFavorite : Boolean = true,
164
+ keepPlaylistArticles : Boolean ,
165
+ keepUnread : Boolean ,
166
+ keepFavorite : Boolean ,
157
167
): Int
158
168
159
169
@Transaction
160
170
@Query(
161
171
" DELETE FROM $ARTICLE_TABLE_NAME WHERE " +
172
+ " NOT (:keepPlaylistArticles AND EXISTS(SELECT 1 FROM $PLAYLIST_MEDIA_TABLE_NAME pl " +
173
+ " WHERE pl.${PlaylistMediaBean .ARTICLE_ID_COLUMN } = $ARTICLE_TABLE_NAME .${ArticleBean .ARTICLE_ID_COLUMN } )) AND " +
162
174
" (:keepUnread = 0 OR ${ArticleBean .IS_READ_COLUMN } = 1) AND " +
163
175
" (:keepFavorite = 0 OR ${ArticleBean .IS_FAVORITE_COLUMN } = 0) AND " +
164
176
" (" +
@@ -173,8 +185,9 @@ interface ArticleDao {
173
185
)
174
186
suspend fun deleteArticleExceed (
175
187
count : Int ,
176
- keepUnread : Boolean = true,
177
- keepFavorite : Boolean = true,
188
+ keepPlaylistArticles : Boolean ,
189
+ keepUnread : Boolean ,
190
+ keepFavorite : Boolean ,
178
191
): Int
179
192
180
193
@Transaction
@@ -191,7 +204,7 @@ interface ArticleDao {
191
204
" SELECT * FROM $ARTICLE_TABLE_NAME " +
192
205
" WHERE ${ArticleBean .ARTICLE_ID_COLUMN } IN (:articleIds)"
193
206
)
194
- fun getArticleListByIds (articleIds : List <String >): List <ArticleWithFeed >
207
+ suspend fun getArticleListByIds (articleIds : List <String >): List <ArticleWithFeed >
195
208
196
209
@Transaction
197
210
@Query(
@@ -204,8 +217,8 @@ interface ArticleDao {
204
217
205
218
@Transaction
206
219
@Query(
207
- " SELECT COUNT(1) FROM $ARTICLE_TABLE_NAME " +
208
- " WHERE ${ArticleBean .ARTICLE_ID_COLUMN } LIKE :articleId"
220
+ " SELECT EXISTS (SELECT 1 FROM $ARTICLE_TABLE_NAME " +
221
+ " WHERE ${ArticleBean .ARTICLE_ID_COLUMN } LIKE :articleId) "
209
222
)
210
223
fun exists (articleId : String ): Int
211
224
0 commit comments