Add ReadStateCommand.

This commit is contained in:
Johannes Mockenhaupt 2017-07-15 12:40:06 +02:00
parent 8b21bb1203
commit 5631488cc8
No known key found for this signature in database
GPG key ID: 9E1EA6AF7BBBB0D1
4 changed files with 109 additions and 0 deletions

View file

@ -5,6 +5,8 @@ public class CommandResult {
public boolean enacted; public boolean enacted;
public Exception exception; public Exception exception;
public String message; public String message;
public State state;
public History history;
public CommandResult() { public CommandResult() {
} }
@ -29,6 +31,16 @@ public class CommandResult {
return this; return this;
} }
public CommandResult state(State state) {
this.state = state;
return this;
}
public CommandResult history(History history) {
this.history = history;
return this;
}
@Override @Override
public String toString() { public String toString() {
return "CommandResult{" + return "CommandResult{" +

View file

@ -0,0 +1,5 @@
package de.jotomo.ruffyscripter.commands;
/** The history data read from "My data" */
public class History {
}

View file

@ -0,0 +1,44 @@
package de.jotomo.ruffyscripter.commands;
import org.monkey.d.ruffy.ruffy.driver.display.Menu;
import org.monkey.d.ruffy.ruffy.driver.display.MenuAttribute;
import org.monkey.d.ruffy.ruffy.driver.display.MenuType;
import org.monkey.d.ruffy.ruffy.driver.display.menu.MenuTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import de.jotomo.ruffyscripter.RuffyScripter;
/**
* Reads the status displayed in the main menu. Usually TBR state or warning/error if any.
* This command is 'read-only', no buttons are pushed and so no vibrations are caused.
*/
public class ReadStateCommand implements Command {
private static final Logger log = LoggerFactory.getLogger(ReadStateCommand.class);
@Override
public CommandResult execute(RuffyScripter scripter) {
try {
State state = new State();
Menu displayedMenu = scripter.currentMenu;
MenuType displayedMenuType = displayedMenu.getType();
if (displayedMenuType == MenuType.MAIN_MENU) {
Double tbrPercentage = (Double) displayedMenu.getAttribute(MenuAttribute.TBR);
if (tbrPercentage != 100) {
state.tbrActive = true;
MenuTime durationMenuTime = ((MenuTime) displayedMenu.getAttribute(MenuAttribute.RUNTIME));
state.tbrRemainingDuration = durationMenuTime.getHour() * 60 + durationMenuTime.getMinute();
}
} else if (displayedMenuType == MenuType.WARNING_OR_ERROR) {
state.isErrorOrWarning = true;
state.errorCode = (int) displayedMenu.getAttribute(MenuAttribute.ERROR);
} else {
throw new CommandException().success(false).message("Neither MAIN_MENU nor WARNING_OR_ERROR is displayed, but " + displayedMenuType);
}
return new CommandResult().success(true).enacted(false).state(state);
} catch (CommandException e) {
return e.toCommandResult();
}
}
}

View file

@ -0,0 +1,48 @@
package de.jotomo.ruffyscripter.commands;
/**
* State represeting the state of the MAIN_MENU
*/
public class State {
public boolean tbrActive = false;
public int tbrPercent = -1;
public int tbrRemainingDuration = -1;
public boolean isErrorOrWarning = false;
public int errorCode = -1;
public State tbrActive(boolean tbrActive) {
this.tbrActive = tbrActive;
return this;
}
public State tbrPercent(int tbrPercent) {
this.tbrPercent = tbrPercent;
return this;
}
public State tbrRemainingDuration(int tbrRemainingDuration) {
this.tbrRemainingDuration = tbrRemainingDuration;
return this;
}
public State isErrorOrWarning(boolean isErrorOrWarning) {
this.isErrorOrWarning = isErrorOrWarning;
return this;
}
public State errorCode(int errorCode) {
this.errorCode = errorCode;
return this;
}
@Override
public String toString() {
return "State{" +
"tbrActive=" + tbrActive +
", tbrPercent=" + tbrPercent +
", tbrRemainingDuration=" + tbrRemainingDuration +
", isErrorOrWarning=" + isErrorOrWarning +
", errorCode=" + errorCode +
'}';
}
}