From 2893466ba9b7cbc22c86537d7794da87a16b421e Mon Sep 17 00:00:00 2001 From: thororen1234 <78185467+thororen1234@users.noreply.github.com> Date: Mon, 7 Apr 2025 09:38:24 -0400 Subject: [PATCH] Update InstantScreenshare --- .../instantScreenshare/index.tsx | 43 ++++++++++++++++--- .../spotifyControls/PlayerComponent.tsx | 1 + src/plugins/spotifyControls/index.tsx | 4 +- src/plugins/spotifyControls/spotifyStyles.css | 13 +++--- .../visualRefreshSpotifyStyles.css | 21 +++++---- 5 files changed, 60 insertions(+), 22 deletions(-) diff --git a/src/equicordplugins/instantScreenshare/index.tsx b/src/equicordplugins/instantScreenshare/index.tsx index 0b95c0ff..467a66b0 100644 --- a/src/equicordplugins/instantScreenshare/index.tsx +++ b/src/equicordplugins/instantScreenshare/index.tsx @@ -4,13 +4,34 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ +import { definePluginSettings } from "@api/Settings"; import { Devs, EquicordDevs } from "@utils/constants"; -import definePlugin from "@utils/types"; +import definePlugin, { OptionType } from "@utils/types"; import { findByCode, findByProps } from "@webpack"; import { ChannelStore, SelectedChannelStore, UserStore } from "@webpack/common"; import { VoiceState } from "@webpack/types"; -let hasStreamed = false; +const settings = definePluginSettings({ + streamType: { + description: "Stream screen or window", + type: OptionType.SELECT, + options: [ + { label: "Screen", value: "screen" }, + { label: "Window", value: "window" } + ], + default: "screen" + }, + streamWindowKeyword: { + description: "Keyword to search for in window title", + type: OptionType.STRING, + default: "", + placeholder: "Enter keyword" + } +}); + +let hasStreamed; +let sources; +let source; async function startStream() { const startStream = findByCode('type:"STREAM_START"'); @@ -19,9 +40,18 @@ async function startStream() { const selected = SelectedChannelStore.getVoiceChannelId(); if (!selected) return; const channel = ChannelStore.getChannel(selected); - const sources = await getDesktopSources(mediaEngine, ["screen"], null); - if (!sources || sources.length === 0) return; - const source = sources[0]; + + if (settings.store.streamType === "screen") { + sources = await getDesktopSources(mediaEngine, ["screen"], null); + source = sources[0]; + } else if (settings.store.streamType === "window") { + const keyword = settings.store.streamWindowKeyword?.toLowerCase(); + sources = await getDesktopSources(mediaEngine, ["window", "application"], null); + source = sources.find(s => s.name?.toLowerCase().includes(keyword)); + } + + if (!source) return; + startStream(channel.guild_id, selected, { "pid": null, "sourceId": source.id, @@ -34,8 +64,9 @@ async function startStream() { export default definePlugin({ name: "InstantScreenshare", - description: "Instantly screenshare your first screen when joining a voice channel", + description: "Instantly screenshare when joining a voice channel", authors: [Devs.HAHALOSAH, EquicordDevs.thororen], + settings, flux: { async VOICE_STATE_UPDATES({ voiceStates }: { voiceStates: VoiceState[]; }) { const myId = UserStore.getCurrentUser().id; diff --git a/src/plugins/spotifyControls/PlayerComponent.tsx b/src/plugins/spotifyControls/PlayerComponent.tsx index 4184931f..468061c8 100644 --- a/src/plugins/spotifyControls/PlayerComponent.tsx +++ b/src/plugins/spotifyControls/PlayerComponent.tsx @@ -191,6 +191,7 @@ function SeekBar() { {msToHuman(position)} (
-

Failed to render Spotify Modal

-

Check the console for errors

+

Failed to render Spotify Modal :(

+

Check the console for errors

)} > diff --git a/src/plugins/spotifyControls/spotifyStyles.css b/src/plugins/spotifyControls/spotifyStyles.css index 1a6ea950..6e207738 100644 --- a/src/plugins/spotifyControls/spotifyStyles.css +++ b/src/plugins/spotifyControls/spotifyStyles.css @@ -1,9 +1,10 @@ - #vc-spotify-player { padding: 0.375rem 0.5rem; border-bottom: 1px solid var(--background-modifier-accent); - --vc-spotify-green: var(--spotify, #1db954); /* so custom themes can easily change it */ + --vc-spotify-green: var(--spotify, #1db954); + + /* so custom themes can easily change it */ --vc-spotify-green-90: color-mix(in hsl, var(--vc-spotify-green), transparent 90%); --vc-spotify-green-80: color-mix(in hsl, var(--vc-spotify-green), transparent 80%); } @@ -150,17 +151,17 @@ margin-bottom: 5px; } -#vc-spotify-progress-bar > [class^="slider"] { +#vc-spotify-progress-bar>[class^="slider"] { flex-grow: 1; width: 100%; padding: 0 !important; } -#vc-spotify-progress-bar > [class^="slider"] [class^="bar-"] { +#vc-spotify-progress-bar>[class^="slider"] [class^="bar-"] { height: 4px !important; } -#vc-spotify-progress-bar > [class^="slider"] [class^="grabber"] { +#vc-spotify-progress-bar>[class^="slider"] [class^="grabber"] { /* these importants are necessary, it applies a width and height through inline styles */ height: 10px !important; width: 10px !important; @@ -172,7 +173,7 @@ transition: opacity 0.1s; } -#vc-spotify-progress-bar:hover > [class^="slider"] [class^="grabber"] { +#vc-spotify-progress-bar:hover>[class^="slider"] [class^="grabber"] { opacity: 1; } diff --git a/src/plugins/spotifyControls/visualRefreshSpotifyStyles.css b/src/plugins/spotifyControls/visualRefreshSpotifyStyles.css index 3a140a17..c0b92c65 100644 --- a/src/plugins/spotifyControls/visualRefreshSpotifyStyles.css +++ b/src/plugins/spotifyControls/visualRefreshSpotifyStyles.css @@ -12,7 +12,8 @@ display: none; } - .vc-spotify-artist, .vc-spotify-album { + .vc-spotify-artist, + .vc-spotify-album { color: var(--header-primary); } @@ -26,26 +27,26 @@ width: 100%; } - #vc-spotify-progress-bar > [class^="slider"] { + #vc-spotify-progress-bar>[class^="slider"] { flex-grow: 1; width: 100%; padding: 0 !important; } - #vc-spotify-progress-bar > [class^="slider"] [class^="bar"] { + #vc-spotify-progress-bar>[class^="slider"] [class^="bar"] { height: 3px !important; top: calc(12px - 4px / 2 + var(--bar-offset)); } - #vc-spotify-progress-bar > [class^="slider"] [class^="barFill"] { + #vc-spotify-progress-bar>[class^="slider"] [class^="barFill"] { background-color: var(--interactive-active); } - #vc-spotify-progress-bar > [class^="slider"]:hover [class^="barFill"] { + #vc-spotify-progress-bar>[class^="slider"]:hover [class^="barFill"] { background-color: var(--vc-spotify-green); } - #vc-spotify-progress-bar > [class^="slider"] [class^="grabber"] { + #vc-spotify-progress-bar>[class^="slider"] [class^="grabber"] { background-color: var(--interactive-active); width: 16px !important; height: 16px !important; @@ -67,11 +68,15 @@ border-radius: var(--radius-sm); } - .vc-spotify-repeat-context, .vc-spotify-repeat-track, .vc-spotify-shuffle-on { + .vc-spotify-repeat-context, + .vc-spotify-repeat-track, + .vc-spotify-shuffle-on { background-color: var(--vc-spotify-green-90); } - .vc-spotify-repeat-context:hover, .vc-spotify-repeat-track:hover, .vc-spotify-shuffle-on:hover { + .vc-spotify-repeat-context:hover, + .vc-spotify-repeat-track:hover, + .vc-spotify-shuffle-on:hover { background-color: var(--vc-spotify-green-80); } }