mirror of
https://github.com/Mastermindzh/tidal-hifi.git
synced 2024-11-25 06:43:48 +01:00
Added app suspension inhibitors when music is playing. fixes #257
This commit is contained in:
parent
a0c73596e4
commit
c7b3921514
@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
- Added support for Wayland (on by default) fixes [#262](https://github.com/Mastermindzh/tidal-hifi/issues/262) and [#157](https://github.com/Mastermindzh/tidal-hifi/issues/157)
|
||||
- Made it clear in the readme that this tidal-hifi client supports High & Max audio settings. fixes [#261](https://github.com/Mastermindzh/tidal-hifi/issues/261)
|
||||
- Added app suspension inhibitors when music is playing. fixes [#257](https://github.com/Mastermindzh/tidal-hifi/issues/257)
|
||||
- Fixed bug with theme files from user directory trying to load: "an error occurred reading the theme file"
|
||||
- Fixed: config flags not being set correctly
|
||||
- [DEV]:
|
||||
|
@ -72,4 +72,4 @@
|
||||
"typescript": "^5.1.6"
|
||||
},
|
||||
"prettier": "@mastermindzh/prettier-config"
|
||||
}
|
||||
}
|
||||
|
65
src/features/idleInhibitor/idleInhibitor.ts
Normal file
65
src/features/idleInhibitor/idleInhibitor.ts
Normal file
@ -0,0 +1,65 @@
|
||||
import { PowerSaveBlocker, powerSaveBlocker } from "electron";
|
||||
import { Logger } from "../logger";
|
||||
|
||||
/**
|
||||
* Start blocking idle/screen timeouts
|
||||
* @param blocker optional instance of the powerSaveBlocker to use
|
||||
* @returns id of current block
|
||||
*/
|
||||
export const acquireInhibitor = (blocker?: PowerSaveBlocker): number => {
|
||||
const currentBlocker = blocker ?? powerSaveBlocker;
|
||||
const blockId = currentBlocker.start("prevent-app-suspension");
|
||||
Logger.log(`Started preventing app suspension with id: ${blockId}`);
|
||||
return blockId;
|
||||
};
|
||||
|
||||
/**
|
||||
* Check whether there is a blocker active for the current id, if not start it.
|
||||
* @param id id of inhibitor you want to check activity against
|
||||
* @param blocker optional instance of the powerSaveBlocker to use
|
||||
*/
|
||||
export const acquireInhibitorIfInactive = (id: number, blocker?: PowerSaveBlocker): number => {
|
||||
const currentBlocker = blocker ?? powerSaveBlocker;
|
||||
if (!isInhibitorActive(id, currentBlocker)) {
|
||||
return acquireInhibitor();
|
||||
}
|
||||
|
||||
return id;
|
||||
};
|
||||
|
||||
/**
|
||||
* stop blocking idle/screen timeouts
|
||||
* @param id id of inhibitor you want to check activity against
|
||||
* @param blocker optional instance of the powerSaveBlocker to use
|
||||
*/
|
||||
export const releaseInhibitor = (id: number, blocker?: PowerSaveBlocker) => {
|
||||
try {
|
||||
const currentBlocker = blocker ?? powerSaveBlocker;
|
||||
currentBlocker.stop(id);
|
||||
Logger.log(`Released inhibitor with id: ${id}`);
|
||||
} catch (error) {
|
||||
Logger.log("Releasing inhibitor failed");
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* stop blocking idle/screen timeouts if a inhibitor is active
|
||||
* @param id id of inhibitor you want to check activity against
|
||||
* @param blocker optional instance of the powerSaveBlocker to use
|
||||
*/
|
||||
export const releaseInhibitorIfActive = (id: number, blocker?: PowerSaveBlocker) => {
|
||||
const currentBlocker = blocker ?? powerSaveBlocker;
|
||||
if (isInhibitorActive(id, currentBlocker)) {
|
||||
releaseInhibitor(id, currentBlocker);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* check whether the inhibitor is active
|
||||
* @param id id of inhibitor you want to check activity against
|
||||
* @param blocker optional instance of the powerSaveBlocker to use
|
||||
*/
|
||||
export const isInhibitorActive = (id: number, blocker?: PowerSaveBlocker) => {
|
||||
const currentBlocker = blocker ?? powerSaveBlocker;
|
||||
return currentBlocker.isStarted(id);
|
||||
};
|
@ -1,4 +1,4 @@
|
||||
import { IpcMain, ipcRenderer, ipcMain } from "electron";
|
||||
import { IpcMain, ipcMain, IpcMainEvent, ipcRenderer } from "electron";
|
||||
import { globalEvents } from "../constants/globalEvents";
|
||||
|
||||
export class Logger {
|
||||
@ -7,10 +7,13 @@ export class Logger {
|
||||
* @param ipcMain main thread IPC client so we can subscribe to events
|
||||
*/
|
||||
public static watch(ipcMain: IpcMain) {
|
||||
ipcMain.on(globalEvents.log, (event, message) => {
|
||||
const { content, object } = message;
|
||||
this.logToSTDOut(content, object);
|
||||
});
|
||||
ipcMain.on(
|
||||
globalEvents.log,
|
||||
(event: IpcMainEvent | { content: string; message: string }, message) => {
|
||||
const { content, object } = message ?? event;
|
||||
this.logToSTDOut(content, object);
|
||||
}
|
||||
);
|
||||
}
|
||||
/**
|
||||
* Log content to STDOut
|
||||
@ -23,7 +26,6 @@ export class Logger {
|
||||
} else {
|
||||
ipcMain.emit(globalEvents.log, { content, object });
|
||||
}
|
||||
this.logToSTDOut(content, object);
|
||||
}
|
||||
|
||||
/**
|
||||
|
15
src/main.ts
15
src/main.ts
@ -1,7 +1,7 @@
|
||||
import { enable, initialize } from "@electron/remote/main";
|
||||
import {
|
||||
BrowserWindow,
|
||||
app,
|
||||
BrowserWindow,
|
||||
components,
|
||||
globalShortcut,
|
||||
ipcMain,
|
||||
@ -13,9 +13,14 @@ import { globalEvents } from "./constants/globalEvents";
|
||||
import { mediaKeys } from "./constants/mediaKeys";
|
||||
import { settings } from "./constants/settings";
|
||||
import { setDefaultFlags, setManagedFlagsFromSettings } from "./features/flags/flags";
|
||||
import {
|
||||
acquireInhibitorIfInactive,
|
||||
releaseInhibitorIfActive,
|
||||
} from "./features/idleInhibitor/idleInhibitor";
|
||||
import { Logger } from "./features/logger";
|
||||
import { Songwhip } from "./features/songwhip/songwhip";
|
||||
import { MediaInfo } from "./models/mediaInfo";
|
||||
import { MediaStatus } from "./models/mediaStatus";
|
||||
import { initRPC, rpc, unRPC } from "./scripts/discord";
|
||||
import { startExpress } from "./scripts/express";
|
||||
import { updateMediaInfo } from "./scripts/mediaInfo";
|
||||
@ -29,6 +34,7 @@ import {
|
||||
} from "./scripts/settings";
|
||||
import { addTray, refreshTray } from "./scripts/tray";
|
||||
const tidalUrl = "https://listen.tidal.com";
|
||||
let mainInhibitorId = -1;
|
||||
|
||||
initialize();
|
||||
|
||||
@ -106,6 +112,7 @@ function createWindow(options = { x: 0, y: 0, backgroundColor: "white" }) {
|
||||
});
|
||||
// Emitted when the window is closed.
|
||||
mainWindow.on("closed", function () {
|
||||
releaseInhibitorIfActive(mainInhibitorId);
|
||||
closeSettingsWindow();
|
||||
app.quit();
|
||||
});
|
||||
@ -178,6 +185,12 @@ app.on("browser-window-created", (_, window) => {
|
||||
// IPC
|
||||
ipcMain.on(globalEvents.updateInfo, (_event, arg: MediaInfo) => {
|
||||
updateMediaInfo(arg);
|
||||
if (arg.status === MediaStatus.playing) {
|
||||
mainInhibitorId = acquireInhibitorIfInactive(mainInhibitorId);
|
||||
} else {
|
||||
releaseInhibitorIfActive(mainInhibitorId);
|
||||
mainInhibitorId = -1;
|
||||
}
|
||||
});
|
||||
|
||||
ipcMain.on(globalEvents.hideSettings, () => {
|
||||
|
Loading…
Reference in New Issue
Block a user