diff --git a/src/components/user_list_popover/user_list_popover.vue b/src/components/user_list_popover/user_list_popover.vue
index ddeb6f6f6..8f774a9b1 100644
--- a/src/components/user_list_popover/user_list_popover.vue
+++ b/src/components/user_list_popover/user_list_popover.vue
@@ -17,7 +17,7 @@
class="user-list-row"
>
diff --git a/src/i18n/en.json b/src/i18n/en.json
index 4b257be9f..8c7379742 100644
--- a/src/i18n/en.json
+++ b/src/i18n/en.json
@@ -1633,6 +1633,8 @@
"no_more_statuses": "No more statuses",
"no_statuses": "No statuses",
"socket_reconnected": "Realtime connection established",
+ "socket_disconnected": "Realtime connection unavaialable",
+ "socket_closed": "Realtime connection closed",
"socket_broke": "Realtime connection lost: CloseEvent code {0}",
"quick_view_settings": "Quick view settings",
"quick_filter_settings": "Quick filter settings",
@@ -1730,6 +1732,7 @@
"more_actions": "More actions on this status",
"loading": "Loading...",
"load_error": "Unable to load status: {error}",
+ "interact_error": "Error interacting with status: {error}",
"admin_change_scope": "Change visibility",
"mark_as_sensitive": "Sensitive",
"mark_as_non-sensitive": "Non-sensitive"
diff --git a/src/stores/interface.js b/src/stores/interface.js
index 19aa37221..fd74e579f 100644
--- a/src/stores/interface.js
+++ b/src/stores/interface.js
@@ -95,14 +95,26 @@ export const useInterfaceStore = defineStore('interface', {
}
},
onStreamDisconnect(closeEvent) {
- // TODO better explanation/localization
- const { code } = closeEvent
- this.pushGlobalNotice({
- level: 'error',
- messageKey: 'timeline.socket_broke',
- messageArgs: [code],
- timeout: 5000,
- })
+ const intendedCodes = new Set([
+ 1000, // Normal (intended) closure
+ 1001, // Going away
+ ])
+ const { code } = closeEvent.original
+ if (intendedCodes.has(code)) {
+ this.pushGlobalNotice({
+ level: 'success',
+ messageKey: 'timeline.socket_closed',
+ messageArgs: [code],
+ timeout: 5000,
+ })
+ } else {
+ this.pushGlobalNotice({
+ level: 'error',
+ messageKey: 'timeline.socket_broke',
+ messageArgs: [code],
+ timeout: 5000,
+ })
+ }
},
setTemporaryChanges({ confirm, revert }) {
this.temporaryChangesCountdown = 10
diff --git a/src/stores/statuses.js b/src/stores/statuses.js
index 0e05e053a..fa1198a93 100644
--- a/src/stores/statuses.js
+++ b/src/stores/statuses.js
@@ -338,7 +338,7 @@ export const useStatusesStore = defineStore('statuses', {
useInterfaceStore().pushGlobalNotice({
level: 'error',
- messageKey: 'status.react_error',
+ messageKey: 'status.interact_error',
messageArgs: [error],
timeout: 5000,
})