chore: pause media when launcher is hidden
This commit is contained in:
+29
-17
@@ -106,20 +106,19 @@ export function toURL(data: Buffer, type: string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function setGlobalVolume(volume: number) {
|
export function setGlobalVolume(volume: number) {
|
||||||
const audioElements = document.querySelectorAll('audio');
|
const mediaElements: NodeListOf<HTMLMediaElement> = document.querySelectorAll('audio, video');
|
||||||
audioElements.forEach((audio) => {
|
mediaElements.forEach((element) => {
|
||||||
audio.volume = volume;
|
element.volume = volume;
|
||||||
});
|
|
||||||
|
|
||||||
const videoElements = document.querySelectorAll('video');
|
|
||||||
videoElements.forEach((video) => {
|
|
||||||
video.volume = volume;
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export function fadeGlobalVolume(volumeFrom: number, volumeTo: number, duration: number) {
|
export function fadeGlobalVolume(
|
||||||
const audioElements = document.querySelectorAll('audio');
|
volumeFrom: number,
|
||||||
const videoElements = document.querySelectorAll('video');
|
volumeTo: number,
|
||||||
|
duration: number,
|
||||||
|
onDone?: () => void
|
||||||
|
) {
|
||||||
|
const mediaElements: NodeListOf<HTMLMediaElement> = document.querySelectorAll('audio, video');
|
||||||
|
|
||||||
const startTime = performance.now();
|
const startTime = performance.now();
|
||||||
|
|
||||||
@@ -130,22 +129,35 @@ export function fadeGlobalVolume(volumeFrom: number, volumeTo: number, duration:
|
|||||||
|
|
||||||
const interpolatedVolume = volumeFrom + (volumeTo - volumeFrom) * progress;
|
const interpolatedVolume = volumeFrom + (volumeTo - volumeFrom) * progress;
|
||||||
|
|
||||||
audioElements.forEach((audio) => {
|
mediaElements.forEach((element) => {
|
||||||
audio.volume = interpolatedVolume;
|
element.volume = interpolatedVolume;
|
||||||
});
|
|
||||||
|
|
||||||
videoElements.forEach((video) => {
|
|
||||||
video.volume = interpolatedVolume;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if (progress < 1) {
|
if (progress < 1) {
|
||||||
requestAnimationFrame(animate);
|
requestAnimationFrame(animate);
|
||||||
|
} else {
|
||||||
|
if (onDone) onDone();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
animate();
|
animate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const pauseGlobalMedia = () => {
|
||||||
|
const mediaElements: NodeListOf<HTMLMediaElement> = document.querySelectorAll('audio, video');
|
||||||
|
mediaElements.forEach((element) => element.pause());
|
||||||
|
};
|
||||||
|
|
||||||
|
export const resumeGlobalMedia = () => {
|
||||||
|
const mediaElements: NodeListOf<HTMLMediaElement> = document.querySelectorAll('audio, video');
|
||||||
|
mediaElements.forEach((element) => element.play());
|
||||||
|
};
|
||||||
|
|
||||||
|
export const setCurrentTimeGlobalMedia = (time: number) => {
|
||||||
|
const mediaElements: NodeListOf<HTMLMediaElement> = document.querySelectorAll('audio, video');
|
||||||
|
mediaElements.forEach((element) => (element.currentTime = time));
|
||||||
|
};
|
||||||
|
|
||||||
export function trackMediaContainer(node: HTMLElement) {
|
export function trackMediaContainer(node: HTMLElement) {
|
||||||
const media = new Set<HTMLMediaElement>();
|
const media = new Set<HTMLMediaElement>();
|
||||||
|
|
||||||
|
|||||||
@@ -56,7 +56,10 @@
|
|||||||
formatBytes,
|
formatBytes,
|
||||||
numberHumanReadable,
|
numberHumanReadable,
|
||||||
openURL,
|
openURL,
|
||||||
|
pauseGlobalMedia,
|
||||||
releaseStreamToReadable,
|
releaseStreamToReadable,
|
||||||
|
resumeGlobalMedia,
|
||||||
|
setCurrentTimeGlobalMedia,
|
||||||
urlIsValidImage,
|
urlIsValidImage,
|
||||||
} from '@/utils';
|
} from '@/utils';
|
||||||
import { fade, fly } from 'svelte/transition';
|
import { fade, fly } from 'svelte/transition';
|
||||||
@@ -445,7 +448,7 @@
|
|||||||
await new Promise((res) => setTimeout(res, 1500));
|
await new Promise((res) => setTimeout(res, 1500));
|
||||||
launchInfo = 'Launching osu!...';
|
launchInfo = 'Launching osu!...';
|
||||||
|
|
||||||
fadeGlobalVolume($custom_theme_volume, 0, 2000);
|
fadeGlobalVolume($custom_theme_volume, 0, 2000, pauseGlobalMedia);
|
||||||
|
|
||||||
await replaceUIFiles(osuPath, false);
|
await replaceUIFiles(osuPath, false);
|
||||||
await new Promise((res) => setTimeout(res, 1000));
|
await new Promise((res) => setTimeout(res, 1000));
|
||||||
@@ -557,6 +560,8 @@
|
|||||||
cleanup = true;
|
cleanup = true;
|
||||||
launchInfo = 'Cleaning up...';
|
launchInfo = 'Cleaning up...';
|
||||||
|
|
||||||
|
setCurrentTimeGlobalMedia(0);
|
||||||
|
resumeGlobalMedia();
|
||||||
fadeGlobalVolume(0, $custom_theme_volume, 2000);
|
fadeGlobalVolume(0, $custom_theme_volume, 2000);
|
||||||
|
|
||||||
await getCurrentWindow().show();
|
await getCurrentWindow().show();
|
||||||
|
|||||||
Reference in New Issue
Block a user