Skip to content

Commit eb0a902

Browse files
committed
Adding auto refresh
1 parent 6a471ff commit eb0a902

File tree

6 files changed

+38
-7
lines changed

6 files changed

+38
-7
lines changed

src/Frontend/src/components/messages/DeleteMessageButton.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ const handleConfirm = async () => {
2020
2121
const message = `Deleting the message ${state.value.data.id} ...`;
2222
await showToastAfterOperation(store.archiveMessage, TYPE.INFO, "Info", message);
23-
state.value.data.failure_status.archiving = true;
23+
24+
await store.pollForNextUpdate();
2425
};
2526
</script>
2627

src/Frontend/src/components/messages/EditAndRetryButton.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ const handleConfirm = async () => {
1919
2020
const message = `Retrying the edited message ${state.value.data.id} ...`;
2121
await showToastAfterOperation(store.retryMessage, TYPE.INFO, "Info", message);
22-
state.value.data.failure_status.retried = true;
22+
23+
await store.pollForNextUpdate();
2324
};
2425
</script>
2526

src/Frontend/src/components/messages/MessageView2.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ watch(
9191
<div class="row">
9292
<div class="col-sm-12 no-side-padding">
9393
<div class="metadata group-message-count message-metadata">
94+
<MetadataLabel v-if="state.data.failure_status.retry_in_progress" tooltip="Message is being retried" type="info" text="Retrying..." />
9495
<MetadataLabel v-if="state.data.failure_status.retried" tooltip="Message is being retried" type="info" text="Retried" />
9596
<MetadataLabel v-if="state.data.failure_status.restoring" tooltip="Message is being restored" type="info" text="Restoring..." />
9697
<MetadataLabel v-if="state.data.failure_status.archiving" tooltip="Message is being deleted" type="info" text="Deleting..." />

src/Frontend/src/components/messages/RestoreMessageButton.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ const handleConfirm = async () => {
1717
1818
const message = `Restoring the message ${state.value.data.id} ...`;
1919
await showToastAfterOperation(store.restoreMessage, TYPE.INFO, "Info", message);
20-
state.value.data.failure_status.restoring = true;
20+
21+
await store.pollForNextUpdate();
2122
};
2223
</script>
2324

src/Frontend/src/components/messages/RetryMessageButton.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ const handleConfirm = async () => {
2020
2121
const message = `Retrying the message ${state.value.data.id} ...`;
2222
await showToastAfterOperation(store.retryMessage, TYPE.INFO, "Info", message);
23-
state.value.data.failure_status.retried = true;
23+
24+
await store.pollForNextUpdate();
2425
};
2526
</script>
2627

src/Frontend/src/stores/MessageViewStore.ts

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,6 @@ export const useMessageViewStore = defineStore("MessageViewStore", () => {
120120
const countdown = moment(state.data.failure_metadata.last_modified).add(error_retention_period, "hours");
121121
state.data.failure_status.delete_soon = countdown < moment();
122122
state.data.failure_metadata.deleted_in = countdown.format();
123-
124-
// TODO: Maintain the mutations of the message in memory until the api returns a newer modified message
125123
}
126124

127125
async function loadMessage(messageId: string, id: string) {
@@ -229,8 +227,35 @@ export const useMessageViewStore = defineStore("MessageViewStore", () => {
229227
async function retryMessage() {
230228
if (state.data.id) {
231229
await useRetryMessages([state.data.id]);
232-
state.data.failure_status.retried = true;
230+
state.data.failure_status.retry_in_progress = true;
231+
}
232+
}
233+
234+
async function pollForNextUpdate() {
235+
if (!state.data.id) {
236+
return;
237+
}
238+
239+
let lastModified = state.data.failure_metadata.last_modified;
240+
let maxRetries = 60; // We try for 60 seconds
241+
242+
do {
243+
// eslint-disable-next-line no-await-in-loop
244+
await new Promise((resolve) => setTimeout(resolve, 1000));
245+
// eslint-disable-next-line no-await-in-loop
246+
const [, data] = await useTypedFetchFromServiceControl<FailedMessage>(`errors/last/${state.data.id}`);
247+
lastModified = data.last_modified;
248+
249+
console.log(`${lastModified} vs ${state.data.failure_metadata.last_modified} ${lastModified === state.data.failure_metadata.last_modified}`);
250+
} while (lastModified === state.data.failure_metadata.last_modified && maxRetries-- > 0);
251+
252+
if (lastModified === state.data.failure_metadata.last_modified) {
253+
return;
233254
}
255+
256+
const id = state.data.id;
257+
reset();
258+
await loadFailedMessage(id);
234259
}
235260

236261
async function exportMessage() {
@@ -278,6 +303,7 @@ export const useMessageViewStore = defineStore("MessageViewStore", () => {
278303
restoreMessage,
279304
retryMessage,
280305
conversationData,
306+
pollForNextUpdate,
281307
};
282308
});
283309

0 commit comments

Comments
 (0)