Wrap room insert id result into a single
This commit is contained in:
parent
dfb4c82c59
commit
d4228ee953
@ -7,11 +7,17 @@ import androidx.room.Update;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import io.reactivex.Completable;
|
import io.reactivex.Completable;
|
||||||
|
import io.reactivex.Single;
|
||||||
|
|
||||||
public interface BaseDao<T> {
|
public interface BaseDao<T> {
|
||||||
|
|
||||||
@Insert
|
@Insert
|
||||||
long insert(T entity); // can't turn return type to Single<Long> while some repositories can't use rxjava properly
|
Single<Long> insert(T entity); // can't turn return type to Single<Long> while some repositories can't use rxjava properly
|
||||||
|
|
||||||
|
// only here for compatibility with LocalFeedRepository
|
||||||
|
// which hasn't been written with rxjava usage in mind
|
||||||
|
@Insert
|
||||||
|
long compatInsert(T entity);
|
||||||
|
|
||||||
@Insert
|
@Insert
|
||||||
List<Long> insert(List<T> entities);
|
List<Long> insert(List<T> entities);
|
||||||
|
@ -59,11 +59,8 @@ public abstract class ARepository<T> {
|
|||||||
return database.feedDao().delete(feed);
|
return database.feedDao().delete(feed);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Completable addFolder(Folder folder) {
|
public Single<Long> addFolder(Folder folder) {
|
||||||
return Completable.create(emitter -> {
|
return database.folderDao().insert(folder);
|
||||||
database.folderDao().insert(folder);
|
|
||||||
emitter.onComplete();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Completable updateFolder(Folder folder) {
|
public Completable updateFolder(Folder folder) {
|
||||||
|
@ -36,7 +36,7 @@ import io.reactivex.Single;
|
|||||||
public class FreshRSSRepository extends ARepository<FreshRSSAPI> {
|
public class FreshRSSRepository extends ARepository<FreshRSSAPI> {
|
||||||
|
|
||||||
private static final String TAG = FreshRSSRepository.class.getSimpleName();
|
private static final String TAG = FreshRSSRepository.class.getSimpleName();
|
||||||
|
|
||||||
public FreshRSSRepository(@NonNull Application application, @Nullable Account account) {
|
public FreshRSSRepository(@NonNull Application application, @Nullable Account account) {
|
||||||
super(application, account);
|
super(application, account);
|
||||||
}
|
}
|
||||||
@ -71,8 +71,14 @@ public class FreshRSSRepository extends ARepository<FreshRSSAPI> {
|
|||||||
.flatMap(userInfo -> {
|
.flatMap(userInfo -> {
|
||||||
account.setDisplayedName(userInfo.getUserName());
|
account.setDisplayedName(userInfo.getUserName());
|
||||||
|
|
||||||
if (insert)
|
if (insert) {
|
||||||
account.setId((int) database.accountDao().insert(account));
|
return database.accountDao().insert(account)
|
||||||
|
.flatMap(id -> {
|
||||||
|
account.setId(id.intValue());
|
||||||
|
|
||||||
|
return Single.just(true);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return Single.just(true);
|
return Single.just(true);
|
||||||
});
|
});
|
||||||
@ -164,8 +170,9 @@ public class FreshRSSRepository extends ARepository<FreshRSSAPI> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Completable addFolder(Folder folder) {
|
public Single<Long> addFolder(Folder folder) {
|
||||||
return api.createFolder(account.getWriteToken(), folder.getName());
|
return api.createFolder(account.getWriteToken(), folder.getName())
|
||||||
|
.andThen(super.addFolder(folder));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -202,7 +202,7 @@ public class LocalFeedRepository extends ARepository<Void> {
|
|||||||
dbFeed.setEtag(null);
|
dbFeed.setEtag(null);
|
||||||
dbFeed.setLastModified(null);
|
dbFeed.setLastModified(null);
|
||||||
|
|
||||||
dbFeed.setId((int) (database.feedDao().insert(dbFeed)));
|
dbFeed.setId((int) (database.feedDao().compatInsert(dbFeed)));
|
||||||
return dbFeed;
|
return dbFeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ public class NextNewsRepository extends ARepository<NextNewsAPI> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Single<Boolean> login(Account account, boolean insert) {
|
public Single<Boolean> login(Account account, boolean insert) {
|
||||||
return Single.create(emitter -> {
|
return Single.<NextNewsUser>create(emitter -> {
|
||||||
if (api == null)
|
if (api == null)
|
||||||
api = new NextNewsAPI(account.toCredentials());
|
api = new NextNewsAPI(account.toCredentials());
|
||||||
else
|
else
|
||||||
@ -66,15 +66,23 @@ public class NextNewsRepository extends ARepository<NextNewsAPI> {
|
|||||||
|
|
||||||
NextNewsUser user = api.login();
|
NextNewsUser user = api.login();
|
||||||
|
|
||||||
|
emitter.onSuccess(user);
|
||||||
|
}).flatMap(user -> {
|
||||||
if (user != null) {
|
if (user != null) {
|
||||||
account.setDisplayedName(user.getDisplayName());
|
account.setDisplayedName(user.getDisplayName());
|
||||||
account.setCurrentAccount(true);
|
account.setCurrentAccount(true);
|
||||||
|
|
||||||
if (insert)
|
if (insert) {
|
||||||
account.setId((int) database.accountDao().insert(account));
|
return database.accountDao().insert(account)
|
||||||
emitter.onSuccess(true);
|
.flatMap(id -> {
|
||||||
|
account.setId(id.intValue());
|
||||||
|
return Single.just(true);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return Single.just(true);
|
||||||
} else
|
} else
|
||||||
emitter.onSuccess(false);
|
return Single.just(false);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -206,8 +214,8 @@ public class NextNewsRepository extends ARepository<NextNewsAPI> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Completable addFolder(Folder folder) {
|
public Single<Long> addFolder(Folder folder) {
|
||||||
return Completable.create(emitter -> {
|
return Single.<Folder>create(emitter -> {
|
||||||
try {
|
try {
|
||||||
int folderRemoteId = folder.getRemoteId() == null ? 0 : Integer.parseInt(folder.getRemoteId());
|
int folderRemoteId = folder.getRemoteId() == null ? 0 : Integer.parseInt(folder.getRemoteId());
|
||||||
NextNewsFolders folders = api.createFolder(new NextNewsFolder(folderRemoteId, folder.getName()));
|
NextNewsFolders folders = api.createFolder(new NextNewsFolder(folderRemoteId, folder.getName()));
|
||||||
@ -217,15 +225,13 @@ public class NextNewsRepository extends ARepository<NextNewsAPI> {
|
|||||||
|
|
||||||
folder.setName(nextNewsFolder.getName());
|
folder.setName(nextNewsFolder.getName());
|
||||||
folder.setRemoteId(String.valueOf(nextNewsFolder.getId()));
|
folder.setRemoteId(String.valueOf(nextNewsFolder.getId()));
|
||||||
database.folderDao().insert(folder);
|
emitter.onSuccess(folder);
|
||||||
} else
|
} else
|
||||||
emitter.onError(new Exception("Unknown error"));
|
emitter.onError(new Exception("Unknown error"));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
emitter.onError(e);
|
emitter.onError(e);
|
||||||
}
|
}
|
||||||
|
}).flatMap(folder1 -> database.folderDao().insert(folder));
|
||||||
emitter.onComplete();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -33,10 +33,7 @@ public class AccountViewModel extends AndroidViewModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Single<Long> insert(Account account) {
|
public Single<Long> insert(Account account) {
|
||||||
return Single.create(emitter -> {
|
return database.accountDao().insert(account);
|
||||||
long id = database.accountDao().insert(account);
|
|
||||||
emitter.onSuccess(id);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Completable update(Account account) {
|
public Completable update(Account account) {
|
||||||
|
@ -17,6 +17,7 @@ import com.readrops.app.repositories.ARepository;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import io.reactivex.Completable;
|
import io.reactivex.Completable;
|
||||||
|
import io.reactivex.Single;
|
||||||
|
|
||||||
public class ManageFeedsFoldersViewModel extends AndroidViewModel {
|
public class ManageFeedsFoldersViewModel extends AndroidViewModel {
|
||||||
|
|
||||||
@ -69,7 +70,7 @@ public class ManageFeedsFoldersViewModel extends AndroidViewModel {
|
|||||||
return db.folderDao().getFoldersWithFeedCount(account.getId());
|
return db.folderDao().getFoldersWithFeedCount(account.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
public Completable addFolder(Folder folder) {
|
public Single<Long> addFolder(Folder folder) {
|
||||||
return repository.addFolder(folder);
|
return repository.addFolder(folder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user