Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dagger2の処理をいい感じにした #61

Merged
merged 3 commits into from
Dec 2, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions .idea/codeStyleSettings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,11 @@ android {
enabled = true
}

kapt {
// NonExistentClass Errorを無視
correctErrorTypes = true
}

lintOptions {
textReport true
textOutput 'stdout'
Expand Down
13 changes: 6 additions & 7 deletions app/src/main/kotlin/com/ayatk/biblio/App.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

package com.ayatk.biblio

import com.ayatk.biblio.di.AppModule
import com.ayatk.biblio.di.DaggerAppComponent
import com.crashlytics.android.Crashlytics
import com.squareup.leakcanary.LeakCanary
Expand All @@ -21,12 +20,12 @@ open class App : DaggerApplication() {
initLeakCanary()
}

override fun applicationInjector(): AndroidInjector<out DaggerApplication>
= DaggerAppComponent
.builder()
.application(this)
.appModule(AppModule(this))
.build()
override fun applicationInjector(): AndroidInjector<out DaggerApplication> {
return DaggerAppComponent
.builder()
.application(this)
.build()
}

private fun initLeakCanary() {
if (LeakCanary.isInAnalyzerProcess(this)) {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ class NarouClient
private val htmlUtil: HtmlUtil,
private val narouApiService: NarouApiService,
@Named("Narou") private val narouService: NarouService,
@Named("Narou18") private val narou18Service: NarouService) {
@Named("Narou18") private val narou18Service: NarouService
) {

fun getNovel(query: Map<String, String>): Single<List<Novel>> {
return narouApiService.getNovel(query)
Expand Down Expand Up @@ -84,7 +85,8 @@ class NarouClient
= narouService.getSSPage(ncode).map { htmlUtil.parsePage(ncode, it, 1) }

private fun convertNarouNovelToNovel(
narouNovels: List<NarouNovel>, publisher: Publisher): List<Novel> {
narouNovels: List<NarouNovel>, publisher: Publisher
): List<Novel> {
return narouNovels.map {
Novel(
publisher = publisher,
Expand Down
6 changes: 3 additions & 3 deletions app/src/main/kotlin/com/ayatk/biblio/di/AppComponent.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

package com.ayatk.biblio.di

import android.app.Application
import com.ayatk.biblio.App
import com.ayatk.biblio.ui.UiModule
import dagger.BindsInstance
Expand All @@ -17,6 +18,7 @@ import javax.inject.Singleton
modules = arrayOf(
AndroidSupportInjectionModule::class,
AppModule::class,
RepositoryModule::class,
HttpClientModule::class,
UiModule::class
)
Expand All @@ -26,9 +28,7 @@ interface AppComponent : AndroidInjector<App> {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: App): Builder

fun appModule(appModule: AppModule): Builder
fun application(application: Application): Builder

fun build(): AppComponent
}
Expand Down
23 changes: 12 additions & 11 deletions app/src/main/kotlin/com/ayatk/biblio/di/AppModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,14 @@ package com.ayatk.biblio.di
import android.app.Application
import android.content.Context
import android.net.ConnectivityManager
import com.ayatk.biblio.data.dao.OrmaDatabaseWrapper
import com.ayatk.biblio.data.narou.entity.enums.BigGenre
import com.ayatk.biblio.data.narou.entity.enums.Genre
import com.ayatk.biblio.data.narou.service.NarouApiService
import com.ayatk.biblio.data.narou.service.NarouService
import com.ayatk.biblio.data.narou.util.HtmlUtil
import com.ayatk.biblio.pref.DefaultPrefsWrapper
import com.ayatk.biblio.model.OrmaDatabase
import com.ayatk.biblio.pref.DefaultPrefs
import com.github.gfx.android.orma.AccessThreadConstraint
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import com.google.gson.JsonDeserializer
Expand All @@ -28,25 +29,25 @@ import javax.inject.Named
import javax.inject.Singleton

@Module
class AppModule(val application: Application) {

@Provides
@Singleton
fun provideApplicationContext(): Application = application
class AppModule {

@Provides
fun provideConnectivityManager(application: Application): ConnectivityManager
= application.getSystemService(Context.CONNECTIVITY_SERVICE) as (ConnectivityManager)

@Singleton
@Provides
fun provideDefaultPrefs(application: Application): DefaultPrefsWrapper
= DefaultPrefsWrapper(application)
fun provideDefaultPrefs(application: Application): DefaultPrefs
= DefaultPrefs.get(application)

@Singleton
@Provides
fun provideOrmaDatabase(application: Application): OrmaDatabaseWrapper
= OrmaDatabaseWrapper(application)
fun provideOrmaDatabase(application: Application): OrmaDatabase {
return OrmaDatabase.builder(application)
.writeOnMainThread(AccessThreadConstraint.FATAL)
.readOnMainThread(AccessThreadConstraint.FATAL)
.build()
}

@Singleton
@Provides
Expand Down
54 changes: 54 additions & 0 deletions app/src/main/kotlin/com/ayatk/biblio/di/RepositoryModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
/*
* Copyright (c) 2016-2017. Aya Tokikaze. All Rights Reserved.
*/

package com.ayatk.biblio.di

import com.ayatk.biblio.repository.library.LibraryDataSource
import com.ayatk.biblio.repository.library.LibraryLocalDataSource
import com.ayatk.biblio.repository.library.LibraryRepository
import com.ayatk.biblio.repository.novel.NovelBodyDataSource
import com.ayatk.biblio.repository.novel.NovelBodyLocalDataSource
import com.ayatk.biblio.repository.novel.NovelBodyRemoteDataSource
import com.ayatk.biblio.repository.novel.NovelBodyRepository
import com.ayatk.biblio.repository.novel.NovelDataSource
import com.ayatk.biblio.repository.novel.NovelLocalDataSource
import com.ayatk.biblio.repository.novel.NovelRemoteDataSource
import com.ayatk.biblio.repository.novel.NovelRepository
import com.ayatk.biblio.repository.novel.NovelTableDataSource
import com.ayatk.biblio.repository.novel.NovelTableLocalDataSource
import com.ayatk.biblio.repository.novel.NovelTableRemoteDataSource
import com.ayatk.biblio.repository.novel.NovelTableRepository
import dagger.Module
import dagger.Provides
import javax.inject.Singleton

@Module
class RepositoryModule {

@Singleton
@Provides
fun provideLibraryRepository(localDataSource: LibraryLocalDataSource): LibraryDataSource
= LibraryRepository(localDataSource)

@Singleton
@Provides
fun provideNovelBodyRepository(
local: NovelBodyLocalDataSource,
remote: NovelBodyRemoteDataSource
): NovelBodyDataSource = NovelBodyRepository(local, remote)

@Singleton
@Provides
fun provideNovelRepository(
local: NovelLocalDataSource,
remote: NovelRemoteDataSource
): NovelDataSource = NovelRepository(local, remote)

@Singleton
@Provides
fun provideNovelTableRepository(
local: NovelTableLocalDataSource,
remote: NovelTableRemoteDataSource
): NovelTableDataSource = NovelTableRepository(local, remote)
}
14 changes: 0 additions & 14 deletions app/src/main/kotlin/com/ayatk/biblio/pref/DefaultPrefsWrapper.kt

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@

package com.ayatk.biblio.repository.library

import com.ayatk.biblio.data.dao.OrmaDatabaseWrapper
import com.ayatk.biblio.model.Library
import com.ayatk.biblio.model.Novel
import com.ayatk.biblio.model.OrmaDatabase
import com.github.gfx.android.orma.annotation.OnConflict
import io.reactivex.Completable
import io.reactivex.Maybe
Expand All @@ -16,53 +16,53 @@ import io.reactivex.schedulers.Schedulers
import javax.inject.Inject

class LibraryLocalDataSource
@Inject constructor(private val orma: OrmaDatabaseWrapper) : LibraryDataSource {
@Inject constructor(private val orma: OrmaDatabase) : LibraryDataSource {

override fun findAll(): Single<MutableList<Library>> {
return orma.db.selectFromLibrary()
return orma.selectFromLibrary()
.executeAsObservable()
.toList()
.subscribeOn(Schedulers.io())
}

override fun find(novel: Novel): Maybe<Library> {
return orma.db.selectFromLibrary()
return orma.selectFromLibrary()
.novelEq(novel)
.executeAsObservable()
.firstElement()
.subscribeOn(Schedulers.io())
}

override fun save(library: Library): Completable {
return orma.db.transactionAsCompletable {
if (orma.db.relationOfNovel().codeEq(library.novel.code).isEmpty) {
orma.db.relationOfNovel().inserter().execute(library.novel)
return orma.transactionAsCompletable {
if (orma.relationOfNovel().codeEq(library.novel.code).isEmpty) {
orma.relationOfNovel().inserter().execute(library.novel)
}
orma.db.relationOfLibrary().inserter(OnConflict.REPLACE).execute(library)
orma.relationOfLibrary().inserter(OnConflict.REPLACE).execute(library)
}.subscribeOn(Schedulers.io())
}

override fun saveAll(libraries: List<Library>): Completable {
return orma.db.transactionAsCompletable {
return orma.transactionAsCompletable {
libraries.forEach { library ->
if (orma.db.relationOfNovel().selector().codeEq(library.novel.code).isEmpty) {
orma.db.relationOfNovel().inserter().execute(library.novel)
if (orma.relationOfNovel().selector().codeEq(library.novel.code).isEmpty) {
orma.relationOfNovel().inserter().execute(library.novel)
}
orma.db.relationOfLibrary().inserter(OnConflict.REPLACE).execute(library)
orma.relationOfLibrary().inserter(OnConflict.REPLACE).execute(library)
}
}.subscribeOn(Schedulers.io())
}

override fun updateAllAsync(novels: List<Novel>) {
orma.db.transactionAsCompletable {
novels.forEach { orma.db.relationOfLibrary().upsert(Library(novel = it)) }
orma.transactionAsCompletable {
novels.forEach { orma.relationOfLibrary().upsert(Library(novel = it)) }
}
.subscribeOn(Schedulers.io())
.subscribe()
}

override fun delete(novel: Novel): Single<Int> {
return orma.db.relationOfLibrary()
return orma.relationOfLibrary()
.deleter()
.novelEq(novel)
.executeAsSingle()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,8 @@ import com.ayatk.biblio.model.Novel
import io.reactivex.Completable
import io.reactivex.Maybe
import io.reactivex.Single
import javax.inject.Inject
import javax.inject.Singleton

@Singleton
class LibraryRepository
@Inject constructor(private val localDataSource: LibraryLocalDataSource) : LibraryDataSource {
class LibraryRepository(private val localDataSource: LibraryLocalDataSource) : LibraryDataSource {

private var cachedLibrary = emptyMap<String, Library>()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,19 @@

package com.ayatk.biblio.repository.novel

import com.ayatk.biblio.data.dao.OrmaDatabaseWrapper
import com.ayatk.biblio.model.Novel
import com.ayatk.biblio.model.NovelBody
import com.ayatk.biblio.model.OrmaDatabase
import io.reactivex.Completable
import io.reactivex.Single
import io.reactivex.schedulers.Schedulers
import javax.inject.Inject

class NovelBodyLocalDataSource
@Inject constructor(private val orma: OrmaDatabaseWrapper) : NovelBodyDataSource {
@Inject constructor(private val orma: OrmaDatabase) : NovelBodyDataSource {

override fun find(novel: Novel, page: Int): Single<List<NovelBody>> {
return orma.db.selectFromNovelBody()
return orma.selectFromNovelBody()
.novelEq(novel)
.pageEq(page)
.executeAsObservable()
Expand All @@ -25,13 +25,13 @@ class NovelBodyLocalDataSource
}

override fun save(novelBody: NovelBody): Completable {
return orma.db.transactionAsCompletable {
orma.db.insertIntoNovelBody(novelBody)
return orma.transactionAsCompletable {
orma.insertIntoNovelBody(novelBody)
}.subscribeOn(Schedulers.io())
}

override fun deleteAll(novel: Novel): Single<Int> {
return orma.db.deleteFromNovelBody()
return orma.deleteFromNovelBody()
.novelEq(novel)
.executeAsSingle()
.subscribeOn(Schedulers.io())
Expand Down
Loading