mirror of
https://github.com/Mastermindzh/tidal-hifi.git
synced 2025-09-10 13:54:41 +02:00
Compare commits
12 Commits
Author | SHA1 | Date | |
---|---|---|---|
0dec967e71 | |||
|
c940d0991d | ||
662ef6ad7b | |||
5313ab13d3 | |||
f43f227191 | |||
|
ae25d88e94 | ||
5ef6074015 | |||
8fea5265e7 | |||
8d2e03ca6b | |||
1074de228b | |||
|
64d1aa4041 | ||
|
6608330ed3 |
8
.github/workflows/build.yml
vendored
8
.github/workflows/build.yml
vendored
@@ -9,10 +9,12 @@ jobs:
|
|||||||
build_on_linux:
|
build_on_linux:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
|
- name: Install libarchive-tools
|
||||||
|
run: sudo apt-get install -y libarchive-tools
|
||||||
- uses: actions/checkout@master
|
- uses: actions/checkout@master
|
||||||
- uses: actions/setup-node@master
|
- uses: actions/setup-node@master
|
||||||
with:
|
with:
|
||||||
node-version: 12
|
node-version: 16
|
||||||
- run: npm install
|
- run: npm install
|
||||||
- run: npm run build
|
- run: npm run build
|
||||||
|
|
||||||
@@ -22,7 +24,7 @@ jobs:
|
|||||||
- uses: actions/checkout@master
|
- uses: actions/checkout@master
|
||||||
- uses: actions/setup-node@master
|
- uses: actions/setup-node@master
|
||||||
with:
|
with:
|
||||||
node-version: 12
|
node-version: 16
|
||||||
- run: npm install
|
- run: npm install
|
||||||
- run: npm run build
|
- run: npm run build
|
||||||
|
|
||||||
@@ -32,6 +34,6 @@ jobs:
|
|||||||
- uses: actions/checkout@master
|
- uses: actions/checkout@master
|
||||||
- uses: actions/setup-node@master
|
- uses: actions/setup-node@master
|
||||||
with:
|
with:
|
||||||
node-version: 12
|
node-version: 16
|
||||||
- run: npm install
|
- run: npm install
|
||||||
- run: npm run build
|
- run: npm run build
|
||||||
|
8
.github/workflows/release.yml
vendored
8
.github/workflows/release.yml
vendored
@@ -9,10 +9,12 @@ jobs:
|
|||||||
build_on_linux:
|
build_on_linux:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
|
- name: Install libarchive-tools
|
||||||
|
run: sudo apt-get install -y libarchive-tools
|
||||||
- uses: actions/checkout@master
|
- uses: actions/checkout@master
|
||||||
- uses: actions/setup-node@master
|
- uses: actions/setup-node@master
|
||||||
with:
|
with:
|
||||||
node-version: 12
|
node-version: 16
|
||||||
- run: npm install
|
- run: npm install
|
||||||
- run: npm run build
|
- run: npm run build
|
||||||
- uses: actions/upload-artifact@master
|
- uses: actions/upload-artifact@master
|
||||||
@@ -26,7 +28,7 @@ jobs:
|
|||||||
- uses: actions/checkout@master
|
- uses: actions/checkout@master
|
||||||
- uses: actions/setup-node@master
|
- uses: actions/setup-node@master
|
||||||
with:
|
with:
|
||||||
node-version: 12
|
node-version: 16
|
||||||
- run: npm install
|
- run: npm install
|
||||||
- run: npm run build
|
- run: npm run build
|
||||||
- uses: actions/upload-artifact@master
|
- uses: actions/upload-artifact@master
|
||||||
@@ -40,7 +42,7 @@ jobs:
|
|||||||
- uses: actions/checkout@master
|
- uses: actions/checkout@master
|
||||||
- uses: actions/setup-node@master
|
- uses: actions/setup-node@master
|
||||||
with:
|
with:
|
||||||
node-version: 12
|
node-version: 16
|
||||||
- run: npm install
|
- run: npm install
|
||||||
- run: npm run build
|
- run: npm run build
|
||||||
- uses: actions/upload-artifact@master
|
- uses: actions/upload-artifact@master
|
||||||
|
26
CHANGELOG.md
26
CHANGELOG.md
@@ -4,6 +4,30 @@ 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.5.0
|
||||||
|
|
||||||
|
- Notify-send now correctly shows "Tidal Hifi" as the program name
|
||||||
|
|
||||||
|
- Updated dependencies (including electron itself)
|
||||||
|
|
||||||
|
### known issues
|
||||||
|
|
||||||
|
- Requires older version of nodejs due to electron-builder (use lts/gallium)
|
||||||
|
|
||||||
|
### builds
|
||||||
|
|
||||||
|
updated to nodejs 16 in actions
|
||||||
|
|
||||||
|
## 2.4.0
|
||||||
|
|
||||||
|
- Added more mpris settings
|
||||||
|
- Added instruction for rescrobbler to get last.fm working without sandbox mode
|
||||||
|
|
||||||
|
## 2.3.0
|
||||||
|
|
||||||
|
- Added a setting to minimize to tray on app close (off by default)
|
||||||
|
- Added the main menu to the trayicon
|
||||||
|
|
||||||
## 2.2.1
|
## 2.2.1
|
||||||
|
|
||||||
- artists is now gotten specifically from the footer. This fixes the [unknown artists bug](https://github.com/Mastermindzh/tidal-hifi/issues/45).
|
- artists is now gotten specifically from the footer. This fixes the [unknown artists bug](https://github.com/Mastermindzh/tidal-hifi/issues/45).
|
||||||
@@ -16,7 +40,7 @@ moved to: [https://github.com/Mastermindzh/tidal-hifi-aur](https://github.com/Ma
|
|||||||
## 2.2.0
|
## 2.2.0
|
||||||
|
|
||||||
- The discord integration now adds a time remaining field based on the song duration
|
- The discord integration now adds a time remaining field based on the song duration
|
||||||
- All fields (current, remaining, and url are also available in the API*)
|
- All fields (current, remaining, and url are also available in the API\*)
|
||||||
- the artist field is now correctly identified
|
- the artist field is now correctly identified
|
||||||
|
|
||||||
* current time only updates on play/pause.
|
* current time only updates on play/pause.
|
||||||
|
@@ -20,6 +20,7 @@ The web version of [listen.tidal.com](https://listen.tidal.com) running in elect
|
|||||||
- [Integrations](#integrations)
|
- [Integrations](#integrations)
|
||||||
- [not included](#not-included)
|
- [not included](#not-included)
|
||||||
- [Known bugs](#known-bugs)
|
- [Known bugs](#known-bugs)
|
||||||
|
- [last.fm doesn't work out of the box. Use rescrobbler as a workaround](#lastfm-doesnt-work-out-of-the-box-use-rescrobbler-as-a-workaround)
|
||||||
- [Why](#why)
|
- [Why](#why)
|
||||||
- [Why not extend existing projects?](#why-not-extend-existing-projects)
|
- [Why not extend existing projects?](#why-not-extend-existing-projects)
|
||||||
- [Special thanks to...](#special-thanks-to)
|
- [Special thanks to...](#special-thanks-to)
|
||||||
@@ -96,7 +97,11 @@ It currently includes:
|
|||||||
|
|
||||||
### Known bugs
|
### Known bugs
|
||||||
|
|
||||||
- [Last.fm login doesn't work](https://github.com/Mastermindzh/tidal-hifi/issues/4).
|
#### last.fm doesn't work out of the box. Use rescrobbler as a workaround
|
||||||
|
|
||||||
|
The last.fm login doesn't work, as is evident from the following issue: [Last.fm login doesn't work](https://github.com/Mastermindzh/tidal-hifi/issues/4).
|
||||||
|
However, in that same issue you can read about a workaround using [rescrobbler](https://github.com/InputUsername/rescrobbled).
|
||||||
|
For now that will be the default workaround.
|
||||||
|
|
||||||
## Why
|
## Why
|
||||||
|
|
||||||
|
@@ -10,7 +10,7 @@ snap:
|
|||||||
linux:
|
linux:
|
||||||
category: Audio
|
category: Audio
|
||||||
target:
|
target:
|
||||||
# - pacman
|
- pacman
|
||||||
- tar.gz
|
- tar.gz
|
||||||
- deb
|
- deb
|
||||||
- rpm
|
- rpm
|
||||||
@@ -34,3 +34,7 @@ mac:
|
|||||||
category: public.app-category.entertainment
|
category: public.app-category.entertainment
|
||||||
win:
|
win:
|
||||||
target: msi
|
target: msi
|
||||||
|
icon: build/icon.png
|
||||||
|
artifactName: "tidalhifi"
|
||||||
|
appId: com.rickvanlieshout.tidalhifi
|
||||||
|
executableName: tidalhifi
|
||||||
|
5215
package-lock.json
generated
5215
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
19
package.json
19
package.json
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "tidal-hifi",
|
"name": "tidal-hifi",
|
||||||
"version": "2.2.1",
|
"version": "2.5.0",
|
||||||
"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": {
|
||||||
@@ -23,21 +23,20 @@
|
|||||||
"homepage": "https://github.com/Mastermindzh/tidal-hifi",
|
"homepage": "https://github.com/Mastermindzh/tidal-hifi",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"discord-rpc": "^3.2.0",
|
"discord-rpc": "^4.0.1",
|
||||||
"electron-store": "^5.1.1",
|
"electron-store": "^8.0.1",
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
"hotkeys-js": "^3.7.6",
|
"hotkeys-js": "^3.8.7",
|
||||||
"mpris-service": "^2.1.0",
|
"mpris-service": "^2.1.2",
|
||||||
"node-notifier": "^9.0.1",
|
"node-notifier": "^10.0.0",
|
||||||
"request": "^2.88.2"
|
"request": "^2.88.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@mastermindzh/prettier-config": "^1.0.0",
|
"@mastermindzh/prettier-config": "^1.0.0",
|
||||||
"dot-prop": ">=4.2.1",
|
"electron": "git+https://github.com/castlabs/electron-releases.git#v16.0.4+wvcus",
|
||||||
"electron": "git+https://github.com/castlabs/electron-releases.git#v10.4.3-wvvmp",
|
"electron-builder": "^22.14.5",
|
||||||
"electron-builder": "^21.2.0",
|
|
||||||
"electron-reload": "^1.5.0",
|
"electron-reload": "^1.5.0",
|
||||||
"prettier": "^2.0.4"
|
"prettier": "^2.5.0"
|
||||||
},
|
},
|
||||||
"prettier": "@mastermindzh/prettier-config"
|
"prettier": "@mastermindzh/prettier-config"
|
||||||
}
|
}
|
||||||
|
@@ -26,6 +26,7 @@ const settings = {
|
|||||||
width: "windowBounds.width",
|
width: "windowBounds.width",
|
||||||
height: "windowBounds.height",
|
height: "windowBounds.height",
|
||||||
},
|
},
|
||||||
|
minimizeOnClose: "minimizeOnClose",
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = settings;
|
module.exports = settings;
|
||||||
|
@@ -56,6 +56,14 @@ function createWindow(options = {}) {
|
|||||||
// run stuff after first load
|
// run stuff after first load
|
||||||
mainWindow.webContents.once("did-finish-load", () => {});
|
mainWindow.webContents.once("did-finish-load", () => {});
|
||||||
|
|
||||||
|
mainWindow.on("close", function (event) {
|
||||||
|
if (!app.isQuiting && store.get(settings.minimizeOnClose)) {
|
||||||
|
event.preventDefault();
|
||||||
|
mainWindow.hide();
|
||||||
|
refreshTray(mainWindow);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
});
|
||||||
// Emitted when the window is closed.
|
// Emitted when the window is closed.
|
||||||
mainWindow.on("closed", function () {
|
mainWindow.on("closed", function () {
|
||||||
closeSettingsWindow();
|
closeSettingsWindow();
|
||||||
|
@@ -21,6 +21,7 @@ function refreshSettings() {
|
|||||||
mpris.checked = store.get(settings.mpris);
|
mpris.checked = store.get(settings.mpris);
|
||||||
enableCustomHotkeys.checked = store.get(settings.enableCustomHotkeys);
|
enableCustomHotkeys.checked = store.get(settings.enableCustomHotkeys);
|
||||||
enableDiscord.checked = store.get(settings.enableDiscord);
|
enableDiscord.checked = store.get(settings.enableDiscord);
|
||||||
|
minimizeOnClose.checked = store.get(settings.minimizeOnClose);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -80,6 +81,7 @@ window.addEventListener("DOMContentLoaded", () => {
|
|||||||
port = get("port");
|
port = get("port");
|
||||||
menuBar = get("menuBar");
|
menuBar = get("menuBar");
|
||||||
trayIcon = get("trayIcon");
|
trayIcon = get("trayIcon");
|
||||||
|
minimizeOnClose = get("minimizeOnClose");
|
||||||
mpris = get("mprisCheckbox");
|
mpris = get("mprisCheckbox");
|
||||||
enableCustomHotkeys = get("enableCustomHotkeys");
|
enableCustomHotkeys = get("enableCustomHotkeys");
|
||||||
enableDiscord = get("enableDiscord");
|
enableDiscord = get("enableDiscord");
|
||||||
@@ -95,4 +97,5 @@ window.addEventListener("DOMContentLoaded", () => {
|
|||||||
addInputListener(mpris, settings.mpris);
|
addInputListener(mpris, settings.mpris);
|
||||||
addInputListener(enableCustomHotkeys, settings.enableCustomHotkeys);
|
addInputListener(enableCustomHotkeys, settings.enableCustomHotkeys);
|
||||||
addInputListener(enableDiscord, settings.enableDiscord);
|
addInputListener(enableDiscord, settings.enableDiscord);
|
||||||
|
addInputListener(minimizeOnClose, settings.minimizeOnClose);
|
||||||
});
|
});
|
||||||
|
@@ -80,6 +80,16 @@
|
|||||||
<span class="slider round"></span>
|
<span class="slider round"></span>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="option">
|
||||||
|
<h4>Minimize on Close</h4>
|
||||||
|
<p>
|
||||||
|
Minimize window on close instead <br />
|
||||||
|
</p>
|
||||||
|
<label class="switch">
|
||||||
|
<input id="minimizeOnClose" type="checkbox">
|
||||||
|
<span class="slider round"></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
<div class="option">
|
<div class="option">
|
||||||
<h4>Hotkeys</h4>
|
<h4>Hotkeys</h4>
|
||||||
<p>
|
<p>
|
||||||
|
@@ -57,7 +57,7 @@ const elements = {
|
|||||||
if (figure) {
|
if (figure) {
|
||||||
const mediaElement = figure.querySelector(this["image"]);
|
const mediaElement = figure.querySelector(this["image"]);
|
||||||
if (mediaElement) {
|
if (mediaElement) {
|
||||||
return mediaElement.src;
|
return mediaElement.src.replace("80x80", "640x640");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -234,6 +234,15 @@ function getCurrentlyPlayingStatus() {
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert the duration from MM:SS to seconds
|
||||||
|
* @param {*} duration
|
||||||
|
*/
|
||||||
|
function convertDuration(duration) {
|
||||||
|
const parts = duration.split(":");
|
||||||
|
return parseInt(parts[1]) + 60 * parseInt(parts[0]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update Tidal-hifi's media info
|
* Update Tidal-hifi's media info
|
||||||
*
|
*
|
||||||
@@ -243,14 +252,14 @@ function updateMediaInfo(options, notify) {
|
|||||||
if (options) {
|
if (options) {
|
||||||
ipcRenderer.send(globalEvents.updateInfo, options);
|
ipcRenderer.send(globalEvents.updateInfo, options);
|
||||||
store.get(settings.notifications) && notify && notifier.notify(options);
|
store.get(settings.notifications) && notify && notifier.notify(options);
|
||||||
|
|
||||||
if (player) {
|
if (player) {
|
||||||
player.metadata = {
|
player.metadata = {
|
||||||
...player.metadata,
|
...player.metadata,
|
||||||
...{
|
...{
|
||||||
"xesam:title": options.title,
|
"xesam:title": options.title,
|
||||||
"xesam:artist": [options.artists],
|
"xesam:artist": [options.message],
|
||||||
"mpris:artUrl": options.image,
|
"mpris:artUrl": options.image,
|
||||||
|
"mpris:length": convertDuration(options.duration) * 1000 * 1000,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
player.playbackStatus = options.status == statuses.paused ? "Paused" : "Playing";
|
player.playbackStatus = options.status == statuses.paused ? "Paused" : "Playing";
|
||||||
@@ -283,6 +292,7 @@ setInterval(function () {
|
|||||||
const artists = elements.getArtists();
|
const artists = elements.getArtists();
|
||||||
const current = elements.getText("current");
|
const current = elements.getText("current");
|
||||||
const duration = elements.getText("duration");
|
const duration = elements.getText("duration");
|
||||||
|
const appName = "Tidal Hifi";
|
||||||
const progressBarcurrentTime = elements.get("bar").getAttribute("aria-valuenow");
|
const progressBarcurrentTime = elements.get("bar").getAttribute("aria-valuenow");
|
||||||
const songDashArtistTitle = `${title} - ${artists}`;
|
const songDashArtistTitle = `${title} - ${artists}`;
|
||||||
const currentStatus = getCurrentlyPlayingStatus();
|
const currentStatus = getCurrentlyPlayingStatus();
|
||||||
@@ -293,6 +303,7 @@ setInterval(function () {
|
|||||||
url: currentURL,
|
url: currentURL,
|
||||||
current: current,
|
current: current,
|
||||||
duration: duration,
|
duration: duration,
|
||||||
|
'app-name': appName,
|
||||||
};
|
};
|
||||||
|
|
||||||
const playStatusChanged = currentStatus !== currentPlayStatus;
|
const playStatusChanged = currentStatus !== currentPlayStatus;
|
||||||
@@ -331,6 +342,7 @@ setInterval(function () {
|
|||||||
|
|
||||||
new Promise((resolve) => {
|
new Promise((resolve) => {
|
||||||
if (image.startsWith("http")) {
|
if (image.startsWith("http")) {
|
||||||
|
options.image = image;
|
||||||
downloadFile(image, notificationPath).then(
|
downloadFile(image, notificationPath).then(
|
||||||
() => {
|
() => {
|
||||||
options.icon = notificationPath;
|
options.icon = notificationPath;
|
||||||
@@ -397,6 +409,10 @@ if (process.platform === "linux" && store.get(settings.mpris)) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
// Override get position function
|
||||||
|
player.getPosition = function () {
|
||||||
|
return convertDuration(elements.getText("current")) * 1000 * 1000;
|
||||||
|
};
|
||||||
|
|
||||||
player.on("quit", function () {
|
player.on("quit", function () {
|
||||||
app.quit();
|
app.quit();
|
||||||
|
@@ -31,6 +31,7 @@ const observer = (event, arg) => {
|
|||||||
: "unknown artist(s)",
|
: "unknown artist(s)",
|
||||||
startTimestamp: parseInt(now),
|
startTimestamp: parseInt(now),
|
||||||
endTimestamp: parseInt(remaining),
|
endTimestamp: parseInt(remaining),
|
||||||
|
largeImageKey: mediaInfoModule.mediaInfo.image,
|
||||||
buttons: [{ label: "Play on Tidal", url: mediaInfoModule.mediaInfo.url }],
|
buttons: [{ label: "Play on Tidal", url: mediaInfoModule.mediaInfo.url }],
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@@ -7,7 +7,8 @@ const mediaInfo = {
|
|||||||
status: statuses.paused,
|
status: statuses.paused,
|
||||||
url: "",
|
url: "",
|
||||||
current: "",
|
current: "",
|
||||||
duration: ""
|
duration: "",
|
||||||
|
image: "tidal-hifi-icon"
|
||||||
};
|
};
|
||||||
const mediaInfoModule = {
|
const mediaInfoModule = {
|
||||||
mediaInfo,
|
mediaInfo,
|
||||||
@@ -24,6 +25,7 @@ mediaInfoModule.update = function (arg) {
|
|||||||
mediaInfo.status = propOrDefault(arg.status);
|
mediaInfo.status = propOrDefault(arg.status);
|
||||||
mediaInfo.current = propOrDefault(arg.current);
|
mediaInfo.current = propOrDefault(arg.current);
|
||||||
mediaInfo.duration = propOrDefault(arg.duration);
|
mediaInfo.duration = propOrDefault(arg.duration);
|
||||||
|
mediaInfo.image = propOrDefault(arg.image);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -15,6 +15,7 @@ const store = new Store({
|
|||||||
port: 47836,
|
port: 47836,
|
||||||
},
|
},
|
||||||
trayIcon: true,
|
trayIcon: true,
|
||||||
|
minimizeOnClose : false,
|
||||||
mpris: false,
|
mpris: false,
|
||||||
enableCustomHotkeys: false,
|
enableCustomHotkeys: false,
|
||||||
enableDiscord: false,
|
enableDiscord: false,
|
||||||
|
@@ -1,5 +1,7 @@
|
|||||||
const { Tray } = require("electron");
|
const { Tray, app } = require("electron");
|
||||||
const { getMenu } = require("./menu");
|
const { Menu } = require("electron");
|
||||||
|
const { getMenu, mainMenu } = require("./menu");
|
||||||
|
const { store, settings } = require("./settings");
|
||||||
const trayModule = {};
|
const trayModule = {};
|
||||||
let tray;
|
let tray;
|
||||||
|
|
||||||
@@ -7,16 +9,41 @@ trayModule.addTray = function (options = { icon: "" }) {
|
|||||||
tray = new Tray(options.icon);
|
tray = new Tray(options.icon);
|
||||||
};
|
};
|
||||||
|
|
||||||
trayModule.refreshTray = function () {
|
trayModule.refreshTray = function (mainWindow) {
|
||||||
if (!tray) {
|
if (!tray) {
|
||||||
trayModule.addTray();
|
trayModule.addTray();
|
||||||
}
|
}
|
||||||
|
|
||||||
tray.on("click", function (e) {
|
tray.on("click", function (e) {
|
||||||
// do nothing on click
|
if (mainWindow) {
|
||||||
|
mainWindow.show();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
tray.setToolTip("Tidal-hifi");
|
tray.setToolTip("Tidal-hifi");
|
||||||
tray.setContextMenu(getMenu());
|
|
||||||
|
if (mainWindow && store.get(settings.minimizeOnClose)) {
|
||||||
|
tray.setContextMenu(
|
||||||
|
Menu.buildFromTemplate([
|
||||||
|
{
|
||||||
|
label: "Toggle Window",
|
||||||
|
click: function () {
|
||||||
|
mainWindow.isVisible() ? mainWindow.hide() : mainWindow.show();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Quit",
|
||||||
|
click: function () {
|
||||||
|
mainWindow.destroy();
|
||||||
|
app.quit();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
...mainMenu, //we add menu items from the other context
|
||||||
|
])
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
tray.setContextMenu(getMenu());
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = trayModule;
|
module.exports = trayModule;
|
||||||
|
Reference in New Issue
Block a user