mirror of https://github.com/readrops/Readrops.git
Build manually the item selection query
This commit is contained in:
parent
b9d6e6d135
commit
d9b31d4cfa
|
@ -14,6 +14,7 @@ import com.readrops.db.Database;
|
|||
import com.readrops.db.entities.Item;
|
||||
import com.readrops.db.entities.account.Account;
|
||||
import com.readrops.db.pojo.ItemWithFeed;
|
||||
import com.readrops.db.queries.ItemSelectionQueryBuilder;
|
||||
|
||||
import org.koin.core.parameter.DefinitionParametersKt;
|
||||
import org.koin.java.KoinJavaComponent;
|
||||
|
@ -39,7 +40,8 @@ public class ItemViewModel extends ViewModel {
|
|||
}
|
||||
|
||||
public LiveData<ItemWithFeed> getItemById(int id) {
|
||||
return database.itemDao().getItemById(id);
|
||||
return database.itemDao().getItemById(ItemSelectionQueryBuilder.buildQuery(id,
|
||||
account.getConfig().useSeparateState()));
|
||||
}
|
||||
|
||||
public Completable setStarState(Item item) {
|
||||
|
|
|
@ -6,7 +6,6 @@ import androidx.paging.DataSource;
|
|||
import androidx.room.Dao;
|
||||
import androidx.room.Query;
|
||||
import androidx.room.RawQuery;
|
||||
import androidx.room.RoomWarnings;
|
||||
import androidx.sqlite.db.SupportSQLiteQuery;
|
||||
|
||||
import com.readrops.db.entities.Feed;
|
||||
|
@ -52,12 +51,9 @@ public interface ItemDao extends BaseDao<Item> {
|
|||
|
||||
@Query("Select count(*) From Item Where feed_id = :feedId And read = 0")
|
||||
int getUnreadCount(int feedId);
|
||||
|
||||
@SuppressWarnings(RoomWarnings.CURSOR_MISMATCH)
|
||||
@Query("Select Item.id, Item.remoteId, title, Item.description, content, link, pub_date, image_link, author, read, text_color, " +
|
||||
"background_color, read_time, starred, Feed.name, Feed.id as feedId, siteUrl, Folder.id as folder_id, " +
|
||||
"Folder.name as folder_name from Item Inner Join Feed On Item.feed_id = Feed.id Left Join Folder on Folder.id = Feed.folder_id Where Item.id = :id")
|
||||
LiveData<ItemWithFeed> getItemById(int id);
|
||||
|
||||
@RawQuery(observedEntities = {Item.class, ItemState.class})
|
||||
LiveData<ItemWithFeed> getItemById(SupportSQLiteQuery query);
|
||||
|
||||
@Query("Select Item.remoteId From Item Inner Join Feed On Item.feed_id = Feed.id Where read = 1 And account_id = :accountId")
|
||||
List<String> getReadChanges(int accountId);
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
package com.readrops.db.queries
|
||||
|
||||
import androidx.sqlite.db.SupportSQLiteQuery
|
||||
import androidx.sqlite.db.SupportSQLiteQueryBuilder
|
||||
|
||||
object ItemSelectionQueryBuilder {
|
||||
|
||||
private val COLUMNS = arrayOf("Item.id", "Item.remoteId", "title", "Item.description", "content",
|
||||
"link", "pub_date", "image_link", "author", "Item.read", "text_color",
|
||||
"background_color", "read_time", "Feed.name", "Feed.id as feedId", "siteUrl",
|
||||
"Folder.id as folder_id", "Folder.name as folder_name")
|
||||
|
||||
private val SEPARATE_STATE_COLUMNS = arrayOf("case When ItemState.starred = 1 Then 1 else 0 End starred")
|
||||
|
||||
private const val JOIN = "Item Inner Join Feed On Item.feed_id = Feed.id Left Join Folder on Folder.id = Feed.folder_id"
|
||||
|
||||
private const val SEPARATE_STATE_JOIN = " Left Join ItemState On ItemState.remote_id = Item.remoteId"
|
||||
|
||||
/**
|
||||
* @param separateState Indicates if item state must be retrieved from ItemState table
|
||||
*/
|
||||
@JvmStatic
|
||||
fun buildQuery(itemId: Int, separateState: Boolean): SupportSQLiteQuery {
|
||||
val tables = if (separateState) JOIN + SEPARATE_STATE_JOIN else JOIN
|
||||
val columns = if (separateState) COLUMNS.plus(SEPARATE_STATE_COLUMNS) else COLUMNS.plus("starred")
|
||||
|
||||
return SupportSQLiteQueryBuilder.builder(tables).run {
|
||||
columns(columns)
|
||||
selection("Item.id = $itemId", null)
|
||||
|
||||
create()
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue