Last active
June 23, 2018 15:38
-
-
Save itsfolf/cbb6b03314f4ecf0959490d77a5ee312 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package me.checkium.bgservices.discord.rpc; | |
import club.minnced.discord.rpc.DiscordEventHandlers; | |
import club.minnced.discord.rpc.DiscordRPC; | |
import club.minnced.discord.rpc.DiscordRichPresence; | |
import com.sun.jna.Native; | |
import com.sun.jna.platform.win32.*; | |
import com.sun.jna.ptr.IntByReference; | |
import java.io.File; | |
import java.util.Calendar; | |
public class ProccessSeeker { | |
int MAX_TITLE_LENGTH = 1024; | |
DiscordRPC lib = DiscordRPC.INSTANCE; | |
DiscordRichPresence presence = new DiscordRichPresence(); | |
int updatedTimes = 0; | |
long lastUpdate = System.currentTimeMillis(); | |
public ProccessSeeker() { | |
String applicationId = "458388780068503562"; | |
DiscordEventHandlers handlers = new DiscordEventHandlers(); | |
handlers.ready = (user) -> System.out.println("Ready!"); | |
lib.Discord_Initialize(applicationId, handlers, true, null); | |
new Thread(() -> { | |
while (true) { | |
try { | |
run(); | |
Thread.sleep(5000); | |
} catch (InterruptedException e) { | |
e.printStackTrace(); | |
} | |
} | |
}, "ProcessUpdater").start(); | |
new Thread(() -> { | |
while (!Thread.currentThread().isInterrupted()) { | |
lib.Discord_RunCallbacks(); | |
try { | |
Thread.sleep(2000); | |
} catch (InterruptedException ignored) { | |
} | |
} | |
}, "RPC-Callback-Handler").start(); | |
} | |
public void run() throws InterruptedException { | |
String firstLine = null; | |
String secondLine = null; | |
String largeImageKey = null; | |
String largeImageText = null; | |
String smallImageKey = null; | |
String smallImageText = null; | |
char[] buffer = new char[MAX_TITLE_LENGTH]; | |
char[] processBuffer = new char[MAX_TITLE_LENGTH]; | |
WinDef.HWND hwnd = User32.INSTANCE.GetForegroundWindow(); | |
User32.INSTANCE.GetWindowText(hwnd, buffer, MAX_TITLE_LENGTH); | |
String title = Native.toString(buffer); | |
IntByReference pointer = new IntByReference(); | |
User32.INSTANCE.GetWindowThreadProcessId(User32.INSTANCE.GetForegroundWindow(), pointer); | |
WinNT.HANDLE process = Kernel32.INSTANCE.OpenProcess(0x0400 | 0x0010, false, pointer.getValue()); | |
Psapi.INSTANCE.GetModuleFileNameExW(process, null, processBuffer, MAX_TITLE_LENGTH); | |
String processName = Native.toString(processBuffer); | |
System.out.println("Active window process: " + processName); | |
String processFile = new File(processName).getName().split("\\.")[0]; | |
switch (processFile) { | |
case "idea64": | |
String projectName = null; | |
String fileName = null; | |
try { | |
projectName = title.split("\\[")[0].substring(0, title.split("\\[")[0].length() - 1); | |
fileName = title.split("\\\\")[title.split("\\\\").length - 1].split(" ")[0]; | |
} catch (ArrayIndexOutOfBoundsException e) { | |
} | |
firstLine = "\uD83D\uDCBB IntelliJ IDEA "; | |
if (projectName != null && fileName != null) { | |
firstLine += "\uD83D\uDCDD " + fileName + " @ " + projectName; | |
} else if (projectName != null) { | |
firstLine += "\uD83D\uDC40 " + projectName; | |
} else if (fileName != null) { | |
firstLine += "\uD83D\uDCDD " + fileName; | |
} else { | |
firstLine = ""; | |
} | |
largeImageKey = "intellij-logo-large"; | |
largeImageText = "IntelliJ IDEA"; | |
break; | |
case "notepad++": | |
fileName = title.split(" - ")[0]; | |
if (fileName.contains("\\Checkium\\")) { | |
fileName = fileName.split("\\\\Checkium\\\\")[1]; | |
} | |
firstLine = "\uD83D\uDCBB Notepad++ \uD83D\uDCDD " + fileName; | |
break; | |
case "MinecraftLauncher": | |
firstLine = "\uD83C\uDFAE Minecraft Launcher"; | |
largeImageText = "Minecraft"; | |
largeImageKey = "minecraft-logo"; | |
break; | |
case "javaw": | |
if (title.contains("Minecraft")) { | |
firstLine = "\uD83C\uDFAE " + title; | |
largeImageText = "Minecraft"; | |
largeImageKey = "minecraft-logo"; | |
} | |
break; | |
case "chrome": | |
firstLine = "\uD83C\uDF10 Google Chrome"; | |
largeImageText = "Google Chrome"; | |
largeImageKey = "chrome-logo"; | |
} | |
if (processFile == "DiscordCanary" && presence.largeImageKey != null) { | |
largeImageKey = presence.smallImageKey; | |
largeImageText = presence.smallImageText; | |
} | |
if (Youtube.author != null && Youtube.title != null && Youtube.last > System.currentTimeMillis() - 20000) { | |
secondLine = "\uD83C\uDFA7 " + Youtube.author + " - " + Youtube.title; | |
smallImageKey = "youtube"; | |
smallImageText = "Youtube: " + Youtube.status; | |
} | |
if ((firstLine != null && firstLine != presence.details) || (secondLine != null && secondLine != presence.state)) { | |
if (System.currentTimeMillis() - lastUpdate > 60000) { | |
updatedTimes = 0; | |
} | |
presence.details = firstLine != null ? firstLine : presence.details; | |
presence.largeImageKey = largeImageKey != null ? largeImageKey : presence.largeImageKey; | |
presence.smallImageKey = smallImageKey != null ? smallImageKey : presence.smallImageKey; | |
presence.smallImageText = smallImageText != null ? smallImageText : presence.smallImageText; | |
presence.largeImageText = largeImageText!= null ? largeImageText : presence.largeImageText; | |
presence.state = secondLine != null ? secondLine : "https://checkium.me/"; | |
lib.Discord_RunCallbacks(); | |
lib.Discord_UpdatePresence(presence); | |
updatedTimes++; | |
lastUpdate = System.currentTimeMillis(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment