mirror of https://github.com/readrops/Readrops.git
Adapt new state changes management for Nextcloud News
This commit is contained in:
parent
8c9b2b2ab1
commit
3d0ff2619f
|
@ -45,8 +45,9 @@ public class ItemViewModel extends ViewModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Completable setStarState(Item item) {
|
public Completable setStarState(Item item) {
|
||||||
return KoinJavaComponent.get(ARepository.class, null, () -> DefinitionParametersKt.parametersOf(account))
|
ARepository repository = KoinJavaComponent.get(ARepository.class, null, () -> DefinitionParametersKt.parametersOf(account));
|
||||||
.setItemStarState(item);
|
|
||||||
|
return repository.setItemStarState(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Uri saveImageInCache(Bitmap bitmap, Context context) throws IOException {
|
public Uri saveImageInCache(Bitmap bitmap, Context context) throws IOException {
|
||||||
|
|
|
@ -116,13 +116,13 @@ public abstract class ARepository {
|
||||||
|
|
||||||
public Completable setItemReadState(Item item) {
|
public Completable setItemReadState(Item item) {
|
||||||
if (account.getConfig().useSeparateState()) {
|
if (account.getConfig().useSeparateState()) {
|
||||||
return database.itemStateChangesDao().upsertItemReadStateChange(item, account.getId())
|
return database.itemStateChangesDao().upsertItemReadStateChange(item, account.getId(), true)
|
||||||
.andThen(database.itemStateDao().upsertItemReadState(new ItemState(0, item.isRead(),
|
.andThen(database.itemStateDao().upsertItemReadState(new ItemState(0, item.isRead(),
|
||||||
item.isStarred(), item.getRemoteId(), account.getId())));
|
item.isStarred(), item.getRemoteId(), account.getId())));
|
||||||
} else if (account.isLocal()) {
|
} else if (account.isLocal()) {
|
||||||
return database.itemDao().setReadState(item.getId(), item.isRead());
|
return database.itemDao().setReadState(item.getId(), item.isRead());
|
||||||
} else { // nextcloud case
|
} else { // nextcloud case
|
||||||
return database.itemStateChangesDao().upsertItemReadStateChange(item, account.getId())
|
return database.itemStateChangesDao().upsertItemReadStateChange(item, account.getId(), false)
|
||||||
.andThen(database.itemDao().setReadState(item.getId(), item.isRead()));
|
.andThen(database.itemDao().setReadState(item.getId(), item.isRead()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,14 +138,14 @@ public abstract class ARepository {
|
||||||
|
|
||||||
public Completable setItemStarState(Item item) {
|
public Completable setItemStarState(Item item) {
|
||||||
if (account.getConfig().useSeparateState()) {
|
if (account.getConfig().useSeparateState()) {
|
||||||
return database.itemStateChangesDao().upsertItemStarStateChange(item, account.getId())
|
return database.itemStateChangesDao().upsertItemStarStateChange(item, account.getId(), true)
|
||||||
.andThen(database.itemStateDao().upsertItemStarState(new ItemState(0, item.isRead(),
|
.andThen(database.itemStateDao().upsertItemStarState(new ItemState(0, item.isRead(),
|
||||||
item.isStarred(), item.getRemoteId(), account.getId())));
|
item.isStarred(), item.getRemoteId(), account.getId())));
|
||||||
} else if (account.isLocal()) {
|
} else if (account.isLocal()) {
|
||||||
return database.itemDao().setStarState(item.getId(), item.isRead());
|
return database.itemDao().setStarState(item.getId(), item.isRead());
|
||||||
} else { // nextcloud case
|
} else { // nextcloud case
|
||||||
return database.itemStateChangesDao().upsertItemReadStateChange(item, account.getId())
|
return database.itemStateChangesDao().upsertItemStarStateChange(item, account.getId(), false)
|
||||||
.andThen(database.itemDao().setStarState(item.getId(), item.isRead()));
|
.andThen(database.itemDao().setStarState(item.getId(), item.isStarred()));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -102,7 +102,7 @@ public class NextNewsRepository extends ARepository {
|
||||||
|
|
||||||
List<ItemReadStarState> itemStateChanges = database
|
List<ItemReadStarState> itemStateChanges = database
|
||||||
.itemStateChangesDao()
|
.itemStateChangesDao()
|
||||||
.getItemStateChanges(account.getId());
|
.getNextcloudNewsStateChanges(account.getId());
|
||||||
|
|
||||||
syncData.setReadItems(itemStateChanges.stream()
|
syncData.setReadItems(itemStateChanges.stream()
|
||||||
.filter(it -> it.getReadChange() && it.getRead())
|
.filter(it -> it.getReadChange() && it.getRead())
|
||||||
|
@ -129,7 +129,7 @@ public class NextNewsRepository extends ARepository {
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
if (!unstarredItemsIds.isEmpty()) {
|
if (!unstarredItemsIds.isEmpty()) {
|
||||||
syncData.setUnstarredItems(database.itemDao().getUnstarChanges(unstarredItemsIds, account.getId()));
|
syncData.setUnstarredItems(database.itemDao().getStarChanges(unstarredItemsIds, account.getId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,9 +61,6 @@ public interface ItemDao extends BaseDao<Item> {
|
||||||
@Query("Select Item.guid, Feed.remoteId as feedRemoteId From Item Inner Join Feed On Item.feed_id = Feed.id Where Item.remoteId In (:remoteIds) And account_id = :accountId")
|
@Query("Select Item.guid, Feed.remoteId as feedRemoteId From Item Inner Join Feed On Item.feed_id = Feed.id Where Item.remoteId In (:remoteIds) And account_id = :accountId")
|
||||||
List<StarItem> getStarChanges(List<String> remoteIds, int accountId);
|
List<StarItem> getStarChanges(List<String> remoteIds, int accountId);
|
||||||
|
|
||||||
@Query("Select Item.guid, Feed.remoteId as feedRemoteId From Item Inner Join Feed On Item.feed_id = Feed.id Where Item.remoteId In (:remoteIds) And account_id = :accountId")
|
|
||||||
List<StarItem> getUnstarChanges(List<String> remoteIds, int accountId);
|
|
||||||
|
|
||||||
@Query("Update Item set read = :read, starred = :starred Where remoteId = :remoteId")
|
@Query("Update Item set read = :read, starred = :starred Where remoteId = :remoteId")
|
||||||
void setReadAndStarState(String remoteId, boolean read, boolean starred);
|
void setReadAndStarState(String remoteId, boolean read, boolean starred);
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,15 +28,25 @@ interface ItemStateChangeDao : BaseDao<ItemStateChange> {
|
||||||
"Left Join ItemState On ItemState.remote_id = Item.remoteId Where ItemStateChange.account_id = :accountId")
|
"Left Join ItemState On ItemState.remote_id = Item.remoteId Where ItemStateChange.account_id = :accountId")
|
||||||
fun getItemStateChanges(accountId: Int): List<ItemReadStarState>
|
fun getItemStateChanges(accountId: Int): List<ItemReadStarState>
|
||||||
|
|
||||||
|
@Query("Select Item.read, Item.starred," +
|
||||||
|
"ItemStateChange.read_change, ItemStateChange.star_change, Item.remoteId " +
|
||||||
|
"From ItemStateChange Inner Join Item On ItemStateChange.id = Item.id " +
|
||||||
|
"Where ItemStateChange.account_id = :accountId")
|
||||||
|
fun getNextcloudNewsStateChanges(accountId: Int): List<ItemReadStarState>
|
||||||
|
|
||||||
@Query("Select Case When :itemId In (Select id From ItemStateChange Where read_change = 1) Then 1 Else 0 End")
|
@Query("Select Case When :itemId In (Select id From ItemStateChange Where read_change = 1) Then 1 Else 0 End")
|
||||||
fun readStateChangeExists(itemId: Int): Boolean
|
fun readStateChangeExists(itemId: Int): Boolean
|
||||||
|
|
||||||
@Query("Select Case When :itemId In (Select id From ItemStateChange Where star_change = 1) Then 1 Else 0 End")
|
@Query("Select Case When :itemId In (Select id From ItemStateChange Where star_change = 1) Then 1 Else 0 End")
|
||||||
fun starStateChangeExists(itemId: Int): Boolean
|
fun starStateChangeExists(itemId: Int): Boolean
|
||||||
|
|
||||||
fun upsertItemReadStateChange(item: Item, accountId: Int) = Completable.create {
|
fun upsertItemReadStateChange(item: Item, accountId: Int, useSeparateState: Boolean) = Completable.create {
|
||||||
if (itemStateChangeExists(item.id, accountId)) {
|
if (itemStateChangeExists(item.id, accountId)) {
|
||||||
val oldItemReadState = getItemReadState(item.remoteId, accountId)
|
val oldItemReadState = if (useSeparateState)
|
||||||
|
getItemReadState(item.remoteId, accountId)
|
||||||
|
else
|
||||||
|
getStandardItemReadState(item.remoteId, accountId)
|
||||||
|
|
||||||
val readChange = item.isRead != oldItemReadState
|
val readChange = item.isRead != oldItemReadState
|
||||||
|
|
||||||
if (readChange) {
|
if (readChange) {
|
||||||
|
@ -56,9 +66,13 @@ interface ItemStateChangeDao : BaseDao<ItemStateChange> {
|
||||||
it.onComplete()
|
it.onComplete()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun upsertItemStarStateChange(item: Item, accountId: Int) = Completable.create {
|
fun upsertItemStarStateChange(item: Item, accountId: Int, useSeparateState: Boolean) = Completable.create {
|
||||||
if (itemStateChangeExists(item.id, accountId)) {
|
if (itemStateChangeExists(item.id, accountId)) {
|
||||||
val oldItemStarState = getItemStarState(item.remoteId, accountId)
|
val oldItemStarState = if (useSeparateState)
|
||||||
|
getItemStarState(item.remoteId, accountId)
|
||||||
|
else
|
||||||
|
getStandardItemStarState(item.remoteId, accountId)
|
||||||
|
|
||||||
val starChange = item.isStarred != oldItemStarState
|
val starChange = item.isStarred != oldItemStarState
|
||||||
|
|
||||||
if (starChange) {
|
if (starChange) {
|
||||||
|
@ -75,7 +89,6 @@ interface ItemStateChangeDao : BaseDao<ItemStateChange> {
|
||||||
insertItemStateChange(ItemStateChange(id = item.id, starChange = true, accountId = accountId))
|
insertItemStateChange(ItemStateChange(id = item.id, starChange = true, accountId = accountId))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
it.onComplete()
|
it.onComplete()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,9 +101,15 @@ interface ItemStateChangeDao : BaseDao<ItemStateChange> {
|
||||||
@Query("Select read From ItemState Where remote_id = :remoteId And account_id = :accountId")
|
@Query("Select read From ItemState Where remote_id = :remoteId And account_id = :accountId")
|
||||||
fun getItemReadState(remoteId: String, accountId: Int): Boolean
|
fun getItemReadState(remoteId: String, accountId: Int): Boolean
|
||||||
|
|
||||||
|
@Query("Select read From Item Inner Join Feed On Item.feed_id = Feed.id Where Item.remoteId = :remoteId And account_id = :accountId")
|
||||||
|
fun getStandardItemReadState(remoteId: String, accountId: Int): Boolean
|
||||||
|
|
||||||
@Query("Select starred From ItemState Where remote_id = :remoteId And account_id = :accountId")
|
@Query("Select starred From ItemState Where remote_id = :remoteId And account_id = :accountId")
|
||||||
fun getItemStarState(remoteId: String, accountId: Int): Boolean
|
fun getItemStarState(remoteId: String, accountId: Int): Boolean
|
||||||
|
|
||||||
|
@Query("Select starred From Item Inner Join Feed On Item.feed_id = Feed.id Where Item.remoteId = :remoteId And account_id = :accountId")
|
||||||
|
fun getStandardItemStarState(remoteId: String, accountId: Int): Boolean
|
||||||
|
|
||||||
@Query("Update ItemStateChange set read_change = :readChange Where id = :id")
|
@Query("Update ItemStateChange set read_change = :readChange Where id = :id")
|
||||||
fun updateItemReadStateChange(readChange: Boolean, id: Int)
|
fun updateItemReadStateChange(readChange: Boolean, id: Int)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue