Skip to content

Commit

Permalink
Merge pull request #298 from kaorahi/autosave
Browse files Browse the repository at this point in the history
Add autosave and resume
  • Loading branch information
featurecat authored Jun 20, 2018
2 parents a8eed06 + 5363283 commit 83c089a
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/main/java/featurecat/lizzie/Config.java
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,8 @@ private JSONObject createDefaultConfig() {
ui.put("large-subboard", false);
ui.put("win-rate-always-black", false);
ui.put("confirm-exit", false);
ui.put("resume-previous-game", false);
ui.put("autosave-interval-seconds", -1);
ui.put("handicap-instead-of-winrate",false);
ui.put("board-size", 19);
ui.put("window-size", new JSONArray("[1024, 768]"));
Expand Down
7 changes: 7 additions & 0 deletions src/main/java/featurecat/lizzie/Lizzie.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import featurecat.lizzie.analysis.Leelaz;
import featurecat.lizzie.plugin.PluginManager;
import featurecat.lizzie.rules.Board;
import featurecat.lizzie.rules.SGFParser;
import featurecat.lizzie.gui.LizzieFrame;
import org.json.JSONObject;

Expand Down Expand Up @@ -57,6 +58,9 @@ public static void main(String[] args) throws IOException, JSONException, ClassN
if(config.handicapInsteadOfWinrate) {
leelaz.estimatePassWinrate();
}
if (config.config.getJSONObject("ui").getBoolean("resume-previous-game")) {
board.resumePreviousGame();
}
leelaz.togglePonder();
} catch (IOException e) {
e.printStackTrace();
Expand All @@ -74,6 +78,9 @@ public static void shutdown() {
LizzieFrame.saveSgf();
}
}
if (board != null) {
board.autosaveToMemory();
}

try {
config.persist();
Expand Down
12 changes: 12 additions & 0 deletions src/main/java/featurecat/lizzie/gui/LizzieFrame.java
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@ public class LizzieFrame extends JFrame {
// Get the font name in current system locale
private String systemDefaultFontName = new JLabel().getFont().getFontName();

private long lastAutosaveTime = System.currentTimeMillis();

static {
// load fonts
try {
Expand Down Expand Up @@ -252,6 +254,7 @@ public static void openSgf() {
* @param g0 not used
*/
public void paint(Graphics g0) {
autosaveMaybe();
if (bs == null)
return;

Expand Down Expand Up @@ -835,6 +838,15 @@ public void onMouseDragged(int x, int y) {
}
}

private void autosaveMaybe() {
int interval = Lizzie.config.config.getJSONObject("ui").getInt("autosave-interval-seconds") * 1000;
long currentTime = System.currentTimeMillis();
if (interval > 0 && currentTime - lastAutosaveTime >= interval) {
Lizzie.board.autosave();
lastAutosaveTime = currentTime;
}
}

public void toggleCoordinates() {
showCoordinates = !showCoordinates;
}
Expand Down
31 changes: 31 additions & 0 deletions src/main/java/featurecat/lizzie/rules/Board.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,15 @@
import featurecat.lizzie.analysis.Leelaz;
import featurecat.lizzie.analysis.LeelazListener;
import featurecat.lizzie.analysis.MoveData;
import featurecat.lizzie.rules.SGFParser;

import java.io.IOException;
import javax.swing.*;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Queue;
import java.util.List;
import org.json.JSONException;

public class Board implements LeelazListener {
public static final int BOARD_SIZE = Lizzie.config.config.getJSONObject("ui").optInt("board-size", 19);
Expand Down Expand Up @@ -1051,4 +1054,32 @@ public void bestMoveNotification(List<MoveData> bestMoves) {
}
}
}

public void autosave() {
if (autosaveToMemory()) {
try {
Lizzie.config.persist();
} catch (IOException err) {}
}
}

public boolean autosaveToMemory() {
try {
String sgf = SGFParser.saveToString();
if (sgf.equals(Lizzie.config.persisted.getString("autosave"))) {
return false;
}
Lizzie.config.persisted.put("autosave", sgf);
} catch (Exception err) { // IOException or JSONException
return false;
}
return true;
}

public void resumePreviousGame() {
try {
SGFParser.loadFromString(Lizzie.config.persisted.getString("autosave"));
while (nextMove()) ;
} catch (JSONException err) {}
}
}

0 comments on commit 83c089a

Please sign in to comment.