Makes the dashboard editable.
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
package com.majinnaibu.monstercards.data;
|
||||
|
||||
import androidx.room.Dao;
|
||||
import androidx.room.Insert;
|
||||
import androidx.room.Query;
|
||||
import androidx.room.Update;
|
||||
|
||||
import com.majinnaibu.monstercards.models.DashboardMonster;
|
||||
import com.majinnaibu.monstercards.models.Monster;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import io.reactivex.rxjava3.core.Completable;
|
||||
import io.reactivex.rxjava3.core.Flowable;
|
||||
|
||||
@Dao
|
||||
public interface DashboardDAO {
|
||||
|
||||
@Query("SELECT monsters.* FROM monsters INNER JOIN dashboard_monsters ON monsters.id = dashboard_monsters.monster_id ORDER BY dashboard_monsters.ordinal ASC, dashboard_monsters.id ASC")
|
||||
Flowable<List<Monster>> getDashboardMonsters();
|
||||
|
||||
@Query("SELECT * FROM dashboard_monsters ORDER BY ordinal ASC, id ASC")
|
||||
Flowable<List<DashboardMonster>> getDashboardMonsterEntries();
|
||||
|
||||
@Insert
|
||||
Completable addMonsterToDashboard(DashboardMonster... dashboardMonsters);
|
||||
|
||||
@Query("DELETE FROM dashboard_monsters WHERE id = :id")
|
||||
Completable removeDashboardMonsterById(long id);
|
||||
|
||||
@Query("DELETE FROM dashboard_monsters WHERE monster_id = :monsterId")
|
||||
Completable removeMonsterFromDashboard(String monsterId);
|
||||
|
||||
@Query("DELETE FROM dashboard_monsters")
|
||||
Completable clearDashboard();
|
||||
|
||||
@Update
|
||||
Completable updateDashboardMonsters(List<DashboardMonster> dashboardMonsters);
|
||||
}
|
||||
@@ -7,6 +7,7 @@ import com.majinnaibu.monstercards.helpers.StringHelper;
|
||||
import com.majinnaibu.monstercards.models.Collection;
|
||||
import com.majinnaibu.monstercards.models.CollectionMonster;
|
||||
import com.majinnaibu.monstercards.models.CollectionWithCount;
|
||||
import com.majinnaibu.monstercards.models.DashboardMonster;
|
||||
import com.majinnaibu.monstercards.models.Monster;
|
||||
import com.majinnaibu.monstercards.models.SearchResultItem;
|
||||
|
||||
@@ -197,6 +198,68 @@ public class MonsterRepository {
|
||||
return result;
|
||||
}
|
||||
|
||||
public Flowable<List<Monster>> getDashboardMonsters() {
|
||||
return m_db.dashboardDAO()
|
||||
.getDashboardMonsters()
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread());
|
||||
}
|
||||
|
||||
public Flowable<List<DashboardMonster>> getDashboardMonsterEntries() {
|
||||
return m_db.dashboardDAO()
|
||||
.getDashboardMonsterEntries()
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread());
|
||||
}
|
||||
|
||||
public Completable addMonsterToDashboard(@NonNull UUID monsterId) {
|
||||
DashboardMonster entry = new DashboardMonster(monsterId, 0);
|
||||
Completable result = m_db.dashboardDAO().addMonsterToDashboard(entry);
|
||||
result.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());
|
||||
return result;
|
||||
}
|
||||
|
||||
public Completable addCollectionToDashboard(@NonNull UUID collectionId) {
|
||||
return m_db.collectionDAO().getMonstersForCollection(collectionId.toString())
|
||||
.firstOrError()
|
||||
.flatMapCompletable(monsters -> {
|
||||
if (monsters.isEmpty()) {
|
||||
return Completable.complete();
|
||||
}
|
||||
DashboardMonster[] entries = new DashboardMonster[monsters.size()];
|
||||
for (int i = 0; i < monsters.size(); i++) {
|
||||
entries[i] = new DashboardMonster(monsters.get(i).id, i);
|
||||
}
|
||||
return m_db.dashboardDAO().addMonsterToDashboard(entries);
|
||||
})
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread());
|
||||
}
|
||||
|
||||
public Completable removeMonsterFromDashboard(@NonNull UUID monsterId) {
|
||||
Completable result = m_db.dashboardDAO().removeMonsterFromDashboard(monsterId.toString());
|
||||
result.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());
|
||||
return result;
|
||||
}
|
||||
|
||||
public Completable removeDashboardMonsterById(long id) {
|
||||
Completable result = m_db.dashboardDAO().removeDashboardMonsterById(id);
|
||||
result.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());
|
||||
return result;
|
||||
}
|
||||
|
||||
public Completable clearDashboard() {
|
||||
Completable result = m_db.dashboardDAO().clearDashboard();
|
||||
result.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());
|
||||
return result;
|
||||
}
|
||||
|
||||
public Completable updateDashboardMonsters(List<DashboardMonster> items) {
|
||||
Completable result = m_db.dashboardDAO().updateDashboardMonsters(items);
|
||||
result.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());
|
||||
return result;
|
||||
}
|
||||
|
||||
private static class Helpers {
|
||||
static boolean monsterMatchesSearch(Monster monster, String searchText) {
|
||||
if (StringHelper.isNullOrEmpty(searchText)) {
|
||||
|
||||
Reference in New Issue
Block a user