mirror of
https://github.com/Mastermindzh/tidal-hifi.git
synced 2025-05-10 13:03:03 +02:00
Compare commits
No commits in common. "6385375fd6f2e38d75d871f43622a273c277364a" and "c975ecb16baa9e91ec089de9ef535ce5811800ba" have entirely different histories.
6385375fd6
...
c975ecb16b
40
.github/workflows/build.yml
vendored
40
.github/workflows/build.yml
vendored
@ -24,27 +24,23 @@ jobs:
|
|||||||
node-version: 22.4
|
node-version: 22.4
|
||||||
- run: npm install
|
- run: npm install
|
||||||
- run: npm run build
|
- run: npm run build
|
||||||
# - uses: actions/upload-artifact@master
|
|
||||||
# with:
|
|
||||||
# name: linux-builds
|
|
||||||
# path: dist/
|
|
||||||
|
|
||||||
# build_on_mac:
|
build_on_mac:
|
||||||
# runs-on: macos-latest
|
runs-on: macos-latest
|
||||||
# steps:
|
steps:
|
||||||
# - uses: actions/checkout@master
|
- uses: actions/checkout@master
|
||||||
# - uses: actions/setup-node@master
|
- uses: actions/setup-node@master
|
||||||
# with:
|
with:
|
||||||
# node-version: 22.4
|
node-version: 22.4
|
||||||
# - run: npm install
|
- run: npm install
|
||||||
# - run: npm run build
|
- run: npm run build
|
||||||
|
|
||||||
# build_on_win:
|
build_on_win:
|
||||||
# runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
# steps:
|
steps:
|
||||||
# - uses: actions/checkout@master
|
- uses: actions/checkout@master
|
||||||
# - uses: actions/setup-node@master
|
- uses: actions/setup-node@master
|
||||||
# with:
|
with:
|
||||||
# node-version: 22.4
|
node-version: 22.4
|
||||||
# - run: npm install
|
- run: npm install
|
||||||
# - run: npm run build
|
- run: npm run build
|
||||||
|
52
.github/workflows/release.yml
vendored
52
.github/workflows/release.yml
vendored
@ -29,30 +29,30 @@ jobs:
|
|||||||
name: linux-builds
|
name: linux-builds
|
||||||
path: dist/
|
path: dist/
|
||||||
|
|
||||||
# build_on_mac:
|
build_on_mac:
|
||||||
# runs-on: macos-latest
|
runs-on: macos-latest
|
||||||
# steps:
|
steps:
|
||||||
# - uses: actions/checkout@master
|
- uses: actions/checkout@master
|
||||||
# - uses: actions/setup-node@master
|
- uses: actions/setup-node@master
|
||||||
# with:
|
with:
|
||||||
# node-version: 22.4
|
node-version: 22.4
|
||||||
# - run: npm install
|
- run: npm install
|
||||||
# - run: npm run build
|
- run: npm run build
|
||||||
# - uses: actions/upload-artifact@master
|
- uses: actions/upload-artifact@master
|
||||||
# with:
|
with:
|
||||||
# name: mac-builds
|
name: mac-builds
|
||||||
# path: ./dist/
|
path: ./dist/
|
||||||
|
|
||||||
# build_on_win:
|
build_on_win:
|
||||||
# runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
# steps:
|
steps:
|
||||||
# - uses: actions/checkout@master
|
- uses: actions/checkout@master
|
||||||
# - uses: actions/setup-node@master
|
- uses: actions/setup-node@master
|
||||||
# with:
|
with:
|
||||||
# node-version: 22.4
|
node-version: 22.4
|
||||||
# - run: npm install
|
- run: npm install
|
||||||
# - run: npm run build
|
- run: npm run build
|
||||||
# - uses: actions/upload-artifact@master
|
- uses: actions/upload-artifact@master
|
||||||
# with:
|
with:
|
||||||
# name: windows-builds
|
name: windows-builds
|
||||||
# path: dist/
|
path: dist/
|
||||||
|
19
CHANGELOG.md
19
CHANGELOG.md
@ -4,25 +4,6 @@ All notable changes to this project will be documented in this file.
|
|||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
## [5.18.2]
|
|
||||||
|
|
||||||
- Reverted to sass 1.79.4 to fix `Nix` builds
|
|
||||||
- Changed electron-builder.base.yml to now generate the correct .desktop entries again
|
|
||||||
- Should fix flatpak build
|
|
||||||
|
|
||||||
## [5.18.1]
|
|
||||||
|
|
||||||
- Fixed the login bug
|
|
||||||
- Upgraded electron to 35.1.1
|
|
||||||
- Added Widevine/CDM info to startup
|
|
||||||
- delayed remote electron initializer
|
|
||||||
|
|
||||||
## [5.18.0]
|
|
||||||
|
|
||||||
- [Dianoga](https://github.com/Dianoga) fixed the duration selector, restoring mpris & partial API data.
|
|
||||||
- PR: #554
|
|
||||||
- Added `xesam:url` property to mpris metadata fixes [#506](https://github.com/Mastermindzh/tidal-hifi/issues/506)
|
|
||||||
|
|
||||||
## [5.17.0]
|
## [5.17.0]
|
||||||
|
|
||||||
- Added an option to disable the dynamic title and set it to a static one, [#491](https://github.com/Mastermindzh/tidal-hifi/pull/491)
|
- Added an option to disable the dynamic title and set it to a static one, [#491](https://github.com/Mastermindzh/tidal-hifi/pull/491)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
appId: com.rickvanlieshout.tidal-hifi
|
appId: com.rickvanlieshout.tidal-hifi
|
||||||
electronVersion: 35.1.1
|
electronVersion: 28.1.1
|
||||||
electronDownload:
|
electronDownload:
|
||||||
version: 35.1.1+wvcus
|
version: 28.1.1+wvcus
|
||||||
mirror: https://github.com/castlabs/electron-releases/releases/download/v
|
mirror: https://github.com/castlabs/electron-releases/releases/download/v
|
||||||
snap:
|
snap:
|
||||||
plugs:
|
plugs:
|
||||||
@ -22,19 +22,19 @@ linux:
|
|||||||
"--enable-features=WaylandWindowDecorations",
|
"--enable-features=WaylandWindowDecorations",
|
||||||
]
|
]
|
||||||
desktop:
|
desktop:
|
||||||
entry:
|
Encoding: UTF-8
|
||||||
Encoding: "UTF-8"
|
Name: TIDAL Hi-Fi
|
||||||
Name: "TIDAL Hi-Fi"
|
GenericName: TIDAL Hi-Fi
|
||||||
GenericName: "TIDAL Hi-Fi"
|
Comment: The web version of listen.tidal.com running in electron with hifi support thanks to widevine.
|
||||||
Comment: "The web version of listen.tidal.com running in electron with hifi support thanks to widevine."
|
Icon: tidal-hifi
|
||||||
Icon: "tidal-hifi"
|
StartupNotify: true
|
||||||
StartupNotify: "true"
|
Terminal: false
|
||||||
Terminal: "false"
|
Type: Application
|
||||||
Type: "Application"
|
Categories: Network;Application;AudioVideo;Audio;Video
|
||||||
Categories: "Network;Application;AudioVideo;Audio;Video"
|
StartupWMClass: tidal-hifi
|
||||||
StartupWMClass: "tidal-hifi"
|
X-PulseAudio-Properties: media.role=music
|
||||||
X-PulseAudio-Properties: "media.role=music"
|
MimeType: x-scheme-handler/tidal;
|
||||||
MimeType: "x-scheme-handler/tidal;"
|
|
||||||
mac:
|
mac:
|
||||||
category: public.app-category.entertainment
|
category: public.app-category.entertainment
|
||||||
win:
|
win:
|
||||||
|
4514
package-lock.json
generated
4514
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
20
package.json
20
package.json
@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"name": "tidal-hifi",
|
"name": "tidal-hifi",
|
||||||
"version": "5.18.2",
|
"version": "5.17.0",
|
||||||
"description": "Tidal on Electron with widevine(hifi) support",
|
"description": "Tidal on Electron with widevine(hifi) support",
|
||||||
"main": "ts-dist/main.js",
|
"main": "ts-dist/main.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "electron --inspect=0.0.0.0:5858 --remote-debugging-port=8315 --remote-allow-origins=* .",
|
"start": "electron --inspect=0.0.0.0:5858 .",
|
||||||
"watchStart": "nodemon dist -x \"npm run start\"",
|
"watchStart": "nodemon dist -x \"npm run start\"",
|
||||||
"compile": "tsc && npm run sass-and-copy",
|
"compile": "tsc && npm run sass-and-copy",
|
||||||
"deps": "npm run watch",
|
"deps": "npm run watch",
|
||||||
@ -43,16 +43,16 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@electron/remote": "^2.1.2",
|
"@electron/remote": "^2.1.2",
|
||||||
"@types/swagger-jsdoc": "^6.0.4",
|
"@types/swagger-jsdoc": "^6.0.4",
|
||||||
"@xhayper/discord-rpc": "^1.2.1",
|
"@xhayper/discord-rpc": "^1.2.0",
|
||||||
"axios": "^1.8.4",
|
"axios": "^1.7.9",
|
||||||
|
"cors": "^2.8.5",
|
||||||
"electron-store": "^8.2.0",
|
"electron-store": "^8.2.0",
|
||||||
"express": "^4.21.2",
|
"express": "^4.21.2",
|
||||||
"hotkeys-js": "^3.13.9",
|
"hotkeys-js": "^3.13.9",
|
||||||
"mpris-service": "^2.1.2",
|
"mpris-service": "^2.1.2",
|
||||||
"sass": "1.85.1",
|
"request": "^2.88.2",
|
||||||
"swagger-ui-express": "^5.0.1",
|
"sass": "^1.79.4",
|
||||||
"cors": "^2.8.5",
|
"swagger-ui-express": "^5.0.1"
|
||||||
"request": "^2.88.2"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@mastermindzh/prettier-config": "^1.0.0",
|
"@mastermindzh/prettier-config": "^1.0.0",
|
||||||
@ -64,8 +64,8 @@
|
|||||||
"@typescript-eslint/eslint-plugin": "^7.16.0",
|
"@typescript-eslint/eslint-plugin": "^7.16.0",
|
||||||
"@typescript-eslint/parser": "^7.15.0",
|
"@typescript-eslint/parser": "^7.15.0",
|
||||||
"copyfiles": "^2.4.1",
|
"copyfiles": "^2.4.1",
|
||||||
"electron": "github:castlabs/electron-releases#v35.1.1+wvcus",
|
"electron": "git+https://github.com/castlabs/electron-releases#v31.1.0+wvcus",
|
||||||
"electron-builder": "~26.0.12",
|
"electron-builder": "~24.9.4",
|
||||||
"eslint": "^8.57.0",
|
"eslint": "^8.57.0",
|
||||||
"js-yaml": "^4.1.0",
|
"js-yaml": "^4.1.0",
|
||||||
"markdown-toc": "^1.2.0",
|
"markdown-toc": "^1.2.0",
|
||||||
|
@ -22,13 +22,12 @@
|
|||||||
media: '*[data-test="current-media-imagery"]',
|
media: '*[data-test="current-media-imagery"]',
|
||||||
image: "img",
|
image: "img",
|
||||||
current: '*[data-test="current-time"]',
|
current: '*[data-test="current-time"]',
|
||||||
duration: '*[class^=_playbackControlsContainer] *[data-test="duration"]',
|
duration: '*[class^=playbackControlsContainer] *[data-test="duration"]',
|
||||||
bar: '*[data-test="progress-bar"]',
|
bar: '*[data-test="progress-bar"]',
|
||||||
footer: "#footerPlayer",
|
footer: "#footerPlayer",
|
||||||
mediaItem: "[data-type='mediaItem']",
|
mediaItem: "[data-type='mediaItem']",
|
||||||
album_header_title: '*[class^="_playingFrom"] span:nth-child(2)',
|
album_header_title: '*[class^="playingFrom"] span:nth-child(2)',
|
||||||
playing_from: '*[class^="_playingFrom"] span:nth-child(2)',
|
playingFrom: '*[class^="playingFrom"] span:nth-child(2)',
|
||||||
queue_album: "*[class^=playQueueItemsContainer] *[class^=groupTitle] span:nth-child(2)",
|
|
||||||
currentlyPlaying: "[class^='isPlayingIcon'], [data-test-is-playing='true']",
|
currentlyPlaying: "[class^='isPlayingIcon'], [data-test-is-playing='true']",
|
||||||
album_name_cell: '[class^="album"]',
|
album_name_cell: '[class^="album"]',
|
||||||
tracklist_row: '[data-test="tracklist-row"]',
|
tracklist_row: '[data-test="tracklist-row"]',
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
"openapi": "3.1.0",
|
"openapi": "3.1.0",
|
||||||
"info": {
|
"info": {
|
||||||
"title": "TIDAL Hi-Fi API",
|
"title": "TIDAL Hi-Fi API",
|
||||||
"version": "5.18.2",
|
"version": "5.17.0",
|
||||||
"description": "",
|
"description": "",
|
||||||
"license": {
|
"license": {
|
||||||
"name": "MIT",
|
"name": "MIT",
|
||||||
@ -21,7 +21,9 @@
|
|||||||
"/current": {
|
"/current": {
|
||||||
"get": {
|
"get": {
|
||||||
"summary": "Get current media info",
|
"summary": "Get current media info",
|
||||||
"tags": ["current"],
|
"tags": [
|
||||||
|
"current"
|
||||||
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
"description": "Current media info",
|
"description": "Current media info",
|
||||||
@ -39,7 +41,9 @@
|
|||||||
"/current/image": {
|
"/current/image": {
|
||||||
"get": {
|
"get": {
|
||||||
"summary": "Get current media image",
|
"summary": "Get current media image",
|
||||||
"tags": ["current"],
|
"tags": [
|
||||||
|
"current"
|
||||||
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
"description": "Current media image",
|
"description": "Current media image",
|
||||||
@ -61,7 +65,9 @@
|
|||||||
"/player/play": {
|
"/player/play": {
|
||||||
"post": {
|
"post": {
|
||||||
"summary": "Play the current media",
|
"summary": "Play the current media",
|
||||||
"tags": ["player"],
|
"tags": [
|
||||||
|
"player"
|
||||||
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
"description": "Ok",
|
"description": "Ok",
|
||||||
@ -79,7 +85,9 @@
|
|||||||
"/player/favorite/toggle": {
|
"/player/favorite/toggle": {
|
||||||
"post": {
|
"post": {
|
||||||
"summary": "Add the current media to your favorites, or remove it if its already added to your favorites",
|
"summary": "Add the current media to your favorites, or remove it if its already added to your favorites",
|
||||||
"tags": ["player"],
|
"tags": [
|
||||||
|
"player"
|
||||||
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
"description": "Ok",
|
"description": "Ok",
|
||||||
@ -97,7 +105,9 @@
|
|||||||
"/player/pause": {
|
"/player/pause": {
|
||||||
"post": {
|
"post": {
|
||||||
"summary": "Pause the current media",
|
"summary": "Pause the current media",
|
||||||
"tags": ["player"],
|
"tags": [
|
||||||
|
"player"
|
||||||
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
"description": "Ok",
|
"description": "Ok",
|
||||||
@ -115,7 +125,9 @@
|
|||||||
"/player/next": {
|
"/player/next": {
|
||||||
"post": {
|
"post": {
|
||||||
"summary": "Play the next song",
|
"summary": "Play the next song",
|
||||||
"tags": ["player"],
|
"tags": [
|
||||||
|
"player"
|
||||||
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
"description": "Ok",
|
"description": "Ok",
|
||||||
@ -133,7 +145,9 @@
|
|||||||
"/player/previous": {
|
"/player/previous": {
|
||||||
"post": {
|
"post": {
|
||||||
"summary": "Play the previous song",
|
"summary": "Play the previous song",
|
||||||
"tags": ["player"],
|
"tags": [
|
||||||
|
"player"
|
||||||
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
"description": "Ok",
|
"description": "Ok",
|
||||||
@ -151,7 +165,9 @@
|
|||||||
"/player/shuffle/toggle": {
|
"/player/shuffle/toggle": {
|
||||||
"post": {
|
"post": {
|
||||||
"summary": "Play the previous song",
|
"summary": "Play the previous song",
|
||||||
"tags": ["player"],
|
"tags": [
|
||||||
|
"player"
|
||||||
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
"description": "Ok",
|
"description": "Ok",
|
||||||
@ -169,7 +185,9 @@
|
|||||||
"/player/repeat/toggle": {
|
"/player/repeat/toggle": {
|
||||||
"post": {
|
"post": {
|
||||||
"summary": "Toggle the repeat status, toggles between \"off\" , \"single\" and \"all\"",
|
"summary": "Toggle the repeat status, toggles between \"off\" , \"single\" and \"all\"",
|
||||||
"tags": ["player"],
|
"tags": [
|
||||||
|
"player"
|
||||||
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
"description": "Ok",
|
"description": "Ok",
|
||||||
@ -187,7 +205,9 @@
|
|||||||
"/player/playpause": {
|
"/player/playpause": {
|
||||||
"post": {
|
"post": {
|
||||||
"summary": "Start playing the media if paused, or pause the media if playing",
|
"summary": "Start playing the media if paused, or pause the media if playing",
|
||||||
"tags": ["player"],
|
"tags": [
|
||||||
|
"player"
|
||||||
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
"description": "Ok",
|
"description": "Ok",
|
||||||
@ -205,7 +225,9 @@
|
|||||||
"/settings/skipped-artists": {
|
"/settings/skipped-artists": {
|
||||||
"get": {
|
"get": {
|
||||||
"summary": "get a list of artists that TIDAL Hi-Fi will skip if skipping is enabled",
|
"summary": "get a list of artists that TIDAL Hi-Fi will skip if skipping is enabled",
|
||||||
"tags": ["settings"],
|
"tags": [
|
||||||
|
"settings"
|
||||||
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
"description": "The list book.",
|
"description": "The list book.",
|
||||||
@ -221,7 +243,9 @@
|
|||||||
},
|
},
|
||||||
"post": {
|
"post": {
|
||||||
"summary": "Add new artists to the list of skipped artists",
|
"summary": "Add new artists to the list of skipped artists",
|
||||||
"tags": ["settings"],
|
"tags": [
|
||||||
|
"settings"
|
||||||
|
],
|
||||||
"requestBody": {
|
"requestBody": {
|
||||||
"required": true,
|
"required": true,
|
||||||
"content": {
|
"content": {
|
||||||
@ -242,7 +266,9 @@
|
|||||||
"/settings/skipped-artists/delete": {
|
"/settings/skipped-artists/delete": {
|
||||||
"post": {
|
"post": {
|
||||||
"summary": "Remove artists from the list of skipped artists",
|
"summary": "Remove artists from the list of skipped artists",
|
||||||
"tags": ["settings"],
|
"tags": [
|
||||||
|
"settings"
|
||||||
|
],
|
||||||
"requestBody": {
|
"requestBody": {
|
||||||
"required": true,
|
"required": true,
|
||||||
"content": {
|
"content": {
|
||||||
@ -263,7 +289,9 @@
|
|||||||
"/settings/skipped-artists/current": {
|
"/settings/skipped-artists/current": {
|
||||||
"post": {
|
"post": {
|
||||||
"summary": "Add the current artist to the list of skipped artists",
|
"summary": "Add the current artist to the list of skipped artists",
|
||||||
"tags": ["settings"],
|
"tags": [
|
||||||
|
"settings"
|
||||||
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
"description": "Ok"
|
"description": "Ok"
|
||||||
@ -272,7 +300,9 @@
|
|||||||
},
|
},
|
||||||
"delete": {
|
"delete": {
|
||||||
"summary": "Remove the current artist from the list of skipped artists",
|
"summary": "Remove the current artist from the list of skipped artists",
|
||||||
"tags": ["settings"],
|
"tags": [
|
||||||
|
"settings"
|
||||||
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
"description": "Ok"
|
"description": "Ok"
|
||||||
@ -283,7 +313,9 @@
|
|||||||
"/image": {
|
"/image": {
|
||||||
"get": {
|
"get": {
|
||||||
"summary": "Get current image",
|
"summary": "Get current image",
|
||||||
"tags": ["legacy"],
|
"tags": [
|
||||||
|
"legacy"
|
||||||
|
],
|
||||||
"deprecated": true,
|
"deprecated": true,
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
@ -306,7 +338,9 @@
|
|||||||
"/play": {
|
"/play": {
|
||||||
"get": {
|
"get": {
|
||||||
"summary": "Play the current media",
|
"summary": "Play the current media",
|
||||||
"tags": ["legacy"],
|
"tags": [
|
||||||
|
"legacy"
|
||||||
|
],
|
||||||
"deprecated": true,
|
"deprecated": true,
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
@ -325,7 +359,9 @@
|
|||||||
"/favorite/toggle": {
|
"/favorite/toggle": {
|
||||||
"get": {
|
"get": {
|
||||||
"summary": "Add the current media to your favorites, or remove it if its already added to your favorites",
|
"summary": "Add the current media to your favorites, or remove it if its already added to your favorites",
|
||||||
"tags": ["legacy"],
|
"tags": [
|
||||||
|
"legacy"
|
||||||
|
],
|
||||||
"deprecated": true,
|
"deprecated": true,
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
@ -344,7 +380,9 @@
|
|||||||
"/pause": {
|
"/pause": {
|
||||||
"get": {
|
"get": {
|
||||||
"summary": "Pause the current media",
|
"summary": "Pause the current media",
|
||||||
"tags": ["legacy"],
|
"tags": [
|
||||||
|
"legacy"
|
||||||
|
],
|
||||||
"deprecated": true,
|
"deprecated": true,
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
@ -363,7 +401,9 @@
|
|||||||
"/next": {
|
"/next": {
|
||||||
"get": {
|
"get": {
|
||||||
"summary": "Play the next song",
|
"summary": "Play the next song",
|
||||||
"tags": ["legacy"],
|
"tags": [
|
||||||
|
"legacy"
|
||||||
|
],
|
||||||
"deprecated": true,
|
"deprecated": true,
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
@ -382,7 +422,9 @@
|
|||||||
"/previous": {
|
"/previous": {
|
||||||
"get": {
|
"get": {
|
||||||
"summary": "Play the previous song",
|
"summary": "Play the previous song",
|
||||||
"tags": ["legacy"],
|
"tags": [
|
||||||
|
"legacy"
|
||||||
|
],
|
||||||
"deprecated": true,
|
"deprecated": true,
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
@ -401,7 +443,9 @@
|
|||||||
"/playpause": {
|
"/playpause": {
|
||||||
"get": {
|
"get": {
|
||||||
"summary": "Toggle play/pause",
|
"summary": "Toggle play/pause",
|
||||||
"tags": ["legacy"],
|
"tags": [
|
||||||
|
"legacy"
|
||||||
|
],
|
||||||
"deprecated": true,
|
"deprecated": true,
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
@ -514,7 +558,10 @@
|
|||||||
"items": {
|
"items": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"example": ["Artist1", "Artist2"]
|
"example": [
|
||||||
|
"Artist1",
|
||||||
|
"Artist2"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -26,6 +26,7 @@ import {
|
|||||||
import { addTray, refreshTray } from "./scripts/tray";
|
import { addTray, refreshTray } from "./scripts/tray";
|
||||||
let mainInhibitorId = -1;
|
let mainInhibitorId = -1;
|
||||||
|
|
||||||
|
initialize();
|
||||||
let mainWindow: BrowserWindow;
|
let mainWindow: BrowserWindow;
|
||||||
const icon = path.join(__dirname, "../assets/icon.png");
|
const icon = path.join(__dirname, "../assets/icon.png");
|
||||||
const PROTOCOL_PREFIX = "tidal";
|
const PROTOCOL_PREFIX = "tidal";
|
||||||
@ -97,7 +98,6 @@ function createWindow(options = { x: 0, y: 0, backgroundColor: "white" }) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
enable(mainWindow.webContents);
|
enable(mainWindow.webContents);
|
||||||
registerHttpProtocols();
|
registerHttpProtocols();
|
||||||
syncMenuBarWithStore();
|
syncMenuBarWithStore();
|
||||||
@ -126,7 +126,6 @@ function createWindow(options = { x: 0, y: 0, backgroundColor: "white" }) {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
// Emitted when the window is closed.
|
// Emitted when the window is closed.
|
||||||
mainWindow.on("closed", function () {
|
mainWindow.on("closed", function () {
|
||||||
releaseInhibitorIfActive(mainInhibitorId);
|
releaseInhibitorIfActive(mainInhibitorId);
|
||||||
@ -179,7 +178,6 @@ app.on("ready", async () => {
|
|||||||
|
|
||||||
if (isMainInstance() || isMultipleInstancesAllowed()) {
|
if (isMainInstance() || isMultipleInstancesAllowed()) {
|
||||||
await components.whenReady();
|
await components.whenReady();
|
||||||
initialize();
|
|
||||||
|
|
||||||
// Adblock
|
// Adblock
|
||||||
if (settingsStore.get(settings.adBlock)) {
|
if (settingsStore.get(settings.adBlock)) {
|
||||||
@ -190,8 +188,6 @@ app.on("ready", async () => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger.log("components ready:", components.status());
|
|
||||||
|
|
||||||
createWindow();
|
createWindow();
|
||||||
addMenu(mainWindow);
|
addMenu(mainWindow);
|
||||||
createSettingsWindow();
|
createSettingsWindow();
|
||||||
|
@ -1,25 +1,34 @@
|
|||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
|
<head>
|
||||||
<head>
|
|
||||||
<title>Tidal Hi-Fi settings</title>
|
<title>Tidal Hi-Fi settings</title>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
|
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
|
||||||
<link rel="stylesheet" href="./settings.css" />
|
<link rel="stylesheet" href="./settings.css" />
|
||||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" />
|
<link
|
||||||
</head>
|
rel="stylesheet"
|
||||||
|
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
|
||||||
|
/>
|
||||||
|
</head>
|
||||||
|
|
||||||
<body class="settings-window">
|
<body class="settings-window">
|
||||||
<div class="settings-window__wrapper">
|
<div class="settings-window__wrapper">
|
||||||
<div class="settings-window__drag-area"></div>
|
<div class="settings-window__drag-area"></div>
|
||||||
<a id="close" class="settings-window__close-button" title="Close settings">
|
<a id="close" class="settings-window__close-button" title="Close settings">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 348.333 348.334" class="settings-window__svg-icon">
|
<svg
|
||||||
<path fill="white" d="M336.559,68.611L231.016,174.165l105.543,105.549c15.699,15.705,15.699,41.145,0,56.85
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
viewBox="0 0 348.333 348.334"
|
||||||
|
class="settings-window__svg-icon"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
fill="white"
|
||||||
|
d="M336.559,68.611L231.016,174.165l105.543,105.549c15.699,15.705,15.699,41.145,0,56.85
|
||||||
c-7.844,7.844-18.128,11.769-28.407,11.769c-10.296,0-20.581-3.919-28.419-11.769L174.167,231.003L68.609,336.563
|
c-7.844,7.844-18.128,11.769-28.407,11.769c-10.296,0-20.581-3.919-28.419-11.769L174.167,231.003L68.609,336.563
|
||||||
c-7.843,7.844-18.128,11.769-28.416,11.769c-10.285,0-20.563-3.919-28.413-11.769c-15.699-15.698-15.699-41.139,0-56.85
|
c-7.843,7.844-18.128,11.769-28.416,11.769c-10.285,0-20.563-3.919-28.413-11.769c-15.699-15.698-15.699-41.139,0-56.85
|
||||||
l105.54-105.549L11.774,68.611c-15.699-15.699-15.699-41.145,0-56.844c15.696-15.687,41.127-15.687,56.829,0l105.563,105.554
|
l105.54-105.549L11.774,68.611c-15.699-15.699-15.699-41.145,0-56.844c15.696-15.687,41.127-15.687,56.829,0l105.563,105.554
|
||||||
L279.721,11.767c15.705-15.687,41.139-15.687,56.832,0C352.258,27.466,352.258,52.912,336.559,68.611z" />
|
L279.721,11.767c15.705-15.687,41.139-15.687,56.832,0C352.258,27.466,352.258,52.912,336.559,68.611z"
|
||||||
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
@ -66,7 +75,13 @@
|
|||||||
<span class="switch__slider"></span>
|
<span class="switch__slider"></span>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<textarea id="skippedArtists" class="textarea" cols="40" rows="5" spellcheck="false"></textarea>
|
<textarea
|
||||||
|
id="skippedArtists"
|
||||||
|
class="textarea"
|
||||||
|
cols="40"
|
||||||
|
rows="5"
|
||||||
|
spellcheck="false"
|
||||||
|
></textarea>
|
||||||
<div class="group__option">
|
<div class="group__option">
|
||||||
<div class="group__description">
|
<div class="group__description">
|
||||||
<h4>Block ads</h4>
|
<h4>Block ads</h4>
|
||||||
@ -134,7 +149,9 @@
|
|||||||
<h4>Hotkeys</h4>
|
<h4>Hotkeys</h4>
|
||||||
<p>
|
<p>
|
||||||
Enable extra hotkeys to achieve feature parity with the
|
Enable extra hotkeys to achieve feature parity with the
|
||||||
<a class="external-link" data-url="https://defkey.com/tidal-desktop-shortcuts">desktop apps</a>.
|
<a class="external-link" data-url="https://defkey.com/tidal-desktop-shortcuts"
|
||||||
|
>desktop apps</a
|
||||||
|
>.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<label class="switch">
|
<label class="switch">
|
||||||
@ -255,7 +272,12 @@
|
|||||||
<div class="group__description">
|
<div class="group__description">
|
||||||
<h4>Idle Text</h4>
|
<h4>Idle Text</h4>
|
||||||
<p>The text displayed on Discord's rich presence while idling in the app.</p>
|
<p>The text displayed on Discord's rich presence while idling in the app.</p>
|
||||||
<input id="discord_idle_text" type="text" class="text-input" name="discord_idle_text" />
|
<input
|
||||||
|
id="discord_idle_text"
|
||||||
|
type="text"
|
||||||
|
class="text-input"
|
||||||
|
name="discord_idle_text"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -265,7 +287,12 @@
|
|||||||
<p>
|
<p>
|
||||||
The text displayed on Discord's rich presence while "showSong" is turned off
|
The text displayed on Discord's rich presence while "showSong" is turned off
|
||||||
</p>
|
</p>
|
||||||
<input id="discord_using_text" type="text" class="text-input" name="discord_using_text" />
|
<input
|
||||||
|
id="discord_using_text"
|
||||||
|
type="text"
|
||||||
|
class="text-input"
|
||||||
|
name="discord_using_text"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -296,7 +323,12 @@
|
|||||||
<div class="group__description">
|
<div class="group__description">
|
||||||
<h4>Details prefix</h4>
|
<h4>Details prefix</h4>
|
||||||
<p>Prefix for the "details" field of Discord's rich presence.</p>
|
<p>Prefix for the "details" field of Discord's rich presence.</p>
|
||||||
<input id="discord_details_prefix" type="text" class="text-input" name="discord_details_prefix" />
|
<input
|
||||||
|
id="discord_details_prefix"
|
||||||
|
type="text"
|
||||||
|
class="text-input"
|
||||||
|
name="discord_details_prefix"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -304,7 +336,12 @@
|
|||||||
<div class="group__description">
|
<div class="group__description">
|
||||||
<h4>Button text</h4>
|
<h4>Button text</h4>
|
||||||
<p>Text to display on the button below the media information.</p>
|
<p>Text to display on the button below the media information.</p>
|
||||||
<input id="discord_button_text" type="text" class="text-input" name="discord_button_text" />
|
<input
|
||||||
|
id="discord_button_text"
|
||||||
|
type="text"
|
||||||
|
class="text-input"
|
||||||
|
name="discord_button_text"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -330,14 +367,24 @@
|
|||||||
There are multiple instances for ListenBrainz you can set the corresponding
|
There are multiple instances for ListenBrainz you can set the corresponding
|
||||||
API url below.
|
API url below.
|
||||||
</p>
|
</p>
|
||||||
<input id="ListenBrainzAPI" type="text" class="text-input" name="ListenBrainzAPI" />
|
<input
|
||||||
|
id="ListenBrainzAPI"
|
||||||
|
type="text"
|
||||||
|
class="text-input"
|
||||||
|
name="ListenBrainzAPI"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="group__option">
|
<div class="group__option">
|
||||||
<div class="group__description">
|
<div class="group__description">
|
||||||
<h4>ListenBrainz User Token</h4>
|
<h4>ListenBrainz User Token</h4>
|
||||||
<p>Provide the user token you can get from the settings page.</p>
|
<p>Provide the user token you can get from the settings page.</p>
|
||||||
<input id="ListenBrainzToken" type="text" class="text-input" name="ListenBrainzToken" />
|
<input
|
||||||
|
id="ListenBrainzToken"
|
||||||
|
type="text"
|
||||||
|
class="text-input"
|
||||||
|
name="ListenBrainzToken"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -347,7 +394,12 @@
|
|||||||
The delay (in ms) to send a listen to ListenBrainz. Prevents spamming the API when
|
The delay (in ms) to send a listen to ListenBrainz. Prevents spamming the API when
|
||||||
you fast forward immediately
|
you fast forward immediately
|
||||||
</p>
|
</p>
|
||||||
<input id="listenbrainz_delay" type="number" class="text-input" name="listenbrainz_delay" />
|
<input
|
||||||
|
id="listenbrainz_delay"
|
||||||
|
type="number"
|
||||||
|
class="text-input"
|
||||||
|
name="listenbrainz_delay"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
@ -363,7 +415,12 @@
|
|||||||
info by scraping the website. The default of 500 seems to work in more cases but
|
info by scraping the website. The default of 500 seems to work in more cases but
|
||||||
if you are fine with a bit more resource usage you can decrease it as well.
|
if you are fine with a bit more resource usage you can decrease it as well.
|
||||||
</p>
|
</p>
|
||||||
<input id="updateFrequency" type="number" class="text-input" name="updateFrequency" />
|
<input
|
||||||
|
id="updateFrequency"
|
||||||
|
type="number"
|
||||||
|
class="text-input"
|
||||||
|
name="updateFrequency"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -449,7 +506,13 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<textarea id="customCSS" class="textarea" cols="40" rows="8" spellcheck="false"></textarea>
|
<textarea
|
||||||
|
id="customCSS"
|
||||||
|
class="textarea"
|
||||||
|
cols="40"
|
||||||
|
rows="8"
|
||||||
|
spellcheck="false"
|
||||||
|
></textarea>
|
||||||
|
|
||||||
<div class="group">
|
<div class="group">
|
||||||
<p class="group__title">Theme files</p>
|
<p class="group__title">Theme files</p>
|
||||||
@ -474,7 +537,13 @@
|
|||||||
<div>
|
<div>
|
||||||
<span class="file-btn">Choose files</span>
|
<span class="file-btn">Choose files</span>
|
||||||
<span id="file-message" class="file-msg">or drag and drop files here</span>
|
<span id="file-message" class="file-msg">or drag and drop files here</span>
|
||||||
<input id="theme-files" class="file-input" type="file" accept=".css" multiple />
|
<input
|
||||||
|
id="theme-files"
|
||||||
|
class="file-input"
|
||||||
|
type="file"
|
||||||
|
accept=".css"
|
||||||
|
multiple
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -486,17 +555,35 @@
|
|||||||
<img alt="tidal icon" class="about-section__icon" src="./icon.png" />
|
<img alt="tidal icon" class="about-section__icon" src="./icon.png" />
|
||||||
<h4>TIDAL Hi-Fi</h4>
|
<h4>TIDAL Hi-Fi</h4>
|
||||||
<div class="about-section__version">
|
<div class="about-section__version">
|
||||||
<a target="_blank" rel="noopener"
|
<a
|
||||||
href="https://github.com/Mastermindzh/tidal-hifi/releases/tag/5.18.2">5.18.2</a>
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
href="https://github.com/Mastermindzh/tidal-hifi/releases/tag/5.17.0"
|
||||||
|
>5.17.0</a
|
||||||
|
>
|
||||||
</div>
|
</div>
|
||||||
<div class="about-section__links">
|
<div class="about-section__links">
|
||||||
<a target="_blank" rel="noopener" href="https://github.com/mastermindzh/tidal-hifi/"
|
<a
|
||||||
class="about-section__button">Github
|
target="_blank"
|
||||||
<i class="fa fa-external-link"></i></a>
|
rel="noopener"
|
||||||
<a target="_blank" rel="noopener" href="https://github.com/Mastermindzh/tidal-hifi/issues"
|
href="https://github.com/mastermindzh/tidal-hifi/"
|
||||||
class="about-section__button">Report an issue <i class="fa fa-external-link"></i></a>
|
class="about-section__button"
|
||||||
<a target="_blank" rel="noopener" href="https://github.com/Mastermindzh/tidal-hifi/graphs/contributors"
|
>Github <i class="fa fa-external-link"></i
|
||||||
class="about-section__button">Contributors <i class="fa fa-external-link"></i></a>
|
></a>
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
href="https://github.com/Mastermindzh/tidal-hifi/issues"
|
||||||
|
class="about-section__button"
|
||||||
|
>Report an issue <i class="fa fa-external-link"></i
|
||||||
|
></a>
|
||||||
|
<a
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
href="https://github.com/Mastermindzh/tidal-hifi/graphs/contributors"
|
||||||
|
class="about-section__button"
|
||||||
|
>Contributors <i class="fa fa-external-link"></i
|
||||||
|
></a>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
@ -508,6 +595,5 @@
|
|||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
@ -313,7 +313,6 @@ function updateMpris(mediaInfo: MediaInfo) {
|
|||||||
"xesam:title": mediaInfo.title,
|
"xesam:title": mediaInfo.title,
|
||||||
"xesam:artist": [mediaInfo.artists],
|
"xesam:artist": [mediaInfo.artists],
|
||||||
"xesam:album": mediaInfo.album,
|
"xesam:album": mediaInfo.album,
|
||||||
"xesam:url": mediaInfo.url,
|
|
||||||
"mpris:artUrl": mediaInfo.image,
|
"mpris:artUrl": mediaInfo.image,
|
||||||
"mpris:length": convertDurationToSeconds(mediaInfo.duration) * 1000 * 1000,
|
"mpris:length": convertDurationToSeconds(mediaInfo.duration) * 1000 * 1000,
|
||||||
"mpris:trackid": "/org/mpris/MediaPlayer2/track/" + tidalController.getTrackId(),
|
"mpris:trackid": "/org/mpris/MediaPlayer2/track/" + tidalController.getTrackId(),
|
||||||
|
@ -103,7 +103,8 @@ const getActivity = (): SetActivity => {
|
|||||||
if (includeTimestamps) {
|
if (includeTimestamps) {
|
||||||
const currentSeconds = convertDurationToSeconds(mediaInfo.current);
|
const currentSeconds = convertDurationToSeconds(mediaInfo.current);
|
||||||
const durationSeconds = convertDurationToSeconds(mediaInfo.duration);
|
const durationSeconds = convertDurationToSeconds(mediaInfo.duration);
|
||||||
const now = Math.trunc((Date.now() + 500) / 1000);
|
const date = new Date();
|
||||||
|
const now = Math.floor(date.getTime() / 1000);
|
||||||
presence.startTimestamp = now - currentSeconds;
|
presence.startTimestamp = now - currentSeconds;
|
||||||
presence.endTimestamp = presence.startTimestamp + durationSeconds;
|
presence.endTimestamp = presence.startTimestamp + durationSeconds;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user