From 21f9feb5163cd08ba18c19cd108a7ae40f048b4f Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 1 Apr 2025 23:32:54 +0200 Subject: [PATCH] client --- webapp/graphql/updateOnlineStatus.js | 7 +++++++ webapp/nuxt.config.js | 1 + webapp/plugins/onlineStatus.js | 30 ++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+) create mode 100644 webapp/graphql/updateOnlineStatus.js create mode 100644 webapp/plugins/onlineStatus.js diff --git a/webapp/graphql/updateOnlineStatus.js b/webapp/graphql/updateOnlineStatus.js new file mode 100644 index 000000000..ee39b0667 --- /dev/null +++ b/webapp/graphql/updateOnlineStatus.js @@ -0,0 +1,7 @@ +import gql from 'graphql-tag' + +export const updateOnlineStatus = gql` + mutation ($status: OnlineStatus!) { + updateOnlineStatus(status: $status) + } +` diff --git a/webapp/nuxt.config.js b/webapp/nuxt.config.js index 4e82e9330..9adacd4cc 100644 --- a/webapp/nuxt.config.js +++ b/webapp/nuxt.config.js @@ -130,6 +130,7 @@ export default { { src: '~/plugins/vue-observe-visibility.js', ssr: false }, { src: '~/plugins/v-mapbox.js', mode: 'client' }, { src: '~/plugins/vue-advanced-chat.js', mode: 'client' }, + { src: '~/plugins/onlineStatus.js', mode: 'client' }, ], router: { diff --git a/webapp/plugins/onlineStatus.js b/webapp/plugins/onlineStatus.js new file mode 100644 index 000000000..74d290273 --- /dev/null +++ b/webapp/plugins/onlineStatus.js @@ -0,0 +1,30 @@ +import { updateOnlineStatus as updateOnlineStatusMutation } from '~/graphql/updateOnlineStatus.js' + +let _app = null + +const updateOnlineStatus = async () => { + if (!_app.store.getters['auth/isAuthenticated']) { + return + } + + const status = document.hidden ? 'away' : 'online' + + const client = _app.apolloProvider.defaultClient + + await client.mutate({ + mutation: updateOnlineStatusMutation, + variables: { status }, + }) + + // TODO + console.log(`call home as ${status} at ${new Date().toUTCString()}`) +} + +export default ({ app }) => { + _app = app + if (process.client) { + window.addEventListener('visibilitychange', updateOnlineStatus) + setInterval(updateOnlineStatus, 30000) + updateOnlineStatus() + } +}