Compare commits

..

6 Commits

Author SHA1 Message Date
949a2f6428 Bump version to 2.1.3 2023-10-23 00:35:10 +09:00
bceaa05197 fix(store): fix listenAlong statement 2023-10-23 00:29:59 +09:00
776cdac30d feat(discord): rename Listen Along to Play on YTM
resolve #1341
2023-10-23 00:27:43 +09:00
4333891cca chore(deps): bump deps 2023-10-23 00:19:42 +09:00
8a89bbccf7 fix: fixed bugs in downloader (#1342) 2023-10-23 00:19:01 +09:00
fa4c69d228 Update changelog for v2.1.2 2023-10-19 13:55:04 +00:00
9 changed files with 116 additions and 74 deletions

View File

@ -2,8 +2,26 @@
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
#### [v2.1.2](https://github.com/th-ch/youtube-music/compare/v2.1.1...v2.1.2)
- feat(in-app-menu): add an option to hide the window controls [`#1335`](https://github.com/th-ch/youtube-music/pull/1335)
- fix: fixed an issue where the album name was missing [`#1334`](https://github.com/th-ch/youtube-music/pull/1334)
- chore(deps): update dependency electron to v27.0.1 [`#1331`](https://github.com/th-ch/youtube-music/pull/1331)
- fix: fixed an issue where only the first 100 songs in a playlist were downloaded [`#1329`](https://github.com/th-ch/youtube-music/pull/1329)
- Updated readme plugins list [`#1326`](https://github.com/th-ch/youtube-music/pull/1326)
- QOL: Move source code under the src directory. [`#1318`](https://github.com/th-ch/youtube-music/pull/1318)
- feat: migrate from `npm` to `pnpm` [`#1316`](https://github.com/th-ch/youtube-music/pull/1316)
- fix: fix unresponsive (fix #1325) [`#1325`](https://github.com/th-ch/youtube-music/issues/1325)
- fix(blocker): remove the `app.isPackaged` check (fix #1315) [`#1315`](https://github.com/th-ch/youtube-music/issues/1315)
- fix(discord): `Discord RPC fails if a song's title is only one character` (fix #1314) [`#1314`](https://github.com/th-ch/youtube-music/issues/1314)
- chore(deps): Bump @rollup/plugin-commonjs, pnpm version, Remove ytpl [`9705f84`](https://github.com/th-ch/youtube-music/commit/9705f8489d7bf262bfd8b15ab84c2d3485f10eae)
- chore(deps): Bump rollup, @xhayper/discord-rpc version [`00a3e8d`](https://github.com/th-ch/youtube-music/commit/00a3e8d35ec335e1913be19f30ae09dbe0b7acdd)
- chore(deps): update dependency rollup to v4.1.4 [`6774d54`](https://github.com/th-ch/youtube-music/commit/6774d54f5eca432edc2e11743d9d1b1c2fda9ac8)
#### [v2.1.1](https://github.com/th-ch/youtube-music/compare/v2.1.0...v2.1.1)
> 14 October 2023
- hotfix(downloader): can't get an album title (fix #1313) [`#1313`](https://github.com/th-ch/youtube-music/issues/1313)
- Update changelog for v2.1.0 [`92cab89`](https://github.com/th-ch/youtube-music/commit/92cab89d17175741e60e65ea61633e23ebdc1f45)
- Bump version to 2.1.1 [`3bb5bc2`](https://github.com/th-ch/youtube-music/commit/3bb5bc2ca1856f4e222ee1e01e865f1ab804fdba)

View File

@ -1,7 +1,7 @@
{
"name": "youtube-music",
"productName": "YouTube Music",
"version": "2.1.2",
"version": "2.1.3",
"description": "YouTube Music Desktop App - including custom plugins",
"main": "./dist/index.js",
"license": "MIT",
@ -181,10 +181,10 @@
"builtin-modules": "^3.3.0",
"cross-env": "7.0.3",
"del-cli": "5.1.0",
"electron": "27.0.1",
"electron": "27.0.2",
"electron-builder": "24.6.4",
"electron-devtools-installer": "3.2.0",
"eslint": "8.51.0",
"eslint": "8.52.0",
"eslint-plugin-import": "2.28.1",
"eslint-plugin-prettier": "5.0.1",
"node-gyp": "9.4.0",

118
pnpm-lock.yaml generated
View File

@ -15,10 +15,10 @@ overrides:
dependencies:
'@cliqz/adblocker-electron':
specifier: 1.26.8
version: 1.26.8(electron@27.0.1)
version: 1.26.8(electron@27.0.2)
'@cliqz/adblocker-electron-preload':
specifier: 1.26.8
version: 1.26.8(electron@27.0.1)
version: 1.26.8(electron@27.0.2)
'@ffmpeg.wasm/core-mt':
specifier: 0.12.0
version: 0.12.0
@ -51,7 +51,7 @@ dependencies:
version: 10.2.0
custom-electron-prompt:
specifier: 1.5.7
version: 1.5.7(electron@27.0.1)
version: 1.5.7(electron@27.0.2)
electron-debug:
specifier: 3.2.0
version: 3.2.0
@ -146,7 +146,7 @@ devDependencies:
version: 9.0.3
'@typescript-eslint/eslint-plugin':
specifier: 6.8.0
version: 6.8.0(@typescript-eslint/parser@6.7.5)(eslint@8.51.0)(typescript@5.2.2)
version: 6.8.0(@typescript-eslint/parser@6.7.5)(eslint@8.52.0)(typescript@5.2.2)
auto-changelog:
specifier: 2.4.0
version: 2.4.0
@ -160,8 +160,8 @@ devDependencies:
specifier: 5.1.0
version: 5.1.0
electron:
specifier: 27.0.1
version: 27.0.1
specifier: 27.0.2
version: 27.0.2
electron-builder:
specifier: 24.6.4
version: 24.6.4
@ -169,14 +169,14 @@ devDependencies:
specifier: 3.2.0
version: 3.2.0
eslint:
specifier: 8.51.0
version: 8.51.0
specifier: 8.52.0
version: 8.52.0
eslint-plugin-import:
specifier: 2.28.1
version: 2.28.1(@typescript-eslint/parser@6.7.5)(eslint@8.51.0)
version: 2.28.1(@typescript-eslint/parser@6.7.5)(eslint@8.52.0)
eslint-plugin-prettier:
specifier: 5.0.1
version: 5.0.1(eslint@8.51.0)(prettier@3.0.3)
version: 5.0.1(eslint@8.52.0)(prettier@3.0.3)
node-gyp:
specifier: 9.4.0
version: 9.4.0
@ -252,23 +252,23 @@ packages:
'@cliqz/adblocker-extended-selectors': 1.26.8
dev: false
/@cliqz/adblocker-electron-preload@1.26.8(electron@27.0.1):
/@cliqz/adblocker-electron-preload@1.26.8(electron@27.0.2):
resolution: {integrity: sha512-sWhND23IrP6f7wUtUt3+lAbNdmMYucwKVsMcMtInAk6vKz5bxpECsp+QBHXE7Z3MXLwa0dATGRVcC4RTLZBb/A==}
peerDependencies:
electron: '>11'
dependencies:
'@cliqz/adblocker-content': 1.26.8
electron: 27.0.1
electron: 27.0.2
dev: false
/@cliqz/adblocker-electron@1.26.8(electron@27.0.1):
/@cliqz/adblocker-electron@1.26.8(electron@27.0.2):
resolution: {integrity: sha512-8vuqiPMCOzGPfUehfvv7eDwQRw3sm3sdR3eZYU2wNGPNbUHf6gZbSBcsx12n3QNcbAxbdydtc/a3X4Eu5VOlxg==}
peerDependencies:
electron: '>11'
dependencies:
'@cliqz/adblocker': 1.26.8
'@cliqz/adblocker-electron-preload': 1.26.8(electron@27.0.1)
electron: 27.0.1
'@cliqz/adblocker-electron-preload': 1.26.8(electron@27.0.2)
electron: 27.0.2
tldts-experimental: 6.0.16
dev: false
@ -364,13 +364,13 @@ packages:
- supports-color
dev: true
/@eslint-community/eslint-utils@4.4.0(eslint@8.51.0):
/@eslint-community/eslint-utils@4.4.0(eslint@8.52.0):
resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
dependencies:
eslint: 8.51.0
eslint: 8.52.0
eslint-visitor-keys: 3.4.3
dev: true
@ -396,8 +396,8 @@ packages:
- supports-color
dev: true
/@eslint/js@8.51.0:
resolution: {integrity: sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==}
/@eslint/js@8.52.0:
resolution: {integrity: sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
@ -425,11 +425,11 @@ packages:
resolution: {integrity: sha512-FEyg37hDvQtrQVlFxbit7ov5e487BjsR32bZfJ4oAb5i+NnlbGaNyy6iYBZ8ocVHo8fgug+SL+mFdDTzqjvPww==}
dev: false
/@humanwhocodes/config-array@0.11.11:
resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==}
/@humanwhocodes/config-array@0.11.13:
resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==}
engines: {node: '>=10.10.0'}
dependencies:
'@humanwhocodes/object-schema': 1.2.1
'@humanwhocodes/object-schema': 2.0.1
debug: 4.3.4
minimatch: 3.1.2
transitivePeerDependencies:
@ -441,8 +441,8 @@ packages:
engines: {node: '>=12.22'}
dev: true
/@humanwhocodes/object-schema@1.2.1:
resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
/@humanwhocodes/object-schema@2.0.1:
resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==}
dev: true
/@isaacs/cliui@8.0.2:
@ -912,7 +912,7 @@ packages:
/@types/electron-localshortcut@3.1.2:
resolution: {integrity: sha512-eWnTxzZHtYLL7PZuWP/hizUyX6VVjI5eUa5lzyA0gCDeLqHbgyccD8JsJ1Ew+vtjY2XUA8y05hwS6XOf3kIOCw==}
dependencies:
electron: 27.0.1
electron: 27.0.2
transitivePeerDependencies:
- supports-color
dev: true
@ -1041,7 +1041,7 @@ packages:
'@types/node': 20.8.6
optional: true
/@typescript-eslint/eslint-plugin@6.8.0(@typescript-eslint/parser@6.7.5)(eslint@8.51.0)(typescript@5.2.2):
/@typescript-eslint/eslint-plugin@6.8.0(@typescript-eslint/parser@6.7.5)(eslint@8.52.0)(typescript@5.2.2):
resolution: {integrity: sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
@ -1053,13 +1053,13 @@ packages:
optional: true
dependencies:
'@eslint-community/regexpp': 4.9.1
'@typescript-eslint/parser': 6.7.5(eslint@8.51.0)(typescript@5.2.2)
'@typescript-eslint/parser': 6.7.5(eslint@8.52.0)(typescript@5.2.2)
'@typescript-eslint/scope-manager': 6.8.0
'@typescript-eslint/type-utils': 6.8.0(eslint@8.51.0)(typescript@5.2.2)
'@typescript-eslint/utils': 6.8.0(eslint@8.51.0)(typescript@5.2.2)
'@typescript-eslint/type-utils': 6.8.0(eslint@8.52.0)(typescript@5.2.2)
'@typescript-eslint/utils': 6.8.0(eslint@8.52.0)(typescript@5.2.2)
'@typescript-eslint/visitor-keys': 6.8.0
debug: 4.3.4
eslint: 8.51.0
eslint: 8.52.0
graphemer: 1.4.0
ignore: 5.2.4
natural-compare: 1.4.0
@ -1070,7 +1070,7 @@ packages:
- supports-color
dev: true
/@typescript-eslint/parser@6.7.5(eslint@8.51.0)(typescript@5.2.2):
/@typescript-eslint/parser@6.7.5(eslint@8.52.0)(typescript@5.2.2):
resolution: {integrity: sha512-bIZVSGx2UME/lmhLcjdVc7ePBwn7CLqKarUBL4me1C5feOd663liTGjMBGVcGr+BhnSLeP4SgwdvNnnkbIdkCw==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
@ -1085,7 +1085,7 @@ packages:
'@typescript-eslint/typescript-estree': 6.7.5(typescript@5.2.2)
'@typescript-eslint/visitor-keys': 6.7.5
debug: 4.3.4
eslint: 8.51.0
eslint: 8.52.0
typescript: 5.2.2
transitivePeerDependencies:
- supports-color
@ -1107,7 +1107,7 @@ packages:
'@typescript-eslint/visitor-keys': 6.8.0
dev: true
/@typescript-eslint/type-utils@6.8.0(eslint@8.51.0)(typescript@5.2.2):
/@typescript-eslint/type-utils@6.8.0(eslint@8.52.0)(typescript@5.2.2):
resolution: {integrity: sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
@ -1118,9 +1118,9 @@ packages:
optional: true
dependencies:
'@typescript-eslint/typescript-estree': 6.8.0(typescript@5.2.2)
'@typescript-eslint/utils': 6.8.0(eslint@8.51.0)(typescript@5.2.2)
'@typescript-eslint/utils': 6.8.0(eslint@8.52.0)(typescript@5.2.2)
debug: 4.3.4
eslint: 8.51.0
eslint: 8.52.0
ts-api-utils: 1.0.3(typescript@5.2.2)
typescript: 5.2.2
transitivePeerDependencies:
@ -1179,19 +1179,19 @@ packages:
- supports-color
dev: true
/@typescript-eslint/utils@6.8.0(eslint@8.51.0)(typescript@5.2.2):
/@typescript-eslint/utils@6.8.0(eslint@8.52.0)(typescript@5.2.2):
resolution: {integrity: sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0)
'@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0)
'@types/json-schema': 7.0.13
'@types/semver': 7.5.3
'@typescript-eslint/scope-manager': 6.8.0
'@typescript-eslint/types': 6.8.0
'@typescript-eslint/typescript-estree': 6.8.0(typescript@5.2.2)
eslint: 8.51.0
eslint: 8.52.0
semver: 7.5.4
transitivePeerDependencies:
- supports-color
@ -1214,6 +1214,10 @@ packages:
eslint-visitor-keys: 3.4.3
dev: true
/@ungap/structured-clone@1.2.0:
resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
dev: true
/@xhayper/discord-rpc@1.0.24:
resolution: {integrity: sha512-gzC8OaOSz7cGALSHyyq6nANQvBfyfntbSq+Qh+cNanoKX8ybOj+jWKmDP6PbLVDWoBftTU3JYsWXrLml2df2Hw==}
engines: {node: '>=14.18.0'}
@ -1929,12 +1933,12 @@ packages:
shebang-command: 2.0.0
which: 2.0.2
/custom-electron-prompt@1.5.7(electron@27.0.1):
/custom-electron-prompt@1.5.7(electron@27.0.2):
resolution: {integrity: sha512-ptRPJr6CpT06GWLMtg3GD2Lr7gWfXdWI+hR1S39eq+m/mUa2E118YmX6mPCbHdg5QB/W9UVhSpRqBM8FUh1G8w==}
peerDependencies:
electron: '>=10.0.0'
dependencies:
electron: 27.0.1
electron: 27.0.2
dev: false
/dashdash@2.0.0:
@ -2372,8 +2376,8 @@ packages:
- supports-color
dev: false
/electron@27.0.1:
resolution: {integrity: sha512-AjDGgpf2thNxVXoNqEG+0GCUK4upAEa2B+IoM5Yk9YrOLd6uUOEMfGI9rhPtj+jC14iKOvBdefY2uAzcDC0qng==}
/electron@27.0.2:
resolution: {integrity: sha512-4fbcHQ40ZDlqhr5Pamm+M5BF7ry2lGqjFTWTJ/mrBwuiPWu6xhV/RWgUhKBaLqKNfAaNl3eMxV3Jc82gv6JauQ==}
engines: {node: '>= 12.20.55'}
hasBin: true
requiresBuild: true
@ -2542,7 +2546,7 @@ packages:
- supports-color
dev: true
/eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.5)(eslint-import-resolver-node@0.3.9)(eslint@8.51.0):
/eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.5)(eslint-import-resolver-node@0.3.9)(eslint@8.52.0):
resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
engines: {node: '>=4'}
peerDependencies:
@ -2563,15 +2567,15 @@ packages:
eslint-import-resolver-webpack:
optional: true
dependencies:
'@typescript-eslint/parser': 6.7.5(eslint@8.51.0)(typescript@5.2.2)
'@typescript-eslint/parser': 6.7.5(eslint@8.52.0)(typescript@5.2.2)
debug: 3.2.7
eslint: 8.51.0
eslint: 8.52.0
eslint-import-resolver-node: 0.3.9
transitivePeerDependencies:
- supports-color
dev: true
/eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.7.5)(eslint@8.51.0):
/eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.7.5)(eslint@8.52.0):
resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==}
engines: {node: '>=4'}
peerDependencies:
@ -2581,16 +2585,16 @@ packages:
'@typescript-eslint/parser':
optional: true
dependencies:
'@typescript-eslint/parser': 6.7.5(eslint@8.51.0)(typescript@5.2.2)
'@typescript-eslint/parser': 6.7.5(eslint@8.52.0)(typescript@5.2.2)
array-includes: 3.1.7
array.prototype.findlastindex: 1.2.3
array.prototype.flat: 1.3.2
array.prototype.flatmap: 1.3.2
debug: 3.2.7
doctrine: 2.1.0
eslint: 8.51.0
eslint: 8.52.0
eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.5)(eslint-import-resolver-node@0.3.9)(eslint@8.51.0)
eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.5)(eslint-import-resolver-node@0.3.9)(eslint@8.52.0)
has: 1.0.4
is-core-module: 2.13.0
is-glob: 4.0.3
@ -2606,7 +2610,7 @@ packages:
- supports-color
dev: true
/eslint-plugin-prettier@5.0.1(eslint@8.51.0)(prettier@3.0.3):
/eslint-plugin-prettier@5.0.1(eslint@8.52.0)(prettier@3.0.3):
resolution: {integrity: sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
@ -2620,7 +2624,7 @@ packages:
eslint-config-prettier:
optional: true
dependencies:
eslint: 8.51.0
eslint: 8.52.0
prettier: 3.0.3
prettier-linter-helpers: 1.0.0
synckit: 0.8.5
@ -2639,18 +2643,19 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
/eslint@8.51.0:
resolution: {integrity: sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==}
/eslint@8.52.0:
resolution: {integrity: sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
hasBin: true
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0)
'@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0)
'@eslint-community/regexpp': 4.9.1
'@eslint/eslintrc': 2.1.2
'@eslint/js': 8.51.0
'@humanwhocodes/config-array': 0.11.11
'@eslint/js': 8.52.0
'@humanwhocodes/config-array': 0.11.13
'@humanwhocodes/module-importer': 1.0.1
'@nodelib/fs.walk': 1.2.8
'@ungap/structured-clone': 1.2.0
ajv: 6.12.6
chalk: 4.1.2
cross-spawn: 7.0.3
@ -5346,6 +5351,7 @@ packages:
/undici-types@5.25.3:
resolution: {integrity: sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==}
requiresBuild: true
/undici@5.26.3:
resolution: {integrity: sha512-H7n2zmKEWgOllKkIUkLvFmsJQj062lSm3uA4EYApG8gLuiOM0/go9bIoC3HVaSnfg4xunowDE2i9p8drkXuvDw==}

View File

@ -107,7 +107,7 @@ const defaultConfig = {
autoReconnect: true, // If enabled, will try to reconnect to discord every 5 seconds after disconnecting or failing to connect
activityTimoutEnabled: true, // If enabled, the discord rich presence gets cleared when music paused after the time specified below
activityTimoutTime: 10 * 60 * 1000, // 10 minutes
listenAlong: true, // Add a "listen along" button to rich presence
playOnYouTubeMusic: true, // Add a "Play on YouTube Music" button to rich presence
hideGitHubButton: false, // Disable the "View App On GitHub" button
hideDurationLeft: false, // Hides the start and end time of the song to rich presence
},

View File

@ -22,8 +22,20 @@ export function isEnabled(plugin: string) {
return pluginConfig !== undefined && pluginConfig.enabled;
}
export function setOptions<T>(plugin: string, options: T) {
/**
* Set options for a plugin
* @param plugin Plugin name
* @param options Options to set
* @param exclude Options to exclude from the options object
*/
export function setOptions<T>(plugin: string, options: T, exclude: string[] = ['enabled']) {
const plugins = store.get('plugins') as Record<string, T>;
// HACK: This is a workaround for preventing changed options from being overwritten
exclude.forEach((key) => {
if (Object.prototype.hasOwnProperty.call(options, key)) {
delete options[key as keyof T];
}
});
store.set('plugins', {
...plugins,
[plugin]: {
@ -33,8 +45,8 @@ export function setOptions<T>(plugin: string, options: T) {
});
}
export function setMenuOptions<T>(plugin: string, options: T) {
setOptions(plugin, options);
export function setMenuOptions<T>(plugin: string, options: T, exclude: string[] = ['enabled']) {
setOptions(plugin, options, exclude);
if (store.get('options.restartOnConfigChanges')) {
restart();
}
@ -45,11 +57,11 @@ export function getOptions<T>(plugin: string): T {
}
export function enable(plugin: string) {
setMenuOptions(plugin, { enabled: true });
setMenuOptions(plugin, { enabled: true }, []);
}
export function disable(plugin: string) {
setMenuOptions(plugin, { enabled: false });
setMenuOptions(plugin, { enabled: false }, []);
}
export default {

View File

@ -20,6 +20,13 @@ const setDefaultPluginOptions = (store: Conf<Record<string, unknown>>, plugin: k
};
const migrations = {
'>=2.1.3'(store: Conf<Record<string, unknown>>) {
const listenAlong = store.get('plugins.discord.listenAlong');
if (listenAlong !== undefined) {
store.set('plugins.discord.playOnYouTubeMusic', listenAlong);
store.delete('plugins.discord.listenAlong');
}
},
'>=2.1.0'(store: Conf<Record<string, unknown>>) {
const originalPreset = store.get('plugins.downloader.preset') as string | undefined;
if (originalPreset) {

View File

@ -170,7 +170,7 @@ export default (
largeImageKey: songInfo.imageSrc ?? '',
largeImageText: songInfo.album ?? '',
buttons: [
...(options.listenAlong ? [{ label: 'Listen Along', url: songInfo.url ?? '' }] : []),
...(options.playOnYouTubeMusic ? [{ label: 'Play on YouTube Music', url: songInfo.url ?? '' }] : []),
...(options.hideGitHubButton ? [] : [{ label: 'View App On GitHub', url: 'https://github.com/th-ch/youtube-music' }]),
],
};

View File

@ -47,11 +47,11 @@ export default (win: Electron.BrowserWindow, options: DiscordOptions, refreshMen
},
},
{
label: 'Listen Along',
label: 'Play on YouTube Music',
type: 'checkbox',
checked: options.listenAlong,
checked: options.playOnYouTubeMusic,
click(item: Electron.MenuItem) {
options.listenAlong = item.checked;
options.playOnYouTubeMusic = item.checked;
setMenuOptions('discord', options);
},
},

View File

@ -84,8 +84,8 @@ export const getCookieFromWindow = async (win: BrowserWindow) => {
url: 'https://music.youtube.com',
})
)
.map((it) => it.name + '=' + it.value + ';')
.join('');
.map((it) => it.name + '=' + it.value)
.join(';');
};
export default async (win_: BrowserWindow) => {
@ -450,12 +450,11 @@ export async function downloadPlaylist(givenUrl?: string | URL) {
try {
givenUrl = new URL(givenUrl ?? '');
} catch {
return;
givenUrl = new URL(win.webContents.getURL());
}
const playlistId =
getPlaylistID(givenUrl) ||
getPlaylistID(new URL(win.webContents.getURL())) ||
getPlaylistID(new URL(playingUrl));
if (!playlistId) {
@ -604,7 +603,7 @@ function getFFmpegMetadataArgs(metadata: CustomSongInfo) {
// Playlist radio modifier needs to be cut from playlist ID
const INVALID_PLAYLIST_MODIFIER = 'RDAMPL';
const getPlaylistID = (aURL: URL) => {
const getPlaylistID = (aURL?: URL): string | null | undefined => {
const result =
aURL?.searchParams.get('list') || aURL?.searchParams.get('playlist');
if (result?.startsWith(INVALID_PLAYLIST_MODIFIER)) {