mirror of
				https://github.com/Mastermindzh/tidal-hifi.git
				synced 2025-11-04 02:39:13 +01:00 
			
		
		
		
	- The discord integration now doesn't send an update every 15 seconds it sends an update whenever the media info changes
- consolidated updating the media info changes with the status changes into a single global event
This commit is contained in:
		@@ -1,52 +1,57 @@
 | 
			
		||||
const discordrpc = require("discord-rpc");
 | 
			
		||||
const clientId = '833617820704440341';
 | 
			
		||||
const { ipcMain } = require("electron");
 | 
			
		||||
const electron = require("electron");
 | 
			
		||||
const globalEvents = require("../constants/globalEvents");
 | 
			
		||||
const clientId = "833617820704440341";
 | 
			
		||||
const mediaInfoModule = require("./mediaInfo");
 | 
			
		||||
 | 
			
		||||
const discordModule = [];
 | 
			
		||||
 | 
			
		||||
let discord;
 | 
			
		||||
let rpc;
 | 
			
		||||
const observer = (event, arg) => {
 | 
			
		||||
  if (mediaInfoModule.mediaInfo.status == "paused" && rpc) {
 | 
			
		||||
    rpc.setActivity(idleStatus);
 | 
			
		||||
  } else if (rpc) {
 | 
			
		||||
    rpc.setActivity({
 | 
			
		||||
      ...idleStatus,
 | 
			
		||||
      ...{
 | 
			
		||||
        details: `Listening to ${mediaInfoModule.mediaInfo.title}`,
 | 
			
		||||
        state: mediaInfoModule.mediaInfo.artist,
 | 
			
		||||
        buttons: [{ label: "Play on Tidal", url: mediaInfoModule.mediaInfo.url }],
 | 
			
		||||
      },
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const idleStatus = {
 | 
			
		||||
    details: `Browsing Tidal`,
 | 
			
		||||
    largeImageKey: 'tidal-hifi-icon',
 | 
			
		||||
    largeImageText: 'Tidal HiFi 2.0.0',
 | 
			
		||||
    instance: false,
 | 
			
		||||
}
 | 
			
		||||
  details: `Browsing Tidal`,
 | 
			
		||||
  largeImageKey: "tidal-hifi-icon",
 | 
			
		||||
  largeImageText: `Tidal HiFi ${electron.app.getVersion()}`,
 | 
			
		||||
  instance: false,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Set up the discord rpc and listen on globalEvents.updateInfo
 | 
			
		||||
 */
 | 
			
		||||
discordModule.initRPC = function () {
 | 
			
		||||
    rpc = new discordrpc.Client({ transport: 'ipc' });
 | 
			
		||||
    rpc.login({ clientId }).catch(console.error);
 | 
			
		||||
    discordModule.rpc = rpc;
 | 
			
		||||
  rpc = new discordrpc.Client({ transport: "ipc" });
 | 
			
		||||
  rpc.login({ clientId }).catch(console.error);
 | 
			
		||||
  discordModule.rpc = rpc;
 | 
			
		||||
 | 
			
		||||
    rpc.on('ready', () => {
 | 
			
		||||
        rpc.setActivity(idleStatus);
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    discord = setInterval(() => {
 | 
			
		||||
        if (mediaInfoModule.mediaInfo.status == 'paused' && rpc) {
 | 
			
		||||
            rpc.setActivity(idleStatus);
 | 
			
		||||
        } else if (rpc) {
 | 
			
		||||
            rpc.setActivity({
 | 
			
		||||
                details: `Listening to ${mediaInfoModule.mediaInfo.title}`,
 | 
			
		||||
                state: mediaInfoModule.mediaInfo.artist,
 | 
			
		||||
                largeImageKey: 'tidal-hifi-icon',
 | 
			
		||||
                largeImageText: 'Tidal HiFi 2.0.0',
 | 
			
		||||
                buttons: [
 | 
			
		||||
                    { label: "Play on Tidal", url: mediaInfoModule.mediaInfo.url }
 | 
			
		||||
                ],
 | 
			
		||||
                instance: false,
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
    }, 15e3);
 | 
			
		||||
}
 | 
			
		||||
  rpc.on("ready", () => {
 | 
			
		||||
    rpc.setActivity(idleStatus);
 | 
			
		||||
  });
 | 
			
		||||
  ipcMain.on(globalEvents.updateInfo, observer);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Remove any RPC connection with discord and remove the event listener on globalEvents.updateInfo
 | 
			
		||||
 */
 | 
			
		||||
discordModule.unRPC = function () {
 | 
			
		||||
    clearInterval(discord);
 | 
			
		||||
    rpc.clearActivity();
 | 
			
		||||
    rpc.destroy();
 | 
			
		||||
    rpc = false;
 | 
			
		||||
    discordModule.rpc = rpc;
 | 
			
		||||
}
 | 
			
		||||
  rpc.clearActivity();
 | 
			
		||||
  rpc.destroy();
 | 
			
		||||
  rpc = false;
 | 
			
		||||
  discordModule.rpc = rpc;
 | 
			
		||||
  ipcMain.removeListener(globalEvents.updateInfo, observer);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
module.exports = discordModule;
 | 
			
		||||
module.exports = discordModule;
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@ const mediaInfo = {
 | 
			
		||||
  artist: "",
 | 
			
		||||
  icon: "",
 | 
			
		||||
  status: statuses.paused,
 | 
			
		||||
  url: ""
 | 
			
		||||
  url: "",
 | 
			
		||||
};
 | 
			
		||||
const mediaInfoModule = {
 | 
			
		||||
  mediaInfo,
 | 
			
		||||
@@ -14,20 +14,12 @@ const mediaInfoModule = {
 | 
			
		||||
/**
 | 
			
		||||
 * Update artist and song info in the mediaInfo constant
 | 
			
		||||
 */
 | 
			
		||||
mediaInfoModule.update = function(arg) {
 | 
			
		||||
mediaInfoModule.update = function (arg) {
 | 
			
		||||
  mediaInfo.title = propOrDefault(arg.title);
 | 
			
		||||
  mediaInfo.artist = propOrDefault(arg.message);
 | 
			
		||||
  mediaInfo.icon = propOrDefault(arg.icon);
 | 
			
		||||
  mediaInfo.url = propOrDefault(arg.url);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Update tidal's status in the mediaInfo constant
 | 
			
		||||
 */
 | 
			
		||||
mediaInfoModule.updateStatus = function(status) {
 | 
			
		||||
  if (Object.values(statuses).includes(status)) {
 | 
			
		||||
    mediaInfo.status = status;
 | 
			
		||||
  }
 | 
			
		||||
  mediaInfo.status = propOrDefault(arg.status);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user