Skip to content

Commit 09f9eb9

Browse files
committed
[gateway] conditional SSE connection
1 parent 02823bf commit 09f9eb9

File tree

6 files changed

+43
-25
lines changed

6 files changed

+43
-25
lines changed

app/src/main/java/me/capcom/smsgateway/helpers/SettingsHelper.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,6 @@ class SettingsHelper(private val context: Context) {
2727
settings.edit { putBoolean(PREF_KEY_AUTOSTART, value) }
2828
}
2929

30-
var fcmToken: String?
31-
get() = settings.getString(PREF_KEY_FCM_TOKEN, null)
32-
set(value) = settings.edit { putString(PREF_KEY_FCM_TOKEN, value) }
33-
3430
private fun migrate() {
3531
// remove after 2025-11-28
3632
val PREF_KEY_SERVER_TOKEN = "server_token"

app/src/main/java/me/capcom/smsgateway/modules/gateway/EventsReceiver.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@ import kotlinx.coroutines.launch
66
import me.capcom.smsgateway.domain.EntitySource
77
import me.capcom.smsgateway.modules.events.EventBus
88
import me.capcom.smsgateway.modules.events.EventsReceiver
9+
import me.capcom.smsgateway.modules.gateway.events.DeviceRegisteredEvent
910
import me.capcom.smsgateway.modules.gateway.events.MessageEnqueuedEvent
1011
import me.capcom.smsgateway.modules.gateway.events.SettingsUpdatedEvent
1112
import me.capcom.smsgateway.modules.gateway.events.WebhooksUpdatedEvent
13+
import me.capcom.smsgateway.modules.gateway.services.SSEForegroundService
1214
import me.capcom.smsgateway.modules.gateway.workers.PullMessagesWorker
1315
import me.capcom.smsgateway.modules.gateway.workers.SendStateWorker
1416
import me.capcom.smsgateway.modules.gateway.workers.SettingsUpdateWorker
@@ -79,6 +81,18 @@ class EventsReceiver : EventsReceiver() {
7981
SettingsUpdateWorker.start(get())
8082
}
8183
}
84+
85+
launch {
86+
Log.d("EventsReceiver", "launched DeviceRegisteredEvent")
87+
eventBus.collect<DeviceRegisteredEvent> {
88+
Log.d("EventsReceiver", "Event: $it")
89+
90+
if (!settings.enabled) return@collect
91+
if (settings.fcmToken != null) return@collect
92+
93+
SSEForegroundService.start(get())
94+
}
95+
}
8296
}
8397

8498
}

app/src/main/java/me/capcom/smsgateway/modules/gateway/GatewayService.kt

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ class GatewayService(
4646
PullMessagesWorker.start(context)
4747
WebhooksUpdateWorker.start(context)
4848
SettingsUpdateWorker.start(context)
49-
SSEForegroundService.start(context)
5049

5150
eventsReceiver.start()
5251
}
@@ -109,9 +108,7 @@ class GatewayService(
109108
if (accessToken != null) {
110109
// if there's an access token, try to update push token
111110
try {
112-
pushToken?.let {
113-
updateDevice(it)
114-
}
111+
updateDevice(pushToken)
115112
return
116113
} catch (e: ClientRequestException) {
117114
// if token is invalid, try to register new one
@@ -135,6 +132,8 @@ class GatewayService(
135132
registerMode.login to registerMode.password
136133
)
137134
}
135+
136+
this.settings.fcmToken = pushToken
138137
this.settings.registrationInfo = response
139138

140139
events.emit(
@@ -156,19 +155,23 @@ class GatewayService(
156155
}
157156
}
158157

159-
internal suspend fun updateDevice(pushToken: String) {
158+
internal suspend fun updateDevice(pushToken: String?) {
160159
if (!settings.enabled) return
161160

162161
val settings = settings.registrationInfo ?: return
163162
val accessToken = settings.token
164163

165-
api.devicePatch(
166-
accessToken,
167-
GatewayApi.DevicePatchRequest(
168-
settings.id,
169-
pushToken
164+
pushToken?.let {
165+
api.devicePatch(
166+
accessToken,
167+
GatewayApi.DevicePatchRequest(
168+
settings.id,
169+
it
170+
)
170171
)
171-
)
172+
}
173+
174+
this.settings.fcmToken = pushToken
172175

173176
events.emit(
174177
DeviceRegisteredEvent.Success(

app/src/main/java/me/capcom/smsgateway/modules/gateway/GatewaySettings.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ class GatewaySettings(
1919
get() = storage.get(REGISTRATION_INFO)
2020
set(value) = storage.set(REGISTRATION_INFO, value)
2121

22+
var fcmToken: String?
23+
get() = storage.get(FCM_TOKEN)
24+
set(value) = storage.set(FCM_TOKEN, value)
25+
2226
val username: String?
2327
get() = registrationInfo?.login
2428
val password: String?
@@ -32,6 +36,7 @@ class GatewaySettings(
3236
companion object {
3337
private const val REGISTRATION_INFO = "REGISTRATION_INFO"
3438
private const val ENABLED = "ENABLED"
39+
private const val FCM_TOKEN = "fcm_token"
3540

3641
private const val CLOUD_URL = "cloud_url"
3742
private const val PRIVATE_TOKEN = "private_token"

app/src/main/java/me/capcom/smsgateway/modules/gateway/services/SSEForegroundService.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,13 @@ class SSEForegroundService : Service() {
119119
if (wakeLock.isHeld) {
120120
wakeLock.release()
121121
}
122-
stopForeground(true)
122+
123+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
124+
stopForeground(STOP_FOREGROUND_REMOVE)
125+
} else {
126+
@Suppress("DEPRECATION")
127+
stopForeground(true)
128+
}
123129

124130
super.onDestroy()
125131
}

app/src/main/java/me/capcom/smsgateway/services/PushService.kt

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@ package me.capcom.smsgateway.services
22

33
import android.content.Context
44
import android.util.Log
5-
import com.google.android.gms.tasks.OnCompleteListener
65
import com.google.firebase.messaging.FirebaseMessaging
76
import com.google.firebase.messaging.FirebaseMessagingService
87
import com.google.firebase.messaging.RemoteMessage
9-
import me.capcom.smsgateway.helpers.SettingsHelper
108
import me.capcom.smsgateway.modules.events.ExternalEvent
119
import me.capcom.smsgateway.modules.events.ExternalEventType
1210
import me.capcom.smsgateway.modules.gateway.workers.RegistrationWorker
@@ -18,14 +16,10 @@ import org.koin.core.component.get
1816
import org.koin.core.component.inject
1917

2018
class PushService : FirebaseMessagingService(), KoinComponent {
21-
private val settingsHelper by inject<SettingsHelper>()
22-
2319
private val logsService by inject<LogsService>()
2420
private val eventsRouter by inject<EventsRouter>()
2521

2622
override fun onNewToken(token: String) {
27-
settingsHelper.fcmToken = token
28-
2923
RegistrationWorker.start(this@PushService, token, true)
3024
}
3125

@@ -47,7 +41,7 @@ class PushService : FirebaseMessagingService(), KoinComponent {
4741
)
4842
} catch (e: Throwable) {
4943
Log.e(this.javaClass.name, "Error processing push message", e)
50-
get<LogsService>().insert(
44+
logsService.insert(
5145
priority = LogEntry.Priority.ERROR,
5246
module = this.javaClass.simpleName,
5347
message = "Failed to process push message: ${e.message}",
@@ -65,7 +59,7 @@ class PushService : FirebaseMessagingService(), KoinComponent {
6559
module = PushService::class.java.simpleName,
6660
message = "FCM registration started"
6761
)
68-
FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
62+
FirebaseMessaging.getInstance().token.addOnCompleteListener { task ->
6963
if (!task.isSuccessful || task.isCanceled) {
7064
logger.insert(
7165
priority = LogEntry.Priority.ERROR,
@@ -90,7 +84,7 @@ class PushService : FirebaseMessagingService(), KoinComponent {
9084

9185
// Log and toast
9286
RegistrationWorker.start(context, token, false)
93-
})
87+
}
9488
}
9589
}
9690
}

0 commit comments

Comments
 (0)