Compare commits

..

13 Commits
4.2.0 ... 4.4.0

Author SHA1 Message Date
d0f9a34f9c Merge pull request #195 from Mastermindzh/feature/4.4.0
Feature/4.4.0
2023-01-22 22:30:43 +01:00
3b316f2301 chore: upping the version numbers 2023-01-22 22:19:07 +01:00
c0d9cd2834 feat: added the ability to skip artists automatically. Takes precedence over muting. fixes #175 2023-01-22 21:33:00 +01:00
0620d87d8b feature: added click handler to tray icon to focus/show tidal-hifi. fixes #193 #143 2023-01-22 21:32:48 +01:00
57b7f9148f feat: Move the quit command from the system sub-menu to the main menu fixes #185 2023-01-20 22:18:25 +01:00
63ccff97ea feature: Add support to autoHide the menubar and showing it with the key. fixes #188 2023-01-20 22:15:36 +01:00
3a4d23738f fix: Reverted icon path to instead of the hardcoded linux path fixes #170 2023-01-20 22:00:19 +01:00
c96bdb0d28 fix: Updated shortcut hint on the menubar to reflect the new shortcut. fixes #174 2023-01-20 21:57:41 +01:00
dependabot[bot]
115d8c6c5c Bump json5 from 2.2.1 to 2.2.3 (#191)
Bumps [json5](https://github.com/json5/json5) from 2.2.1 to 2.2.3.
- [Release notes](https://github.com/json5/json5/releases)
- [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md)
- [Commits](https://github.com/json5/json5/compare/v2.2.1...v2.2.3)

---
updated-dependencies:
- dependency-name: json5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-10 21:26:12 +01:00
Marie
cd2a068470 Fix CHANGELOG (#181) 2022-10-25 14:35:07 +02:00
bf260b14e0 https://github.com/Mastermindzh/tidal-hifi/pull/178 (#180)
* Update configuration of the desktop file (#165)

* - Changed the category of the desktop file to AudioVideo
- Changed desktop file name to "TIDAL Hi-Fi"

* Redesign of the settings window (#168)

* Pr dest (#166)

* Update configuration of the desktop file (#165)

* - Changed the category of the desktop file to AudioVideo
- Changed desktop file name to "TIDAL Hi-Fi"

Co-authored-by: Ivo Šmerek <ivo97@centrum.cz>

* Redesign of the settings window

* changed sass to scss, fixed color of switches and disabled rounded corners

Co-authored-by: Rick van Lieshout <info@rickvanlieshout.com>

* - icon is set to new static path based on Arch/Debian
  - Name has changed to Tidal-Hifi

* Check if app is default protocol client before setting (#178)

* Release of settings window and desktop file fixes (#169)

* Update configuration of the desktop file (#165)

* - Changed the category of the desktop file to AudioVideo
- Changed desktop file name to "TIDAL Hi-Fi"

* Redesign of the settings window (#168)

* Pr dest (#166)

* Update configuration of the desktop file (#165)

* - Changed the category of the desktop file to AudioVideo
- Changed desktop file name to "TIDAL Hi-Fi"

Co-authored-by: Ivo Šmerek <ivo97@centrum.cz>

* Redesign of the settings window

* changed sass to scss, fixed color of switches and disabled rounded corners

Co-authored-by: Rick van Lieshout <info@rickvanlieshout.com>

* - icon is set to new static path based on Arch/Debian
  - Name has changed to Tidal-Hifi

Co-authored-by: Ivo Šmerek <ivo97@centrum.cz>

* Disable background throttling (#171)

* disable background throttling for consistent setInterval

* add disable throttle as config option

* 4.3.0

* Check if app is default protocol client before setting

Co-authored-by: Rick van Lieshout <info@rickvanlieshout.com>
Co-authored-by: Ivo Šmerek <ivo97@centrum.cz>
Co-authored-by: Cukmekerb <cukmekerb@gmail.com>
Co-authored-by: Brecht Yperman <brecht.yperman@trustbuilder.com>

* docs

Co-authored-by: Ivo Šmerek <ivo97@centrum.cz>
Co-authored-by: Brecht Yperman <brecht@yperman.eu>
Co-authored-by: Cukmekerb <cukmekerb@gmail.com>
Co-authored-by: Brecht Yperman <brecht.yperman@trustbuilder.com>
2022-10-24 11:38:00 +02:00
d161a68c95 4.3.0 2022-10-05 19:44:04 +02:00
Cukmekerb
9de8cea50e Disable background throttling (#171)
* disable background throttling for consistent setInterval

* add disable throttle as config option
2022-10-05 19:38:01 +02:00
14 changed files with 108 additions and 22 deletions

View File

@@ -4,13 +4,31 @@ 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).
## 4.4.0
- Updated shortcut hint on the menubar to reflect the new `ctrl+=` shortcut.
- Reverted icon path to `icon.png` instead of the hardcoded linux path.
- Add support to autoHide the menubar and showing it with the `alt` key.
- Move the quit command from the system sub-menu to the main menu
- Added single click focus/show on the tray icon
- Doesn't work on all platforms. Nothing I can do about that unfortunately!
- Added a list of artists to automatically skip.
- I don't like the vast majority of dutch music so I added one of them to my list to test: [./docs/no-dutch-music.mp4](./docs/no-dutch-music.mp4)
## 4.3.1
- fix: App always requests a default-url-handler-scheme change on start
## 4.3.0
- Added a setting to disable background throttling ([docs](https://www.electronjs.org/docs/latest/api/browser-window))
## 4.2.0
- New settings window by BlueManCZ
- Fixed the desktop files in electron-builder
- icon is set to new static path based on Arch/Debian
- Name has changed to Tidal-Hifi
-
## 4.1.2

View File

@@ -18,7 +18,7 @@ linux:
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: /usr/share/icons/hicolor/0x0/apps/tidal-hifi.png
Icon: icon.png
StartupNotify: true
Terminal: false
Type: Application

BIN
docs/no-dutch-music.mp4 Normal file

Binary file not shown.

16
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "tidal-hifi",
"version": "4.2.0",
"version": "4.3.1",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "tidal-hifi",
"version": "4.2.0",
"version": "4.3.1",
"license": "MIT",
"dependencies": {
"@electron/remote": "^2.0.8",
@@ -4041,9 +4041,9 @@
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
},
"node_modules/json5": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
"integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"dev": true,
"bin": {
"json5": "lib/cli.js"
@@ -9566,9 +9566,9 @@
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
},
"json5": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
"integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"dev": true
},
"jsonfile": {

View File

@@ -1,6 +1,6 @@
{
"name": "tidal-hifi",
"version": "4.2.0",
"version": "4.4.0",
"description": "Tidal on Electron with widevine(hifi) support",
"main": "src/main.js",
"scripts": {

View File

@@ -15,6 +15,9 @@ const settings = {
playBackControl: "playBackControl",
muteArtists: "muteArtists",
mutedArtists: "mutedArtists",
skipArtists: "skipArtists",
skippedArtists: "skippedArtists",
disableBackgroundThrottle: "disableBackgroundThrottle",
apiSettings: {
root: "apiSettings",
port: "apiSettings.port",

View File

@@ -49,7 +49,10 @@ function setFlags() {
*
*/
function syncMenuBarWithStore() {
mainWindow.setMenuBarVisibility(store.get(settings.menuBar));
const fixedMenuBar = store.get(settings.menuBar);
mainWindow.autoHideMenuBar = !fixedMenuBar;
mainWindow.setMenuBarVisibility(fixedMenuBar);
}
/**
@@ -78,6 +81,7 @@ function createWindow(options = {}) {
height: store && store.get(settings.windowBounds.height),
icon,
backgroundColor: options.backgroundColor,
autoHideMenuBar: true,
webPreferences: {
preload: path.join(__dirname, "preload.js"),
plugins: true,
@@ -91,6 +95,11 @@ function createWindow(options = {}) {
// load the Tidal website
mainWindow.loadURL(tidalUrl);
if (store.get(settings.disableBackgroundThrottle)) {
// prevent setInterval lag
mainWindow.webContents.setBackgroundThrottling(false);
}
// run stuff after first load
mainWindow.webContents.once("did-finish-load", () => {});
@@ -118,7 +127,9 @@ function registerHttpProtocols() {
protocol.registerHttpProtocol(PROTOCOL_PREFIX, (request, _callback) => {
mainWindow.loadURL(`${tidalUrl}/${request.url.substring(PROTOCOL_PREFIX.length + 3)}`);
});
app.setAsDefaultProtocolClient(PROTOCOL_PREFIX);
if (!app.isDefaultProtocolClient(PROTOCOL_PREFIX)) {
app.setAsDefaultProtocolClient(PROTOCOL_PREFIX);
}
}
function addGlobalShortcuts() {

View File

@@ -4,12 +4,15 @@ let trayIcon,
enableCustomHotkeys,
enableDiscord,
muteArtists,
skipArtists,
notifications,
playBackControl,
api,
port,
menuBar,
mutedArtists,
skippedArtists,
disableBackgroundThrottle,
singleInstance,
disableHardwareMediaKeys,
gpuRasterization;
@@ -35,9 +38,12 @@ function refreshSettings() {
minimizeOnClose.checked = store.get(settings.minimizeOnClose);
muteArtists.checked = store.get(settings.muteArtists);
mutedArtists.value = store.get(settings.mutedArtists).join("\n");
skipArtists.checked = store.get(settings.skipArtists);
skippedArtists.value = store.get(settings.skippedArtists).join("\n");
singleInstance.checked = store.get(settings.singleInstance);
disableHardwareMediaKeys.checked = store.get(settings.flags.disableHardwareMediaKeys);
gpuRasterization.checked = store.get(settings.flags.gpuRasterization);
disableBackgroundThrottle.checked = store.get("disableBackgroundThrottle");
}
/**
@@ -117,6 +123,9 @@ window.addEventListener("DOMContentLoaded", () => {
enableDiscord = get("enableDiscord");
muteArtists = get("muteArtists");
mutedArtists = get("mutedArtists");
skipArtists = get("skipArtists");
skippedArtists = get("skippedArtists");
disableBackgroundThrottle = get("disableBackgroundThrottle");
singleInstance = get("singleInstance");
disableHardwareMediaKeys = get("disableHardwareMediaKeys");
gpuRasterization = get("gpuRasterization");
@@ -135,6 +144,9 @@ window.addEventListener("DOMContentLoaded", () => {
addInputListener(minimizeOnClose, settings.minimizeOnClose);
addInputListener(muteArtists, settings.muteArtists);
addTextAreaListener(mutedArtists, settings.mutedArtists);
addInputListener(skipArtists, settings.skipArtists);
addTextAreaListener(skippedArtists, settings.skippedArtists);
addInputListener(disableBackgroundThrottle, settings.disableBackgroundThrottle);
addInputListener(singleInstance, settings.singleInstance);
addInputListener(disableHardwareMediaKeys, settings.flags.disableHardwareMediaKeys);
addInputListener(gpuRasterization, settings.flags.gpuRasterization);

View File

@@ -63,13 +63,25 @@
</label>
</div>
<textarea id="mutedArtists" class="textarea" cols="40" rows="5" spellcheck="false"></textarea>
<div class="group__option">
<div class="group__description">
<h4>Skip Artists automatically</h4>
<p>The following list of artists (1 per line) will be skipped automatically.</p>
</div>
<label class="switch">
<input id="skipArtists" type="checkbox">
<span class="switch__slider"></span>
</label>
</div>
<textarea id="skippedArtists" class="textarea" cols="40" rows="5" spellcheck="false"></textarea>
</div>
<div class="group">
<p class="group__title">UI</p>
<div class="group__option">
<div class="group__description">
<h4>Menubar</h4>
<p>Show TIDAL Hi-Fi's menu bar.</p>
<h4>Fixed menubar</h4>
<p>Always show TIDAL Hi-Fi's menu bar.</p>
</div>
<label class="switch">
<input id="menuBar" type="checkbox">
@@ -222,6 +234,16 @@
<span class="switch__slider"></span>
</label>
</div>
<div class="group__option">
<div class="group__description">
<h4>Disable Background Throttling</h4>
<p>Makes app more responsive while in the background, at the cost of performance.</p>
</div>
<label class="switch">
<input id="disableBackgroundThrottle" type="checkbox">
<span class="switch__slider"></span>
</label>
</div>
</div>
</section>

View File

@@ -7,6 +7,7 @@ const { downloadFile } = require("./scripts/download");
const statuses = require("./constants/statuses");
const hotkeys = require("./scripts/hotkeys");
const globalEvents = require("./constants/globalEvents");
const { skipArtists } = require("./constants/settings");
const notificationPath = `${app.getPath("userData")}/notification.jpg`;
const appName = "Tidal Hifi";
let currentSong = "";
@@ -327,8 +328,9 @@ function getTrackURL() {
setInterval(function () {
const title = elements.getText("title");
const artists = elements.getArtists();
muteArtistIfFoundInMutedArtistsList(); // doing this here so that nothing can possibly fail before we call this function
skipArtistsIfFoundInSkippedArtistsList(artists);
muteArtistIfFoundInMutedArtistsList(artists); // doing this here so that nothing can possibly fail before we call this function
const album = elements.getAlbumName();
const current = elements.getText("current");
const duration = elements.getText("duration");
@@ -344,12 +346,9 @@ setInterval(function () {
duration,
"app-name": appName,
};
const titleOrArtistChanged = currentSong !== songDashArtistTitle;
// update title, url and play info with new info
setTitle(songDashArtistTitle);
getTrackURL();
@@ -385,7 +384,7 @@ setInterval(function () {
/**
* Checks whether the current artist is included in the "muted artists" list and if so it will automatically mute the player
*/
function muteArtistIfFoundInMutedArtistsList() {
function muteArtistIfFoundInMutedArtistsList(artists) {
if (store.get(settings.muteArtists)) {
const mutedArtists = store.get(settings.mutedArtists);
if (mutedArtists.find((artist) => artist === artists) !== undefined) {
@@ -399,6 +398,19 @@ setInterval(function () {
}
}
}
/**
* automatically skip a song if the artists are found in the list of artists to skip
* @param {*} artists list of artists to skip
*/
function skipArtistsIfFoundInSkippedArtistsList(artists) {
if (store.get(skipArtists)) {
const skippedArtists = store.get(settings.skippedArtists);
if (skippedArtists.find((artist) => artist === artists) !== undefined) {
elements.click("next");
}
}
}
}, 1000);
if (process.platform === "linux" && store.get(settings.mpris)) {

View File

@@ -8,7 +8,7 @@ const settingsMenuEntry = {
click() {
showSettingsWindow();
},
accelerator: "Control+/",
accelerator: "Control+=",
};
const quitMenuEntry = {
@@ -110,6 +110,7 @@ menuModule.getMenu = function (mainWindow) {
},
},
toggleWindow,
quitMenuEntry,
];
return Menu.buildFromTemplate(mainMenu);

View File

@@ -12,6 +12,9 @@ const store = new Store({
playBackControl: true,
muteArtists: false,
mutedArtists: ["TIDAL"],
skipArtists: false,
skippedArtists: [""],
disableBackgroundThrottle: true,
menuBar: true,
apiSettings: {
port: 47836,

View File

@@ -11,6 +11,10 @@ trayModule.addTray = function (mainWindow, options = { icon: "" }) {
const menu = getMenu(mainWindow);
tray.setContextMenu(menu);
tray.on("click", function () {
mainWindow.isVisible() ? mainWindow.focus() : mainWindow.show();
});
};
trayModule.refreshTray = function (mainWindow) {