From d638a6928be167e105e05620e5b3df2eb5713f72 Mon Sep 17 00:00:00 2001 From: Ed Asriyan Date: Sun, 7 Apr 2024 02:24:15 +0400 Subject: [PATCH] Add online users support --- .env | 3 + src/App.svelte | 29 +++--- src/{components => }/analytics.svelte | 9 +- src/components/1-video-selector.svelte | 6 +- src/components/2-copy-url.svelte | 2 +- src/components/index.svelte | 75 +++++++------- src/components/users/index.svelte | 26 +++++ src/components/users/user.svelte | 66 ++++++++++++ src/components/video-player/index.svelte | 2 +- src/components/video-selector-btn.svelte | 6 +- src/destructable.ts | 20 ++++ src/i18n/_.ts | 4 + src/i18n/fr.ts | 4 + src/i18n/ru.ts | 4 + src/settings.ts | 2 + src/stores/bound-current-time.ts | 65 ++++++++++++ src/stores/bound-minutes-watched.ts | 39 +++++++ src/stores/bound-store.ts | 45 ++++++++ src/stores/bound-timed-store.ts | 52 ++++++++++ src/stores/bound-users.ts | 65 ++++++++++++ src/stores/clock.ts | 4 +- src/stores/local-room.ts | 108 ------------------- src/stores/my-id.ts | 12 +++ src/stores/my-name.ts | 32 ++++++ src/stores/remote-room.ts | 126 ----------------------- src/stores/room.ts | 76 ++++++++++++++ src/stores/video-example.js | 1 - stats.js | 43 +++++--- 28 files changed, 611 insertions(+), 315 deletions(-) rename src/{components => }/analytics.svelte (88%) create mode 100644 src/components/users/index.svelte create mode 100644 src/components/users/user.svelte create mode 100644 src/destructable.ts create mode 100644 src/stores/bound-current-time.ts create mode 100644 src/stores/bound-minutes-watched.ts create mode 100644 src/stores/bound-store.ts create mode 100644 src/stores/bound-timed-store.ts create mode 100644 src/stores/bound-users.ts delete mode 100644 src/stores/local-room.ts create mode 100644 src/stores/my-id.ts create mode 100644 src/stores/my-name.ts delete mode 100644 src/stores/remote-room.ts create mode 100644 src/stores/room.ts diff --git a/.env b/.env index fd93437..75f3615 100644 --- a/.env +++ b/.env @@ -10,6 +10,9 @@ VITE_FIREBASE_MEASUREMENT_ID= # base URL where the website is hosted (e.g. https://watchtogether.online) VITE_URL= +# usernames separated by comma to be randomly picked for users +VITE_USERNAMES=๐Ÿต,๐Ÿ’,๐Ÿฆ,๐Ÿฆง,๐Ÿถ,๐Ÿ•,๐Ÿฆฎ,๐Ÿ•โ€๐Ÿฆบ,๐Ÿฉ,๐Ÿบ,๐ŸฆŠ,๐Ÿฆ,๐Ÿฑ,๐Ÿˆ,๐Ÿˆโ€โฌ›,๐Ÿฆ,๐Ÿฏ,๐Ÿ…,๐Ÿ†,๐Ÿด,๐ŸซŽ,๐Ÿซ,๐ŸŽ,๐Ÿฆ„,๐Ÿฆ“,๐ŸฆŒ,๐Ÿฆฌ,๐Ÿฎ,๐Ÿ‚,๐Ÿƒ,๐Ÿ„,๐Ÿท,๐Ÿ–,๐Ÿ—,๐Ÿฝ,๐Ÿ,๐Ÿ‘,๐Ÿ,๐Ÿช,๐Ÿซ,๐Ÿฆ™,๐Ÿฆ’,๐Ÿ˜,๐Ÿฆฃ,๐Ÿฆ,๐Ÿฆ›,๐Ÿญ,๐Ÿ,๐Ÿ€,๐Ÿน,๐Ÿฐ,๐Ÿ‡,๐Ÿฟ๏ธ,๐Ÿฆซ,๐Ÿฆ”,๐Ÿฆ‡,๐Ÿป,๐Ÿปโ€โ„๏ธ,๐Ÿจ,๐Ÿผ,๐Ÿฆฅ,๐Ÿฆฆ,๐Ÿฆจ,๐Ÿฆ˜,๐Ÿฆก,๐Ÿฆƒ,๐Ÿ”,๐Ÿ“,๐Ÿฃ,๐Ÿค,๐Ÿฅ,๐Ÿฆ,๐Ÿง,๐Ÿ•Š๏ธ,๐Ÿฆ…,๐Ÿฆ†,๐Ÿฆข,๐Ÿฆ‰,๐Ÿฆค,๐Ÿชถ,๐Ÿฆฉ,๐Ÿฆš,๐Ÿฆœ,๐Ÿชฝ,๐Ÿฆโ€โฌ›,๐Ÿชฟ,๐Ÿธ,๐ŸŠ,๐Ÿข,๐ŸฆŽ,๐Ÿ,๐Ÿฒ,๐Ÿ‰,๐Ÿฆ•,๐Ÿฆ–,๐Ÿณ,๐Ÿ‹,๐Ÿฌ,๐Ÿฆญ,๐ŸŸ,๐Ÿ ,๐Ÿก,๐Ÿฆˆ,๐Ÿ™,๐Ÿชผ,๐Ÿฆ€,๐Ÿฆž,๐Ÿฆ,๐Ÿฆ‘,๐ŸŒ,๐Ÿฆ‹,๐Ÿ›,๐Ÿœ,๐Ÿ,๐Ÿชฒ,๐Ÿž,๐Ÿฆ—,๐Ÿชณ,๐Ÿ•ท๏ธ,๐Ÿฆ‚,๐ŸฆŸ,๐Ÿชฐ,๐Ÿชฑ,๐Ÿ’,๐ŸŒธ,๐Ÿชท,๐Ÿต๏ธ,๐ŸŒน,๐ŸŒบ,๐ŸŒป,๐ŸŒผ,๐ŸŒท,โ›„,๐Ÿงธ,๐ŸŽƒ,๐Ÿ‡,๐Ÿˆ,๐Ÿ‰,๐ŸŠ,๐Ÿ‹,๐ŸŒ,๐Ÿ,๐Ÿฅญ,๐ŸŽ,๐Ÿ,๐Ÿ,๐Ÿ‘,๐Ÿ’,๐Ÿ“,๐Ÿซ,๐Ÿฅ,๐Ÿ…,๐Ÿซ’ + # # [ all parameters below this line are optional ] # diff --git a/src/App.svelte b/src/App.svelte index e3a63ee..3f290e0 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -3,35 +3,34 @@ import 'uikit/dist/js/uikit'; import { _ } from 'svelte-i18n'; import { randomStr } from './utils'; - import Analytics from './components/analytics.svelte'; + import Analytics from './analytics.svelte'; import Page from './components/index.svelte'; import { environment, isProduction } from './settings'; import './app.scss'; let header; + let roomId: string; - const getRoomId = function () { - return document.location.hash?.slice(1).toLowerCase(); + const testPrefix = 'test_'; + const syncHashAndRoomId = function () { + let hash = document.location.hash?.slice(1).toLowerCase() || localStorage.getItem('roomId') || randomStr(6); + if (!isProduction && !hash?.startsWith(testPrefix)) { + hash = `${testPrefix}${hash}`; + } + localStorage.setItem('roomId', hash); + roomId = hash; + document.location.hash = `#${hash}`; }; - let roomId = getRoomId(); - if (!roomId) { - document.location.hash = `#${localStorage.getItem('roomId') || randomStr(6)}`; - } - - $: roomId && localStorage.setItem('roomId', roomId); - - const onHashChanged = function () { - roomId = getRoomId(); - }; + syncHashAndRoomId(); - + {#if !isProduction} - + Running in non-production environment: environment="{ environment }", isProd={ isProduction } {/if} diff --git a/src/components/analytics.svelte b/src/analytics.svelte similarity index 88% rename from src/components/analytics.svelte rename to src/analytics.svelte index 330da94..fb398c5 100644 --- a/src/components/analytics.svelte +++ b/src/analytics.svelte @@ -1,6 +1,6 @@ + $: isLoading = !room || isRoomLoading || isTimeLoading; +
{#if isLoading} @@ -124,11 +118,12 @@

๐Ÿฟ { $_('selectVideo.title') }

- +

๐Ÿ‘ฅ { $_('invite.title') }

- + +
diff --git a/src/components/users/index.svelte b/src/components/users/index.svelte new file mode 100644 index 0000000..6eb7e96 --- /dev/null +++ b/src/components/users/index.svelte @@ -0,0 +1,26 @@ + + +
+ + {#each users as user (user.id)} + {#if $myNameStore !== user} + + {/if} + {/each} +
+ + diff --git a/src/components/users/user.svelte b/src/components/users/user.svelte new file mode 100644 index 0000000..07bf528 --- /dev/null +++ b/src/components/users/user.svelte @@ -0,0 +1,66 @@ + + +
+
+ { user.name.slice(0, maxLength) } +
+ + {#if me} + { $_('users.nameEdit') } + {:else} + online + {/if} + +
+ + \ No newline at end of file diff --git a/src/components/video-player/index.svelte b/src/components/video-player/index.svelte index 7464f8f..4939414 100644 --- a/src/components/video-player/index.svelte +++ b/src/components/video-player/index.svelte @@ -57,7 +57,7 @@ } catch { let url = link.url; if (isHls) { - url = `${proxies.hlsUrl}/${btoa(link.url) }.m3u8`; + url = `${proxies.hlsUrl}/${btoa(link.url)}.m3u8`; } else { url = `${proxies.regularUrl}?url=${link.url}`; } diff --git a/src/components/video-selector-btn.svelte b/src/components/video-selector-btn.svelte index b50de46..20117ef 100644 --- a/src/components/video-selector-btn.svelte +++ b/src/components/video-selector-btn.svelte @@ -1,9 +1,9 @@