add prevent computer sleep functionality

This commit is contained in:
Craig Raw 2021-10-05 16:16:32 +02:00
parent 35b57f9d69
commit 8c0a1932cf
4 changed files with 63 additions and 1 deletions

View file

@ -146,6 +146,9 @@ public class AppController implements Initializable {
@FXML @FXML
private MenuItem sendToMany; private MenuItem sendToMany;
@FXML
private CheckMenuItem preventSleep;
@FXML @FXML
private StackPane rootStack; private StackPane rootStack;
@ -289,6 +292,7 @@ public class AppController implements Initializable {
lockWallet.setDisable(true); lockWallet.setDisable(true);
refreshWallet.disableProperty().bind(Bindings.or(exportWallet.disableProperty(), Bindings.or(serverToggle.disableProperty(), AppServices.onlineProperty().not()))); refreshWallet.disableProperty().bind(Bindings.or(exportWallet.disableProperty(), Bindings.or(serverToggle.disableProperty(), AppServices.onlineProperty().not())));
sendToMany.disableProperty().bind(exportWallet.disableProperty()); sendToMany.disableProperty().bind(exportWallet.disableProperty());
preventSleep.setSelected(Config.get().isPreventSleep());
setServerType(Config.get().getServerType()); setServerType(Config.get().getServerType());
serverToggle.setSelected(isConnected()); serverToggle.setSelected(isConnected());
@ -742,6 +746,12 @@ public class AppController implements Initializable {
EventManager.get().post(new BitcoinUnitChangedEvent(unit)); EventManager.get().post(new BitcoinUnitChangedEvent(unit));
} }
public void preventSleep(ActionEvent event) {
CheckMenuItem item = (CheckMenuItem)event.getSource();
Config.get().setPreventSleep(item.isSelected());
AppServices.get().setPreventSleep(item.isSelected());
}
public void openFile(File file) { public void openFile(File file) {
if(isWalletFile(file)) { if(isWalletFile(file)) {
openWalletFile(file, true); openWalletFile(file, true);

View file

@ -2,7 +2,6 @@ package com.sparrowwallet.sparrow;
import com.google.common.eventbus.Subscribe; import com.google.common.eventbus.Subscribe;
import com.google.common.net.HostAndPort; import com.google.common.net.HostAndPort;
import com.samourai.whirlpool.client.wallet.WhirlpoolEventService;
import com.sparrowwallet.drongo.Network; import com.sparrowwallet.drongo.Network;
import com.sparrowwallet.drongo.address.Address; import com.sparrowwallet.drongo.address.Address;
import com.sparrowwallet.drongo.protocol.BlockHeader; import com.sparrowwallet.drongo.protocol.BlockHeader;
@ -24,6 +23,7 @@ import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.value.ChangeListener; import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue; import javafx.beans.value.ObservableValue;
import javafx.concurrent.ScheduledService; import javafx.concurrent.ScheduledService;
import javafx.concurrent.Task;
import javafx.concurrent.Worker; import javafx.concurrent.Worker;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.scene.Node; import javafx.scene.Node;
@ -48,6 +48,7 @@ import org.slf4j.LoggerFactory;
import java.awt.*; import java.awt.*;
import java.awt.desktop.OpenFilesHandler; import java.awt.desktop.OpenFilesHandler;
import java.awt.desktop.OpenURIHandler; import java.awt.desktop.OpenURIHandler;
import java.awt.event.KeyEvent;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.net.*; import java.net.*;
@ -94,6 +95,8 @@ public class AppServices {
private TorService torService; private TorService torService;
private ScheduledService<Void> preventSleepService;
private static Integer currentBlockHeight; private static Integer currentBlockHeight;
private static BlockHeader latestBlockHeader; private static BlockHeader latestBlockHeader;
@ -156,6 +159,7 @@ public class AppServices {
ratesService = createRatesService(config.getExchangeSource(), config.getFiatCurrency()); ratesService = createRatesService(config.getExchangeSource(), config.getFiatCurrency());
versionCheckService = createVersionCheckService(); versionCheckService = createVersionCheckService();
torService = createTorService(); torService = createTorService();
preventSleepService = createPreventSleepService();
onlineProperty.addListener(onlineServicesListener); onlineProperty.addListener(onlineServicesListener);
@ -183,6 +187,10 @@ public class AppServices {
if(config.isCheckNewVersions() && Network.get() == Network.MAINNET) { if(config.isCheckNewVersions() && Network.get() == Network.MAINNET) {
restartService(versionCheckService); restartService(versionCheckService);
} }
if(config.isPreventSleep()) {
restartService(preventSleepService);
}
} }
private void restartService(ScheduledService<?> service) { private void restartService(ScheduledService<?> service) {
@ -382,6 +390,39 @@ public class AppServices {
return torService; return torService;
} }
private ScheduledService<Void> createPreventSleepService() {
ScheduledService<Void> preventSleepService = new ScheduledService<Void>() {
@Override
protected Task<Void> createTask() {
return new Task<>() {
protected Void call() {
try {
Robot robot = new Robot();
robot.keyRelease(KeyEvent.VK_F16);
} catch(Exception e) {
log.debug("Error preventing sleep", e);
}
return null;
}
};
}
};
preventSleepService.setPeriod(Duration.minutes(1));
return preventSleepService;
}
public void setPreventSleep(boolean preventSleep) {
if(preventSleepService != null) {
if(preventSleep) {
restartService(preventSleepService);
} else {
preventSleepService.cancel();
}
}
}
public static boolean isTorRunning() { public static boolean isTorRunning() {
return Tor.getDefault() != null; return Tor.getDefault() != null;
} }

View file

@ -42,6 +42,7 @@ public class Config {
private boolean showTransactionHex = true; private boolean showTransactionHex = true;
private boolean showLoadingLog = false; private boolean showLoadingLog = false;
private boolean showUtxosChart = true; private boolean showUtxosChart = true;
private boolean preventSleep = false;
private List<File> recentWalletFiles; private List<File> recentWalletFiles;
private Integer keyDerivationPeriod; private Integer keyDerivationPeriod;
private File hwi; private File hwi;
@ -279,6 +280,14 @@ public class Config {
flush(); flush();
} }
public boolean isPreventSleep() {
return preventSleep;
}
public void setPreventSleep(boolean preventSleep) {
this.preventSleep = preventSleep;
}
public List<File> getRecentWalletFiles() { public List<File> getRecentWalletFiles() {
return recentWalletFiles; return recentWalletFiles;
} }

View file

@ -108,6 +108,8 @@
<MenuItem mnemonicParsing="false" text="Sign/Verify Message" accelerator="Shortcut+M" onAction="#signVerifyMessage"/> <MenuItem mnemonicParsing="false" text="Sign/Verify Message" accelerator="Shortcut+M" onAction="#signVerifyMessage"/>
<MenuItem fx:id="sendToMany" mnemonicParsing="false" text="Send To Many" onAction="#sendToMany"/> <MenuItem fx:id="sendToMany" mnemonicParsing="false" text="Send To Many" onAction="#sendToMany"/>
<MenuItem styleClass="osxHide,windowsHide" mnemonicParsing="false" text="Install Udev Rules" onAction="#installUdevRules"/> <MenuItem styleClass="osxHide,windowsHide" mnemonicParsing="false" text="Install Udev Rules" onAction="#installUdevRules"/>
<SeparatorMenuItem />
<CheckMenuItem fx:id="preventSleep" mnemonicParsing="false" text="Prevent Computer Sleep" onAction="#preventSleep"/>
</Menu> </Menu>
<Menu fx:id="helpMenu" mnemonicParsing="false" text="Help"> <Menu fx:id="helpMenu" mnemonicParsing="false" text="Help">
<MenuItem mnemonicParsing="false" text="Show Introduction" onAction="#showIntroduction"/> <MenuItem mnemonicParsing="false" text="Show Introduction" onAction="#showIntroduction"/>