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