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