mirror of
https://github.com/Mastermindzh/tidal-hifi.git
synced 2025-05-10 04:53:07 +02:00
Compare commits
24 Commits
c975ecb16b
...
6385375fd6
Author | SHA1 | Date | |
---|---|---|---|
6385375fd6 | |||
8fc49f500e | |||
|
49f5a01b58 | ||
48f4fe47ef | |||
a819e1eb45 | |||
57e6342b5f | |||
58a543a3c8 | |||
1c915d99fe | |||
|
8994360415 | ||
a5c0d9e6e8 | |||
f8eb36f4c7 | |||
5ca90c25d3 | |||
cf86969cfc | |||
afd05ae88b | |||
72c25dfdc1 | |||
|
25b30edf31 | ||
a08fad421a | |||
35ed4807e3 | |||
deff9524a8 | |||
34c7777eeb | |||
048e949f30 | |||
|
4a976bc58c | ||
aaf7a1b662 | |||
|
a3aa45a96b |
40
.github/workflows/build.yml
vendored
40
.github/workflows/build.yml
vendored
@ -24,23 +24,27 @@ jobs:
|
||||
node-version: 22.4
|
||||
- run: npm install
|
||||
- run: npm run build
|
||||
# - uses: actions/upload-artifact@master
|
||||
# with:
|
||||
# name: linux-builds
|
||||
# path: dist/
|
||||
|
||||
build_on_mac:
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@master
|
||||
- uses: actions/setup-node@master
|
||||
with:
|
||||
node-version: 22.4
|
||||
- run: npm install
|
||||
- run: npm run build
|
||||
# build_on_mac:
|
||||
# runs-on: macos-latest
|
||||
# steps:
|
||||
# - uses: actions/checkout@master
|
||||
# - uses: actions/setup-node@master
|
||||
# with:
|
||||
# node-version: 22.4
|
||||
# - run: npm install
|
||||
# - run: npm run build
|
||||
|
||||
build_on_win:
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@master
|
||||
- uses: actions/setup-node@master
|
||||
with:
|
||||
node-version: 22.4
|
||||
- run: npm install
|
||||
- run: npm run build
|
||||
# build_on_win:
|
||||
# runs-on: windows-latest
|
||||
# steps:
|
||||
# - uses: actions/checkout@master
|
||||
# - uses: actions/setup-node@master
|
||||
# with:
|
||||
# node-version: 22.4
|
||||
# - run: npm install
|
||||
# - run: npm run build
|
||||
|
52
.github/workflows/release.yml
vendored
52
.github/workflows/release.yml
vendored
@ -29,30 +29,30 @@ jobs:
|
||||
name: linux-builds
|
||||
path: dist/
|
||||
|
||||
build_on_mac:
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@master
|
||||
- uses: actions/setup-node@master
|
||||
with:
|
||||
node-version: 22.4
|
||||
- run: npm install
|
||||
- run: npm run build
|
||||
- uses: actions/upload-artifact@master
|
||||
with:
|
||||
name: mac-builds
|
||||
path: ./dist/
|
||||
# build_on_mac:
|
||||
# runs-on: macos-latest
|
||||
# steps:
|
||||
# - uses: actions/checkout@master
|
||||
# - uses: actions/setup-node@master
|
||||
# with:
|
||||
# node-version: 22.4
|
||||
# - run: npm install
|
||||
# - run: npm run build
|
||||
# - uses: actions/upload-artifact@master
|
||||
# with:
|
||||
# name: mac-builds
|
||||
# path: ./dist/
|
||||
|
||||
build_on_win:
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@master
|
||||
- uses: actions/setup-node@master
|
||||
with:
|
||||
node-version: 22.4
|
||||
- run: npm install
|
||||
- run: npm run build
|
||||
- uses: actions/upload-artifact@master
|
||||
with:
|
||||
name: windows-builds
|
||||
path: dist/
|
||||
# build_on_win:
|
||||
# runs-on: windows-latest
|
||||
# steps:
|
||||
# - uses: actions/checkout@master
|
||||
# - uses: actions/setup-node@master
|
||||
# with:
|
||||
# node-version: 22.4
|
||||
# - run: npm install
|
||||
# - run: npm run build
|
||||
# - uses: actions/upload-artifact@master
|
||||
# with:
|
||||
# name: windows-builds
|
||||
# path: dist/
|
||||
|
19
CHANGELOG.md
19
CHANGELOG.md
@ -4,6 +4,25 @@ 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/),
|
||||
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]
|
||||
|
||||
- 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
|
||||
electronVersion: 28.1.1
|
||||
electronVersion: 35.1.1
|
||||
electronDownload:
|
||||
version: 28.1.1+wvcus
|
||||
version: 35.1.1+wvcus
|
||||
mirror: https://github.com/castlabs/electron-releases/releases/download/v
|
||||
snap:
|
||||
plugs:
|
||||
@ -22,19 +22,19 @@ linux:
|
||||
"--enable-features=WaylandWindowDecorations",
|
||||
]
|
||||
desktop:
|
||||
Encoding: UTF-8
|
||||
Name: TIDAL Hi-Fi
|
||||
GenericName: TIDAL Hi-Fi
|
||||
Comment: The web version of listen.tidal.com running in electron with hifi support thanks to widevine.
|
||||
Icon: tidal-hifi
|
||||
StartupNotify: true
|
||||
Terminal: false
|
||||
Type: Application
|
||||
Categories: Network;Application;AudioVideo;Audio;Video
|
||||
StartupWMClass: tidal-hifi
|
||||
X-PulseAudio-Properties: media.role=music
|
||||
MimeType: x-scheme-handler/tidal;
|
||||
|
||||
entry:
|
||||
Encoding: "UTF-8"
|
||||
Name: "TIDAL Hi-Fi"
|
||||
GenericName: "TIDAL Hi-Fi"
|
||||
Comment: "The web version of listen.tidal.com running in electron with hifi support thanks to widevine."
|
||||
Icon: "tidal-hifi"
|
||||
StartupNotify: "true"
|
||||
Terminal: "false"
|
||||
Type: "Application"
|
||||
Categories: "Network;Application;AudioVideo;Audio;Video"
|
||||
StartupWMClass: "tidal-hifi"
|
||||
X-PulseAudio-Properties: "media.role=music"
|
||||
MimeType: "x-scheme-handler/tidal;"
|
||||
mac:
|
||||
category: public.app-category.entertainment
|
||||
win:
|
||||
|
4540
package-lock.json
generated
4540
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",
|
||||
"version": "5.17.0",
|
||||
"version": "5.18.2",
|
||||
"description": "Tidal on Electron with widevine(hifi) support",
|
||||
"main": "ts-dist/main.js",
|
||||
"scripts": {
|
||||
"start": "electron --inspect=0.0.0.0:5858 .",
|
||||
"start": "electron --inspect=0.0.0.0:5858 --remote-debugging-port=8315 --remote-allow-origins=* .",
|
||||
"watchStart": "nodemon dist -x \"npm run start\"",
|
||||
"compile": "tsc && npm run sass-and-copy",
|
||||
"deps": "npm run watch",
|
||||
@ -43,16 +43,16 @@
|
||||
"dependencies": {
|
||||
"@electron/remote": "^2.1.2",
|
||||
"@types/swagger-jsdoc": "^6.0.4",
|
||||
"@xhayper/discord-rpc": "^1.2.0",
|
||||
"axios": "^1.7.9",
|
||||
"cors": "^2.8.5",
|
||||
"@xhayper/discord-rpc": "^1.2.1",
|
||||
"axios": "^1.8.4",
|
||||
"electron-store": "^8.2.0",
|
||||
"express": "^4.21.2",
|
||||
"hotkeys-js": "^3.13.9",
|
||||
"mpris-service": "^2.1.2",
|
||||
"request": "^2.88.2",
|
||||
"sass": "^1.79.4",
|
||||
"swagger-ui-express": "^5.0.1"
|
||||
"sass": "1.85.1",
|
||||
"swagger-ui-express": "^5.0.1",
|
||||
"cors": "^2.8.5",
|
||||
"request": "^2.88.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@mastermindzh/prettier-config": "^1.0.0",
|
||||
@ -64,8 +64,8 @@
|
||||
"@typescript-eslint/eslint-plugin": "^7.16.0",
|
||||
"@typescript-eslint/parser": "^7.15.0",
|
||||
"copyfiles": "^2.4.1",
|
||||
"electron": "git+https://github.com/castlabs/electron-releases#v31.1.0+wvcus",
|
||||
"electron-builder": "~24.9.4",
|
||||
"electron": "github:castlabs/electron-releases#v35.1.1+wvcus",
|
||||
"electron-builder": "~26.0.12",
|
||||
"eslint": "^8.57.0",
|
||||
"js-yaml": "^4.1.0",
|
||||
"markdown-toc": "^1.2.0",
|
||||
|
@ -22,12 +22,13 @@
|
||||
media: '*[data-test="current-media-imagery"]',
|
||||
image: "img",
|
||||
current: '*[data-test="current-time"]',
|
||||
duration: '*[class^=playbackControlsContainer] *[data-test="duration"]',
|
||||
duration: '*[class^=_playbackControlsContainer] *[data-test="duration"]',
|
||||
bar: '*[data-test="progress-bar"]',
|
||||
footer: "#footerPlayer",
|
||||
mediaItem: "[data-type='mediaItem']",
|
||||
album_header_title: '*[class^="playingFrom"] span:nth-child(2)',
|
||||
playingFrom: '*[class^="playingFrom"] span:nth-child(2)',
|
||||
album_header_title: '*[class^="_playingFrom"] span:nth-child(2)',
|
||||
playing_from: '*[class^="_playingFrom"] span:nth-child(2)',
|
||||
queue_album: "*[class^=playQueueItemsContainer] *[class^=groupTitle] span:nth-child(2)",
|
||||
currentlyPlaying: "[class^='isPlayingIcon'], [data-test-is-playing='true']",
|
||||
album_name_cell: '[class^="album"]',
|
||||
tracklist_row: '[data-test="tracklist-row"]',
|
||||
|
@ -2,7 +2,7 @@
|
||||
"openapi": "3.1.0",
|
||||
"info": {
|
||||
"title": "TIDAL Hi-Fi API",
|
||||
"version": "5.17.0",
|
||||
"version": "5.18.2",
|
||||
"description": "",
|
||||
"license": {
|
||||
"name": "MIT",
|
||||
@ -21,9 +21,7 @@
|
||||
"/current": {
|
||||
"get": {
|
||||
"summary": "Get current media info",
|
||||
"tags": [
|
||||
"current"
|
||||
],
|
||||
"tags": ["current"],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Current media info",
|
||||
@ -41,9 +39,7 @@
|
||||
"/current/image": {
|
||||
"get": {
|
||||
"summary": "Get current media image",
|
||||
"tags": [
|
||||
"current"
|
||||
],
|
||||
"tags": ["current"],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Current media image",
|
||||
@ -65,9 +61,7 @@
|
||||
"/player/play": {
|
||||
"post": {
|
||||
"summary": "Play the current media",
|
||||
"tags": [
|
||||
"player"
|
||||
],
|
||||
"tags": ["player"],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Ok",
|
||||
@ -85,9 +79,7 @@
|
||||
"/player/favorite/toggle": {
|
||||
"post": {
|
||||
"summary": "Add the current media to your favorites, or remove it if its already added to your favorites",
|
||||
"tags": [
|
||||
"player"
|
||||
],
|
||||
"tags": ["player"],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Ok",
|
||||
@ -105,9 +97,7 @@
|
||||
"/player/pause": {
|
||||
"post": {
|
||||
"summary": "Pause the current media",
|
||||
"tags": [
|
||||
"player"
|
||||
],
|
||||
"tags": ["player"],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Ok",
|
||||
@ -125,9 +115,7 @@
|
||||
"/player/next": {
|
||||
"post": {
|
||||
"summary": "Play the next song",
|
||||
"tags": [
|
||||
"player"
|
||||
],
|
||||
"tags": ["player"],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Ok",
|
||||
@ -145,9 +133,7 @@
|
||||
"/player/previous": {
|
||||
"post": {
|
||||
"summary": "Play the previous song",
|
||||
"tags": [
|
||||
"player"
|
||||
],
|
||||
"tags": ["player"],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Ok",
|
||||
@ -165,9 +151,7 @@
|
||||
"/player/shuffle/toggle": {
|
||||
"post": {
|
||||
"summary": "Play the previous song",
|
||||
"tags": [
|
||||
"player"
|
||||
],
|
||||
"tags": ["player"],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Ok",
|
||||
@ -185,9 +169,7 @@
|
||||
"/player/repeat/toggle": {
|
||||
"post": {
|
||||
"summary": "Toggle the repeat status, toggles between \"off\" , \"single\" and \"all\"",
|
||||
"tags": [
|
||||
"player"
|
||||
],
|
||||
"tags": ["player"],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Ok",
|
||||
@ -205,9 +187,7 @@
|
||||
"/player/playpause": {
|
||||
"post": {
|
||||
"summary": "Start playing the media if paused, or pause the media if playing",
|
||||
"tags": [
|
||||
"player"
|
||||
],
|
||||
"tags": ["player"],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Ok",
|
||||
@ -225,9 +205,7 @@
|
||||
"/settings/skipped-artists": {
|
||||
"get": {
|
||||
"summary": "get a list of artists that TIDAL Hi-Fi will skip if skipping is enabled",
|
||||
"tags": [
|
||||
"settings"
|
||||
],
|
||||
"tags": ["settings"],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "The list book.",
|
||||
@ -243,9 +221,7 @@
|
||||
},
|
||||
"post": {
|
||||
"summary": "Add new artists to the list of skipped artists",
|
||||
"tags": [
|
||||
"settings"
|
||||
],
|
||||
"tags": ["settings"],
|
||||
"requestBody": {
|
||||
"required": true,
|
||||
"content": {
|
||||
@ -266,9 +242,7 @@
|
||||
"/settings/skipped-artists/delete": {
|
||||
"post": {
|
||||
"summary": "Remove artists from the list of skipped artists",
|
||||
"tags": [
|
||||
"settings"
|
||||
],
|
||||
"tags": ["settings"],
|
||||
"requestBody": {
|
||||
"required": true,
|
||||
"content": {
|
||||
@ -289,9 +263,7 @@
|
||||
"/settings/skipped-artists/current": {
|
||||
"post": {
|
||||
"summary": "Add the current artist to the list of skipped artists",
|
||||
"tags": [
|
||||
"settings"
|
||||
],
|
||||
"tags": ["settings"],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Ok"
|
||||
@ -300,9 +272,7 @@
|
||||
},
|
||||
"delete": {
|
||||
"summary": "Remove the current artist from the list of skipped artists",
|
||||
"tags": [
|
||||
"settings"
|
||||
],
|
||||
"tags": ["settings"],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Ok"
|
||||
@ -313,9 +283,7 @@
|
||||
"/image": {
|
||||
"get": {
|
||||
"summary": "Get current image",
|
||||
"tags": [
|
||||
"legacy"
|
||||
],
|
||||
"tags": ["legacy"],
|
||||
"deprecated": true,
|
||||
"responses": {
|
||||
"200": {
|
||||
@ -338,9 +306,7 @@
|
||||
"/play": {
|
||||
"get": {
|
||||
"summary": "Play the current media",
|
||||
"tags": [
|
||||
"legacy"
|
||||
],
|
||||
"tags": ["legacy"],
|
||||
"deprecated": true,
|
||||
"responses": {
|
||||
"200": {
|
||||
@ -359,9 +325,7 @@
|
||||
"/favorite/toggle": {
|
||||
"get": {
|
||||
"summary": "Add the current media to your favorites, or remove it if its already added to your favorites",
|
||||
"tags": [
|
||||
"legacy"
|
||||
],
|
||||
"tags": ["legacy"],
|
||||
"deprecated": true,
|
||||
"responses": {
|
||||
"200": {
|
||||
@ -380,9 +344,7 @@
|
||||
"/pause": {
|
||||
"get": {
|
||||
"summary": "Pause the current media",
|
||||
"tags": [
|
||||
"legacy"
|
||||
],
|
||||
"tags": ["legacy"],
|
||||
"deprecated": true,
|
||||
"responses": {
|
||||
"200": {
|
||||
@ -401,9 +363,7 @@
|
||||
"/next": {
|
||||
"get": {
|
||||
"summary": "Play the next song",
|
||||
"tags": [
|
||||
"legacy"
|
||||
],
|
||||
"tags": ["legacy"],
|
||||
"deprecated": true,
|
||||
"responses": {
|
||||
"200": {
|
||||
@ -422,9 +382,7 @@
|
||||
"/previous": {
|
||||
"get": {
|
||||
"summary": "Play the previous song",
|
||||
"tags": [
|
||||
"legacy"
|
||||
],
|
||||
"tags": ["legacy"],
|
||||
"deprecated": true,
|
||||
"responses": {
|
||||
"200": {
|
||||
@ -443,9 +401,7 @@
|
||||
"/playpause": {
|
||||
"get": {
|
||||
"summary": "Toggle play/pause",
|
||||
"tags": [
|
||||
"legacy"
|
||||
],
|
||||
"tags": ["legacy"],
|
||||
"deprecated": true,
|
||||
"responses": {
|
||||
"200": {
|
||||
@ -558,10 +514,7 @@
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"example": [
|
||||
"Artist1",
|
||||
"Artist2"
|
||||
]
|
||||
"example": ["Artist1", "Artist2"]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -26,7 +26,6 @@ import {
|
||||
import { addTray, refreshTray } from "./scripts/tray";
|
||||
let mainInhibitorId = -1;
|
||||
|
||||
initialize();
|
||||
let mainWindow: BrowserWindow;
|
||||
const icon = path.join(__dirname, "../assets/icon.png");
|
||||
const PROTOCOL_PREFIX = "tidal";
|
||||
@ -98,6 +97,7 @@ function createWindow(options = { x: 0, y: 0, backgroundColor: "white" }) {
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
enable(mainWindow.webContents);
|
||||
registerHttpProtocols();
|
||||
syncMenuBarWithStore();
|
||||
@ -126,6 +126,7 @@ function createWindow(options = { x: 0, y: 0, backgroundColor: "white" }) {
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
// Emitted when the window is closed.
|
||||
mainWindow.on("closed", function () {
|
||||
releaseInhibitorIfActive(mainInhibitorId);
|
||||
@ -178,6 +179,7 @@ app.on("ready", async () => {
|
||||
|
||||
if (isMainInstance() || isMultipleInstancesAllowed()) {
|
||||
await components.whenReady();
|
||||
initialize();
|
||||
|
||||
// Adblock
|
||||
if (settingsStore.get(settings.adBlock)) {
|
||||
@ -188,6 +190,8 @@ app.on("ready", async () => {
|
||||
});
|
||||
}
|
||||
|
||||
Logger.log("components ready:", components.status());
|
||||
|
||||
createWindow();
|
||||
addMenu(mainWindow);
|
||||
createSettingsWindow();
|
||||
|
@ -1,34 +1,25 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<title>Tidal Hi-Fi settings</title>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
|
||||
<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 rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" />
|
||||
</head>
|
||||
|
||||
<body class="settings-window">
|
||||
<div class="settings-window__wrapper">
|
||||
<div class="settings-window__drag-area"></div>
|
||||
<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"
|
||||
>
|
||||
<path
|
||||
fill="white"
|
||||
d="M336.559,68.611L231.016,174.165l105.543,105.549c15.699,15.705,15.699,41.145,0,56.85
|
||||
<svg 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.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
|
||||
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>
|
||||
</a>
|
||||
|
||||
@ -75,13 +66,7 @@
|
||||
<span class="switch__slider"></span>
|
||||
</label>
|
||||
</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__description">
|
||||
<h4>Block ads</h4>
|
||||
@ -149,9 +134,7 @@
|
||||
<h4>Hotkeys</h4>
|
||||
<p>
|
||||
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>
|
||||
</div>
|
||||
<label class="switch">
|
||||
@ -272,12 +255,7 @@
|
||||
<div class="group__description">
|
||||
<h4>Idle Text</h4>
|
||||
<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>
|
||||
|
||||
@ -287,12 +265,7 @@
|
||||
<p>
|
||||
The text displayed on Discord's rich presence while "showSong" is turned off
|
||||
</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>
|
||||
|
||||
@ -323,12 +296,7 @@
|
||||
<div class="group__description">
|
||||
<h4>Details prefix</h4>
|
||||
<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>
|
||||
|
||||
@ -336,12 +304,7 @@
|
||||
<div class="group__description">
|
||||
<h4>Button text</h4>
|
||||
<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>
|
||||
@ -367,24 +330,14 @@
|
||||
There are multiple instances for ListenBrainz you can set the corresponding
|
||||
API url below.
|
||||
</p>
|
||||
<input
|
||||
id="ListenBrainzAPI"
|
||||
type="text"
|
||||
class="text-input"
|
||||
name="ListenBrainzAPI"
|
||||
/>
|
||||
<input id="ListenBrainzAPI" type="text" class="text-input" name="ListenBrainzAPI" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="group__option">
|
||||
<div class="group__description">
|
||||
<h4>ListenBrainz User Token</h4>
|
||||
<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>
|
||||
@ -394,12 +347,7 @@
|
||||
The delay (in ms) to send a listen to ListenBrainz. Prevents spamming the API when
|
||||
you fast forward immediately
|
||||
</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>
|
||||
</section>
|
||||
@ -415,12 +363,7 @@
|
||||
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.
|
||||
</p>
|
||||
<input
|
||||
id="updateFrequency"
|
||||
type="number"
|
||||
class="text-input"
|
||||
name="updateFrequency"
|
||||
/>
|
||||
<input id="updateFrequency" type="number" class="text-input" name="updateFrequency" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -506,13 +449,7 @@
|
||||
</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">
|
||||
<p class="group__title">Theme files</p>
|
||||
@ -537,13 +474,7 @@
|
||||
<div>
|
||||
<span class="file-btn">Choose files</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>
|
||||
@ -555,35 +486,17 @@
|
||||
<img alt="tidal icon" class="about-section__icon" src="./icon.png" />
|
||||
<h4>TIDAL Hi-Fi</h4>
|
||||
<div class="about-section__version">
|
||||
<a
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
href="https://github.com/Mastermindzh/tidal-hifi/releases/tag/5.17.0"
|
||||
>5.17.0</a
|
||||
>
|
||||
<a target="_blank" rel="noopener"
|
||||
href="https://github.com/Mastermindzh/tidal-hifi/releases/tag/5.18.2">5.18.2</a>
|
||||
</div>
|
||||
<div class="about-section__links">
|
||||
<a
|
||||
target="_blank"
|
||||
rel="noopener"
|
||||
href="https://github.com/mastermindzh/tidal-hifi/"
|
||||
class="about-section__button"
|
||||
>Github <i class="fa fa-external-link"></i
|
||||
></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>
|
||||
<a target="_blank" rel="noopener" href="https://github.com/mastermindzh/tidal-hifi/"
|
||||
class="about-section__button">Github
|
||||
<i class="fa fa-external-link"></i></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>
|
||||
</section>
|
||||
|
||||
@ -596,4 +509,5 @@
|
||||
</main>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
@ -313,6 +313,7 @@ function updateMpris(mediaInfo: MediaInfo) {
|
||||
"xesam:title": mediaInfo.title,
|
||||
"xesam:artist": [mediaInfo.artists],
|
||||
"xesam:album": mediaInfo.album,
|
||||
"xesam:url": mediaInfo.url,
|
||||
"mpris:artUrl": mediaInfo.image,
|
||||
"mpris:length": convertDurationToSeconds(mediaInfo.duration) * 1000 * 1000,
|
||||
"mpris:trackid": "/org/mpris/MediaPlayer2/track/" + tidalController.getTrackId(),
|
||||
|
@ -103,8 +103,7 @@ const getActivity = (): SetActivity => {
|
||||
if (includeTimestamps) {
|
||||
const currentSeconds = convertDurationToSeconds(mediaInfo.current);
|
||||
const durationSeconds = convertDurationToSeconds(mediaInfo.duration);
|
||||
const date = new Date();
|
||||
const now = Math.floor(date.getTime() / 1000);
|
||||
const now = Math.trunc((Date.now() + 500) / 1000);
|
||||
presence.startTimestamp = now - currentSeconds;
|
||||
presence.endTimestamp = presence.startTimestamp + durationSeconds;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user