Files
sheepit-shadow-nabber/src/main/java/com/sheepit/client/IncompatibleProcessChecker.java
2024-06-08 03:21:33 +00:00

87 lines
2.6 KiB
Java

/*
* Copyright (C) 2024 Laurent CLOUET
* Author Laurent CLOUET <laurent.clouet@nopnop.net>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; version 2
* of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package com.sheepit.client;
import java.util.TimerTask;
import com.sheepit.client.os.OS;
import lombok.Getter;
import oshi.software.os.OSProcess;
public class IncompatibleProcessChecker extends TimerTask {
private final Client client;
@Getter
private boolean suspendedDueToOtherProcess;
public IncompatibleProcessChecker(Client client_) {
this.client = client_;
this.suspendedDueToOtherProcess = false;
}
@Override public void run() {
String search = this.client.getConfiguration().getIncompatibleProcess();
if (search == null || search.isEmpty()) { // to nothing
return;
}
search = search.toLowerCase();
if (isSearchProcessRunning(search)) {
if (this.client.getRenderingJob() != null && this.client.getRenderingJob().getProcessRender().getProcess() != null) {
this.client.getRenderingJob().incompatibleProcessBlock();
}
this.client.suspend();
this.client.getGui().status("Client paused due to 'incompatible process' feature", true);
this.suspendedDueToOtherProcess = true;
}
else {
if (this.client.isSuspended() && this.suspendedDueToOtherProcess) {
// restart the client since the other process has been shutdown
this.client.resume();
}
}
}
public boolean isRunningCompatibleProcess() {
String search = this.client.getConfiguration().getIncompatibleProcess();
if (search == null || search.isEmpty()) { // to nothing
return false;
}
return isSearchProcessRunning(search.toLowerCase());
}
private boolean isSearchProcessRunning(String search) {
for (OSProcess processInfo : OS.getOS().getProcesses()) {
String name = processInfo.getName();
if (name == null || name.isEmpty()) {
continue;
}
if (name.toLowerCase().contains(search)) {
this.client.getLog().debug("IncompatibleProcessChecker(" + search + ") found " + processInfo.getName());
return true;
}
}
return false;
}
}