mirror of
https://github.com/Mastermindzh/tidal-hifi.git
synced 2025-09-10 13:54:41 +02:00
Compare commits
7 Commits
2.7.0
...
0583c4a188
Author | SHA1 | Date | |
---|---|---|---|
|
0583c4a188 | ||
|
8855e7f89f | ||
|
4fbb598c50 | ||
101fe967d3 | |||
|
53468e0dc3 | ||
53cecbcd18 | |||
5a65f60cc5 |
@@ -4,6 +4,14 @@ 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).
|
||||||
|
|
||||||
|
## 2.7.2
|
||||||
|
|
||||||
|
- Disabled sanboxing to fix a display compositor issue on Linux.
|
||||||
|
|
||||||
|
## 2.7.1
|
||||||
|
|
||||||
|
- Fixed bug: Triggering fullscreen from the Tidal web app would cause the menubar to be visible even if it was disabled in the settings
|
||||||
|
|
||||||
## 2.7.0
|
## 2.7.0
|
||||||
|
|
||||||
- Switched to the native Notifier (removed node-notifier)
|
- Switched to the native Notifier (removed node-notifier)
|
||||||
|
@@ -77,7 +77,7 @@ To install and work with the code on this project follow these steps:
|
|||||||
- Custom hotkeys ([source](https://defkey.com/tidal-desktop-shortcuts))
|
- Custom hotkeys ([source](https://defkey.com/tidal-desktop-shortcuts))
|
||||||
- API for status and playback
|
- API for status and playback
|
||||||
- Custom [integrations](#integrations)
|
- Custom [integrations](#integrations)
|
||||||
- [Settings feature](./docs/settings.png) to disable certain functionality. (`ctrl+=`)
|
- [Settings feature](./docs/settings.png) to disable certain functionality. (`ctrl+=` or `ctrl+0`)
|
||||||
- AlbumArt in integrations ([best-effort](https://github.com/Mastermindzh/tidal-hifi/pull/88#pullrequestreview-840814847))
|
- AlbumArt in integrations ([best-effort](https://github.com/Mastermindzh/tidal-hifi/pull/88#pullrequestreview-840814847))
|
||||||
|
|
||||||
## Integrations
|
## Integrations
|
||||||
|
92
package-lock.json
generated
92
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "tidal-hifi",
|
"name": "tidal-hifi",
|
||||||
"version": "2.7.0",
|
"version": "2.7.2",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "tidal-hifi",
|
"name": "tidal-hifi",
|
||||||
"version": "2.7.0",
|
"version": "2.7.2",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"discord-rpc": "^4.0.1",
|
"discord-rpc": "^4.0.1",
|
||||||
@@ -3263,9 +3263,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/minimist": {
|
"node_modules/minimist": {
|
||||||
"version": "1.2.5",
|
"version": "1.2.6",
|
||||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
|
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
|
||||||
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
|
"integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/mkdirp": {
|
"node_modules/mkdirp": {
|
||||||
@@ -3317,11 +3317,22 @@
|
|||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"node_modules/node-fetch": {
|
"node_modules/node-fetch": {
|
||||||
"version": "2.6.1",
|
"version": "2.6.7",
|
||||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
|
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
|
||||||
"integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==",
|
"integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"whatwg-url": "^5.0.0"
|
||||||
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "4.x || >=6.0.0"
|
"node": "4.x || >=6.0.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"encoding": "^0.1.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"encoding": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/normalize-path": {
|
"node_modules/normalize-path": {
|
||||||
@@ -3594,9 +3605,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/plist": {
|
"node_modules/plist": {
|
||||||
"version": "3.0.4",
|
"version": "3.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/plist/-/plist-3.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/plist/-/plist-3.0.5.tgz",
|
||||||
"integrity": "sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg==",
|
"integrity": "sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"base64-js": "^1.5.1",
|
"base64-js": "^1.5.1",
|
||||||
@@ -4447,6 +4458,11 @@
|
|||||||
"node": ">=0.8"
|
"node": ">=0.8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/tr46": {
|
||||||
|
"version": "0.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
|
||||||
|
"integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
|
||||||
|
},
|
||||||
"node_modules/truncate-utf8-bytes": {
|
"node_modules/truncate-utf8-bytes": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz",
|
||||||
@@ -4665,6 +4681,20 @@
|
|||||||
"extsprintf": "^1.2.0"
|
"extsprintf": "^1.2.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/webidl-conversions": {
|
||||||
|
"version": "3.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
||||||
|
"integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
|
||||||
|
},
|
||||||
|
"node_modules/whatwg-url": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
|
||||||
|
"integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
|
||||||
|
"dependencies": {
|
||||||
|
"tr46": "~0.0.3",
|
||||||
|
"webidl-conversions": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/which": {
|
"node_modules/which": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
||||||
@@ -7394,9 +7424,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"minimist": {
|
"minimist": {
|
||||||
"version": "1.2.5",
|
"version": "1.2.6",
|
||||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
|
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
|
||||||
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
|
"integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"mkdirp": {
|
"mkdirp": {
|
||||||
@@ -7442,9 +7472,12 @@
|
|||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"node-fetch": {
|
"node-fetch": {
|
||||||
"version": "2.6.1",
|
"version": "2.6.7",
|
||||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
|
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
|
||||||
"integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
|
"integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
|
||||||
|
"requires": {
|
||||||
|
"whatwg-url": "^5.0.0"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"normalize-path": {
|
"normalize-path": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
@@ -7651,9 +7684,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"plist": {
|
"plist": {
|
||||||
"version": "3.0.4",
|
"version": "3.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/plist/-/plist-3.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/plist/-/plist-3.0.5.tgz",
|
||||||
"integrity": "sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg==",
|
"integrity": "sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"base64-js": "^1.5.1",
|
"base64-js": "^1.5.1",
|
||||||
@@ -8346,6 +8379,11 @@
|
|||||||
"punycode": "^2.1.1"
|
"punycode": "^2.1.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"tr46": {
|
||||||
|
"version": "0.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
|
||||||
|
"integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
|
||||||
|
},
|
||||||
"truncate-utf8-bytes": {
|
"truncate-utf8-bytes": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz",
|
||||||
@@ -8518,6 +8556,20 @@
|
|||||||
"extsprintf": "^1.2.0"
|
"extsprintf": "^1.2.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"webidl-conversions": {
|
||||||
|
"version": "3.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
||||||
|
"integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
|
||||||
|
},
|
||||||
|
"whatwg-url": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
|
||||||
|
"integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
|
||||||
|
"requires": {
|
||||||
|
"tr46": "~0.0.3",
|
||||||
|
"webidl-conversions": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"which": {
|
"which": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "tidal-hifi",
|
"name": "tidal-hifi",
|
||||||
"version": "2.7.0",
|
"version": "2.7.2",
|
||||||
"description": "Tidal on Electron with widevine(hifi) support",
|
"description": "Tidal on Electron with widevine(hifi) support",
|
||||||
"main": "src/main.js",
|
"main": "src/main.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
@@ -6,6 +6,7 @@ const globalEvents = {
|
|||||||
previous: "previous",
|
previous: "previous",
|
||||||
updateInfo: "update-info",
|
updateInfo: "update-info",
|
||||||
hideSettings: "hideSettings",
|
hideSettings: "hideSettings",
|
||||||
|
refreshMenuBar: "refreshMenubar",
|
||||||
showSettings: "showSettings",
|
showSettings: "showSettings",
|
||||||
storeChanged: "storeChanged",
|
storeChanged: "storeChanged",
|
||||||
error: "error",
|
error: "error",
|
||||||
|
22
src/main.js
22
src/main.js
@@ -29,6 +29,19 @@ if (!app.isPackaged) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fix Display Compositor issue.
|
||||||
|
*/
|
||||||
|
app.commandLine.appendSwitch('disable-seccomp-filter-sandbox');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the menuBarVisbility according to the store value
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
function syncMenuBarWithStore() {
|
||||||
|
mainWindow.setMenuBarVisibility(store.get(settings.menuBar));
|
||||||
|
}
|
||||||
|
|
||||||
function createWindow(options = {}) {
|
function createWindow(options = {}) {
|
||||||
// Create the browser window.
|
// Create the browser window.
|
||||||
mainWindow = new BrowserWindow({
|
mainWindow = new BrowserWindow({
|
||||||
@@ -48,7 +61,7 @@ function createWindow(options = {}) {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
mainWindow.setMenuBarVisibility(store.get(settings.menuBar));
|
syncMenuBarWithStore();
|
||||||
|
|
||||||
// load the Tidal website
|
// load the Tidal website
|
||||||
mainWindow.loadURL(tidalUrl);
|
mainWindow.loadURL(tidalUrl);
|
||||||
@@ -95,6 +108,7 @@ app.on("ready", () => {
|
|||||||
store.get(settings.trayIcon) && addTray({ icon }) && refreshTray();
|
store.get(settings.trayIcon) && addTray({ icon }) && refreshTray();
|
||||||
store.get(settings.api) && expressModule.run(mainWindow);
|
store.get(settings.api) && expressModule.run(mainWindow);
|
||||||
store.get(settings.enableDiscord) && discordModule.initRPC();
|
store.get(settings.enableDiscord) && discordModule.initRPC();
|
||||||
|
// mainWindow.webContents.openDevTools();
|
||||||
});
|
});
|
||||||
|
|
||||||
app.on("activate", function () {
|
app.on("activate", function () {
|
||||||
@@ -117,8 +131,12 @@ ipcMain.on(globalEvents.showSettings, (event, arg) => {
|
|||||||
showSettingsWindow();
|
showSettingsWindow();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
ipcMain.on(globalEvents.refreshMenuBar, (event, arg) => {
|
||||||
|
syncMenuBarWithStore();
|
||||||
|
});
|
||||||
|
|
||||||
ipcMain.on(globalEvents.storeChanged, (event, arg) => {
|
ipcMain.on(globalEvents.storeChanged, (event, arg) => {
|
||||||
mainWindow.setMenuBarVisibility(store.get(settings.menuBar));
|
syncMenuBarWithStore();
|
||||||
|
|
||||||
if (store.get(settings.enableDiscord) && !discordModule.rpc) {
|
if (store.get(settings.enableDiscord) && !discordModule.rpc) {
|
||||||
discordModule.initRPC();
|
discordModule.initRPC();
|
||||||
|
@@ -82,17 +82,20 @@ const elements = {
|
|||||||
|
|
||||||
getAlbumName: function () {
|
getAlbumName: function () {
|
||||||
//If listening to an album, get its name from the header title
|
//If listening to an album, get its name from the header title
|
||||||
if(window.location.href.includes('/album/')) {
|
if (window.location.href.includes("/album/")) {
|
||||||
const albumName = window.document.querySelector(this.album_header_title);
|
const albumName = window.document.querySelector(this.album_header_title);
|
||||||
if(albumName) {
|
if (albumName) {
|
||||||
return albumName.textContent;
|
return albumName.textContent;
|
||||||
}
|
}
|
||||||
//If listening to a playlist or a mix, get album name from the list
|
//If listening to a playlist or a mix, get album name from the list
|
||||||
} else if(window.location.href.includes('/playlist/') || window.location.href.includes('/mix/')) {
|
} else if (
|
||||||
if(currentPlayStatus === statuses.playing) {
|
window.location.href.includes("/playlist/") ||
|
||||||
|
window.location.href.includes("/mix/")
|
||||||
|
) {
|
||||||
|
if (currentPlayStatus === statuses.playing) {
|
||||||
const row = window.document.querySelector(this.playing_title).closest(this.tracklist_row);
|
const row = window.document.querySelector(this.playing_title).closest(this.tracklist_row);
|
||||||
if(row) {
|
if (row) {
|
||||||
return row.querySelector(this.album_name_cell).textContent;
|
return row.querySelector(this.album_name_cell).textContent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -180,6 +183,9 @@ function addHotKeys() {
|
|||||||
hotkeys.add("control+=", function () {
|
hotkeys.add("control+=", function () {
|
||||||
ipcRenderer.send(globalEvents.showSettings);
|
ipcRenderer.send(globalEvents.showSettings);
|
||||||
});
|
});
|
||||||
|
hotkeys.add("control+0", function () {
|
||||||
|
ipcRenderer.send(globalEvents.showSettings);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -213,6 +219,12 @@ function handleLogout() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function addFullScreenListeners() {
|
||||||
|
window.document.addEventListener("fullscreenchange", (event) => {
|
||||||
|
ipcRenderer.send(globalEvents.refreshMenuBar);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add ipc event listeners.
|
* Add ipc event listeners.
|
||||||
* Some actions triggered outside of the site need info from the site.
|
* Some actions triggered outside of the site need info from the site.
|
||||||
@@ -274,8 +286,8 @@ function convertDuration(duration) {
|
|||||||
function updateMediaInfo(options, notify) {
|
function updateMediaInfo(options, notify) {
|
||||||
if (options) {
|
if (options) {
|
||||||
ipcRenderer.send(globalEvents.updateInfo, options);
|
ipcRenderer.send(globalEvents.updateInfo, options);
|
||||||
if(store.get(settings.notifications) && notify) {
|
if (store.get(settings.notifications) && notify) {
|
||||||
new Notification({ title: options.title, body: options.message, icon: options.icon}).show();
|
new Notification({ title: options.title, body: options.message, icon: options.icon }).show();
|
||||||
}
|
}
|
||||||
if (player) {
|
if (player) {
|
||||||
player.metadata = {
|
player.metadata = {
|
||||||
@@ -331,7 +343,7 @@ setInterval(function () {
|
|||||||
url: currentURL,
|
url: currentURL,
|
||||||
current: current,
|
current: current,
|
||||||
duration: duration,
|
duration: duration,
|
||||||
'app-name': appName,
|
"app-name": appName,
|
||||||
};
|
};
|
||||||
|
|
||||||
const playStatusChanged = currentStatus !== currentPlayStatus;
|
const playStatusChanged = currentStatus !== currentPlayStatus;
|
||||||
@@ -452,3 +464,4 @@ if (process.platform === "linux" && store.get(settings.mpris)) {
|
|||||||
|
|
||||||
addHotKeys();
|
addHotKeys();
|
||||||
addIPCEventListeners();
|
addIPCEventListeners();
|
||||||
|
addFullScreenListeners();
|
||||||
|
Reference in New Issue
Block a user