Testing IOS

This commit is contained in:
shabinder 2021-05-02 01:53:41 +05:30
parent 751ba3512e
commit f80675cd13
6 changed files with 31 additions and 22 deletions

View File

@ -7,7 +7,7 @@ import kotlinx.coroutines.Dispatchers
/*
* Holder to call platform actions from anywhere
* */
var methods: NativeAtomicReference<Actions> = NativeAtomicReference(stubActions().freeze())
val methods: NativeAtomicReference<Actions> = NativeAtomicReference(stubActions().freeze())
/*
* Interface Having All Platform Dependent Functions

View File

@ -23,6 +23,7 @@ import com.shabinder.common.di.providers.GaanaProvider
import com.shabinder.common.di.providers.SpotifyProvider
import com.shabinder.common.di.providers.YoutubeMp3
import com.shabinder.common.di.providers.YoutubeMusic
import com.shabinder.common.models.NativeAtomicReference
import io.ktor.client.HttpClient
import io.ktor.client.features.HttpTimeout
import io.ktor.client.features.json.JsonFeature
@ -35,6 +36,7 @@ import kotlinx.serialization.json.Json
import org.koin.core.context.startKoin
import org.koin.dsl.KoinAppDeclaration
import org.koin.dsl.module
import kotlin.native.concurrent.SharedImmutable
fun initKoin(enableNetworkLogs: Boolean = false, appDeclaration: KoinAppDeclaration = {}) =
startKoin {
@ -58,6 +60,7 @@ fun commonModule(enableNetworkLogs: Boolean) = module {
single { FetchPlatformQueryResult(get(), get(), get(), get(), get(), get()) }
}
@SharedImmutable
val kotlinxSerializer = KotlinxSerializer(
Json {
isLenient = true
@ -82,5 +85,7 @@ fun createHttpClient(enableNetworkLogs: Boolean = false, serializer: KotlinxSeri
}
}
}
/*Client Active Throughout App's Lifetime*/
@SharedImmutable
val ktorHttpClient = HttpClient {}

View File

@ -17,16 +17,17 @@
package com.shabinder.common.di.providers
import co.touchlab.kermit.Kermit
import co.touchlab.stately.freeze
import com.shabinder.common.di.Dir
import com.shabinder.common.di.TokenStore
import com.shabinder.common.di.finalOutputDir
import com.shabinder.common.di.kotlinxSerializer
import com.shabinder.common.di.ktorHttpClient
import com.shabinder.common.di.spotify.SpotifyRequests
import com.shabinder.common.di.spotify.authenticateSpotify
import com.shabinder.common.models.AllPlatforms
import com.shabinder.common.models.NativeAtomicReference
import com.shabinder.common.models.PlatformQueryResult
import com.shabinder.common.models.TrackDetails
import com.shabinder.common.models.methods
import com.shabinder.common.models.spotify.Album
import com.shabinder.common.models.spotify.Image
import com.shabinder.common.models.spotify.Source
@ -35,10 +36,6 @@ import io.ktor.client.HttpClient
import io.ktor.client.features.defaultRequest
import io.ktor.client.features.json.JsonFeature
import io.ktor.client.request.header
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlin.native.concurrent.ThreadLocal
class SpotifyProvider(
private val tokenStore: TokenStore,
@ -55,11 +52,10 @@ class SpotifyProvider(
}
}*/
override suspend fun authenticateSpotifyClient(override: Boolean): HttpClient? {
override suspend fun authenticateSpotifyClient(override: Boolean) {
val token = if (override) authenticateSpotify() else tokenStore.getToken()
return if (token == null) {
if (token == null) {
logger.d { "Please Check your Network Connection" }
null
} else {
logger.d { "Spotify Provider Created with $token" }
HttpClient {
@ -69,18 +65,14 @@ class SpotifyProvider(
install(JsonFeature) {
serializer = kotlinxSerializer
}
}.also { httpClient = it }
}.also { httpClientRef.value = it.freeze() }
}
}
override lateinit var httpClient: HttpClient
override val httpClientRef = NativeAtomicReference(ktorHttpClient)
suspend fun query(fullLink: String): PlatformQueryResult? {
if (!this::httpClient.isInitialized) {
authenticateSpotifyClient()
}
var spotifyLink =
"https://" + fullLink.substringAfterLast("https://").substringBefore(" ").trim()

View File

@ -26,6 +26,7 @@ import io.ktor.client.features.json.JsonFeature
import io.ktor.client.request.forms.FormDataContent
import io.ktor.client.request.post
import io.ktor.http.Parameters
import kotlin.native.concurrent.SharedImmutable
suspend fun authenticateSpotify(): TokenData? {
return try {
@ -37,6 +38,7 @@ suspend fun authenticateSpotify(): TokenData? {
}
}
@SharedImmutable
private val spotifyAuthClient by lazy {
HttpClient {
val clientId = "694d8bf4f6ec420fa66ea7fb4c68f89d"

View File

@ -17,6 +17,7 @@
package com.shabinder.common.di.spotify
import com.shabinder.common.di.gaana.corsApi
import com.shabinder.common.models.NativeAtomicReference
import com.shabinder.common.models.spotify.Album
import com.shabinder.common.models.spotify.PagingObjectPlaylistTrack
import com.shabinder.common.models.spotify.Playlist
@ -28,9 +29,10 @@ private val BASE_URL get() = "${corsApi}https://api.spotify.com/v1"
interface SpotifyRequests {
val httpClient: HttpClient
val httpClientRef: NativeAtomicReference<HttpClient>
val httpClient get() = httpClientRef.value
suspend fun authenticateSpotifyClient(override: Boolean = false): HttpClient?
suspend fun authenticateSpotifyClient(override: Boolean = false)
suspend fun getPlaylist(playlistID: String): Playlist {
return httpClient.get("$BASE_URL/playlists/$playlistID")

View File

@ -26,7 +26,9 @@ import com.arkivanov.decompose.router
import com.arkivanov.decompose.statekeeper.Parcelable
import com.arkivanov.decompose.statekeeper.Parcelize
import com.arkivanov.decompose.value.Value
import com.shabinder.common.database.getLogger
import com.shabinder.common.di.Dir
import com.shabinder.common.di.createDirectories
import com.shabinder.common.list.SpotiFlyerList
import com.shabinder.common.main.SpotiFlyerMain
import com.shabinder.common.models.Actions
@ -48,11 +50,17 @@ internal class SpotiFlyerRootImpl(
init {
methods.value = actions.freeze()
GlobalScope.launch(Dispatchers.Default) {
GlobalScope.launch {
/*TESTING*/
getLogger().apply {
d("Hey...","Background Thread")
//d(directories.defaultDir(),"Background Thread")
d("Hey...","Background Thread")
}
//*Authenticate Spotify Client*//*
/*if (methods.value.currentPlatform is AllPlatforms.Js) {
fetchPlatformQueryResult.spotifyProvider.authenticateSpotifyClient(override = true)
} else fetchPlatformQueryResult.spotifyProvider.authenticateSpotifyClient()*/
/*fetchPlatformQueryResult.spotifyProvider.authenticateSpotifyClient(
override = true //methods.value.currentPlatform is AllPlatforms.Js
)*/
}
}