mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2024-09-30 08:50:44 +00:00
Move httpclient to another package
This commit is contained in:
parent
985274980a
commit
a6bc40515b
1
ammolite/.gitignore
vendored
Normal file
1
ammolite/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
/build
|
42
ammolite/build.gradle
Normal file
42
ammolite/build.gradle
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
plugins {
|
||||||
|
alias(libs.plugins.androidLibrary)
|
||||||
|
alias(libs.plugins.jetbrainsKotlinAndroid)
|
||||||
|
}
|
||||||
|
|
||||||
|
android {
|
||||||
|
namespace 'com.vitorpamplona.ammolite'
|
||||||
|
compileSdk 34
|
||||||
|
|
||||||
|
defaultConfig {
|
||||||
|
minSdk 26
|
||||||
|
|
||||||
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
consumerProguardFiles "consumer-rules.pro"
|
||||||
|
}
|
||||||
|
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
minifyEnabled false
|
||||||
|
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
compileOptions {
|
||||||
|
sourceCompatibility JavaVersion.VERSION_1_8
|
||||||
|
targetCompatibility JavaVersion.VERSION_1_8
|
||||||
|
}
|
||||||
|
kotlinOptions {
|
||||||
|
jvmTarget = '1.8'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
|
||||||
|
implementation libs.androidx.core.ktx
|
||||||
|
implementation libs.androidx.appcompat
|
||||||
|
implementation libs.material
|
||||||
|
testImplementation libs.junit
|
||||||
|
androidTestImplementation libs.androidx.junit
|
||||||
|
androidTestImplementation libs.androidx.espresso.core
|
||||||
|
|
||||||
|
implementation libs.okhttp
|
||||||
|
}
|
0
ammolite/consumer-rules.pro
Normal file
0
ammolite/consumer-rules.pro
Normal file
21
ammolite/proguard-rules.pro
vendored
Normal file
21
ammolite/proguard-rules.pro
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# Add project specific ProGuard rules here.
|
||||||
|
# You can control the set of applied configuration files using the
|
||||||
|
# proguardFiles setting in build.gradle.
|
||||||
|
#
|
||||||
|
# For more details, see
|
||||||
|
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||||
|
|
||||||
|
# If your project uses WebView with JS, uncomment the following
|
||||||
|
# and specify the fully qualified class name to the JavaScript interface
|
||||||
|
# class:
|
||||||
|
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||||
|
# public *;
|
||||||
|
#}
|
||||||
|
|
||||||
|
# Uncomment this to preserve the line number information for
|
||||||
|
# debugging stack traces.
|
||||||
|
#-keepattributes SourceFile,LineNumberTable
|
||||||
|
|
||||||
|
# If you keep the line number information, uncomment this to
|
||||||
|
# hide the original source file name.
|
||||||
|
#-renamesourcefileattribute SourceFile
|
4
ammolite/src/main/AndroidManifest.xml
Normal file
4
ammolite/src/main/AndroidManifest.xml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
</manifest>
|
@ -18,10 +18,9 @@
|
|||||||
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
package com.vitorpamplona.amethyst.service
|
package com.vitorpamplona.ammolite.service
|
||||||
|
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import com.vitorpamplona.amethyst.BuildConfig
|
|
||||||
import okhttp3.Interceptor
|
import okhttp3.Interceptor
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
import okhttp3.Request
|
import okhttp3.Request
|
||||||
@ -40,6 +39,7 @@ object HttpClientManager {
|
|||||||
private var defaultTimeout = DEFAULT_TIMEOUT_ON_WIFI
|
private var defaultTimeout = DEFAULT_TIMEOUT_ON_WIFI
|
||||||
private var defaultHttpClient: OkHttpClient? = null
|
private var defaultHttpClient: OkHttpClient? = null
|
||||||
private var defaultHttpClientWithoutProxy: OkHttpClient? = null
|
private var defaultHttpClientWithoutProxy: OkHttpClient? = null
|
||||||
|
private var internalInterceptor: Interceptor = DefaultContentTypeInterceptor()
|
||||||
|
|
||||||
// fires off every time value of the property changes
|
// fires off every time value of the property changes
|
||||||
private var internalProxy: Proxy? by
|
private var internalProxy: Proxy? by
|
||||||
@ -73,6 +73,12 @@ object HttpClientManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun setDefaultInterceptor(interceptor: Interceptor) {
|
||||||
|
Log.d("HttpClient", "Changing interceptor")
|
||||||
|
this.internalInterceptor = interceptor
|
||||||
|
this.defaultHttpClient = buildHttpClient(internalProxy, defaultTimeout)
|
||||||
|
}
|
||||||
|
|
||||||
private fun buildHttpClient(
|
private fun buildHttpClient(
|
||||||
proxy: Proxy?,
|
proxy: Proxy?,
|
||||||
timeout: Duration,
|
timeout: Duration,
|
||||||
@ -84,7 +90,7 @@ object HttpClientManager {
|
|||||||
.readTimeout(duration)
|
.readTimeout(duration)
|
||||||
.connectTimeout(duration)
|
.connectTimeout(duration)
|
||||||
.writeTimeout(duration)
|
.writeTimeout(duration)
|
||||||
.addInterceptor(DefaultContentTypeInterceptor())
|
.addInterceptor(internalInterceptor)
|
||||||
.followRedirects(true)
|
.followRedirects(true)
|
||||||
.followSslRedirects(true)
|
.followSslRedirects(true)
|
||||||
.build()
|
.build()
|
||||||
@ -97,7 +103,7 @@ object HttpClientManager {
|
|||||||
val requestWithUserAgent: Request =
|
val requestWithUserAgent: Request =
|
||||||
originalRequest
|
originalRequest
|
||||||
.newBuilder()
|
.newBuilder()
|
||||||
.header("User-Agent", "Amethyst/${BuildConfig.VERSION_NAME}")
|
.header("User-Agent", "Amethyst")
|
||||||
.build()
|
.build()
|
||||||
return chain.proceed(requestWithUserAgent)
|
return chain.proceed(requestWithUserAgent)
|
||||||
}
|
}
|
@ -165,6 +165,7 @@ dependencies {
|
|||||||
|
|
||||||
implementation project(path: ':quartz')
|
implementation project(path: ':quartz')
|
||||||
implementation project(path: ':commons')
|
implementation project(path: ':commons')
|
||||||
|
implementation project(path: ':ammolite')
|
||||||
implementation libs.androidx.core.ktx
|
implementation libs.androidx.core.ktx
|
||||||
implementation libs.androidx.activity.compose
|
implementation libs.androidx.activity.compose
|
||||||
|
|
||||||
|
@ -70,6 +70,7 @@ class Amethyst : Application() {
|
|||||||
|
|
||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
super.onCreate()
|
super.onCreate()
|
||||||
|
|
||||||
instance = this
|
instance = this
|
||||||
|
|
||||||
OtsEvent.otsInstance = OpenTimestamps(OkHttpBlockstreamExplorer(), OkHttpCalendarBuilder())
|
OtsEvent.otsInstance = OpenTimestamps(OkHttpBlockstreamExplorer(), OkHttpCalendarBuilder())
|
||||||
|
@ -33,9 +33,9 @@ import com.vitorpamplona.amethyst.model.GLOBAL_FOLLOWS
|
|||||||
import com.vitorpamplona.amethyst.model.KIND3_FOLLOWS
|
import com.vitorpamplona.amethyst.model.KIND3_FOLLOWS
|
||||||
import com.vitorpamplona.amethyst.model.RelaySetupInfo
|
import com.vitorpamplona.amethyst.model.RelaySetupInfo
|
||||||
import com.vitorpamplona.amethyst.model.Settings
|
import com.vitorpamplona.amethyst.model.Settings
|
||||||
import com.vitorpamplona.amethyst.service.HttpClientManager
|
|
||||||
import com.vitorpamplona.amethyst.service.Nip96MediaServers
|
import com.vitorpamplona.amethyst.service.Nip96MediaServers
|
||||||
import com.vitorpamplona.amethyst.service.checkNotInMainThread
|
import com.vitorpamplona.amethyst.service.checkNotInMainThread
|
||||||
|
import com.vitorpamplona.ammolite.service.HttpClientManager
|
||||||
import com.vitorpamplona.quartz.crypto.KeyPair
|
import com.vitorpamplona.quartz.crypto.KeyPair
|
||||||
import com.vitorpamplona.quartz.encoders.HexKey
|
import com.vitorpamplona.quartz.encoders.HexKey
|
||||||
import com.vitorpamplona.quartz.encoders.Nip47WalletConnect
|
import com.vitorpamplona.quartz.encoders.Nip47WalletConnect
|
||||||
|
@ -30,7 +30,6 @@ import coil.decode.SvgDecoder
|
|||||||
import coil.size.Precision
|
import coil.size.Precision
|
||||||
import com.vitorpamplona.amethyst.model.Account
|
import com.vitorpamplona.amethyst.model.Account
|
||||||
import com.vitorpamplona.amethyst.model.LocalCache
|
import com.vitorpamplona.amethyst.model.LocalCache
|
||||||
import com.vitorpamplona.amethyst.service.HttpClientManager
|
|
||||||
import com.vitorpamplona.amethyst.service.NostrAccountDataSource
|
import com.vitorpamplona.amethyst.service.NostrAccountDataSource
|
||||||
import com.vitorpamplona.amethyst.service.NostrChannelDataSource
|
import com.vitorpamplona.amethyst.service.NostrChannelDataSource
|
||||||
import com.vitorpamplona.amethyst.service.NostrChatroomDataSource
|
import com.vitorpamplona.amethyst.service.NostrChatroomDataSource
|
||||||
@ -48,6 +47,7 @@ import com.vitorpamplona.amethyst.service.NostrThreadDataSource
|
|||||||
import com.vitorpamplona.amethyst.service.NostrUserProfileDataSource
|
import com.vitorpamplona.amethyst.service.NostrUserProfileDataSource
|
||||||
import com.vitorpamplona.amethyst.service.NostrVideoDataSource
|
import com.vitorpamplona.amethyst.service.NostrVideoDataSource
|
||||||
import com.vitorpamplona.amethyst.service.relays.Client
|
import com.vitorpamplona.amethyst.service.relays.Client
|
||||||
|
import com.vitorpamplona.ammolite.service.HttpClientManager
|
||||||
import com.vitorpamplona.quartz.encoders.bechToBytes
|
import com.vitorpamplona.quartz.encoders.bechToBytes
|
||||||
import com.vitorpamplona.quartz.encoders.decodePublicKeyAsHexOrNull
|
import com.vitorpamplona.quartz.encoders.decodePublicKeyAsHexOrNull
|
||||||
import com.vitorpamplona.quartz.encoders.toHexKey
|
import com.vitorpamplona.quartz.encoders.toHexKey
|
||||||
@ -60,6 +60,10 @@ import kotlinx.coroutines.SupervisorJob
|
|||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.flow.collectLatest
|
import kotlinx.coroutines.flow.collectLatest
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
import okhttp3.Interceptor
|
||||||
|
import okhttp3.Request
|
||||||
|
import okhttp3.Response
|
||||||
|
import java.io.IOException
|
||||||
|
|
||||||
@Stable
|
@Stable
|
||||||
class ServiceManager {
|
class ServiceManager {
|
||||||
@ -86,6 +90,7 @@ class ServiceManager {
|
|||||||
|
|
||||||
// Resets Proxy Use
|
// Resets Proxy Use
|
||||||
HttpClientManager.setDefaultProxy(account?.proxy)
|
HttpClientManager.setDefaultProxy(account?.proxy)
|
||||||
|
HttpClientManager.setDefaultInterceptor(DefaultContentTypeInterceptor())
|
||||||
LocalCache.antiSpam.active = account?.filterSpamFromStrangers ?: true
|
LocalCache.antiSpam.active = account?.filterSpamFromStrangers ?: true
|
||||||
Coil.setImageLoader {
|
Coil.setImageLoader {
|
||||||
Amethyst.instance
|
Amethyst.instance
|
||||||
@ -249,3 +254,16 @@ class ServiceManager {
|
|||||||
forceRestart(null, false, true)
|
forceRestart(null, false, true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class DefaultContentTypeInterceptor : Interceptor {
|
||||||
|
@Throws(IOException::class)
|
||||||
|
override fun intercept(chain: Interceptor.Chain): Response {
|
||||||
|
val originalRequest: Request = chain.request()
|
||||||
|
val requestWithUserAgent: Request =
|
||||||
|
originalRequest
|
||||||
|
.newBuilder()
|
||||||
|
.header("User-Agent", "Amethyst/${BuildConfig.VERSION_NAME}")
|
||||||
|
.build()
|
||||||
|
return chain.proceed(requestWithUserAgent)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -29,6 +29,7 @@ import com.vitorpamplona.amethyst.R
|
|||||||
import com.vitorpamplona.amethyst.service.lnurl.LightningAddressResolver
|
import com.vitorpamplona.amethyst.service.lnurl.LightningAddressResolver
|
||||||
import com.vitorpamplona.amethyst.ui.components.GenericLoadable
|
import com.vitorpamplona.amethyst.ui.components.GenericLoadable
|
||||||
import com.vitorpamplona.amethyst.ui.stringRes
|
import com.vitorpamplona.amethyst.ui.stringRes
|
||||||
|
import com.vitorpamplona.ammolite.service.HttpClientManager
|
||||||
import com.vitorpamplona.quartz.events.Event
|
import com.vitorpamplona.quartz.events.Event
|
||||||
import okhttp3.MediaType.Companion.toMediaType
|
import okhttp3.MediaType.Companion.toMediaType
|
||||||
import okhttp3.Request
|
import okhttp3.Request
|
||||||
|
@ -22,6 +22,7 @@ package com.vitorpamplona.amethyst.service
|
|||||||
|
|
||||||
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
|
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
|
||||||
import com.vitorpamplona.amethyst.BuildConfig
|
import com.vitorpamplona.amethyst.BuildConfig
|
||||||
|
import com.vitorpamplona.ammolite.service.HttpClientManager
|
||||||
import kotlinx.coroutines.CancellationException
|
import kotlinx.coroutines.CancellationException
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
@ -22,6 +22,7 @@ package com.vitorpamplona.amethyst.service
|
|||||||
|
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.util.LruCache
|
import android.util.LruCache
|
||||||
|
import com.vitorpamplona.ammolite.service.HttpClientManager
|
||||||
import com.vitorpamplona.quartz.encoders.Nip11RelayInformation
|
import com.vitorpamplona.quartz.encoders.Nip11RelayInformation
|
||||||
import com.vitorpamplona.quartz.encoders.RelayUrlFormatter
|
import com.vitorpamplona.quartz.encoders.RelayUrlFormatter
|
||||||
import com.vitorpamplona.quartz.utils.TimeUtils
|
import com.vitorpamplona.quartz.utils.TimeUtils
|
||||||
|
@ -24,6 +24,7 @@ import android.util.Log
|
|||||||
import com.fasterxml.jackson.annotation.JsonProperty
|
import com.fasterxml.jackson.annotation.JsonProperty
|
||||||
import com.fasterxml.jackson.databind.DeserializationFeature
|
import com.fasterxml.jackson.databind.DeserializationFeature
|
||||||
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
|
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
|
||||||
|
import com.vitorpamplona.ammolite.service.HttpClientManager
|
||||||
import kotlinx.coroutines.CancellationException
|
import kotlinx.coroutines.CancellationException
|
||||||
import okhttp3.Request
|
import okhttp3.Request
|
||||||
|
|
||||||
|
@ -30,6 +30,7 @@ import com.fasterxml.jackson.databind.DeserializationFeature
|
|||||||
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
|
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
|
||||||
import com.vitorpamplona.amethyst.BuildConfig
|
import com.vitorpamplona.amethyst.BuildConfig
|
||||||
import com.vitorpamplona.amethyst.model.Account
|
import com.vitorpamplona.amethyst.model.Account
|
||||||
|
import com.vitorpamplona.ammolite.service.HttpClientManager
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.suspendCancellableCoroutine
|
import kotlinx.coroutines.suspendCancellableCoroutine
|
||||||
import kotlinx.coroutines.withTimeoutOrNull
|
import kotlinx.coroutines.withTimeoutOrNull
|
||||||
|
@ -24,6 +24,7 @@ import android.util.Log
|
|||||||
import android.util.LruCache
|
import android.util.LruCache
|
||||||
import androidx.compose.runtime.Immutable
|
import androidx.compose.runtime.Immutable
|
||||||
import com.vitorpamplona.amethyst.BuildConfig
|
import com.vitorpamplona.amethyst.BuildConfig
|
||||||
|
import com.vitorpamplona.ammolite.service.HttpClientManager
|
||||||
import com.vitorpamplona.quartz.crypto.CryptoUtils
|
import com.vitorpamplona.quartz.crypto.CryptoUtils
|
||||||
import okhttp3.EventListener
|
import okhttp3.EventListener
|
||||||
import okhttp3.Protocol
|
import okhttp3.Protocol
|
||||||
|
@ -24,9 +24,9 @@ import android.content.Context
|
|||||||
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
|
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
|
||||||
import com.vitorpamplona.amethyst.BuildConfig
|
import com.vitorpamplona.amethyst.BuildConfig
|
||||||
import com.vitorpamplona.amethyst.R
|
import com.vitorpamplona.amethyst.R
|
||||||
import com.vitorpamplona.amethyst.service.HttpClientManager
|
|
||||||
import com.vitorpamplona.amethyst.service.checkNotInMainThread
|
import com.vitorpamplona.amethyst.service.checkNotInMainThread
|
||||||
import com.vitorpamplona.amethyst.ui.stringRes
|
import com.vitorpamplona.amethyst.ui.stringRes
|
||||||
|
import com.vitorpamplona.ammolite.service.HttpClientManager
|
||||||
import com.vitorpamplona.quartz.encoders.LnInvoiceUtil
|
import com.vitorpamplona.quartz.encoders.LnInvoiceUtil
|
||||||
import com.vitorpamplona.quartz.encoders.Lud06
|
import com.vitorpamplona.quartz.encoders.Lud06
|
||||||
import okhttp3.Request
|
import okhttp3.Request
|
||||||
|
@ -25,7 +25,7 @@ import com.vitorpamplona.amethyst.AccountInfo
|
|||||||
import com.vitorpamplona.amethyst.BuildConfig
|
import com.vitorpamplona.amethyst.BuildConfig
|
||||||
import com.vitorpamplona.amethyst.LocalPreferences
|
import com.vitorpamplona.amethyst.LocalPreferences
|
||||||
import com.vitorpamplona.amethyst.model.Account
|
import com.vitorpamplona.amethyst.model.Account
|
||||||
import com.vitorpamplona.amethyst.service.HttpClientManager
|
import com.vitorpamplona.ammolite.service.HttpClientManager
|
||||||
import com.vitorpamplona.quartz.events.RelayAuthEvent
|
import com.vitorpamplona.quartz.events.RelayAuthEvent
|
||||||
import kotlinx.coroutines.CancellationException
|
import kotlinx.coroutines.CancellationException
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
@ -23,7 +23,7 @@ package com.vitorpamplona.amethyst.service.ots
|
|||||||
import android.util.Log
|
import android.util.Log
|
||||||
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
|
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
|
||||||
import com.vitorpamplona.amethyst.BuildConfig
|
import com.vitorpamplona.amethyst.BuildConfig
|
||||||
import com.vitorpamplona.amethyst.service.HttpClientManager
|
import com.vitorpamplona.ammolite.service.HttpClientManager
|
||||||
import com.vitorpamplona.quartz.ots.BitcoinExplorer
|
import com.vitorpamplona.quartz.ots.BitcoinExplorer
|
||||||
import com.vitorpamplona.quartz.ots.BlockHeader
|
import com.vitorpamplona.quartz.ots.BlockHeader
|
||||||
import com.vitorpamplona.quartz.ots.exceptions.UrlException
|
import com.vitorpamplona.quartz.ots.exceptions.UrlException
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
package com.vitorpamplona.amethyst.service.ots
|
package com.vitorpamplona.amethyst.service.ots
|
||||||
|
|
||||||
import com.vitorpamplona.amethyst.BuildConfig
|
import com.vitorpamplona.amethyst.BuildConfig
|
||||||
import com.vitorpamplona.amethyst.service.HttpClientManager
|
import com.vitorpamplona.ammolite.service.HttpClientManager
|
||||||
import com.vitorpamplona.quartz.encoders.Hex
|
import com.vitorpamplona.quartz.encoders.Hex
|
||||||
import com.vitorpamplona.quartz.ots.ICalendar
|
import com.vitorpamplona.quartz.ots.ICalendar
|
||||||
import com.vitorpamplona.quartz.ots.StreamDeserializationContext
|
import com.vitorpamplona.quartz.ots.StreamDeserializationContext
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
package com.vitorpamplona.amethyst.service.ots
|
package com.vitorpamplona.amethyst.service.ots
|
||||||
|
|
||||||
import com.vitorpamplona.amethyst.BuildConfig
|
import com.vitorpamplona.amethyst.BuildConfig
|
||||||
import com.vitorpamplona.amethyst.service.HttpClientManager
|
import com.vitorpamplona.ammolite.service.HttpClientManager
|
||||||
import com.vitorpamplona.quartz.ots.ICalendarAsyncSubmit
|
import com.vitorpamplona.quartz.ots.ICalendarAsyncSubmit
|
||||||
import com.vitorpamplona.quartz.ots.StreamDeserializationContext
|
import com.vitorpamplona.quartz.ots.StreamDeserializationContext
|
||||||
import com.vitorpamplona.quartz.ots.Timestamp
|
import com.vitorpamplona.quartz.ots.Timestamp
|
||||||
|
@ -33,7 +33,7 @@ import androidx.media3.exoplayer.upstream.LoadErrorHandlingPolicy
|
|||||||
import androidx.media3.session.MediaSession
|
import androidx.media3.session.MediaSession
|
||||||
import androidx.media3.session.MediaSessionService
|
import androidx.media3.session.MediaSessionService
|
||||||
import com.vitorpamplona.amethyst.Amethyst
|
import com.vitorpamplona.amethyst.Amethyst
|
||||||
import com.vitorpamplona.amethyst.service.HttpClientManager
|
import com.vitorpamplona.ammolite.service.HttpClientManager
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* HLS LiveStreams cannot use cache.
|
* HLS LiveStreams cannot use cache.
|
||||||
|
@ -22,8 +22,8 @@ package com.vitorpamplona.amethyst.service.previews
|
|||||||
|
|
||||||
import com.vitorpamplona.amethyst.commons.preview.MetaTag
|
import com.vitorpamplona.amethyst.commons.preview.MetaTag
|
||||||
import com.vitorpamplona.amethyst.commons.preview.MetaTagsParser
|
import com.vitorpamplona.amethyst.commons.preview.MetaTagsParser
|
||||||
import com.vitorpamplona.amethyst.service.HttpClientManager
|
|
||||||
import com.vitorpamplona.amethyst.service.checkNotInMainThread
|
import com.vitorpamplona.amethyst.service.checkNotInMainThread
|
||||||
|
import com.vitorpamplona.ammolite.service.HttpClientManager
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import okhttp3.MediaType
|
import okhttp3.MediaType
|
||||||
|
@ -234,6 +234,7 @@ object Client : RelayPool.Listener {
|
|||||||
GlobalScope.launch(Dispatchers.Default) { listeners.forEach { it.onAuth(relay, challenge) } }
|
GlobalScope.launch(Dispatchers.Default) { listeners.forEach { it.onAuth(relay, challenge) } }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@OptIn(DelicateCoroutinesApi::class)
|
||||||
override fun onNotify(
|
override fun onNotify(
|
||||||
relay: Relay,
|
relay: Relay,
|
||||||
description: String,
|
description: String,
|
||||||
@ -245,6 +246,38 @@ object Client : RelayPool.Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@OptIn(DelicateCoroutinesApi::class)
|
||||||
|
override fun onSend(
|
||||||
|
relay: Relay,
|
||||||
|
msg: String,
|
||||||
|
success: Boolean,
|
||||||
|
) {
|
||||||
|
GlobalScope.launch(Dispatchers.Default) {
|
||||||
|
listeners.forEach { it.onSend(relay, msg, success) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@OptIn(DelicateCoroutinesApi::class)
|
||||||
|
override fun onBeforeSend(
|
||||||
|
relay: Relay,
|
||||||
|
event: EventInterface,
|
||||||
|
) {
|
||||||
|
GlobalScope.launch(Dispatchers.Default) {
|
||||||
|
listeners.forEach { it.onBeforeSend(relay, event) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@OptIn(DelicateCoroutinesApi::class)
|
||||||
|
override fun onError(
|
||||||
|
error: Error,
|
||||||
|
subscriptionId: String,
|
||||||
|
relay: Relay,
|
||||||
|
) {
|
||||||
|
GlobalScope.launch(Dispatchers.Default) {
|
||||||
|
listeners.forEach { it.onError(error, subscriptionId, relay) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun subscribe(listener: Listener) {
|
fun subscribe(listener: Listener) {
|
||||||
listeners = listeners.plus(listener)
|
listeners = listeners.plus(listener)
|
||||||
}
|
}
|
||||||
@ -298,5 +331,22 @@ object Client : RelayPool.Listener {
|
|||||||
relay: Relay,
|
relay: Relay,
|
||||||
description: String,
|
description: String,
|
||||||
) = Unit
|
) = Unit
|
||||||
|
|
||||||
|
open fun onSend(
|
||||||
|
relay: Relay,
|
||||||
|
msg: String,
|
||||||
|
success: Boolean,
|
||||||
|
) = Unit
|
||||||
|
|
||||||
|
open fun onBeforeSend(
|
||||||
|
relay: Relay,
|
||||||
|
event: EventInterface,
|
||||||
|
) = Unit
|
||||||
|
|
||||||
|
open fun onError(
|
||||||
|
error: Error,
|
||||||
|
subscriptionId: String,
|
||||||
|
relay: Relay,
|
||||||
|
) = Unit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,8 +24,8 @@ import android.util.Log
|
|||||||
import com.vitorpamplona.amethyst.BuildConfig
|
import com.vitorpamplona.amethyst.BuildConfig
|
||||||
import com.vitorpamplona.amethyst.model.RelayBriefInfoCache
|
import com.vitorpamplona.amethyst.model.RelayBriefInfoCache
|
||||||
import com.vitorpamplona.amethyst.model.RelaySetupInfo
|
import com.vitorpamplona.amethyst.model.RelaySetupInfo
|
||||||
import com.vitorpamplona.amethyst.service.HttpClientManager
|
|
||||||
import com.vitorpamplona.amethyst.service.checkNotInMainThread
|
import com.vitorpamplona.amethyst.service.checkNotInMainThread
|
||||||
|
import com.vitorpamplona.ammolite.service.HttpClientManager
|
||||||
import com.vitorpamplona.quartz.encoders.HexKey
|
import com.vitorpamplona.quartz.encoders.HexKey
|
||||||
import com.vitorpamplona.quartz.events.Event
|
import com.vitorpamplona.quartz.events.Event
|
||||||
import com.vitorpamplona.quartz.events.EventInterface
|
import com.vitorpamplona.quartz.events.EventInterface
|
||||||
@ -452,6 +452,10 @@ class Relay(
|
|||||||
fun sendOverride(signedEvent: EventInterface) {
|
fun sendOverride(signedEvent: EventInterface) {
|
||||||
checkNotInMainThread()
|
checkNotInMainThread()
|
||||||
|
|
||||||
|
listeners.forEach { listener ->
|
||||||
|
listener.onBeforeSend(this@Relay, signedEvent)
|
||||||
|
}
|
||||||
|
|
||||||
if (signedEvent is RelayAuthEvent) {
|
if (signedEvent is RelayAuthEvent) {
|
||||||
sendAuth(signedEvent)
|
sendAuth(signedEvent)
|
||||||
} else {
|
} else {
|
||||||
@ -462,6 +466,10 @@ class Relay(
|
|||||||
fun send(signedEvent: EventInterface) {
|
fun send(signedEvent: EventInterface) {
|
||||||
checkNotInMainThread()
|
checkNotInMainThread()
|
||||||
|
|
||||||
|
listeners.forEach { listener ->
|
||||||
|
listener.onBeforeSend(this@Relay, signedEvent)
|
||||||
|
}
|
||||||
|
|
||||||
if (signedEvent is RelayAuthEvent) {
|
if (signedEvent is RelayAuthEvent) {
|
||||||
sendAuth(signedEvent)
|
sendAuth(signedEvent)
|
||||||
} else {
|
} else {
|
||||||
@ -496,6 +504,10 @@ class Relay(
|
|||||||
if (isConnected()) {
|
if (isConnected()) {
|
||||||
if (isReady) {
|
if (isReady) {
|
||||||
writeToSocket("""["EVENT",${signedEvent.toJson()}]""")
|
writeToSocket("""["EVENT",${signedEvent.toJson()}]""")
|
||||||
|
} else {
|
||||||
|
synchronized(sendWhenReady) {
|
||||||
|
sendWhenReady.add(signedEvent)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// sends all filters after connection is successful.
|
// sends all filters after connection is successful.
|
||||||
@ -512,7 +524,10 @@ class Relay(
|
|||||||
socket?.let {
|
socket?.let {
|
||||||
checkNotInMainThread()
|
checkNotInMainThread()
|
||||||
|
|
||||||
it.send(str)
|
val result = it.send(str)
|
||||||
|
listeners.forEach { listener ->
|
||||||
|
listener.onSend(this@Relay, str, result)
|
||||||
|
}
|
||||||
RelayStats.addBytesSent(url, str.bytesUsedInMemory())
|
RelayStats.addBytesSent(url, str.bytesUsedInMemory())
|
||||||
|
|
||||||
if (BuildConfig.DEBUG) {
|
if (BuildConfig.DEBUG) {
|
||||||
@ -588,5 +603,16 @@ class Relay(
|
|||||||
relay: Relay,
|
relay: Relay,
|
||||||
description: String,
|
description: String,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
fun onSend(
|
||||||
|
relay: Relay,
|
||||||
|
msg: String,
|
||||||
|
success: Boolean,
|
||||||
|
)
|
||||||
|
|
||||||
|
fun onBeforeSend(
|
||||||
|
relay: Relay,
|
||||||
|
event: EventInterface,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -64,6 +64,8 @@ object RelayPool : Relay.Listener {
|
|||||||
return relays.filter { it.url == url }
|
return relays.filter { it.url == url }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getAll() = relays
|
||||||
|
|
||||||
fun getOrCreateRelay(
|
fun getOrCreateRelay(
|
||||||
url: String,
|
url: String,
|
||||||
feedTypes: Set<FeedType>? = null,
|
feedTypes: Set<FeedType>? = null,
|
||||||
@ -221,6 +223,23 @@ object RelayPool : Relay.Listener {
|
|||||||
relay: Relay,
|
relay: Relay,
|
||||||
description: String,
|
description: String,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
fun onSend(
|
||||||
|
relay: Relay,
|
||||||
|
msg: String,
|
||||||
|
success: Boolean,
|
||||||
|
)
|
||||||
|
|
||||||
|
fun onBeforeSend(
|
||||||
|
relay: Relay,
|
||||||
|
event: EventInterface,
|
||||||
|
)
|
||||||
|
|
||||||
|
fun onError(
|
||||||
|
error: Error,
|
||||||
|
subscriptionId: String,
|
||||||
|
relay: Relay,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onEvent(
|
override fun onEvent(
|
||||||
@ -237,6 +256,7 @@ object RelayPool : Relay.Listener {
|
|||||||
subscriptionId: String,
|
subscriptionId: String,
|
||||||
error: Error,
|
error: Error,
|
||||||
) {
|
) {
|
||||||
|
listeners.forEach { it.onError(error, subscriptionId, relay) }
|
||||||
updateStatus()
|
updateStatus()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -274,6 +294,21 @@ object RelayPool : Relay.Listener {
|
|||||||
listeners.forEach { it.onNotify(relay, description) }
|
listeners.forEach { it.onNotify(relay, description) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onSend(
|
||||||
|
relay: Relay,
|
||||||
|
msg: String,
|
||||||
|
success: Boolean,
|
||||||
|
) {
|
||||||
|
listeners.forEach { it.onSend(relay, msg, success) }
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onBeforeSend(
|
||||||
|
relay: Relay,
|
||||||
|
event: EventInterface,
|
||||||
|
) {
|
||||||
|
listeners.forEach { it.onBeforeSend(relay, event) }
|
||||||
|
}
|
||||||
|
|
||||||
private fun updateStatus() {
|
private fun updateStatus() {
|
||||||
val connected = connectedRelays()
|
val connected = connectedRelays()
|
||||||
val available = availableRelays()
|
val available = availableRelays()
|
||||||
|
@ -37,13 +37,13 @@ import androidx.compose.runtime.mutableStateOf
|
|||||||
import com.vitorpamplona.amethyst.LocalPreferences
|
import com.vitorpamplona.amethyst.LocalPreferences
|
||||||
import com.vitorpamplona.amethyst.ServiceManager
|
import com.vitorpamplona.amethyst.ServiceManager
|
||||||
import com.vitorpamplona.amethyst.model.LocalCache
|
import com.vitorpamplona.amethyst.model.LocalCache
|
||||||
import com.vitorpamplona.amethyst.service.HttpClientManager
|
|
||||||
import com.vitorpamplona.amethyst.service.lang.LanguageTranslatorService
|
import com.vitorpamplona.amethyst.service.lang.LanguageTranslatorService
|
||||||
import com.vitorpamplona.amethyst.service.notifications.PushNotificationUtils
|
import com.vitorpamplona.amethyst.service.notifications.PushNotificationUtils
|
||||||
import com.vitorpamplona.amethyst.ui.components.DEFAULT_MUTED_SETTING
|
import com.vitorpamplona.amethyst.ui.components.DEFAULT_MUTED_SETTING
|
||||||
import com.vitorpamplona.amethyst.ui.components.keepPlayingMutex
|
import com.vitorpamplona.amethyst.ui.components.keepPlayingMutex
|
||||||
import com.vitorpamplona.amethyst.ui.navigation.Route
|
import com.vitorpamplona.amethyst.ui.navigation.Route
|
||||||
import com.vitorpamplona.amethyst.ui.navigation.debugState
|
import com.vitorpamplona.amethyst.ui.navigation.debugState
|
||||||
|
import com.vitorpamplona.ammolite.service.HttpClientManager
|
||||||
import com.vitorpamplona.quartz.encoders.Nip19Bech32
|
import com.vitorpamplona.quartz.encoders.Nip19Bech32
|
||||||
import com.vitorpamplona.quartz.encoders.Nip47WalletConnect
|
import com.vitorpamplona.quartz.encoders.Nip47WalletConnect
|
||||||
import com.vitorpamplona.quartz.events.ChannelCreateEvent
|
import com.vitorpamplona.quartz.events.ChannelCreateEvent
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.amethyst.ui.actions
|
package com.vitorpamplona.amethyst.ui.actions
|
||||||
|
|
||||||
import com.vitorpamplona.amethyst.service.HttpClientManager
|
import com.vitorpamplona.ammolite.service.HttpClientManager
|
||||||
import kotlinx.coroutines.CancellationException
|
import kotlinx.coroutines.CancellationException
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import java.net.HttpURLConnection
|
import java.net.HttpURLConnection
|
||||||
|
@ -32,7 +32,7 @@ import androidx.annotation.RequiresApi
|
|||||||
import androidx.core.net.toFile
|
import androidx.core.net.toFile
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
import com.vitorpamplona.amethyst.BuildConfig
|
import com.vitorpamplona.amethyst.BuildConfig
|
||||||
import com.vitorpamplona.amethyst.service.HttpClientManager
|
import com.vitorpamplona.ammolite.service.HttpClientManager
|
||||||
import kotlinx.coroutines.CancellationException
|
import kotlinx.coroutines.CancellationException
|
||||||
import okhttp3.Call
|
import okhttp3.Call
|
||||||
import okhttp3.Callback
|
import okhttp3.Callback
|
||||||
|
@ -28,9 +28,9 @@ import com.vitorpamplona.amethyst.AccountInfo
|
|||||||
import com.vitorpamplona.amethyst.LocalPreferences
|
import com.vitorpamplona.amethyst.LocalPreferences
|
||||||
import com.vitorpamplona.amethyst.ServiceManager
|
import com.vitorpamplona.amethyst.ServiceManager
|
||||||
import com.vitorpamplona.amethyst.model.Account
|
import com.vitorpamplona.amethyst.model.Account
|
||||||
import com.vitorpamplona.amethyst.service.HttpClientManager
|
|
||||||
import com.vitorpamplona.amethyst.service.Nip05NostrAddressVerifier
|
import com.vitorpamplona.amethyst.service.Nip05NostrAddressVerifier
|
||||||
import com.vitorpamplona.amethyst.service.relays.Client
|
import com.vitorpamplona.amethyst.service.relays.Client
|
||||||
|
import com.vitorpamplona.ammolite.service.HttpClientManager
|
||||||
import com.vitorpamplona.quartz.crypto.CryptoUtils
|
import com.vitorpamplona.quartz.crypto.CryptoUtils
|
||||||
import com.vitorpamplona.quartz.crypto.KeyPair
|
import com.vitorpamplona.quartz.crypto.KeyPair
|
||||||
import com.vitorpamplona.quartz.crypto.nip06.Nip06
|
import com.vitorpamplona.quartz.crypto.nip06.Nip06
|
||||||
|
@ -52,7 +52,6 @@ import com.vitorpamplona.amethyst.model.UserState
|
|||||||
import com.vitorpamplona.amethyst.model.observables.CreatedAtComparator
|
import com.vitorpamplona.amethyst.model.observables.CreatedAtComparator
|
||||||
import com.vitorpamplona.amethyst.service.CashuProcessor
|
import com.vitorpamplona.amethyst.service.CashuProcessor
|
||||||
import com.vitorpamplona.amethyst.service.CashuToken
|
import com.vitorpamplona.amethyst.service.CashuToken
|
||||||
import com.vitorpamplona.amethyst.service.HttpClientManager
|
|
||||||
import com.vitorpamplona.amethyst.service.Nip05NostrAddressVerifier
|
import com.vitorpamplona.amethyst.service.Nip05NostrAddressVerifier
|
||||||
import com.vitorpamplona.amethyst.service.Nip11CachedRetriever
|
import com.vitorpamplona.amethyst.service.Nip11CachedRetriever
|
||||||
import com.vitorpamplona.amethyst.service.Nip11Retriever
|
import com.vitorpamplona.amethyst.service.Nip11Retriever
|
||||||
@ -70,6 +69,7 @@ import com.vitorpamplona.amethyst.ui.note.showAmount
|
|||||||
import com.vitorpamplona.amethyst.ui.screen.CombinedZap
|
import com.vitorpamplona.amethyst.ui.screen.CombinedZap
|
||||||
import com.vitorpamplona.amethyst.ui.screen.SettingsState
|
import com.vitorpamplona.amethyst.ui.screen.SettingsState
|
||||||
import com.vitorpamplona.amethyst.ui.stringRes
|
import com.vitorpamplona.amethyst.ui.stringRes
|
||||||
|
import com.vitorpamplona.ammolite.service.HttpClientManager
|
||||||
import com.vitorpamplona.quartz.encoders.ATag
|
import com.vitorpamplona.quartz.encoders.ATag
|
||||||
import com.vitorpamplona.quartz.encoders.HexKey
|
import com.vitorpamplona.quartz.encoders.HexKey
|
||||||
import com.vitorpamplona.quartz.encoders.Nip11RelayInformation
|
import com.vitorpamplona.quartz.encoders.Nip11RelayInformation
|
||||||
|
@ -44,6 +44,8 @@ zelory = "3.0.1"
|
|||||||
zoomable = "1.6.1"
|
zoomable = "1.6.1"
|
||||||
zxing = "3.5.3"
|
zxing = "3.5.3"
|
||||||
zxingAndroidEmbedded = "4.3.0"
|
zxingAndroidEmbedded = "4.3.0"
|
||||||
|
material = "1.10.0"
|
||||||
|
materialVersion = "1.10.0"
|
||||||
|
|
||||||
[libraries]
|
[libraries]
|
||||||
abedElazizShe-image-compressor = { group = "com.github.AbedElazizShe", name = "LightCompressor", version.ref = "lightcompressor" }
|
abedElazizShe-image-compressor = { group = "com.github.AbedElazizShe", name = "LightCompressor", version.ref = "lightcompressor" }
|
||||||
@ -114,6 +116,7 @@ zelory-video-compressor = { group = "id.zelory", name = "compressor", version.re
|
|||||||
zoomable = { group = "net.engawapg.lib", name = "zoomable", version.ref = "zoomable" }
|
zoomable = { group = "net.engawapg.lib", name = "zoomable", version.ref = "zoomable" }
|
||||||
zxing = { group = "com.google.zxing", name = "core", version.ref = "zxing" }
|
zxing = { group = "com.google.zxing", name = "core", version.ref = "zxing" }
|
||||||
zxing-embedded = { group = "com.journeyapps", name = "zxing-android-embedded", version.ref = "zxingAndroidEmbedded" }
|
zxing-embedded = { group = "com.journeyapps", name = "zxing-android-embedded", version.ref = "zxingAndroidEmbedded" }
|
||||||
|
material = { group = "com.google.android.material", name = "material", version.ref = "materialVersion" }
|
||||||
|
|
||||||
[plugins]
|
[plugins]
|
||||||
androidApplication = { id = "com.android.application", version.ref = "agp" }
|
androidApplication = { id = "com.android.application", version.ref = "agp" }
|
||||||
|
@ -32,3 +32,4 @@ include ':app'
|
|||||||
include ':benchmark'
|
include ':benchmark'
|
||||||
include ':quartz'
|
include ':quartz'
|
||||||
include ':commons'
|
include ':commons'
|
||||||
|
include ':ammolite'
|
||||||
|
Loading…
Reference in New Issue
Block a user