Upload files to 'src/renderer/patches'
parent
393cad7ce1
commit
55c77395bb
|
@ -0,0 +1,69 @@
|
||||||
|
/*
|
||||||
|
* SPDX-License-Identifier: GPL-3.0
|
||||||
|
* Aerocord, a vesktop fork for older microsoft NT releases such as NT 6.0, 6.1, 6.2 and 6.3.
|
||||||
|
* Credits to vendicated and the rest of the vesktop contribuitors for making Vesktop!
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { Logger } from "@vencord/types/utils";
|
||||||
|
import { currentSettings } from "renderer/components/ScreenSharePicker";
|
||||||
|
import { isLinux } from "renderer/utils";
|
||||||
|
|
||||||
|
const logger = new Logger("VesktopStreamFixes");
|
||||||
|
|
||||||
|
if (isLinux) {
|
||||||
|
const original = navigator.mediaDevices.getDisplayMedia;
|
||||||
|
|
||||||
|
async function getVirtmic() {
|
||||||
|
try {
|
||||||
|
const devices = await navigator.mediaDevices.enumerateDevices();
|
||||||
|
const audioDevice = devices.find(({ label }) => label === "vencord-screen-share");
|
||||||
|
return audioDevice?.deviceId;
|
||||||
|
} catch (error) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
navigator.mediaDevices.getDisplayMedia = async function (opts) {
|
||||||
|
const stream = await original.call(this, opts);
|
||||||
|
const id = await getVirtmic();
|
||||||
|
|
||||||
|
const frameRate = Number(currentSettings?.fps);
|
||||||
|
const height = Number(currentSettings?.resolution);
|
||||||
|
const width = Math.round(height * (16 / 9));
|
||||||
|
const track = stream.getVideoTracks()[0];
|
||||||
|
|
||||||
|
track.contentHint = String(currentSettings?.contentHint);
|
||||||
|
|
||||||
|
const constraints = {
|
||||||
|
...track.getConstraints(),
|
||||||
|
frameRate,
|
||||||
|
width: { min: 640, ideal: width, max: width },
|
||||||
|
height: { min: 480, ideal: height, max: height },
|
||||||
|
advanced: [{ width: width, height: height }],
|
||||||
|
resizeMode: "none"
|
||||||
|
};
|
||||||
|
|
||||||
|
track
|
||||||
|
.applyConstraints(constraints)
|
||||||
|
.then(() => {
|
||||||
|
logger.info("Applied constraints successfully. New constraints: ", track.getConstraints());
|
||||||
|
})
|
||||||
|
.catch(e => logger.error("Failed to apply constraints.", e));
|
||||||
|
|
||||||
|
if (id) {
|
||||||
|
const audio = await navigator.mediaDevices.getUserMedia({
|
||||||
|
audio: {
|
||||||
|
deviceId: {
|
||||||
|
exact: id
|
||||||
|
},
|
||||||
|
autoGainControl: false,
|
||||||
|
echoCancellation: false,
|
||||||
|
noiseSuppression: false
|
||||||
|
}
|
||||||
|
});
|
||||||
|
audio.getAudioTracks().forEach(t => stream.addTrack(t));
|
||||||
|
}
|
||||||
|
|
||||||
|
return stream;
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
/*
|
||||||
|
* SPDX-License-Identifier: GPL-3.0
|
||||||
|
* Aerocord, a vesktop fork for older microsoft NT releases such as NT 6.0, 6.1, 6.2 and 6.3.
|
||||||
|
* Credits to vendicated and the rest of the vesktop contribuitors for making Vesktop!
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { Patch } from "@vencord/types/utils/types";
|
||||||
|
|
||||||
|
window.VCDP = {};
|
||||||
|
|
||||||
|
interface PatchData {
|
||||||
|
patches: Omit<Patch, "plugin">[];
|
||||||
|
[key: string]: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function addPatch<P extends PatchData>(p: P) {
|
||||||
|
const { patches, ...globals } = p;
|
||||||
|
|
||||||
|
for (const patch of patches as Patch[]) {
|
||||||
|
if (!Array.isArray(patch.replacement)) patch.replacement = [patch.replacement];
|
||||||
|
for (const r of patch.replacement) {
|
||||||
|
if (typeof r.replace === "string") r.replace = r.replace.replaceAll("$self", "VCDP");
|
||||||
|
}
|
||||||
|
|
||||||
|
patch.plugin = "Vesktop";
|
||||||
|
Vencord.Plugins.patches.push(patch);
|
||||||
|
}
|
||||||
|
|
||||||
|
Object.assign(VCDP, globals);
|
||||||
|
}
|
|
@ -0,0 +1,82 @@
|
||||||
|
/*
|
||||||
|
* SPDX-License-Identifier: GPL-3.0
|
||||||
|
* Aerocord, a vesktop fork for older microsoft NT releases such as NT 6.0, 6.1, 6.2 and 6.3.
|
||||||
|
* Credits to vendicated and the rest of the vesktop contribuitors for making Vesktop!
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { addContextMenuPatch } from "@vencord/types/api/ContextMenu";
|
||||||
|
import { findStoreLazy } from "@vencord/types/webpack";
|
||||||
|
import { FluxDispatcher, Menu, useStateFromStores } from "@vencord/types/webpack/common";
|
||||||
|
|
||||||
|
import { addPatch } from "./shared";
|
||||||
|
|
||||||
|
let word: string;
|
||||||
|
let corrections: string[];
|
||||||
|
|
||||||
|
const SpellCheckStore = findStoreLazy("SpellcheckStore");
|
||||||
|
|
||||||
|
// Make spellcheck suggestions work
|
||||||
|
addPatch({
|
||||||
|
patches: [
|
||||||
|
{
|
||||||
|
find: ".enableSpellCheck)",
|
||||||
|
replacement: {
|
||||||
|
// if (isDesktop) { DiscordNative.onSpellcheck(openMenu(props)) } else { e.preventDefault(); openMenu(props) }
|
||||||
|
match: /else (.{1,3})\.preventDefault\(\),(.{1,3}\(.{1,3}\))(?<=:(.{1,3})\.enableSpellCheck\).+?)/,
|
||||||
|
// ... else { $self.onSlateContext(() => openMenu(props)) }
|
||||||
|
replace: "else {$self.onSlateContext($1, $3?.enableSpellCheck, () => $2)}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
|
||||||
|
onSlateContext(e: MouseEvent, hasSpellcheck: boolean | undefined, openMenu: () => void) {
|
||||||
|
if (!hasSpellcheck) {
|
||||||
|
e.preventDefault();
|
||||||
|
openMenu();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const cb = (w: string, c: string[]) => {
|
||||||
|
VesktopNative.spellcheck.offSpellcheckResult(cb);
|
||||||
|
word = w;
|
||||||
|
corrections = c;
|
||||||
|
openMenu();
|
||||||
|
};
|
||||||
|
VesktopNative.spellcheck.onSpellcheckResult(cb);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
addContextMenuPatch("textarea-context", children => {
|
||||||
|
const spellCheckEnabled = useStateFromStores([SpellCheckStore], () => SpellCheckStore.isEnabled());
|
||||||
|
const hasCorrections = Boolean(word && corrections?.length);
|
||||||
|
|
||||||
|
children.push(
|
||||||
|
<Menu.MenuGroup>
|
||||||
|
{hasCorrections && (
|
||||||
|
<>
|
||||||
|
{corrections.map(c => (
|
||||||
|
<Menu.MenuItem
|
||||||
|
id={"vcd-spellcheck-suggestion-" + c}
|
||||||
|
label={c}
|
||||||
|
action={() => VesktopNative.spellcheck.replaceMisspelling(c)}
|
||||||
|
/>
|
||||||
|
))}
|
||||||
|
<Menu.MenuSeparator />
|
||||||
|
<Menu.MenuItem
|
||||||
|
id="vcd-spellcheck-learn"
|
||||||
|
label={`Add ${word} to dictionary`}
|
||||||
|
action={() => VesktopNative.spellcheck.addToDictionary(word)}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
<Menu.MenuCheckboxItem
|
||||||
|
id="vcd-spellcheck-enabled"
|
||||||
|
label="Enable Spellcheck"
|
||||||
|
checked={spellCheckEnabled}
|
||||||
|
action={() => {
|
||||||
|
FluxDispatcher.dispatch({ type: "SPELLCHECK_TOGGLE" });
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Menu.MenuGroup>
|
||||||
|
);
|
||||||
|
});
|
|
@ -0,0 +1,30 @@
|
||||||
|
/*
|
||||||
|
* SPDX-License-Identifier: GPL-3.0
|
||||||
|
* Aerocord, a vesktop fork for older microsoft NT releases such as NT 6.0, 6.1, 6.2 and 6.3.
|
||||||
|
* Credits to vendicated and the rest of the vesktop contribuitors for making Vesktop!
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { Settings } from "renderer/settings";
|
||||||
|
|
||||||
|
import { addPatch } from "./shared";
|
||||||
|
|
||||||
|
if (Settings.store.customTitleBar)
|
||||||
|
addPatch({
|
||||||
|
patches: [
|
||||||
|
{
|
||||||
|
find: ".wordmarkWindows",
|
||||||
|
replacement: [
|
||||||
|
{
|
||||||
|
// TODO: Fix eslint rule
|
||||||
|
// eslint-disable-next-line no-useless-escape
|
||||||
|
match: /case \i\.\i\.WINDOWS:/,
|
||||||
|
replace: 'case "WEB":'
|
||||||
|
},
|
||||||
|
...["close", "minimize", "maximize"].map(op => ({
|
||||||
|
match: new RegExp(String.raw`\i\.\i\.${op}\b`),
|
||||||
|
replace: `VesktopNative.win.${op}`
|
||||||
|
}))
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
Loading…
Reference in New Issue