mirror of
https://github.com/Mastermindzh/tidal-hifi.git
synced 2025-04-20 19:52:32 +02:00
Merge branch 'master' of github.com:Mastermindzh/tidal-hifi into feature/tidalControllers
This commit is contained in:
commit
a08fad421a
@ -4,6 +4,12 @@ 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.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)
|
||||||
|
4
package-lock.json
generated
4
package-lock.json
generated
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "tidal-hifi",
|
"name": "tidal-hifi",
|
||||||
"version": "5.17.0",
|
"version": "5.18.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "tidal-hifi",
|
"name": "tidal-hifi",
|
||||||
"version": "5.17.0",
|
"version": "5.18.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@electron/remote": "^2.1.2",
|
"@electron/remote": "^2.1.2",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "tidal-hifi",
|
"name": "tidal-hifi",
|
||||||
"version": "5.17.0",
|
"version": "5.18.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": {
|
||||||
|
@ -22,12 +22,13 @@
|
|||||||
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)',
|
||||||
playingFrom: '*[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']",
|
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.17.0",
|
"version": "5.18.0",
|
||||||
"description": "",
|
"description": "",
|
||||||
"license": {
|
"license": {
|
||||||
"name": "MIT",
|
"name": "MIT",
|
||||||
|
@ -1,34 +1,25 @@
|
|||||||
<!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
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" />
|
||||||
rel="stylesheet"
|
</head>
|
||||||
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
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 348.333 348.334" class="settings-window__svg-icon">
|
||||||
xmlns="http://www.w3.org/2000/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
|
||||||
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>
|
||||||
|
|
||||||
@ -75,13 +66,7 @@
|
|||||||
<span class="switch__slider"></span>
|
<span class="switch__slider"></span>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<textarea
|
<textarea id="skippedArtists" class="textarea" cols="40" rows="5" spellcheck="false"></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>
|
||||||
@ -149,9 +134,7 @@
|
|||||||
<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"
|
<a class="external-link" data-url="https://defkey.com/tidal-desktop-shortcuts">desktop apps</a>.
|
||||||
>desktop apps</a
|
|
||||||
>.
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<label class="switch">
|
<label class="switch">
|
||||||
@ -272,12 +255,7 @@
|
|||||||
<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
|
<input id="discord_idle_text" type="text" class="text-input" name="discord_idle_text" />
|
||||||
id="discord_idle_text"
|
|
||||||
type="text"
|
|
||||||
class="text-input"
|
|
||||||
name="discord_idle_text"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -287,12 +265,7 @@
|
|||||||
<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
|
<input id="discord_using_text" type="text" class="text-input" name="discord_using_text" />
|
||||||
id="discord_using_text"
|
|
||||||
type="text"
|
|
||||||
class="text-input"
|
|
||||||
name="discord_using_text"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -323,12 +296,7 @@
|
|||||||
<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
|
<input id="discord_details_prefix" type="text" class="text-input" name="discord_details_prefix" />
|
||||||
id="discord_details_prefix"
|
|
||||||
type="text"
|
|
||||||
class="text-input"
|
|
||||||
name="discord_details_prefix"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -336,12 +304,7 @@
|
|||||||
<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
|
<input id="discord_button_text" type="text" class="text-input" name="discord_button_text" />
|
||||||
id="discord_button_text"
|
|
||||||
type="text"
|
|
||||||
class="text-input"
|
|
||||||
name="discord_button_text"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -367,24 +330,14 @@
|
|||||||
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
|
<input id="ListenBrainzAPI" type="text" class="text-input" name="ListenBrainzAPI" />
|
||||||
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
|
<input id="ListenBrainzToken" type="text" class="text-input" name="ListenBrainzToken" />
|
||||||
id="ListenBrainzToken"
|
|
||||||
type="text"
|
|
||||||
class="text-input"
|
|
||||||
name="ListenBrainzToken"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -394,12 +347,7 @@
|
|||||||
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
|
<input id="listenbrainz_delay" type="number" class="text-input" name="listenbrainz_delay" />
|
||||||
id="listenbrainz_delay"
|
|
||||||
type="number"
|
|
||||||
class="text-input"
|
|
||||||
name="listenbrainz_delay"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
@ -415,12 +363,7 @@
|
|||||||
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
|
<input id="updateFrequency" type="number" class="text-input" name="updateFrequency" />
|
||||||
id="updateFrequency"
|
|
||||||
type="number"
|
|
||||||
class="text-input"
|
|
||||||
name="updateFrequency"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -506,13 +449,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<textarea
|
<textarea id="customCSS" class="textarea" cols="40" rows="8" spellcheck="false"></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>
|
||||||
@ -537,13 +474,7 @@
|
|||||||
<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
|
<input id="theme-files" class="file-input" type="file" accept=".css" multiple />
|
||||||
id="theme-files"
|
|
||||||
class="file-input"
|
|
||||||
type="file"
|
|
||||||
accept=".css"
|
|
||||||
multiple
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -555,35 +486,17 @@
|
|||||||
<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
|
<a target="_blank" rel="noopener"
|
||||||
target="_blank"
|
href="https://github.com/Mastermindzh/tidal-hifi/releases/tag/5.18.0">5.18.0</a>
|
||||||
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
|
<a target="_blank" rel="noopener" href="https://github.com/mastermindzh/tidal-hifi/"
|
||||||
target="_blank"
|
class="about-section__button">Github
|
||||||
rel="noopener"
|
<i class="fa fa-external-link"></i></a>
|
||||||
href="https://github.com/mastermindzh/tidal-hifi/"
|
<a target="_blank" rel="noopener" href="https://github.com/Mastermindzh/tidal-hifi/issues"
|
||||||
class="about-section__button"
|
class="about-section__button">Report an issue <i class="fa fa-external-link"></i></a>
|
||||||
>Github <i class="fa fa-external-link"></i
|
<a target="_blank" rel="noopener" href="https://github.com/Mastermindzh/tidal-hifi/graphs/contributors"
|
||||||
></a>
|
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/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>
|
||||||
|
|
||||||
@ -595,5 +508,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
@ -313,6 +313,7 @@ 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,8 +103,7 @@ 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 date = new Date();
|
const now = Math.trunc((Date.now() + 500) / 1000);
|
||||||
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