diff --git a/app/src/main/java/ani/dantotsu/connections/discord/Discord.kt b/app/src/main/java/ani/dantotsu/connections/discord/Discord.kt index 44865b88..6d5e3fb1 100644 --- a/app/src/main/java/ani/dantotsu/connections/discord/Discord.kt +++ b/app/src/main/java/ani/dantotsu/connections/discord/Discord.kt @@ -61,16 +61,6 @@ object Discord { } private var rpc : RPC? = null - /*suspend fun getUserData() = tryWithSuspend(true) { - if(rpc==null) { - val rpc = RPC(token!!, Dispatchers.IO).also { rpc = it } - val user: User = rpc.getUserData() - userid = user.username - avatar = user.userAvatar() - rpc.close() - true - } else true - } ?: false*/ fun warning(context: Context) = CustomBottomDialog().apply { diff --git a/app/src/main/java/ani/dantotsu/connections/discord/RPC.kt b/app/src/main/java/ani/dantotsu/connections/discord/RPC.kt index 800276d4..6961282e 100644 --- a/app/src/main/java/ani/dantotsu/connections/discord/RPC.kt +++ b/app/src/main/java/ani/dantotsu/connections/discord/RPC.kt @@ -41,201 +41,6 @@ open class RPC(val token: String, val coroutineContext: CoroutineContext) { } data class Link(val label: String, val url: String) -/* - private val client = OkHttpClient.Builder() - .connectTimeout(10, SECONDS) - .readTimeout(10, SECONDS) - .writeTimeout(10, SECONDS) - .build() - - private val request = Request.Builder() - .url("wss://gateway.discord.gg/?encoding=json&v=10") - .build() - - private var webSocket = client.newWebSocket(request, Listener()) - - var applicationId: String? = null - var type: Type? = null - var activityName: String? = null - var details: String? = null - var state: String? = null - var largeImage: Link? = null - var smallImage: Link? = null - var status: String? = null - var startTimestamp: Long? = null - var stopTimestamp: Long? = null - - var buttons = mutableListOf() - - - private suspend fun createPresence(): String { - val j = json.encodeToString(Presence.Response( - 3, - Presence( - activities = listOf( - Activity( - name = activityName, - state = state, - details = details, - type = type?.ordinal, - timestamps = if (startTimestamp != null) - Activity.Timestamps(startTimestamp, stopTimestamp) - else null, - assets = Activity.Assets( - largeImage = largeImage?.url?.discordUrl(), - largeText = largeImage?.label, - smallImage = smallImage?.url?.discordUrl(), - smallText = smallImage?.label - ), - buttons = buttons.map { it.label }, - metadata = Activity.Metadata( - buttonUrls = buttons.map { it.url } - ), - applicationId = applicationId, - ) - ), - afk = true, - since = startTimestamp, - status = status - ) - )) - logger("Presence: $j") - return j - } - - - - - private fun sendIdentify() { - val response = Identity.Response( - op = 2, - d = Identity( - token = token, - properties = Identity.Properties( - os = "windows", - browser = "Chrome", - device = "disco" - ), - compress = false, - intents = 0 - ) - ) - webSocket.send(json.encodeToString(response)) - } - - fun send(block: RPC.() -> Unit) { - block.invoke(this) - send() - } - - var started = false - var whenStarted: ((User) -> Unit)? = null - - fun send() { - val send = { - CoroutineScope(coroutineContext).launch { - webSocket.send(createPresence()) - } - } - if (!started) whenStarted = { - snackString("Discord message sent") - send.invoke() - whenStarted = null - } - else send.invoke() - } - - fun close() { - webSocket.send( - json.encodeToString( - Presence.Response( - 3, - Presence(status = "offline") - ) - ) - ) - webSocket.close(4000, "Interrupt") - } - - //I kinda hate this - suspend fun getUserData(): User = suspendCancellableCoroutine { continuation -> - whenStarted = { - continuation.resume(it, onCancellation = null) - whenStarted = null - } - continuation.invokeOnCancellation { - whenStarted = null - } - } - - var onReceiveUserData: ((User) -> Deferred)? = null - - inner class Listener : WebSocketListener() { - private var seq: Int? = null - private var heartbeatInterval: Long? = null - - var scope = CoroutineScope(coroutineContext) - - private fun sendHeartBeat() { - scope.cancel() - scope = CoroutineScope(coroutineContext) - scope.launch { - delay(heartbeatInterval!!) - webSocket.send("{\"op\":1, \"d\":$seq}") - } - } - - override fun onMessage(webSocket: WebSocket, text: String) { - - val map = json.decodeFromString(text) - seq = map.s - when (map.op) { - 10 -> { - map.d as JsonObject - heartbeatInterval = map.d["heartbeat_interval"]!!.jsonPrimitive.long - sendHeartBeat() - sendIdentify() - snackString(map.t) - } - - 0 -> if (map.t == "READY") { - val user = json.decodeFromString(text).d.user - snackString(map.t) - started = true - whenStarted?.invoke(user) - } - - 1 -> { - if (scope.isActive) scope.cancel() - webSocket.send("{\"op\":1, \"d\":$seq}") - snackString(map.t) - } - - 11 -> sendHeartBeat() - 7 -> webSocket.close(400, "Reconnect") - 9 -> { - sendHeartBeat() - sendIdentify() - snackString(map.t) - } - } - } - - override fun onClosed(webSocket: WebSocket, code: Int, reason: String) { - println("Server Closed : $code $reason") - if (code == 4000) { - scope.cancel() - } - } - - override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) { - println("Failure : ${t.message}") - if (t.message != "Interrupt") { - this@RPC.webSocket = client.newWebSocket(request, Listener()) - } - } - } -*/ companion object { data class RPCData(