Merge remote-tracking branch 'upstream/dev' into dev

This commit is contained in:
thororen1234 2025-01-04 05:15:39 +00:00
commit fb0a73c4fe
5 changed files with 25 additions and 17 deletions

View file

@ -20,6 +20,7 @@ import { Devs } from "@utils/constants";
import { getCurrentChannel, getCurrentGuild } from "@utils/discord"; import { getCurrentChannel, getCurrentGuild } from "@utils/discord";
import { runtimeHashMessageKey } from "@utils/intlHash"; import { runtimeHashMessageKey } from "@utils/intlHash";
import { SYM_LAZY_CACHED, SYM_LAZY_GET } from "@utils/lazy"; import { SYM_LAZY_CACHED, SYM_LAZY_GET } from "@utils/lazy";
import { ModalAPI } from "@utils/modal";
import { relaunch } from "@utils/native"; import { relaunch } from "@utils/native";
import { canonicalizeMatch, canonicalizeReplace, canonicalizeReplacement } from "@utils/patches"; import { canonicalizeMatch, canonicalizeReplace, canonicalizeReplacement } from "@utils/patches";
import definePlugin, { PluginNative, StartAt } from "@utils/types"; import definePlugin, { PluginNative, StartAt } from "@utils/types";
@ -144,6 +145,8 @@ function makeShortcuts() {
me: { getter: () => Common.UserStore.getCurrentUser(), preload: false }, me: { getter: () => Common.UserStore.getCurrentUser(), preload: false },
meId: { getter: () => Common.UserStore.getCurrentUser().id, preload: false }, meId: { getter: () => Common.UserStore.getCurrentUser().id, preload: false },
messages: { getter: () => Common.MessageStore.getMessages(Common.SelectedChannelStore.getChannelId()), preload: false }, messages: { getter: () => Common.MessageStore.getMessages(Common.SelectedChannelStore.getChannelId()), preload: false },
openModal: { getter: () => ModalAPI.openModal },
openModalLazy: { getter: () => ModalAPI.openModalLazy },
Stores: { Stores: {
getter: () => Object.fromEntries( getter: () => Object.fromEntries(

View file

@ -30,13 +30,13 @@ export default definePlugin({
{ {
find: ".removeMosaicItemHoverButton),", find: ".removeMosaicItemHoverButton),",
replacement: { replacement: {
match: /\.nonMediaMosaicItem\]:.{0,40}children:\[(?<=showDownload:(\i).+?isVisualMediaType:(\i).+?)/, match: /\.nonMediaMosaicItem\]:.{0,40}children:\i.slice\(\i\)(?<=showDownload:(\i).+?isVisualMediaType:(\i).+?)/,
replace: "$&$1&&$2&&$self.renderPiPButton()," replace: (m, showDownload, isVisualMediaType) => `${m}.unshift(${showDownload}&&${isVisualMediaType}&&$self.PictureInPictureButton())`
} }
} }
], ],
renderPiPButton: ErrorBoundary.wrap(() => { PictureInPictureButton: ErrorBoundary.wrap(() => {
return ( return (
<Tooltip text="Toggle Picture in Picture"> <Tooltip text="Toggle Picture in Picture">
{tooltipProps => ( {tooltipProps => (

View file

@ -18,6 +18,7 @@
import "./spotifyStyles.css"; import "./spotifyStyles.css";
import { Settings } from "@api/Settings";
import { Flex } from "@components/Flex"; import { Flex } from "@components/Flex";
import { ImageIcon, LinkIcon, OpenExternalIcon } from "@components/Icons"; import { ImageIcon, LinkIcon, OpenExternalIcon } from "@components/Icons";
import { debounce } from "@shared/debounce"; import { debounce } from "@shared/debounce";
@ -130,7 +131,9 @@ function Controls() {
> >
<Shuffle /> <Shuffle />
</Button> </Button>
<Button onClick={() => SpotifyStore.prev()}> <Button onClick={() => {
Settings.plugins.SpotifyControls.previousButtonRestartsTrack && SpotifyStore.position > 3000 ? SpotifyStore.seek(0) : SpotifyStore.prev();
}}>
<SkipPrev /> <SkipPrev />
</Button> </Button>
<Button onClick={() => SpotifyStore.setPlaying(!isPlaying)}> <Button onClick={() => SpotifyStore.setPlaying(!isPlaying)}>

View file

@ -44,6 +44,11 @@ export default definePlugin({
type: OptionType.BOOLEAN, type: OptionType.BOOLEAN,
description: "Open Spotify URIs instead of Spotify URLs. Will only work if you have Spotify installed and might not work on all platforms", description: "Open Spotify URIs instead of Spotify URLs. Will only work if you have Spotify installed and might not work on all platforms",
default: false default: false
},
previousButtonRestartsTrack: {
type: OptionType.BOOLEAN,
description: "Restart currently playing track when pressing the previous button if playtime is >3s",
default: true
} }
}, },
patches: [ patches: [

View file

@ -141,35 +141,32 @@ export const ModalContent = LazyComponent(() => Modals.ModalContent);
export const ModalFooter = LazyComponent(() => Modals.ModalFooter); export const ModalFooter = LazyComponent(() => Modals.ModalFooter);
export const ModalCloseButton = LazyComponent(() => Modals.ModalCloseButton); export const ModalCloseButton = LazyComponent(() => Modals.ModalCloseButton);
const ModalAPI = findByPropsLazy("openModalLazy"); export const ModalAPI = findByPropsLazy("openModalLazy");
/** /**
* Wait for the render promise to resolve, then open a modal with it. * Wait for the render promise to resolve, then open a modal with it.
* This is equivalent to render().then(openModal) * This is equivalent to render().then(openModal)
* You should use the Modal components exported by this file * You should use the Modal components exported by this file
*/ */
export function openModalLazy(render: () => Promise<RenderFunction>, options?: ModalOptions & { contextKey?: string; }): Promise<string> { export const openModalLazy: (render: () => Promise<RenderFunction>, options?: ModalOptions & { contextKey?: string; }) => Promise<string>
return ModalAPI.openModalLazy(render, options); = proxyLazyWebpack(() => ModalAPI.openModalLazy);
}
/** /**
* Open a Modal with the given render function. * Open a Modal with the given render function.
* You should use the Modal components exported by this file * You should use the Modal components exported by this file
*/ */
export function openModal(render: RenderFunction, options?: ModalOptions, contextKey?: string): string { export const openModal: (render: RenderFunction, options?: ModalOptions, contextKey?: string) => string
return ModalAPI.openModal(render, options, contextKey); = proxyLazyWebpack(() => ModalAPI.openModal);
}
/** /**
* Close a modal by its key * Close a modal by its key
*/ */
export function closeModal(modalKey: string, contextKey?: string): void { export const closeModal: (modalKey: string, contextKey?: string) => void
return ModalAPI.closeModal(modalKey, contextKey); = proxyLazyWebpack(() => ModalAPI.closeModal);
}
/** /**
* Close all open modals * Close all open modals
*/ */
export function closeAllModals(): void { export const closeAllModals: () => void
return ModalAPI.closeAllModals(); = proxyLazyWebpack(() => ModalAPI.closeAllModals);
}