mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 18:58:00 +00:00
Supporting preventing system sleep for desktop
This commit is contained in:
@@ -49,6 +49,7 @@ import forge.toolbox.FSkin.SkinImage;
|
|||||||
import forge.util.BuildInfo;
|
import forge.util.BuildInfo;
|
||||||
import forge.util.Callback;
|
import forge.util.Callback;
|
||||||
import forge.util.FileUtil;
|
import forge.util.FileUtil;
|
||||||
|
import forge.util.OperatingSystem;
|
||||||
|
|
||||||
public class GuiDesktop implements IGuiBase {
|
public class GuiDesktop implements IGuiBase {
|
||||||
@Override
|
@Override
|
||||||
@@ -286,6 +287,6 @@ public class GuiDesktop implements IGuiBase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void preventSystemSleep(boolean preventSleep) {
|
public void preventSystemSleep(boolean preventSleep) {
|
||||||
|
OperatingSystem.preventSystemSleep(preventSleep);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -12,6 +12,7 @@ import forge.Forge;
|
|||||||
import forge.assets.AssetsDownloader;
|
import forge.assets.AssetsDownloader;
|
||||||
import forge.interfaces.IDeviceAdapter;
|
import forge.interfaces.IDeviceAdapter;
|
||||||
import forge.util.FileUtil;
|
import forge.util.FileUtil;
|
||||||
|
import forge.util.OperatingSystem;
|
||||||
import forge.util.RestartUtil;
|
import forge.util.RestartUtil;
|
||||||
import forge.util.Utils;
|
import forge.util.Utils;
|
||||||
|
|
||||||
@@ -96,7 +97,7 @@ public class Main {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void preventSystemSleep(boolean preventSleep) {
|
public void preventSystemSleep(boolean preventSleep) {
|
||||||
|
OperatingSystem.preventSystemSleep(preventSleep);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package forge.util;
|
package forge.util;
|
||||||
|
|
||||||
|
import forge.FThreads;
|
||||||
|
|
||||||
public class OperatingSystem {
|
public class OperatingSystem {
|
||||||
private static String os = System.getProperty("os.name").toLowerCase();
|
private static String os = System.getProperty("os.name").toLowerCase();
|
||||||
|
|
||||||
@@ -18,4 +20,42 @@ public class OperatingSystem {
|
|||||||
public static boolean isSolaris() {
|
public static boolean isSolaris() {
|
||||||
return os.contains("sunos");
|
return os.contains("sunos");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//utility for preventing system from sleeping
|
||||||
|
private static boolean preventSleep;
|
||||||
|
private static java.util.concurrent.ScheduledFuture<?> delayedKeepAwakeTask;
|
||||||
|
|
||||||
|
public static void preventSystemSleep(boolean preventSleep0) {
|
||||||
|
if (preventSleep == preventSleep0) { return; }
|
||||||
|
preventSleep = preventSleep0;
|
||||||
|
|
||||||
|
if (delayedKeepAwakeTask != null) { //ensure current delayed task canceled if needed
|
||||||
|
delayedKeepAwakeTask.cancel(false);
|
||||||
|
delayedKeepAwakeTask = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (preventSleep) { //ensure task scheduled from EDT thread
|
||||||
|
FThreads.invokeInEdtNowOrLater(keepSystemAwake);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Runnable keepSystemAwake = new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if (!preventSleep) { return; } //ensure this flag is still set
|
||||||
|
|
||||||
|
try {
|
||||||
|
//use robot to simulate user action so system standby timer resets
|
||||||
|
java.awt.Robot robot = new java.awt.Robot();
|
||||||
|
robot.keyPress(0xF002); //simulate F15 key press since that won't do anything noticable
|
||||||
|
|
||||||
|
delayedKeepAwakeTask = ThreadUtil.delay(30000, keepSystemAwake); //repeat every 30 seconds until flag cleared
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
preventSleep = false;
|
||||||
|
delayedKeepAwakeTask = null;
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user