From d4c13dd4c3ba37a0e8cb94835ebb03621df45186 Mon Sep 17 00:00:00 2001 From: WardPearce Date: Tue, 3 Mar 2026 20:00:59 +1300 Subject: [PATCH] Removed legacy peerjs sync party --- README.md | 1 - materialious/package-lock.json | 67 ----- materialious/package.json | 1 - .../src/lib/components/SyncParty.svelte | 236 ------------------ .../thumbnail/VideoThumbnail.svelte | 27 +- materialious/src/lib/misc.ts | 43 +--- materialious/src/lib/player/index.ts | 26 +- materialious/src/lib/store.ts | 5 - materialious/src/routes/(app)/+layout.svelte | 7 - .../routes/(app)/watch/[slug]/+page.svelte | 141 ----------- 10 files changed, 3 insertions(+), 551 deletions(-) delete mode 100644 materialious/src/lib/components/SyncParty.svelte diff --git a/README.md b/README.md index e9785795..cc239386 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,6 @@ - Android TV support. - Support for disabling certificate validation for homelab users. - Sync your watch progress between Invidious sessions. -- Watch sync parties. - Sponsorblock built-in. - [Return YouTube Dislike](https://github.com/Anarios/return-youtube-dislike) (RYD) built-in. - [DeArrow](https://github.com/ajayyy/DeArrow) built-in. diff --git a/materialious/package-lock.json b/materialious/package-lock.json index 21dc9665..b0198d44 100644 --- a/materialious/package-lock.json +++ b/materialious/package-lock.json @@ -47,7 +47,6 @@ "melt": "^0.44.0", "mousetrap": "^1.6.5", "mysql2": "^3.18.2", - "peerjs": "^1.5.5", "pg": "^8.19.0", "pg-hstore": "^2.3.4", "sequelize": "^6.37.7", @@ -3529,15 +3528,6 @@ "integrity": "sha512-ztmtTd6xwnuh2/xu+Vb01btgV8SQWYCaK56CkRK8gEkWe5TuDyBcYJ0wgkMRn+2VcE9KUmhvkz+N9GHrqw/C0g==", "license": "Apache-2.0" }, - "node_modules/@msgpack/msgpack": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@msgpack/msgpack/-/msgpack-2.8.0.tgz", - "integrity": "sha512-h9u4u/jiIRKbq25PM+zymTyW6bhTzELvOoUd+AvYriWOAKpLGnIamaET3pnHYoI5iYphAHBI4ayx0MehR+VVPQ==", - "license": "ISC", - "engines": { - "node": ">= 10" - } - }, "node_modules/@noble/hashes": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", @@ -8070,12 +8060,6 @@ "node": ">=0.10.0" } }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "license": "MIT" - }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", @@ -12107,38 +12091,6 @@ "node": ">=4" } }, - "node_modules/peerjs": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/peerjs/-/peerjs-1.5.5.tgz", - "integrity": "sha512-viMUCPDL6CSfOu0ZqVcFqbWRXNHIbv2lPqNbrBIjbFYrflebOjItJ4hPfhjnuUCstqciHVu9vVJ7jFqqKi/EuQ==", - "license": "MIT", - "dependencies": { - "@msgpack/msgpack": "^2.8.0", - "eventemitter3": "^4.0.7", - "peerjs-js-binarypack": "^2.1.0", - "webrtc-adapter": "^9.0.0" - }, - "engines": { - "node": ">= 14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/peer" - } - }, - "node_modules/peerjs-js-binarypack": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/peerjs-js-binarypack/-/peerjs-js-binarypack-2.1.0.tgz", - "integrity": "sha512-YIwCC+pTzp3Bi8jPI9UFKO0t0SLo6xALnHkiNt/iUFmUUZG0fEEmEyFKvjsDKweiFitzHRyhuh6NvyJZ4nNxMg==", - "license": "MIT", - "engines": { - "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/peer" - } - }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -13664,12 +13616,6 @@ "node": ">=v12.22.7" } }, - "node_modules/sdp": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/sdp/-/sdp-3.2.1.tgz", - "integrity": "sha512-lwsAIzOPlH8/7IIjjz3K0zYBk7aBVVcvjMwt3M4fLxpjMYyy7i3I97SLHebgn4YBjirkzfp3RvRDWSKsh/+WFw==", - "license": "MIT" - }, "node_modules/semver": { "version": "7.7.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", @@ -15763,19 +15709,6 @@ "dev": true, "license": "BSD-2-Clause" }, - "node_modules/webrtc-adapter": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-9.0.3.tgz", - "integrity": "sha512-5fALBcroIl31OeXAdd1YUntxiZl1eHlZZWzNg3U4Fn+J9/cGL3eT80YlrsWGvj2ojuz1rZr2OXkgCzIxAZ7vRQ==", - "license": "BSD-3-Clause", - "dependencies": { - "sdp": "^3.2.0" - }, - "engines": { - "node": ">=6.0.0", - "npm": ">=3.10.0" - } - }, "node_modules/whatwg-mimetype": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-5.0.0.tgz", diff --git a/materialious/package.json b/materialious/package.json index 86840c54..0878c0ce 100644 --- a/materialious/package.json +++ b/materialious/package.json @@ -85,7 +85,6 @@ "melt": "^0.44.0", "mousetrap": "^1.6.5", "mysql2": "^3.18.2", - "peerjs": "^1.5.5", "pg": "^8.19.0", "pg-hstore": "^2.3.4", "sequelize": "^6.37.7", diff --git a/materialious/src/lib/components/SyncParty.svelte b/materialious/src/lib/components/SyncParty.svelte deleted file mode 100644 index 11aff461..00000000 --- a/materialious/src/lib/components/SyncParty.svelte +++ /dev/null @@ -1,236 +0,0 @@ - - - -
{$_('layout.syncParty')}
-

{$_('layout.syncPartyWarning')}

- {#if $syncPartyPeerStore} - - {/if} -
- - - - {#if !$syncPartyPeerStore} -
-
-
-
{$_('layout.joinSyncParty')}
-
{ - event.preventDefault(); - - try { - await joinSyncParty(new URL(syncPartyManualInput).searchParams.get('sync') || ''); - } catch { - // Continue regardless of error - } - }} - > -
- - -
-
- {/if} -
diff --git a/materialious/src/lib/components/thumbnail/VideoThumbnail.svelte b/materialious/src/lib/components/thumbnail/VideoThumbnail.svelte index 4ef87838..080ba78d 100644 --- a/materialious/src/lib/components/thumbnail/VideoThumbnail.svelte +++ b/materialious/src/lib/components/thumbnail/VideoThumbnail.svelte @@ -15,15 +15,12 @@ VideoBase, VideoWatchHistory } from '$lib/api/model'; - import type { PlayerEvents } from '$lib/player'; import { deArrowEnabledStore, isAndroidTvStore, playerSavePlaybackPositionStore, playerState, - rawMasterKeyStore, - syncPartyConnectionsStore, - syncPartyPeerStore + rawMasterKeyStore } from '$lib/store'; import { relativeTimestamp } from '$lib/time'; import { queueGetWatchHistory } from '$lib/api/backend/historyPool'; @@ -49,12 +46,6 @@ let beenWatched: boolean = $state(false); - syncPartyPeerStore.subscribe((peer) => { - if (peer) { - watchUrl.searchParams.set('sync', peer.id); - } - }); - let progress: string | undefined = $state(); if (get(playerSavePlaybackPositionStore)) { try { @@ -136,22 +127,6 @@ function onVideoSelected() { playerState.set(undefined); - - if ($syncPartyConnectionsStore) { - const events = { - events: [{ type: 'change-video', videoId: video.videoId }] - } as PlayerEvents; - - if (playlistId) { - events.events.unshift({ - type: 'playlist', - playlistId: playlistId - }); - } - $syncPartyConnectionsStore.forEach((conn) => { - conn.send(events); - }); - } } diff --git a/materialious/src/lib/misc.ts b/materialious/src/lib/misc.ts index 6af2c587..e5aa9b91 100644 --- a/materialious/src/lib/misc.ts +++ b/materialious/src/lib/misc.ts @@ -1,7 +1,6 @@ -import { goto, pushState } from '$app/navigation'; +import { goto } from '$app/navigation'; import { resolve } from '$app/paths'; import he from 'he'; -import type Peer from 'peerjs'; import { get } from 'svelte/store'; import { env } from '$env/dynamic/public'; import { @@ -11,7 +10,6 @@ import { feedCacheStore, invidiousInstanceStore, interfaceAndroidUseNativeShare, - isAndroidTvStore, playlistCacheStore, rawMasterKeyStore, searchCacheStore @@ -26,7 +24,6 @@ import type { VideoBase, VideoWatchHistory } from './api/model'; -import { page } from '$app/state'; import { Capacitor } from '@capacitor/core'; import { Share } from '@capacitor/share'; import { Clipboard } from '@capacitor/clipboard'; @@ -68,44 +65,6 @@ export function unsafeRandomItem(array: any[]): any { return array[Math.floor(Math.random() * array.length)]; } -export function setWindowQueryFlag(key: string, value: string) { - page.url.searchParams.set(key, value); - // eslint-disable-next-line svelte/no-navigation-without-resolve - pushState(page.url, page.state); -} - -export function removeWindowQueryFlag(key: string) { - page.url.searchParams.delete(key); - // eslint-disable-next-line svelte/no-navigation-without-resolve - pushState(page.url, page.state); -} - -let PeerInstance: typeof Peer; -export interface PeerInstance { - host: string; - path: string; - port: number; -} - -export function determinePeerJsInstance(): PeerInstance { - return { - host: getPublicEnv('DEFAULT_PEERJS_HOST') || '0.peerjs.com', - path: getPublicEnv('DEFAULT_PEERJS_PATH') || '/', - port: getPublicEnv('DEFAULT_PEERJS_PORT') ? Number(getPublicEnv('DEFAULT_PEERJS_PORT')) : 443 - }; -} - -export async function peerJs( - id: string, - instance: PeerInstance = determinePeerJsInstance() -): Promise { - // https://github.com/peers/peerjs/issues/819 - if (typeof PeerInstance === 'undefined') { - PeerInstance = (await import('peerjs')).Peer; - } - return new PeerInstance(id, instance); -} - export async function shareURL(url: string) { if ( Capacitor.getPlatform() === 'android' && diff --git a/materialious/src/lib/player/index.ts b/materialious/src/lib/player/index.ts index 3f8d687d..86ff9361 100644 --- a/materialious/src/lib/player/index.ts +++ b/materialious/src/lib/player/index.ts @@ -7,8 +7,7 @@ import { playerDefaultQualityStore, playerPlaylistHistory, playerState, - playlistSettingsStore, - syncPartyConnectionsStore + playlistSettingsStore } from '$lib/store'; import { goto } from '$app/navigation'; import { resolve } from '$app/paths'; @@ -17,18 +16,6 @@ import { unsafeRandomItem } from '$lib/misc'; import type shaka from 'shaka-player/dist/shaka-player.ui'; import ISO6391 from 'iso-639-1'; -export interface PlayerEvent { - type: 'pause' | 'seek' | 'change-video' | 'play' | 'playlist' | 'goto'; - path?: string; - time?: number; - videoId?: string; - playlistId?: string; -} - -export interface PlayerEvents { - events: PlayerEvent[]; -} - export const playbackRates = [ 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 2.25, 2.5, 2.75, 3, 3.25, 3.5, 3.75, 4 ]; @@ -92,17 +79,6 @@ export async function goToNextVideo(video: VideoPlay, playlistId: string | null) } if (typeof goToVideo !== 'undefined') { - get(syncPartyConnectionsStore)?.forEach((conn) => { - if (typeof goToVideo === 'undefined') return; - - conn.send({ - events: [ - { type: 'change-video', videoId: goToVideo.videoId }, - { type: 'playlist', playlistId: playlistId } - ] - } as PlayerEvents); - }); - goto( resolve(`/${isAndroidTv ? 'tv' : 'watch'}/[videoId]?playlist=${playlistId}`, { videoId: goToVideo.videoId diff --git a/materialious/src/lib/store.ts b/materialious/src/lib/store.ts index 6383971d..0000eed1 100644 --- a/materialious/src/lib/store.ts +++ b/materialious/src/lib/store.ts @@ -1,6 +1,4 @@ import { Capacitor } from '@capacitor/core'; -import type Peer from 'peerjs'; -import type { DataConnection } from 'peerjs'; import { writable, type Writable } from 'svelte/store'; import { Preferences } from '@capacitor/preferences'; import { @@ -330,9 +328,6 @@ export const watchHistoryEnabledStore: Writable = persist( 'watchHistoryEnabled' ); -export const syncPartyPeerStore: Writable = writable(null); -export const syncPartyConnectionsStore: Writable = writable(); - export const playlistSettingsStore: Writable> = writable({}); diff --git a/materialious/src/routes/(app)/+layout.svelte b/materialious/src/routes/(app)/+layout.svelte index 5ae34e4a..f6fa82d2 100644 --- a/materialious/src/routes/(app)/+layout.svelte +++ b/materialious/src/routes/(app)/+layout.svelte @@ -9,7 +9,6 @@ import PageLoading from '$lib/components/PageLoading.svelte'; import Search from '$lib/components/Search.svelte'; import Settings from '$lib/components/settings/Settings.svelte'; - import SyncParty from '$lib/components/SyncParty.svelte'; import Thumbnail from '$lib/components/thumbnail/VideoThumbnail.svelte'; import Player from '$lib/components/player/Player.svelte'; import { getPages } from '$lib/navPages'; @@ -21,7 +20,6 @@ playerState, playertheatreModeIsActive, rawMasterKeyStore, - syncPartyPeerStore, themeColorStore, backendInUseStore, hideSearchStore @@ -252,10 +250,6 @@ (mobileSearchShow = false)} /> {:else} - {#if $invidiousAuthStore && !isYTBackend()}