mirror of
https://github.com/th-ch/youtube-music.git
synced 2026-01-09 01:31:46 +00:00
fix: apply fix from eslint
This commit is contained in:
@ -36,6 +36,11 @@ export default tsEslint.config(
|
||||
'@typescript-eslint/no-misused-promises': ['off', { checksVoidReturn: false }],
|
||||
'@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_' }],
|
||||
'@typescript-eslint/no-non-null-assertion': 'off',
|
||||
'@typescript-eslint/consistent-type-imports': ['error', {
|
||||
fixStyle: 'inline-type-imports',
|
||||
prefer: 'type-imports',
|
||||
disallowTypeAnnotations: false,
|
||||
}],
|
||||
'importPlugin/first': 'error',
|
||||
'importPlugin/newline-after-import': 'off',
|
||||
'importPlugin/no-default-export': 'off',
|
||||
|
||||
26
package.json
26
package.json
@ -14,16 +14,16 @@
|
||||
"url": "https://github.com/th-ch/youtube-music"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "playwright test",
|
||||
"test:debug": "cross-env DEBUG=pw:*,-pw:test:protocol playwright test",
|
||||
"build": "electron-vite build",
|
||||
"test": "pnpm playwright test",
|
||||
"test:debug": "pnpm cross-env DEBUG=pw:*,-pw:test:protocol playwright test",
|
||||
"build": "pnpm electron-vite build",
|
||||
"vite:inspect": "pnpm clean && electron-vite build --mode development && pnpm exec serve .vite-inspect",
|
||||
"start": "electron-vite preview",
|
||||
"start:debug": "cross-env ELECTRON_ENABLE_LOGGING=1 pnpm start",
|
||||
"dev": "cross-env NODE_OPTIONS=--enable-source-maps electron-vite dev --watch",
|
||||
"dev:renderer": "cross-env NODE_OPTIONS=--enable-source-maps electron-vite dev",
|
||||
"dev:debug": "cross-env ELECTRON_ENABLE_LOGGING=1 pnpm dev",
|
||||
"clean": "del-cli dist && del-cli pack && del-cli .vite-inspect",
|
||||
"start": "pnpm electron-vite preview",
|
||||
"start:debug": "pnpm cross-env ELECTRON_ENABLE_LOGGING=1 pnpm start",
|
||||
"dev": "pnpm cross-env NODE_OPTIONS=--enable-source-maps electron-vite dev --watch",
|
||||
"dev:renderer": "pnpm cross-env NODE_OPTIONS=--enable-source-maps electron-vite dev",
|
||||
"dev:debug": "pnpm cross-env ELECTRON_ENABLE_LOGGING=1 pnpm dev",
|
||||
"clean": "pnpm del-cli dist && pnpm del-cli pack && pnpm del-cli .vite-inspect",
|
||||
"dist": "pnpm clean && pnpm build && pnpm electron-builder --win --mac --linux -p never",
|
||||
"dist:linux": "pnpm clean && pnpm build && pnpm electron-builder --linux -p never",
|
||||
"dist:linux:deb-arm64": "pnpm clean && pnpm build && pnpm electron-builder --linux deb:arm64 -p never",
|
||||
@ -32,12 +32,12 @@
|
||||
"dist:mac:arm64": "pnpm clean && pnpm build && pnpm electron-builder --mac dmg:arm64 -p never",
|
||||
"dist:win": "pnpm clean && pnpm build && pnpm electron-builder --win -p never",
|
||||
"dist:win:x64": "pnpm clean && pnpm build && pnpm electron-builder --win nsis-web:x64 -p never",
|
||||
"lint": "eslint .",
|
||||
"changelog": "npx --yes auto-changelog",
|
||||
"lint": "pnpm eslint ./src",
|
||||
"changelog": "pnpm dlx --yes auto-changelog",
|
||||
"release:linux": "pnpm clean && pnpm build && pnpm electron-builder --linux -p always -c.snap.publish=github",
|
||||
"release:mac": "pnpm clean && pnpm build && pnpm electron-builder --mac -p always",
|
||||
"release:win": "pnpm clean && pnpm build && pnpm electron-builder --win -p always",
|
||||
"typecheck": "tsc -p tsconfig.json --noEmit"
|
||||
"typecheck": "pnpm tsc -p tsconfig.json --noEmit"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=22",
|
||||
@ -57,7 +57,7 @@
|
||||
"@malept/flatpak-bundler@0.4.0": "patches/@malept__flatpak-bundler@0.4.0.patch",
|
||||
"kuromoji@0.1.2": "patches/kuromoji@0.1.2.patch",
|
||||
"file-type@16.5.4": "patches/file-type@16.5.4.patch",
|
||||
"electron-is": "patches/electron-is.patch"
|
||||
"electron-is@3.0.0": "patches/electron-is@3.0.0.patch"
|
||||
},
|
||||
"neverBuiltDependencies": []
|
||||
},
|
||||
|
||||
@ -2,7 +2,7 @@ import { deepmergeCustom } from 'deepmerge-ts';
|
||||
|
||||
import defaultConfig from './defaults';
|
||||
|
||||
import store, { IStore } from './store';
|
||||
import store, { type IStore } from './store';
|
||||
import plugins from './plugins';
|
||||
|
||||
import { restart } from '@/providers/app-controls';
|
||||
|
||||
2
src/custom-electron-prompt.d.ts
vendored
2
src/custom-electron-prompt.d.ts
vendored
@ -1,5 +1,5 @@
|
||||
declare module 'custom-electron-prompt' {
|
||||
import { BrowserWindow } from 'electron';
|
||||
import { type BrowserWindow } from 'electron';
|
||||
|
||||
export type SelectOptions = Record<string, string>;
|
||||
|
||||
|
||||
@ -15,7 +15,7 @@ import {
|
||||
type BrowserWindowConstructorOptions,
|
||||
} from 'electron';
|
||||
import enhanceWebRequest, {
|
||||
BetterSession,
|
||||
type BetterSession,
|
||||
} from '@jellybrick/electron-better-web-request';
|
||||
import is from 'electron-is';
|
||||
import unhandled from 'electron-unhandled';
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { BrowserWindow, ipcMain } from 'electron';
|
||||
import { type BrowserWindow, ipcMain } from 'electron';
|
||||
|
||||
import { deepmerge } from 'deepmerge-ts';
|
||||
import { allPlugins, mainPlugins } from 'virtual:plugins';
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
import is from 'electron-is';
|
||||
import {
|
||||
app,
|
||||
BrowserWindow,
|
||||
type BrowserWindow,
|
||||
clipboard,
|
||||
dialog,
|
||||
Menu,
|
||||
MenuItem,
|
||||
type MenuItem,
|
||||
shell,
|
||||
} from 'electron';
|
||||
import prompt from 'custom-electron-prompt';
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { FastAverageColor } from 'fast-average-color';
|
||||
import Color, { ColorInstance } from 'color';
|
||||
import Color, { type ColorInstance } from 'color';
|
||||
|
||||
import style from './style.css?inline';
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@ import style from './style.css?inline';
|
||||
import { t } from '@/i18n';
|
||||
import { createPlugin } from '@/utils';
|
||||
import { menu } from './menu';
|
||||
import { AmbientModePluginConfig } from './types';
|
||||
import { type AmbientModePluginConfig } from './types';
|
||||
import { waitForElement } from '@/utils/wait-for-element';
|
||||
|
||||
const defaultConfig: AmbientModePluginConfig = {
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { MenuItemConstructorOptions } from 'electron';
|
||||
import { type MenuItemConstructorOptions } from 'electron';
|
||||
|
||||
import { t } from '@/i18n';
|
||||
import { MenuContext } from '@/types/contexts';
|
||||
import { AmbientModePluginConfig } from './types';
|
||||
import { type MenuContext } from '@/types/contexts';
|
||||
import { type AmbientModePluginConfig } from './types';
|
||||
|
||||
export interface menuParameters {
|
||||
getConfig: () => AmbientModePluginConfig | Promise<AmbientModePluginConfig>;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { OpenAPIHono as Hono } from '@hono/zod-openapi';
|
||||
import { serve } from '@hono/node-server';
|
||||
import { type OpenAPIHono as Hono } from '@hono/zod-openapi';
|
||||
import { type serve } from '@hono/node-server';
|
||||
|
||||
import type { BackendContext } from '@/types/contexts';
|
||||
import type { SongInfo } from '@/providers/song-info';
|
||||
|
||||
@ -1,16 +1,16 @@
|
||||
import net from 'net';
|
||||
|
||||
import { SocksClient, SocksClientOptions } from 'socks';
|
||||
import { SocksClient, type SocksClientOptions } from 'socks';
|
||||
|
||||
import is from 'electron-is';
|
||||
|
||||
import { createBackend, LoggerPrefix } from '@/utils';
|
||||
|
||||
import { BackendType } from './types';
|
||||
import { type BackendType } from './types';
|
||||
|
||||
import config from '@/config';
|
||||
|
||||
import { AuthProxyConfig, defaultAuthProxyConfig } from '../config';
|
||||
import { type AuthProxyConfig, defaultAuthProxyConfig } from '../config';
|
||||
|
||||
import type { BackendContext } from '@/types/contexts';
|
||||
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
import net from 'net';
|
||||
|
||||
import type net from 'net';
|
||||
import type { AuthProxyConfig } from '../config';
|
||||
import type { Server } from 'http';
|
||||
|
||||
|
||||
@ -2,7 +2,10 @@ import { createPlugin } from '@/utils';
|
||||
import { t } from '@/i18n';
|
||||
|
||||
import backend from './back';
|
||||
import renderer, { CaptionsSelectorConfig, LanguageOptions } from './renderer';
|
||||
import renderer, {
|
||||
type CaptionsSelectorConfig,
|
||||
type LanguageOptions,
|
||||
} from './renderer';
|
||||
|
||||
import type { YoutubePlayer } from '@/types/youtube-player';
|
||||
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
import { Innertube } from 'youtubei.js';
|
||||
|
||||
import { BrowserWindow } from 'electron';
|
||||
import prompt from 'custom-electron-prompt';
|
||||
|
||||
import { Howl } from 'howler';
|
||||
@ -12,6 +11,7 @@ import { VolumeFader } from './fader';
|
||||
|
||||
import { t } from '@/i18n';
|
||||
|
||||
import type { BrowserWindow } from 'electron';
|
||||
import type { RendererContext } from '@/types/contexts';
|
||||
|
||||
export type CrossfadePluginConfig = {
|
||||
|
||||
@ -8,21 +8,25 @@ import { setMenuOptions } from '@/config/plugins';
|
||||
|
||||
import { t } from '@/i18n';
|
||||
|
||||
import { DiscordStatusDisplayType } from './constants';
|
||||
|
||||
import type { MenuContext } from '@/types/contexts';
|
||||
import type { DiscordPluginConfig } from './index';
|
||||
|
||||
import type { MenuTemplate } from '@/menu';
|
||||
import { DiscordStatusDisplayType } from './constants';
|
||||
|
||||
const registerRefreshOnce = singleton((refreshMenu: () => void) => {
|
||||
discordService?.registerRefreshCallback(refreshMenu);
|
||||
});
|
||||
|
||||
const DiscordStatusDisplayTypeLabels = {
|
||||
[DiscordStatusDisplayType.YOUTUBE_MUSIC]: "plugins.discord.menu.set-status-display-type.submenu.youtube-music",
|
||||
[DiscordStatusDisplayType.ARTIST]: "plugins.discord.menu.set-status-display-type.submenu.artist",
|
||||
[DiscordStatusDisplayType.TITLE]: "plugins.discord.menu.set-status-display-type.submenu.title",
|
||||
}
|
||||
[DiscordStatusDisplayType.YOUTUBE_MUSIC]:
|
||||
'plugins.discord.menu.set-status-display-type.submenu.youtube-music',
|
||||
[DiscordStatusDisplayType.ARTIST]:
|
||||
'plugins.discord.menu.set-status-display-type.submenu.artist',
|
||||
[DiscordStatusDisplayType.TITLE]:
|
||||
'plugins.discord.menu.set-status-display-type.submenu.title',
|
||||
};
|
||||
|
||||
export const onMenu = async ({
|
||||
window,
|
||||
@ -101,16 +105,18 @@ export const onMenu = async ({
|
||||
},
|
||||
{
|
||||
label: t('plugins.discord.menu.set-status-display-type.label'),
|
||||
submenu: Object.values(DiscordStatusDisplayType).map((statusDisplayType) => ({
|
||||
label: t(DiscordStatusDisplayTypeLabels[statusDisplayType]),
|
||||
type: 'radio',
|
||||
checked: config.statusDisplayType == statusDisplayType,
|
||||
click() {
|
||||
setConfig({
|
||||
statusDisplayType
|
||||
});
|
||||
},
|
||||
})),
|
||||
submenu: Object.values(DiscordStatusDisplayType).map(
|
||||
(statusDisplayType) => ({
|
||||
label: t(DiscordStatusDisplayTypeLabels[statusDisplayType]),
|
||||
type: 'radio',
|
||||
checked: config.statusDisplayType == statusDisplayType,
|
||||
click() {
|
||||
setConfig({
|
||||
statusDisplayType,
|
||||
});
|
||||
},
|
||||
}),
|
||||
),
|
||||
},
|
||||
];
|
||||
};
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { TimerKey } from './constants';
|
||||
import type { TimerKey } from './constants';
|
||||
|
||||
/**
|
||||
* Manages NodeJS Timers, ensuring only one timer exists per key.
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { DefaultPresetList, Preset } from './types';
|
||||
import { DefaultPresetList, type Preset } from './types';
|
||||
|
||||
import style from './style.css?inline';
|
||||
|
||||
|
||||
@ -2,12 +2,12 @@ import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
||||
import { join } from 'node:path';
|
||||
import { randomBytes } from 'node:crypto';
|
||||
|
||||
import { app, BrowserWindow, dialog, ipcMain } from 'electron';
|
||||
import { app, type BrowserWindow, dialog, ipcMain } from 'electron';
|
||||
import { Innertube, UniversalCache, Utils, YTNodes } from 'youtubei.js';
|
||||
import is from 'electron-is';
|
||||
import filenamify from 'filenamify';
|
||||
import { Mutex } from 'async-mutex';
|
||||
import NodeID3, { TagConstants } from 'node-id3';
|
||||
import * as NodeID3 from 'node-id3';
|
||||
import { BG, type BgConfig } from 'bgutils-js';
|
||||
import { lazy } from 'lazy-var';
|
||||
|
||||
@ -590,7 +590,7 @@ async function writeID3(
|
||||
tags.image = {
|
||||
mime: 'image/png',
|
||||
type: {
|
||||
id: TagConstants.AttachedPicture.PictureType.FRONT_COVER,
|
||||
id: NodeID3.TagConstants.AttachedPicture.PictureType.FRONT_COVER,
|
||||
},
|
||||
description: 'thumbnail',
|
||||
imageBuffer: coverBuffer,
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { app, BrowserWindow } from 'electron';
|
||||
import { app, type BrowserWindow } from 'electron';
|
||||
import is from 'electron-is';
|
||||
|
||||
export const getFolder = (customFolder?: string) =>
|
||||
|
||||
@ -1,8 +1,15 @@
|
||||
import { createPlugin } from '@/utils';
|
||||
import { t } from '@/i18n';
|
||||
import { MenuContext } from '@/types/contexts';
|
||||
import { MenuTemplate } from '@/menu';
|
||||
import { defaultPresets, presetConfigs, Preset, FilterConfig } from './presets';
|
||||
|
||||
import {
|
||||
defaultPresets,
|
||||
presetConfigs,
|
||||
type Preset,
|
||||
type FilterConfig,
|
||||
} from './presets';
|
||||
|
||||
import type { MenuContext } from '@/types/contexts';
|
||||
import type { MenuTemplate } from '@/menu';
|
||||
|
||||
export type EqualizerPluginConfig = {
|
||||
enabled: boolean;
|
||||
|
||||
@ -3,10 +3,10 @@ import { register } from 'electron-localshortcut';
|
||||
import {
|
||||
BrowserWindow,
|
||||
Menu,
|
||||
MenuItem,
|
||||
type MenuItem,
|
||||
ipcMain,
|
||||
nativeImage,
|
||||
WebContents,
|
||||
type WebContents,
|
||||
} from 'electron';
|
||||
|
||||
import type { BackendContext } from '@/types/contexts';
|
||||
|
||||
@ -2,7 +2,7 @@ import { createSignal } from 'solid-js';
|
||||
import { render } from 'solid-js/web';
|
||||
|
||||
import { TitleBar } from './renderer/TitleBar';
|
||||
import { defaultInAppMenuConfig, InAppMenuConfig } from './constants';
|
||||
import { defaultInAppMenuConfig, type InAppMenuConfig } from './constants';
|
||||
|
||||
import type { RendererContext } from '@/types/contexts';
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { JSX } from 'solid-js';
|
||||
import { type JSX } from 'solid-js';
|
||||
import { css } from 'solid-styled-components';
|
||||
|
||||
import { cacheNoArgs } from '@/providers/decorators';
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { JSX, splitProps } from 'solid-js';
|
||||
import { type JSX, splitProps } from 'solid-js';
|
||||
import { css } from 'solid-styled-components';
|
||||
|
||||
import { cacheNoArgs } from '@/providers/decorators';
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { createSignal, JSX, Show, splitProps, mergeProps } from 'solid-js';
|
||||
import { createSignal, type JSX, Show, splitProps, mergeProps } from 'solid-js';
|
||||
import { Portal } from 'solid-js/web';
|
||||
import { css } from 'solid-styled-components';
|
||||
import { Transition } from 'solid-transition-group';
|
||||
@ -6,7 +6,7 @@ import {
|
||||
autoUpdate,
|
||||
flip,
|
||||
offset,
|
||||
OffsetOptions,
|
||||
type OffsetOptions,
|
||||
size,
|
||||
} from '@floating-ui/dom';
|
||||
import { useFloating } from 'solid-floating-ui';
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { createSignal, Match, Show, Switch } from 'solid-js';
|
||||
import { JSX } from 'solid-js/jsx-runtime';
|
||||
import { type JSX } from 'solid-js/jsx-runtime';
|
||||
import { css } from 'solid-styled-components';
|
||||
import { Portal } from 'solid-js/web';
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { Menu, MenuItem } from 'electron';
|
||||
import { type Menu, type MenuItem } from 'electron';
|
||||
import {
|
||||
createEffect,
|
||||
createResource,
|
||||
|
||||
@ -1,4 +1,9 @@
|
||||
import { DataConnection, Peer, PeerError, PeerErrorType } from 'peerjs';
|
||||
import {
|
||||
type DataConnection,
|
||||
Peer,
|
||||
type PeerError,
|
||||
PeerErrorType,
|
||||
} from 'peerjs';
|
||||
import delay from 'delay';
|
||||
|
||||
import type { Permission, Profile, VideoData } from './types';
|
||||
|
||||
@ -1,10 +1,9 @@
|
||||
import prompt from 'custom-electron-prompt';
|
||||
|
||||
import { DataConnection } from 'peerjs';
|
||||
|
||||
import { t } from '@/i18n';
|
||||
import { createPlugin } from '@/utils';
|
||||
import promptOptions from '@/providers/prompt-options';
|
||||
import { waitForElement } from '@/utils/wait-for-element';
|
||||
|
||||
import {
|
||||
getDefaultProfile,
|
||||
@ -21,8 +20,7 @@ import { createSettingPopup } from './ui/setting';
|
||||
import settingHTML from './templates/setting.html?raw';
|
||||
import style from './style.css?inline';
|
||||
|
||||
import { waitForElement } from '@/utils/wait-for-element';
|
||||
|
||||
import type { DataConnection } from 'peerjs';
|
||||
import type { YoutubePlayer } from '@/types/youtube-player';
|
||||
import type { RendererContext } from '@/types/contexts';
|
||||
import type { VideoDataChanged } from '@/types/video-data-changed';
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import {
|
||||
import type {
|
||||
ItemPlaylistPanelVideoRenderer,
|
||||
PlaylistPanelVideoWrapperRenderer,
|
||||
QueueItem,
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { app, BrowserWindow, Notification } from 'electron';
|
||||
import { app, type BrowserWindow, Notification } from 'electron';
|
||||
|
||||
import playIcon from '@assets/media-icons-black/play.png?asset&asarUnpack';
|
||||
import pauseIcon from '@assets/media-icons-black/pause.png?asset&asarUnpack';
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import is from 'electron-is';
|
||||
import { MenuItem } from 'electron';
|
||||
import { type MenuItem } from 'electron';
|
||||
|
||||
import { snakeToCamel, ToastStyles, urgencyLevels } from './utils';
|
||||
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
import path from 'node:path';
|
||||
import fs from 'node:fs';
|
||||
|
||||
import { app, NativeImage } from 'electron';
|
||||
import { app, type NativeImage } from 'electron';
|
||||
|
||||
import youtubeMusicIcon from '@assets/youtube-music.png?asset&asarUnpack';
|
||||
|
||||
import { SongInfo } from '@/providers/song-info';
|
||||
import { type SongInfo } from '@/providers/song-info';
|
||||
|
||||
import type { NotificationsPluginConfig } from './index';
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { globalShortcut, MenuItem } from 'electron';
|
||||
import prompt, { KeybindOptions } from 'custom-electron-prompt';
|
||||
import { globalShortcut, type MenuItem } from 'electron';
|
||||
import prompt, { type KeybindOptions } from 'custom-electron-prompt';
|
||||
|
||||
import hudStyle from './volume-hud.css?inline';
|
||||
import { createPlugin } from '@/utils';
|
||||
|
||||
@ -66,7 +66,7 @@ export const onPlayerApiReady = async (
|
||||
injectVolumeHud(noVid);
|
||||
if (!noVid) {
|
||||
setupVideoPlayerOnwheel();
|
||||
if (!await window.mainConfig.plugins.isEnabled('video-toggle')) {
|
||||
if (!(await window.mainConfig.plugins.isEnabled('video-toggle'))) {
|
||||
// Video-toggle handles hud positioning on its own
|
||||
const videoMode = () =>
|
||||
api.getPlayerResponse().videoDetails?.musicVideoType !==
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { BrowserWindow } from 'electron';
|
||||
import { type BrowserWindow } from 'electron';
|
||||
|
||||
import registerCallback, {
|
||||
MediaType,
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
import prompt from 'custom-electron-prompt';
|
||||
|
||||
import { BrowserWindow } from 'electron';
|
||||
import { type BrowserWindow } from 'electron';
|
||||
|
||||
import { t } from '@/i18n';
|
||||
import promptOptions from '@/providers/prompt-options';
|
||||
|
||||
import { ScrobblerPluginConfig } from './index';
|
||||
import { SetConfType, backend } from './main';
|
||||
import { type ScrobblerPluginConfig } from './index';
|
||||
import { type SetConfType, backend } from './main';
|
||||
|
||||
import type { MenuContext } from '@/types/contexts';
|
||||
import type { MenuTemplate } from '@/menu';
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { BrowserWindow, globalShortcut } from 'electron';
|
||||
import { type BrowserWindow, globalShortcut } from 'electron';
|
||||
import is from 'electron-is';
|
||||
import { register as registerElectronLocalShortcut } from 'electron-localshortcut';
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import prompt, { KeybindOptions } from 'custom-electron-prompt';
|
||||
import prompt, { type KeybindOptions } from 'custom-electron-prompt';
|
||||
|
||||
import promptOptions from '@/providers/prompt-options';
|
||||
|
||||
|
||||
2
src/plugins/shortcuts/mpris-service.d.ts
vendored
2
src/plugins/shortcuts/mpris-service.d.ts
vendored
@ -1,7 +1,7 @@
|
||||
declare module '@jellybrick/mpris-service' {
|
||||
import { EventEmitter } from 'events';
|
||||
|
||||
import { interface as dbusInterface } from '@jellybrick/dbus-next';
|
||||
import { type interface as dbusInterface } from '@jellybrick/dbus-next';
|
||||
|
||||
interface RootInterfaceOptions {
|
||||
identity?: string;
|
||||
|
||||
@ -1,17 +1,17 @@
|
||||
import { BrowserWindow, ipcMain } from 'electron';
|
||||
import { type BrowserWindow, ipcMain } from 'electron';
|
||||
|
||||
import MprisPlayer, {
|
||||
LOOP_STATUS_NONE,
|
||||
LOOP_STATUS_PLAYLIST,
|
||||
LOOP_STATUS_TRACK,
|
||||
LoopStatus,
|
||||
type LoopStatus,
|
||||
PLAYBACK_STATUS_PAUSED,
|
||||
PLAYBACK_STATUS_PLAYING,
|
||||
PLAYBACK_STATUS_STOPPED,
|
||||
type PlayBackStatus,
|
||||
type PlayerOptions,
|
||||
type Position,
|
||||
Track,
|
||||
type Track,
|
||||
} from '@jellybrick/mpris-service';
|
||||
|
||||
import registerCallback, {
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
// Segments are an array [ [start, end], … ]
|
||||
import { Segment } from './types';
|
||||
import type { Segment } from './types';
|
||||
|
||||
export const sortSegments = (segments: Segment[]) => {
|
||||
segments.sort((segment1, segment2) =>
|
||||
|
||||
@ -2,8 +2,6 @@ import { createStore } from 'solid-js/store';
|
||||
|
||||
import { createMemo } from 'solid-js';
|
||||
|
||||
import { SongInfo } from '@/providers/song-info';
|
||||
|
||||
import { LRCLib } from './LRCLib';
|
||||
import { LyricsGenius } from './LyricsGenius';
|
||||
import { MusixMatch } from './MusixMatch';
|
||||
@ -12,6 +10,7 @@ import { YTMusic } from './YTMusic';
|
||||
import { getSongInfo } from '@/providers/song-info-front';
|
||||
|
||||
import type { LyricProvider, LyricResult } from '../types';
|
||||
import type { SongInfo } from '@/providers/song-info';
|
||||
|
||||
export const providers = {
|
||||
YTMusic: new YTMusic(),
|
||||
|
||||
@ -7,16 +7,16 @@ import {
|
||||
Match,
|
||||
onCleanup,
|
||||
onMount,
|
||||
Setter,
|
||||
type Setter,
|
||||
Switch,
|
||||
} from 'solid-js';
|
||||
|
||||
import {
|
||||
currentLyrics,
|
||||
lyricsStore,
|
||||
ProviderName,
|
||||
type ProviderName,
|
||||
providerNames,
|
||||
ProviderState,
|
||||
type ProviderState,
|
||||
setLyricsStore,
|
||||
} from '../../providers';
|
||||
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { createEffect, createMemo, For, Show, createSignal } from 'solid-js';
|
||||
|
||||
import { VirtualizerHandle } from 'virtua/solid';
|
||||
import { type VirtualizerHandle } from 'virtua/solid';
|
||||
|
||||
import { LineLyrics } from '@/plugins/synced-lyrics/types';
|
||||
import { type LineLyrics } from '@/plugins/synced-lyrics/types';
|
||||
|
||||
import { config } from '../renderer';
|
||||
import { _ytAPI } from '..';
|
||||
|
||||
@ -12,7 +12,7 @@ import registerCallback, {
|
||||
type SongInfo,
|
||||
SongInfoEvent,
|
||||
} from '@/providers/song-info';
|
||||
import { mediaIcons } from '@/types/media-icons';
|
||||
import { type mediaIcons } from '@/types/media-icons';
|
||||
import { t } from '@/i18n';
|
||||
import { Platform } from '@/types/plugins';
|
||||
|
||||
|
||||
@ -7,9 +7,9 @@ import buttonSwitcherStyle from './button-switcher.css?inline';
|
||||
|
||||
import { createPlugin } from '@/utils';
|
||||
import { moveVolumeHud as preciseVolumeMoveVolumeHud } from '@/plugins/precise-volume/renderer';
|
||||
import { ThumbnailElement } from '@/types/get-player-response';
|
||||
import { type ThumbnailElement } from '@/types/get-player-response';
|
||||
import { t } from '@/i18n';
|
||||
import { MenuTemplate } from '@/menu';
|
||||
import { type MenuTemplate } from '@/menu';
|
||||
|
||||
import { VideoSwitchButton } from './templates/video-switch-button';
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import emptyStyle from './empty-player.css?inline';
|
||||
import { createPlugin } from '@/utils';
|
||||
import { Visualizer } from './visualizers/visualizer';
|
||||
import { type Visualizer } from './visualizers/visualizer';
|
||||
import {
|
||||
ButterchurnVisualizer as butterchurn,
|
||||
VudioVisualizer as vudio,
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import {
|
||||
contextBridge,
|
||||
ipcRenderer,
|
||||
IpcRendererEvent,
|
||||
type IpcRendererEvent,
|
||||
webFrame,
|
||||
} from 'electron';
|
||||
import is from 'electron-is';
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import path from 'node:path';
|
||||
|
||||
import { app, BrowserWindow } from 'electron';
|
||||
import { app, type BrowserWindow } from 'electron';
|
||||
|
||||
import getSongControls from './song-controls';
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
// This is used for to control the songs
|
||||
import { BrowserWindow, ipcMain } from 'electron';
|
||||
import { type BrowserWindow, ipcMain } from 'electron';
|
||||
|
||||
// see protocol-handler.ts
|
||||
type ArgsType<T> = T | string[] | undefined;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { BrowserWindow, ipcMain, nativeImage, net } from 'electron';
|
||||
import { type BrowserWindow, ipcMain, nativeImage, net } from 'electron';
|
||||
|
||||
import { Mutex } from 'async-mutex';
|
||||
|
||||
|
||||
2
src/reset.d.ts
vendored
2
src/reset.d.ts
vendored
@ -19,7 +19,7 @@ declare global {
|
||||
'videodatachange': CustomEvent<VideoDataChanged>;
|
||||
}
|
||||
|
||||
declare var electronIs: typeof import('electron-is')
|
||||
declare var electronIs: typeof import('electron-is');
|
||||
|
||||
interface Window {
|
||||
trustedTypes?: typeof trustedTypes;
|
||||
|
||||
@ -39,10 +39,10 @@ export type RendererPluginLifecycle<Config, Context, This> =
|
||||
| RendererPluginLifecycleExtra<Config, Context, This>;
|
||||
|
||||
export enum Platform {
|
||||
Windows = 1 << 0,
|
||||
macOS = 1 << 1,
|
||||
Linux = 1 << 2,
|
||||
Freebsd = 1 << 3
|
||||
Windows = 1 << 0,
|
||||
macOS = 1 << 1,
|
||||
Linux = 1 << 2,
|
||||
Freebsd = 1 << 3,
|
||||
}
|
||||
|
||||
export interface PluginDef<
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
// TODO: fully type definitions for youtube-player
|
||||
|
||||
import { VideoDetails } from './video-details';
|
||||
import { GetPlayerResponse } from './get-player-response';
|
||||
import { PlayerAPIEvents } from './player-api-events';
|
||||
import { WatchNextResponse } from '@/types/youtube-music-desktop-internal';
|
||||
import type { VideoDetails } from './video-details';
|
||||
import type { GetPlayerResponse } from './get-player-response';
|
||||
import type { PlayerAPIEvents } from './player-api-events';
|
||||
import type { WatchNextResponse } from '@/types/youtube-music-desktop-internal';
|
||||
|
||||
export interface YoutubePlayer {
|
||||
getInternalApiInterface: <Parameters extends unknown[], Return>(
|
||||
|
||||
3
src/yt-web-components.d.ts
vendored
3
src/yt-web-components.d.ts
vendored
@ -1,5 +1,4 @@
|
||||
import { Icons } from '@/types/icons';
|
||||
|
||||
import type { Icons } from '@/types/icons';
|
||||
import type { ComponentProps } from 'solid-js';
|
||||
|
||||
declare module 'solid-js' {
|
||||
|
||||
Reference in New Issue
Block a user