RetroMusicPlayer/app/src/main/java/code/name/monkey/retromusic/MainModule.kt

185 lines
4.2 KiB
Kotlin
Raw Normal View History

2020-07-21 00:35:48 +05:30
package code.name.monkey.retromusic
import androidx.room.Room
import code.name.monkey.retromusic.auto.AutoMusicProvider
2022-05-04 23:51:23 +05:30
import code.name.monkey.retromusic.cast.RetroWebServer
import code.name.monkey.retromusic.db.MIGRATION_23_24
import code.name.monkey.retromusic.db.RetroDatabase
import code.name.monkey.retromusic.fragments.LibraryViewModel
2020-08-11 23:59:44 +05:30
import code.name.monkey.retromusic.fragments.albums.AlbumDetailsViewModel
import code.name.monkey.retromusic.fragments.artists.ArtistDetailsViewModel
import code.name.monkey.retromusic.fragments.genres.GenreDetailsViewModel
import code.name.monkey.retromusic.fragments.playlists.PlaylistDetailsViewModel
2020-07-21 00:35:48 +05:30
import code.name.monkey.retromusic.model.Genre
2020-09-24 17:39:05 +05:30
import code.name.monkey.retromusic.network.provideDefaultCache
import code.name.monkey.retromusic.network.provideLastFmRest
import code.name.monkey.retromusic.network.provideLastFmRetrofit
import code.name.monkey.retromusic.network.provideOkHttp
import code.name.monkey.retromusic.repository.*
import org.koin.android.ext.koin.androidContext
import org.koin.androidx.viewmodel.dsl.viewModel
import org.koin.dsl.bind
2020-07-21 00:35:48 +05:30
import org.koin.dsl.module
2020-09-06 23:26:39 +05:30
val networkModule = module {
factory {
provideDefaultCache()
}
factory {
provideOkHttp(get(), get())
}
single {
provideLastFmRetrofit(get())
}
single {
provideLastFmRest(get())
}
}
private val roomModule = module {
2020-08-23 13:31:42 +05:30
single {
Room.databaseBuilder(androidContext(), RetroDatabase::class.java, "playlist.db")
.addMigrations(MIGRATION_23_24)
.build()
}
factory {
get<RetroDatabase>().playlistDao()
}
2020-08-31 18:00:07 +05:30
factory {
get<RetroDatabase>().playCountDao()
}
2020-09-06 16:33:24 +05:30
2020-09-06 16:17:06 +05:30
factory {
get<RetroDatabase>().historyDao()
}
2020-08-31 18:00:07 +05:30
single {
RealRoomRepository(get(), get(), get())
2020-08-31 18:00:07 +05:30
} bind RoomRepository::class
}
private val autoModule = module {
single {
2022-04-13 00:04:36 +05:30
AutoMusicProvider(
androidContext(),
get(),
get(),
get(),
get(),
get(),
get()
)
}
}
private val mainModule = module {
single {
androidContext().contentResolver
}
2022-05-04 23:51:23 +05:30
single {
RetroWebServer(get())
}
}
private val dataModule = module {
single {
2020-09-06 23:26:39 +05:30
RealRepository(
get(),
get(),
get(),
get(),
get(),
get(),
get(),
get(),
get(),
get(),
get(),
2020-09-24 16:23:23 +05:30
get(),
2020-09-06 23:26:39 +05:30
)
} bind Repository::class
single {
RealSongRepository(get())
} bind SongRepository::class
single {
RealGenreRepository(get(), get())
} bind GenreRepository::class
single {
RealAlbumRepository(get())
} bind AlbumRepository::class
single {
RealArtistRepository(get(), get())
} bind ArtistRepository::class
single {
RealPlaylistRepository(get())
} bind PlaylistRepository::class
single {
RealTopPlayedRepository(get(), get(), get(), get())
} bind TopPlayedRepository::class
single {
RealLastAddedRepository(
get(),
get(),
get()
)
} bind LastAddedRepository::class
single {
RealSearchRepository(
get(),
get(),
get(),
get(),
get()
)
}
2020-09-24 16:23:23 +05:30
single {
RealLocalDataRepository(get())
} bind LocalDataRepository::class
}
2020-07-21 00:35:48 +05:30
private val viewModules = module {
2020-07-21 00:35:48 +05:30
viewModel {
LibraryViewModel(get())
}
viewModel { (albumId: Long) ->
2020-08-11 23:59:44 +05:30
AlbumDetailsViewModel(
get(),
albumId
)
2020-07-21 00:35:48 +05:30
}
viewModel { (artistId: Long?, artistName: String?) ->
2020-08-11 23:59:44 +05:30
ArtistDetailsViewModel(
get(),
artistId,
artistName
2020-08-11 23:59:44 +05:30
)
2020-07-21 00:35:48 +05:30
}
viewModel { (playlistId: Long) ->
2020-08-11 23:59:44 +05:30
PlaylistDetailsViewModel(
get(),
playlistId
2020-08-11 23:59:44 +05:30
)
2020-07-21 00:35:48 +05:30
}
viewModel { (genre: Genre) ->
2020-08-11 23:59:44 +05:30
GenreDetailsViewModel(
get(),
genre
)
2020-07-21 00:35:48 +05:30
}
}
val appModules = listOf(mainModule, dataModule, autoModule, viewModules, networkModule, roomModule)