prettier :)

This commit is contained in:
Rick van Lieshout 2024-10-27 21:31:31 +01:00
parent a8c635932f
commit b2afd44dd6
7 changed files with 573 additions and 526 deletions

View File

@ -1,13 +1,7 @@
{ {
"plugins": [ "plugins": ["stylelint-prettier"],
"stylelint-prettier" "extends": ["stylelint-config-standard-scss"],
], "ignoreFiles": ["src/themes/**.scss"],
"extends": [
"stylelint-config-standard-scss"
],
"ignoreFiles": [
"src/themes/**.scss"
],
"rules": { "rules": {
"prettier/prettier": true, "prettier/prettier": true,
"scss/at-extend-no-missing-placeholder": null, "scss/at-extend-no-missing-placeholder": null,

View File

@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Added all missing swagger/openApi info with the help of [Times-Z](https://github.com/Times-Z) - Added all missing swagger/openApi info with the help of [Times-Z](https://github.com/Times-Z)
- Updated most dependency versions - Updated most dependency versions
- This includes Electron 31! - This includes Electron 31!
- Added a channel selector so we can now use Tidal's staging environment directly from the app - Added a channel selector so we can now use Tidal's staging environment directly from the app
@ -112,10 +113,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Updated Electron to 28.1.1 (fixes [325](https://github.com/Mastermindzh/tidal-hifi/issues/325)) - Updated Electron to 28.1.1 (fixes [325](https://github.com/Mastermindzh/tidal-hifi/issues/325))
- Updated dependencies to latest - Updated dependencies to latest
- added theme files to stylelint ignore - added theme files to stylelint ignore
- fixed other stylelint errors - fixed other stylelint errors
- Added functionality to favorite a song (fixes [#323](https://github.com/Mastermindzh/tidal-hifi/issues/323)) - Added functionality to favorite a song (fixes [#323](https://github.com/Mastermindzh/tidal-hifi/issues/323))
- Added a hotkey to favorite ("Add to collection") songs: Control+a - Added a hotkey to favorite ("Add to collection") songs: Control+a
- Added the "favorite" field in the `mediaInfo` and the API `/current` endpoint - Added the "favorite" field in the `mediaInfo` and the API `/current` endpoint
- Added an endpoint to toggle favoriting a song: `http://localhost:47836/favorite/toggle` - Added an endpoint to toggle favoriting a song: `http://localhost:47836/favorite/toggle`

View File

@ -8,4 +8,3 @@ Only the very latest 😄.
If you find a vulnerability just add it as an issue. If you find a vulnerability just add it as an issue.
If there's an especially bad vulnerability that you don't want to make public just send me a private message (email, discord, wherever). If there's an especially bad vulnerability that you don't want to make public just send me a private message (email, discord, wherever).

View File

@ -23,6 +23,7 @@
"build-mac": "npm run builder -- -c ./build/electron-builder.yml -m", "build-mac": "npm run builder -- -c ./build/electron-builder.yml -m",
"build-base": "npm run builder -- -c ./build/electron-builder.base.yml", "build-base": "npm run builder -- -c ./build/electron-builder.base.yml",
"prebuilder": "npm run compile", "prebuilder": "npm run compile",
"prettier": "prettier . --write",
"builder": "electron-builder --publish=never", "builder": "electron-builder --publish=never",
"sass": "sass ./src/pages/settings/settings.scss ./src/pages/settings/settings.css && sass --no-source-map src/themes:themes", "sass": "sass ./src/pages/settings/settings.scss ./src/pages/settings/settings.css && sass --no-source-map src/themes:themes",
"style-lint": "npx stylelint **/*.scss", "style-lint": "npx stylelint **/*.scss",

View File

@ -21,9 +21,7 @@
"/current": { "/current": {
"get": { "get": {
"summary": "Get current media info", "summary": "Get current media info",
"tags": [ "tags": ["current"],
"current"
],
"responses": { "responses": {
"200": { "200": {
"description": "Current media info", "description": "Current media info",
@ -41,9 +39,7 @@
"/current/image": { "/current/image": {
"get": { "get": {
"summary": "Get current media image", "summary": "Get current media image",
"tags": [ "tags": ["current"],
"current"
],
"responses": { "responses": {
"200": { "200": {
"description": "Current media image", "description": "Current media image",
@ -65,9 +61,7 @@
"/player/play": { "/player/play": {
"post": { "post": {
"summary": "Play the current media", "summary": "Play the current media",
"tags": [ "tags": ["player"],
"player"
],
"responses": { "responses": {
"200": { "200": {
"description": "Ok", "description": "Ok",
@ -85,9 +79,7 @@
"/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": [ "tags": ["player"],
"player"
],
"responses": { "responses": {
"200": { "200": {
"description": "Ok", "description": "Ok",
@ -105,9 +97,7 @@
"/player/pause": { "/player/pause": {
"post": { "post": {
"summary": "Pause the current media", "summary": "Pause the current media",
"tags": [ "tags": ["player"],
"player"
],
"responses": { "responses": {
"200": { "200": {
"description": "Ok", "description": "Ok",
@ -125,9 +115,7 @@
"/player/next": { "/player/next": {
"post": { "post": {
"summary": "Play the next song", "summary": "Play the next song",
"tags": [ "tags": ["player"],
"player"
],
"responses": { "responses": {
"200": { "200": {
"description": "Ok", "description": "Ok",
@ -145,9 +133,7 @@
"/player/previous": { "/player/previous": {
"post": { "post": {
"summary": "Play the previous song", "summary": "Play the previous song",
"tags": [ "tags": ["player"],
"player"
],
"responses": { "responses": {
"200": { "200": {
"description": "Ok", "description": "Ok",
@ -165,9 +151,7 @@
"/player/shuffle/toggle": { "/player/shuffle/toggle": {
"post": { "post": {
"summary": "Play the previous song", "summary": "Play the previous song",
"tags": [ "tags": ["player"],
"player"
],
"responses": { "responses": {
"200": { "200": {
"description": "Ok", "description": "Ok",
@ -185,9 +169,7 @@
"/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": [ "tags": ["player"],
"player"
],
"responses": { "responses": {
"200": { "200": {
"description": "Ok", "description": "Ok",
@ -205,9 +187,7 @@
"/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": [ "tags": ["player"],
"player"
],
"responses": { "responses": {
"200": { "200": {
"description": "Ok", "description": "Ok",
@ -225,9 +205,7 @@
"/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": [ "tags": ["settings"],
"settings"
],
"responses": { "responses": {
"200": { "200": {
"description": "The list book.", "description": "The list book.",
@ -243,9 +221,7 @@
}, },
"post": { "post": {
"summary": "Add new artists to the list of skipped artists", "summary": "Add new artists to the list of skipped artists",
"tags": [ "tags": ["settings"],
"settings"
],
"requestBody": { "requestBody": {
"required": true, "required": true,
"content": { "content": {
@ -266,9 +242,7 @@
"/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": [ "tags": ["settings"],
"settings"
],
"requestBody": { "requestBody": {
"required": true, "required": true,
"content": { "content": {
@ -289,9 +263,7 @@
"/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": [ "tags": ["settings"],
"settings"
],
"responses": { "responses": {
"200": { "200": {
"description": "Ok" "description": "Ok"
@ -300,9 +272,7 @@
}, },
"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": [ "tags": ["settings"],
"settings"
],
"responses": { "responses": {
"200": { "200": {
"description": "Ok" "description": "Ok"
@ -313,9 +283,7 @@
"/image": { "/image": {
"get": { "get": {
"summary": "Get current image", "summary": "Get current image",
"tags": [ "tags": ["legacy"],
"legacy"
],
"deprecated": true, "deprecated": true,
"responses": { "responses": {
"200": { "200": {
@ -338,9 +306,7 @@
"/play": { "/play": {
"get": { "get": {
"summary": "Play the current media", "summary": "Play the current media",
"tags": [ "tags": ["legacy"],
"legacy"
],
"deprecated": true, "deprecated": true,
"responses": { "responses": {
"200": { "200": {
@ -359,9 +325,7 @@
"/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": [ "tags": ["legacy"],
"legacy"
],
"deprecated": true, "deprecated": true,
"responses": { "responses": {
"200": { "200": {
@ -380,9 +344,7 @@
"/pause": { "/pause": {
"get": { "get": {
"summary": "Pause the current media", "summary": "Pause the current media",
"tags": [ "tags": ["legacy"],
"legacy"
],
"deprecated": true, "deprecated": true,
"responses": { "responses": {
"200": { "200": {
@ -401,9 +363,7 @@
"/next": { "/next": {
"get": { "get": {
"summary": "Play the next song", "summary": "Play the next song",
"tags": [ "tags": ["legacy"],
"legacy"
],
"deprecated": true, "deprecated": true,
"responses": { "responses": {
"200": { "200": {
@ -422,9 +382,7 @@
"/previous": { "/previous": {
"get": { "get": {
"summary": "Play the previous song", "summary": "Play the previous song",
"tags": [ "tags": ["legacy"],
"legacy"
],
"deprecated": true, "deprecated": true,
"responses": { "responses": {
"200": { "200": {
@ -443,9 +401,7 @@
"/playpause": { "/playpause": {
"get": { "get": {
"summary": "Toggle play/pause", "summary": "Toggle play/pause",
"tags": [ "tags": ["legacy"],
"legacy"
],
"deprecated": true, "deprecated": true,
"responses": { "responses": {
"200": { "200": {
@ -558,10 +514,7 @@
"items": { "items": {
"type": "string" "type": "string"
}, },
"example": [ "example": ["Artist1", "Artist2"]
"Artist1",
"Artist2"
]
} }
} }
}, },

View File

@ -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>
@ -109,7 +124,10 @@
<div class="group__option"> <div class="group__option">
<div class="group__description"> <div class="group__description">
<h4>Static Window Title</h4> <h4>Static Window Title</h4>
<p>Makes the window title "TIDAL Hi-Fi" instead of changing to the currently playing song.</p> <p>
Makes the window title "TIDAL Hi-Fi" instead of changing to the currently
playing song.
</p>
</div> </div>
<label class="switch"> <label class="switch">
<input id="staticWindowTitle" type="checkbox" /> <input id="staticWindowTitle" type="checkbox" />
@ -131,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">
@ -157,8 +177,8 @@
<p class="group__title">API</p> <p class="group__title">API</p>
<div class="group__description"> <div class="group__description">
<p> <p>
TIDAL Hi-Fi has a built-in web API to allow users to get current media information. TIDAL Hi-Fi has a built-in web API to allow users to get current media
You can optionally enable playback control as well. information. You can optionally enable playback control as well.
</p> </p>
</div> </div>
<div class="group__option"> <div class="group__option">
@ -180,7 +200,8 @@
<div class="group__option"> <div class="group__option">
<div class="group__description"> <div class="group__description">
<h4>API hostname</h4> <h4>API hostname</h4>
<p>By default (127.0.0.1) only local apps can interface with the API. <br /> <p>
By default (127.0.0.1) only local apps can interface with the API. <br />
Change to 0.0.0.0 to allow <strong>anyone</strong> to interact with it. <br /> Change to 0.0.0.0 to allow <strong>anyone</strong> to interact with it. <br />
Other options are available Other options are available
</p> </p>
@ -236,7 +257,6 @@
</label> </label>
</div> </div>
<div id="discord_options"> <div id="discord_options">
<div class="group__option" class="hidden"> <div class="group__option" class="hidden">
<div class="group__description"> <div class="group__description">
<h4>Show Idle Text</h4> <h4>Show Idle Text</h4>
@ -252,15 +272,27 @@
<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>
<div class="group__option" class="hidden"> <div class="group__option" class="hidden">
<div class="group__description"> <div class="group__description">
<h4>Using Tidal Text</h4> <h4>Using Tidal Text</h4>
<p>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" /> 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"
/>
</div> </div>
</div> </div>
@ -276,7 +308,6 @@
</div> </div>
<div id="discord_show_song_options" class="hidden"> <div id="discord_show_song_options" class="hidden">
<div class="group__option" class="hidden"> <div class="group__option" class="hidden">
<div class="group__description"> <div class="group__description">
<h4>Include timestamps</h4> <h4>Include timestamps</h4>
@ -292,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>
@ -300,11 +336,15 @@
<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>
</div> </div>
</div> </div>
<div class="group"> <div class="group">
@ -323,23 +363,43 @@
<div class="group__option"> <div class="group__option">
<div class="group__description"> <div class="group__description">
<h4>ListenBrainz API Url</h4> <h4>ListenBrainz API Url</h4>
<p>There are multiple instances for ListenBrainz you can set the corresponding API url below.</p> <p>
<input id="ListenBrainzAPI" type="text" class="text-input" name="ListenBrainzAPI" /> 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"
/>
</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>
<div class="group__description"> <div class="group__description">
<h4>ScrobbleDelay</h4> <h4>ScrobbleDelay</h4>
<p>The delay (in ms) to send a listen to ListenBrainz. Prevents spamming the API when you fast forward <p>
immediately</p> The delay (in ms) to send a listen to ListenBrainz. Prevents spamming the API when
<input id="listenbrainz_delay" type="number" class="text-input" name="listenbrainz_delay" /> you fast forward immediately
</p>
<input
id="listenbrainz_delay"
type="number"
class="text-input"
name="listenbrainz_delay"
/>
</div> </div>
</div> </div>
</section> </section>
@ -351,12 +411,16 @@
<div class="group__description"> <div class="group__description">
<h4>Update frequency</h4> <h4>Update frequency</h4>
<p> <p>
The amount of time, in milliseconds, that TIDAL Hi-Fi will refresh its playback info by scraping the The amount of time, in milliseconds, that TIDAL Hi-Fi will refresh its playback
website. info by scraping the website. The default of 500 seems to work in more cases but
The default of 500 seems to work in more cases but if you are fine with a bit more resource usage you if you are fine with a bit more resource usage you can decrease it as well.
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>
@ -369,7 +433,9 @@
</p> </p>
<select class="select-input" id="channel" name="channel"> <select class="select-input" id="channel" name="channel">
<option value="https://listen.tidal.com">Stable (listen.tidal.com)</option> <option value="https://listen.tidal.com">Stable (listen.tidal.com)</option>
<option value="https://listen.stage.tidal.com">Staging (listen.stage.tidal.com)</option> <option value="https://listen.stage.tidal.com">
Staging (listen.stage.tidal.com)
</option>
</select> </select>
</div> </div>
</div> </div>
@ -415,7 +481,8 @@
<div class="group__description"> <div class="group__description">
<h4>Wayland support</h4> <h4>Wayland support</h4>
<p> <p>
Adds a couple of Electron flags to help TIDAL Hi-Fi run smoothly on the Wayland window system. Adds a couple of Electron flags to help TIDAL Hi-Fi run smoothly on the Wayland
window system.
</p> </p>
</div> </div>
<label class="switch"> <label class="switch">
@ -433,12 +500,19 @@
<div class="group__description"> <div class="group__description">
<h4>Custom CSS</h4> <h4>Custom CSS</h4>
<p> <p>
The css that you put in here will be injected into a style tag in the head of the document. The css that you put in here will be injected into a style tag in the head of
the document.
</p> </p>
</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>
@ -448,9 +522,7 @@
<p> <p>
Select a theme below or "Tidal - Default" to return to the original Tidal look. Select a theme below or "Tidal - Default" to return to the original Tidal look.
</p> </p>
<select class="select-input" id="themesList" name="themesList"> <select class="select-input" id="themesList" name="themesList"></select>
</select>
</div> </div>
</div> </div>
@ -458,14 +530,20 @@
<div class="group__description"> <div class="group__description">
<h4>Upload new themes</h4> <h4>Upload new themes</h4>
<p> <p>
Click the button and select the css files to import. They will be added to the theme list Click the button and select the css files to import. They will be added to the
automatically. theme list automatically.
</p> </p>
<div class="file-drop-area"> <div class="file-drop-area">
<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>
@ -477,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.17.0">5.17.0</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>
@ -499,6 +595,5 @@
</div> </div>
</main> </main>
</div> </div>
</body> </body>
</html> </html>

View File

@ -26,7 +26,7 @@ const defaultPresence = {
largeImageKey: "tidal-hifi-icon", largeImageKey: "tidal-hifi-icon",
largeImageText: `TIDAL Hi-Fi ${app.getVersion()}`, largeImageText: `TIDAL Hi-Fi ${app.getVersion()}`,
instance: false, instance: false,
type: ACTIVITY_LISTENING type: ACTIVITY_LISTENING,
}; };
const updateActivity = () => { const updateActivity = () => {
@ -118,15 +118,17 @@ const getActivity = (): SetActivity => {
const connectWithRetry = async (retryCount = 0) => { const connectWithRetry = async (retryCount = 0) => {
try { try {
await rpc.login(); await rpc.login();
Logger.log('Connected to Discord'); Logger.log("Connected to Discord");
rpc.on("ready", updateActivity); rpc.on("ready", updateActivity);
Object.values(globalEvents).forEach(event => ipcMain.on(event, observer)); Object.values(globalEvents).forEach((event) => ipcMain.on(event, observer));
} catch (error) { } catch (error) {
if (retryCount < MAX_RETRIES) { if (retryCount < MAX_RETRIES) {
Logger.log(`Failed to connect to Discord, retrying in ${RETRY_DELAY/1000} seconds... (Attempt ${retryCount + 1}/${MAX_RETRIES})`); Logger.log(
`Failed to connect to Discord, retrying in ${RETRY_DELAY / 1000} seconds... (Attempt ${retryCount + 1}/${MAX_RETRIES})`
);
setTimeout(() => connectWithRetry(retryCount + 1), RETRY_DELAY); setTimeout(() => connectWithRetry(retryCount + 1), RETRY_DELAY);
} else { } else {
Logger.log('Failed to connect to Discord after maximum retry attempts'); Logger.log("Failed to connect to Discord after maximum retry attempts");
} }
} }
}; };
@ -135,7 +137,7 @@ const connectWithRetry = async (retryCount = 0) => {
* Set up the discord rpc and listen on globalEvents.updateInfo * Set up the discord rpc and listen on globalEvents.updateInfo
*/ */
export const initRPC = () => { export const initRPC = () => {
rpc = new Client({ transport: {type: "ipc"}, clientId }); rpc = new Client({ transport: { type: "ipc" }, clientId });
connectWithRetry(); connectWithRetry();
}; };