mirror of
https://codeberg.org/Mercury-IM/Mercury-IM
synced 2024-06-24 12:34:51 +02:00
Fix NPEs in repositories
This commit is contained in:
parent
c2b1d794b7
commit
40a14abe02
|
@ -9,6 +9,7 @@ import android.content.Context;
|
|||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
|
||||
import org.mercury_im.messenger.data.di.MappingModule;
|
||||
import org.mercury_im.messenger.data.di.RepositoryModule;
|
||||
import org.mercury_im.messenger.di.component.AppComponent;
|
||||
import org.mercury_im.messenger.di.component.DaggerAppComponent;
|
||||
|
@ -72,7 +73,6 @@ public class MercuryImApplication extends Application {
|
|||
public AppComponent createAppComponent() {
|
||||
AppComponent appComponent = DaggerAppComponent.builder()
|
||||
.appModule(new AppModule(this))
|
||||
.repositoryModule(new RepositoryModule())
|
||||
.build();
|
||||
|
||||
appComponent.inject(this);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package org.mercury_im.messenger.di.component;
|
||||
|
||||
import org.mercury_im.messenger.MercuryImApplication;
|
||||
import org.mercury_im.messenger.data.di.MappingModule;
|
||||
import org.mercury_im.messenger.data.di.RepositoryModule;
|
||||
import org.mercury_im.messenger.di.module.AndroidPersistenceModule;
|
||||
import org.mercury_im.messenger.di.module.AppModule;
|
||||
|
@ -28,20 +29,11 @@ import dagger.Component;
|
|||
@Component(
|
||||
modules = {
|
||||
AppModule.class,
|
||||
AndroidPersistenceModule.class
|
||||
AndroidPersistenceModule.class,
|
||||
RepositoryModule.class
|
||||
})
|
||||
public interface AppComponent {
|
||||
|
||||
@Component.Builder
|
||||
interface Builder {
|
||||
|
||||
AppComponent build();
|
||||
|
||||
Builder appModule(AppModule appModule);
|
||||
|
||||
Builder repositoryModule(RepositoryModule module);
|
||||
}
|
||||
|
||||
// Application
|
||||
|
||||
void inject(MercuryImApplication mercuryImApplication);
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
package org.mercury_im.messenger.data.di;
|
||||
|
||||
import org.mercury_im.messenger.data.repository.XmppAccountRepository;
|
||||
import org.mercury_im.messenger.data.repository.XmppDirectChatRepository;
|
||||
import org.mercury_im.messenger.data.repository.XmppGroupChatRepository;
|
||||
import org.mercury_im.messenger.data.repository.XmppPeerRepository;
|
||||
|
||||
import dagger.Component;
|
||||
|
||||
@Component(modules = {
|
||||
RepositoryModule.class
|
||||
})
|
||||
public interface RepositoryComponent {
|
||||
|
||||
void inject(XmppAccountRepository accountRepository);
|
||||
|
||||
void inject(XmppPeerRepository peerRepository);
|
||||
|
||||
void inject(XmppDirectChatRepository directChatRepository);
|
||||
|
||||
void inject(XmppGroupChatRepository groupChatRepository);
|
||||
|
||||
}
|
|
@ -1,11 +1,17 @@
|
|||
package org.mercury_im.messenger.data.di;
|
||||
|
||||
import org.mercury_im.messenger.data.mapping.AccountMapping;
|
||||
import org.mercury_im.messenger.data.mapping.DirectChatMapping;
|
||||
import org.mercury_im.messenger.data.mapping.GroupChatMapping;
|
||||
import org.mercury_im.messenger.data.mapping.PeerMapping;
|
||||
import org.mercury_im.messenger.data.repository.AccountRepository;
|
||||
import org.mercury_im.messenger.data.repository.GroupChatRepository;
|
||||
import org.mercury_im.messenger.data.repository.PeerRepository;
|
||||
import org.mercury_im.messenger.data.repository.DirectChatRepository;
|
||||
import org.mercury_im.messenger.data.repository.EntityCapsRepository;
|
||||
import org.mercury_im.messenger.data.repository.XmppAccountRepository;
|
||||
import org.mercury_im.messenger.data.repository.XmppDirectChatRepository;
|
||||
import org.mercury_im.messenger.data.repository.XmppGroupChatRepository;
|
||||
import org.mercury_im.messenger.data.repository.XmppPeerRepository;
|
||||
import org.mercury_im.messenger.util.ThreadUtils;
|
||||
|
||||
|
@ -26,17 +32,41 @@ public class RepositoryModule {
|
|||
public static AccountRepository provideAccountRepository(
|
||||
ReactiveEntityStore<Persistable> data,
|
||||
@Named(value = ThreadUtils.SCHEDULER_IO) Scheduler ioScheduler,
|
||||
@Named(value = ThreadUtils.SCHEDULER_UI) Scheduler uiScheduler) {
|
||||
return new XmppAccountRepository(data, ioScheduler, uiScheduler);
|
||||
@Named(value = ThreadUtils.SCHEDULER_UI) Scheduler uiScheduler,
|
||||
AccountMapping accountMapping) {
|
||||
return new XmppAccountRepository(data, ioScheduler, uiScheduler, accountMapping);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
public static DirectChatRepository provideChatRepository(
|
||||
public static PeerRepository providePeerRepository(
|
||||
ReactiveEntityStore<Persistable> data,
|
||||
@Named(value = ThreadUtils.SCHEDULER_IO) Scheduler ioScheduler,
|
||||
@Named(value = ThreadUtils.SCHEDULER_UI) Scheduler uiScheduler) {
|
||||
return new XmppDirectChatRepository(data, ioScheduler, uiScheduler);
|
||||
@Named(value = ThreadUtils.SCHEDULER_UI) Scheduler uiScheduler,
|
||||
PeerMapping peerMapping) {
|
||||
return new XmppPeerRepository(data, ioScheduler, uiScheduler, peerMapping);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
public static DirectChatRepository provideDirectChatRepository(
|
||||
ReactiveEntityStore<Persistable> data,
|
||||
@Named(value = ThreadUtils.SCHEDULER_IO) Scheduler ioScheduler,
|
||||
@Named(value = ThreadUtils.SCHEDULER_UI) Scheduler uiScheduler,
|
||||
AccountMapping accountMapping,
|
||||
PeerMapping peerMapping,
|
||||
DirectChatMapping directChatMapping) {
|
||||
return new XmppDirectChatRepository(data, ioScheduler, uiScheduler, accountMapping, peerMapping, directChatMapping);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
public static GroupChatRepository provideGroupChatRepository(
|
||||
ReactiveEntityStore<Persistable> data,
|
||||
@Named(value = ThreadUtils.SCHEDULER_IO) Scheduler ioScheduler,
|
||||
@Named(value = ThreadUtils.SCHEDULER_UI) Scheduler uiScheduler,
|
||||
GroupChatMapping groupChatMapping) {
|
||||
return new XmppGroupChatRepository(data, ioScheduler, uiScheduler, groupChatMapping);
|
||||
}
|
||||
|
||||
@Provides
|
||||
|
@ -48,12 +78,5 @@ public class RepositoryModule {
|
|||
return new EntityCapsRepository(data, ioScheduler, uiScheduler);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
public static PeerRepository provideRosterRepository(
|
||||
ReactiveEntityStore<Persistable> data,
|
||||
@Named(value = ThreadUtils.SCHEDULER_IO) Scheduler ioScheduler,
|
||||
@Named(value = ThreadUtils.SCHEDULER_UI) Scheduler uiScheduler) {
|
||||
return new XmppPeerRepository(data, ioScheduler, uiScheduler);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -26,14 +26,15 @@ public class XmppAccountRepository
|
|||
extends RequeryRepository
|
||||
implements AccountRepository {
|
||||
|
||||
@Inject
|
||||
AccountMapping accountMapping;
|
||||
private final AccountMapping accountMapping;
|
||||
|
||||
@Inject
|
||||
public XmppAccountRepository(ReactiveEntityStore<Persistable> data,
|
||||
@Named(value = ThreadUtils.SCHEDULER_IO) Scheduler subscriberScheduler,
|
||||
@Named(value = ThreadUtils.SCHEDULER_UI) Scheduler observerScheduler) {
|
||||
@Named(value = ThreadUtils.SCHEDULER_UI) Scheduler observerScheduler,
|
||||
AccountMapping accountMapping) {
|
||||
super(data, subscriberScheduler, observerScheduler);
|
||||
this.accountMapping = accountMapping;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -30,21 +30,24 @@ public class XmppDirectChatRepository
|
|||
extends RequeryRepository
|
||||
implements DirectChatRepository {
|
||||
|
||||
@Inject
|
||||
AccountMapping accountMapping;
|
||||
private final AccountMapping accountMapping;
|
||||
|
||||
@Inject
|
||||
PeerMapping peerMapping;
|
||||
private final PeerMapping peerMapping;
|
||||
|
||||
@Inject
|
||||
DirectChatMapping directChatMapping;
|
||||
private final DirectChatMapping directChatMapping;
|
||||
|
||||
@Inject
|
||||
public XmppDirectChatRepository(
|
||||
ReactiveEntityStore<Persistable> data,
|
||||
@Named(value = ThreadUtils.SCHEDULER_IO) Scheduler subscriberScheduler,
|
||||
@Named(value = ThreadUtils.SCHEDULER_UI) Scheduler observerScheduler) {
|
||||
@Named(value = ThreadUtils.SCHEDULER_UI) Scheduler observerScheduler,
|
||||
AccountMapping accountMapping,
|
||||
PeerMapping peerMapping,
|
||||
DirectChatMapping directChatMapping) {
|
||||
super(data, subscriberScheduler, observerScheduler);
|
||||
this.accountMapping = accountMapping;
|
||||
this.peerMapping = peerMapping;
|
||||
this.directChatMapping = directChatMapping;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -28,15 +28,16 @@ public class XmppGroupChatRepository
|
|||
extends RequeryRepository
|
||||
implements GroupChatRepository {
|
||||
|
||||
@Inject
|
||||
GroupChatMapping groupChatMapping;
|
||||
private final GroupChatMapping groupChatMapping;
|
||||
|
||||
@Inject
|
||||
public XmppGroupChatRepository(
|
||||
ReactiveEntityStore<Persistable> data,
|
||||
@Named(value = ThreadUtils.SCHEDULER_IO) Scheduler subscriberScheduler,
|
||||
@Named(value = ThreadUtils.SCHEDULER_UI) Scheduler observerScheduler) {
|
||||
@Named(value = ThreadUtils.SCHEDULER_UI) Scheduler observerScheduler,
|
||||
GroupChatMapping groupChatMapping) {
|
||||
super(data, subscriberScheduler, observerScheduler);
|
||||
this.groupChatMapping = groupChatMapping;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -29,14 +29,15 @@ public class XmppPeerRepository
|
|||
@Inject
|
||||
AccountRepository accountRepository;
|
||||
|
||||
@Inject
|
||||
PeerMapping peerMapping;
|
||||
private final PeerMapping peerMapping;
|
||||
|
||||
@Inject
|
||||
public XmppPeerRepository(ReactiveEntityStore<Persistable> data,
|
||||
@Named(value = ThreadUtils.SCHEDULER_IO) Scheduler subscriberScheduler,
|
||||
@Named(value = ThreadUtils.SCHEDULER_UI) Scheduler observerScheduler) {
|
||||
@Named(value = ThreadUtils.SCHEDULER_UI) Scheduler observerScheduler,
|
||||
PeerMapping peerMapping) {
|
||||
super(data, subscriberScheduler, observerScheduler);
|
||||
this.peerMapping = peerMapping;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -8,7 +8,6 @@ import dagger.Component;
|
|||
|
||||
@Component(modules = {
|
||||
RepositoryModule.class,
|
||||
MappingModule.class,
|
||||
TestDatabaseModule.class,
|
||||
TestingSchedulerModule.class
|
||||
})
|
||||
|
|
|
@ -61,5 +61,7 @@ public class AccountRepositoryTest {
|
|||
DirectChat chatModel = directChatRepository.insertDirectChat(directChat)
|
||||
.blockingGet();
|
||||
assertEquals(1, chatModel.getId());
|
||||
|
||||
dataStore.close();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,6 +16,10 @@ public interface DirectChatRepository {
|
|||
|
||||
Single<DirectChat> insertDirectChat(DirectChat chat);
|
||||
|
||||
default Observable<Optional<DirectChat>> observeDirectChat(DirectChat chat) {
|
||||
return observeDirectChat(chat.getId());
|
||||
}
|
||||
|
||||
Observable<Optional<DirectChat>> observeDirectChat(long chatId);
|
||||
|
||||
Maybe<DirectChat> getDirectChat(long chatId);
|
||||
|
|
Loading…
Reference in a new issue