Skip to content

Commit b15d3ad

Browse files
committed
making progress
1 parent 3aafb48 commit b15d3ad

5 files changed

Lines changed: 97 additions & 15 deletions

File tree

android/app/src/main/java/com/httpsms/FirebaseMessagingService.kt

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import androidx.work.*
88
import com.google.firebase.messaging.FirebaseMessagingService
99
import com.google.firebase.messaging.RemoteMessage
1010
import timber.log.Timber
11+
import java.time.ZoneOffset
12+
import java.time.ZonedDateTime
1113

1214

1315
class MyFirebaseMessagingService : FirebaseMessagingService() {
@@ -89,17 +91,18 @@ class MyFirebaseMessagingService : FirebaseMessagingService() {
8991
return Result.failure()
9092
}
9193

92-
if (!Settings.getActiveStatus(applicationContext)) {
93-
Timber.w("user is not active, stopping processing")
94-
return Result.failure()
95-
}
96-
9794
val messageID = this.inputData.getString(Constants.KEY_MESSAGE_ID)
9895
if (messageID == null) {
9996
Timber.e("cannot get outstanding message for work [${this.id}]")
10097
return Result.failure()
10198
}
10299

100+
if (!Settings.getActiveStatus(applicationContext)) {
101+
Timber.w("user is not active, stopping processing")
102+
handleFailed(applicationContext, messageID, "MOBILE_APP_INACTIVE")
103+
return Result.failure()
104+
}
105+
103106
val message = getMessage(applicationContext, messageID) ?: return Result.failure()
104107
registerReceivers(applicationContext, message.id)
105108

@@ -123,6 +126,12 @@ class MyFirebaseMessagingService : FirebaseMessagingService() {
123126
)
124127
}
125128

129+
private fun handleFailed(context: Context, messageID: String, reason: String) {
130+
Timber.d("sending failed event for message with ID [${messageID}]")
131+
HttpSmsApiService(Settings.getApiKeyOrDefault(context))
132+
.sendFailedEvent(messageID, ZonedDateTime.now(ZoneOffset.UTC), reason)
133+
}
134+
126135
private fun getMessage(context: Context, messageID: String): Message? {
127136
Timber.d("fetching message with ID [${messageID}]")
128137
val message = HttpSmsApiService(Settings.getApiKeyOrDefault(context)).getOutstandingMessage(messageID)

android/app/src/main/java/com/httpsms/HttpSmsApiService.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import java.util.logging.Logger.getLogger
1515

1616
class HttpSmsApiService(private val apiKey: String) {
1717
private val apiKeyHeader = "x-api-key"
18-
private val baseURL = URI("https://269a-145-14-19-211.ngrok.io")
18+
private val baseURL = URI("https://api.httpsms.com")
1919
private val jsonMediaType = "application/json; charset=utf-8".toMediaType()
2020

2121
init {

web/layouts/default.vue

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,18 @@
44
<v-navigation-drawer
55
v-if="$vuetify.breakpoint.lgAndUp && hasDrawer"
66
:width="400"
7-
fixed
87
app
8+
fixed
99
>
1010
<template #prepend>
1111
<v-divider
1212
v-if="$store.getters.isLocal"
1313
class="py-1 warning"
1414
></v-divider>
1515
<message-thread-header></message-thread-header>
16-
<message-thread></message-thread>
16+
<div class="overflow-y-auto v-navigation-drawer__message-thread">
17+
<message-thread></message-thread>
18+
</div>
1719
</template>
1820
</v-navigation-drawer>
1921
<v-main :class="{ 'has-drawer': hasDrawer && $vuetify.breakpoint.lgAndUp }">
@@ -83,10 +85,6 @@ export default class DefaultLayout extends Vue {
8385
</script>
8486

8587
<style lang="scss">
86-
html {
87-
overflow-y: auto;
88-
}
89-
9088
.v-application {
9189
.w-full {
9290
width: 100%;
@@ -100,5 +98,25 @@ html {
10098
padding-left: 400px;
10199
}
102100
}
101+
102+
.v-navigation-drawer__message-thread {
103+
height: calc(100vh - 120px);
104+
105+
/* width */
106+
&::-webkit-scrollbar {
107+
width: 8px;
108+
}
109+
110+
/* Track */
111+
&::-webkit-scrollbar-track {
112+
background: #363636;
113+
}
114+
115+
/* Handle */
116+
&::-webkit-scrollbar-thumb {
117+
background: #666666;
118+
border-radius: 8px;
119+
}
120+
}
103121
}
104122
</style>

web/pages/threads/_id.vue

Lines changed: 57 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,11 @@
6565
indeterminate
6666
></v-progress-linear>
6767
<v-container v-if="$store.getters.hasThread">
68-
<div ref="messageBody" class="messages-body no-scrollbar">
68+
<div
69+
ref="messageBody"
70+
class="messages-body no-scrollbar"
71+
:class="{ 'pr-7': $vuetify.breakpoint.lgAndUp }"
72+
>
6973
<v-row v-for="message in messages" :key="message.id">
7074
<v-col
7175
class="d-flex"
@@ -83,6 +87,27 @@
8387
>
8488
<v-icon> mdi-account</v-icon>
8589
</v-avatar>
90+
<v-menu v-if="canResend(message)" offset-y>
91+
<template #activator="{ on }">
92+
<v-btn icon text class="mt-2" v-on="on">
93+
<v-icon>mdi-dots-vertical</v-icon>
94+
</v-btn>
95+
</template>
96+
<v-list class="px-2" nav dense>
97+
<v-list-item-group v-model="selectedMenuItem">
98+
<v-list-item @click.prevent="resendMessage(message)">
99+
<v-list-item-icon class="pl-2">
100+
<v-icon dense>mdi-refresh</v-icon>
101+
</v-list-item-icon>
102+
<v-list-item-content class="ml-n3">
103+
<v-list-item-title class="pr-16 py-1">
104+
Resend Message
105+
</v-list-item-title>
106+
</v-list-item-content>
107+
</v-list-item>
108+
</v-list-item-group>
109+
</v-list>
110+
</v-menu>
86111
<div>
87112
<v-card
88113
class="ml-2"
@@ -140,7 +165,11 @@
140165
</div>
141166
</template>
142167
<span>
143-
{{ message.status }}
168+
{{
169+
message.failure_reason
170+
? message.failure_reason
171+
: message.status
172+
}}
144173
</span>
145174
</v-tooltip>
146175
</div>
@@ -248,6 +277,13 @@ export default Vue.extend({
248277
return ['sending', 'pending'].includes(message.status)
249278
},
250279
280+
canResend(message: Message): boolean {
281+
return (
282+
this.isMT(message) &&
283+
(message.status === 'expired' || message.status === 'failed')
284+
)
285+
},
286+
251287
async loadData() {
252288
await this.$store.dispatch('loadPhones')
253289
await this.$store.dispatch('loadThreads')
@@ -290,6 +326,25 @@ export default Vue.extend({
290326
}, 1000)
291327
},
292328
329+
async resendMessage(message: Message) {
330+
await this.$store.dispatch('sendMessage', {
331+
from: message.owner,
332+
to: message.contact,
333+
content: message.content,
334+
})
335+
336+
setTimeout(() => {
337+
this.selectedMenuItem = -1
338+
}, 1000)
339+
340+
await this.$store.dispatch(
341+
'loadThreadMessages',
342+
this.$store.getters.getThread.id
343+
)
344+
345+
this.scrollToElement()
346+
},
347+
293348
async sendMessage(event: KeyboardEvent) {
294349
if (event.shiftKey) {
295350
return
@@ -325,7 +380,6 @@ export default Vue.extend({
325380
<style lang="scss">
326381
.messages-body {
327382
padding-top: 50px;
328-
padding-right: 20px;
329383
max-height: calc(100vh - 200px);
330384
position: absolute;
331385
width: 100%;

web/store/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,7 @@ export const actions = {
252252
const response = await axios.get('/v1/message-threads', {
253253
params: {
254254
owner: context.getters.getOwner,
255+
limit: 100,
255256
is_archived: context.getters.getIsArchived,
256257
},
257258
})

0 commit comments

Comments
 (0)