Skip to content

Commit

Permalink
added a logger for debugging
Browse files Browse the repository at this point in the history
  • Loading branch information
RaderRMT committed Oct 26, 2020
1 parent 732d4e8 commit 2d3f1ad
Show file tree
Hide file tree
Showing 15 changed files with 536 additions and 273 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,6 @@

META-INF/MANIFEST.MF
.idea/
libs/
out/
*.iml
125 changes: 125 additions & 0 deletions fr/rader/billy/Logger.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
package fr.rader.billy;

import javax.swing.*;
import java.io.*;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

public class Logger {

private final File LOG_OUTPUT = new File(System.getenv("APPDATA") + "/.minecraft/logs/billy.log");

private List<String> unusedFields = new ArrayList<>();

public void writeln(String message) {
write(message + "\n");
}

public void write(String message) {
if(logExists()) {
try {
PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(LOG_OUTPUT, true)));

writer.print("[" + currentTime() + "]: " + message);

writer.flush();
writer.close();
} catch (IOException ioException) {
ioException.printStackTrace();
}
}
}

public boolean logExists() {
return LOG_OUTPUT.exists();
}

public boolean createLog() {
try {
return LOG_OUTPUT.createNewFile();
} catch (IOException ioException) {
ioException.printStackTrace();
}

return false;
}

public void clearLog() {
LOG_OUTPUT.delete();

try {
LOG_OUTPUT.createNewFile();
} catch (IOException ioException) {
ioException.printStackTrace();
}
}

public String currentDate() {
LocalDate date = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
return date.format(formatter);
}

public String currentTime() {
LocalTime date = LocalTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
return date.format(formatter);
}

public String readProperties(Map<String, Object> properties) {
String out = "";

for(Map.Entry<String, Object> property : properties.entrySet()) {
out += property.getKey() + "=";
if(property.getValue() instanceof double[]) {
out += Arrays.toString((double[]) property.getValue()) + "; ";
} else {
out += property.getValue() + "; ";
}
}

return out;
}

public void exception(Exception exception) {
StringWriter sw = new StringWriter();
exception.printStackTrace(new PrintWriter(sw));
writeln("Caught exception:\n" + sw.toString().substring(0, sw.toString().length() - 2));
}

public void exception(Exception exception, String replay) {
String message = exception.getLocalizedMessage();
int index = Integer.parseInt(message.split("column ")[1].split(" ")[0]);
writeln("Crash occured here (index:" + index + "): " + replay.substring(Math.max(index - 30, 0), index));

printUnused(replay);
exception(exception);

writeln("Timelines dump: " + replay);

JOptionPane.showMessageDialog(null, "ERROR: " + exception.getLocalizedMessage() +
"\nPlease open an issue on https://github.com/Nemos59/Billy/issues, and provide the \".minecraft\\logs\\billy.log\" file.");
}

public void printUnused(String replay) {
for(String field : unusedFields) {
int min = replay.split(field)[0].length() - 50;
if(min < 0) min = 0;

writeln("Unused field: " + field + " => " + replay.split(field)[0].substring(min) + field + "\" <- HERE ");
}
}

public void addUnusedField(String field) {
unusedFields.add(field);
}

public void clearUnusedFields() {
unusedFields.clear();
}
}
17 changes: 17 additions & 0 deletions fr/rader/billy/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,21 @@ public class Main {

private static Main instance;

private Logger logger = new Logger();

public JCheckBoxMenuItem saveToDefaultFolder;

private void start() {
if(!logger.logExists()) {
logger.createLog();
} else {
logger.clearLog();
}

logger.writeln("Starting Billy");
logger.writeln("Current date is: " + logger.currentDate());

logger.writeln("Checking folders...");
// Check if every folders exists
File toCheck = new File(OpenReplayListener.REPLAY_RECORDINGS);
if(!toCheck.exists()) JOptionPane.showMessageDialog(null, "The replay_recordings folder does not exist.");
Expand All @@ -24,6 +36,7 @@ private void start() {
toCheck = new File(OpenReplayListener.RIGHT_SIDE);
if(!toCheck.exists()) toCheck.mkdirs();

logger.writeln("Creating interface");
createInterface();
}

Expand Down Expand Up @@ -96,4 +109,8 @@ private Main() {
public static Main getInstance() {
return instance;
}

public Logger getLogger() {
return this.logger;
}
}
16 changes: 16 additions & 0 deletions fr/rader/billy/gui/inspector/listeners/SaveKeyframeListener.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package fr.rader.billy.gui.inspector.listeners;

import fr.rader.billy.Logger;
import fr.rader.billy.Main;
import fr.rader.billy.gui.inspector.TimelineInspector;
import fr.rader.billy.timeline.Keyframe;

Expand All @@ -10,6 +12,8 @@

public class SaveKeyframeListener implements ActionListener {

private Logger logger = Main.getInstance().getLogger();

@Override
public void actionPerformed(ActionEvent e) {
TimelineInspector timelineInspector = TimelineInspector.getInstance();
Expand All @@ -33,21 +37,33 @@ public void actionPerformed(ActionEvent e) {

boolean isSpectator = timelineInspector.spectatorKeyframeCheck.isSelected();

logger.writeln("Started saving position keyframe #" + selectedKeyframe);
logger.writeln("Writing timestamp: " + timestamp);
logger.writeln("Writing spectator: " + isSpectator);

Map<String, Object> properties = new HashMap<>();
properties.put("camera:rotation", rotation);
properties.put("camera:position", position);
if(isSpectator) properties.put("spectate", 1);

logger.writeln("Writing properties: " + logger.readProperties(properties));

Keyframe newKeyframe = new Keyframe(timestamp, properties);
timelineInspector.positionPath.getKeyframes().set(selectedKeyframe, newKeyframe);
} else {
int timestamp = Integer.parseInt(timelineInspector.keyframeTimestampField.getText());

int replayTimestamp = Integer.parseInt(timelineInspector.replayTimestampField.getText());

logger.writeln("Started saving time keyframe #" + selectedKeyframe);
logger.writeln("Writing keyframe timestamp: " + timestamp);
logger.writeln("Writing replay timestamp: " + replayTimestamp);

Map<String, Object> properties = new HashMap<>();
properties.put("timestamp", replayTimestamp);

logger.writeln("Writing properties: " + logger.readProperties(properties));

Keyframe newKeyframe = new Keyframe(timestamp, properties);
timelineInspector.timePath.getKeyframes().set(selectedKeyframe, newKeyframe);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package fr.rader.billy.gui.inspector.listeners;

import fr.rader.billy.Logger;
import fr.rader.billy.Main;
import fr.rader.billy.gui.inspector.TimelineInspector;
import fr.rader.billy.timeline.Keyframe;

Expand All @@ -8,12 +10,16 @@

public class ShiftReplayTimestampListener implements ActionListener {

private Logger logger = Main.getInstance().getLogger();

@Override
public void actionPerformed(ActionEvent e) {
TimelineInspector timelineInspector = TimelineInspector.getInstance();

int shift = (int) timelineInspector.shiftTimelineSpinner.getValue();

logger.writeln("Shifting replay timestamps: " + shift);

for(Keyframe keyframe : timelineInspector.timePath.getKeyframes()) {
keyframe.getProperties().replace("timestamp", (Integer) keyframe.getProperties().get("timestamp") + shift);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package fr.rader.billy.gui.inspector.listeners;

import fr.rader.billy.Logger;
import fr.rader.billy.Main;
import fr.rader.billy.gui.inspector.TimelineInspector;
import fr.rader.billy.timeline.Keyframe;

Expand All @@ -8,12 +10,16 @@

public class ShiftTimelineListener implements ActionListener {

private Logger logger = Main.getInstance().getLogger();

@Override
public void actionPerformed(ActionEvent e) {
TimelineInspector timelineInspector = TimelineInspector.getInstance();

int shift = (int) timelineInspector.shiftTimelineSpinner.getValue();

logger.writeln("Shifting timeline: " + shift);

for(Keyframe keyframe : timelineInspector.timePath.getKeyframes()) {
keyframe.setTime(keyframe.getTime() + shift);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
package fr.rader.billy.gui.inspector.listeners;

import fr.rader.billy.Logger;
import fr.rader.billy.Main;
import fr.rader.billy.gui.inspector.TimelineInspector;
import fr.rader.billy.timeline.Keyframe;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;

public class TranslateTimelineListener implements ActionListener {

private Logger logger = Main.getInstance().getLogger();

@Override
public void actionPerformed(ActionEvent e) {
TimelineInspector timelineInspector = TimelineInspector.getInstance();
Expand All @@ -22,6 +27,8 @@ public void actionPerformed(ActionEvent e) {
position[0] += diffX;
position[1] += diffY;
position[2] += diffZ;

logger.writeln("Translating timeline: " + Arrays.toString(position));
}

timelineInspector.xField.setText(String.valueOf(Double.parseDouble(timelineInspector.xField.getText()) + diffX));
Expand Down
7 changes: 7 additions & 0 deletions fr/rader/billy/gui/main/listeners/CopyTimelineListener.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,21 @@
package fr.rader.billy.gui.main.listeners;

import fr.rader.billy.Logger;
import fr.rader.billy.Main;
import fr.rader.billy.gui.main.MainInterface;
import fr.rader.billy.timeline.Timeline;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

public class CopyTimelineListener implements ActionListener {

private Logger logger = Main.getInstance().getLogger();

private MainInterface mainInterface;

@Override
Expand All @@ -35,6 +40,8 @@ public void actionPerformed(ActionEvent e) {
private void copyToList(List<String> selectedTimelines, Map<String, Timeline> fromList, Map<String, Timeline> toList, String replayName) {
if(replayName.equals("Open Replay")) return;

logger.writeln("Copying timelines " + Arrays.toString(selectedTimelines.toArray()) + " to '" + replayName + "'");

for(String name : selectedTimelines) {
String oldName = name;
while(toList.containsKey(name)) {
Expand Down
7 changes: 7 additions & 0 deletions fr/rader/billy/gui/main/listeners/DeleteTimelineListener.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
package fr.rader.billy.gui.main.listeners;

import fr.rader.billy.Logger;
import fr.rader.billy.Main;
import fr.rader.billy.gui.main.MainInterface;
import fr.rader.billy.timeline.Timeline;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

public class DeleteTimelineListener implements ActionListener {

private Logger logger = Main.getInstance().getLogger();

private MainInterface mainInterface;

@Override
Expand All @@ -28,6 +33,8 @@ public void actionPerformed(ActionEvent e) {
}

private void deleteSelectedTimelines(List<String> selectedTimelines, Map<String, Timeline> timelinesList) {
logger.writeln("Deleting timelines " + Arrays.toString(selectedTimelines.toArray()));

for(String name : selectedTimelines) {
timelinesList.remove(name);
}
Expand Down
7 changes: 7 additions & 0 deletions fr/rader/billy/gui/main/listeners/MoveTimelineListener.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,21 @@
package fr.rader.billy.gui.main.listeners;

import fr.rader.billy.Logger;
import fr.rader.billy.Main;
import fr.rader.billy.gui.main.MainInterface;
import fr.rader.billy.timeline.Timeline;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

public class MoveTimelineListener implements ActionListener {

private Logger logger = Main.getInstance().getLogger();

private MainInterface mainInterface;

@Override
Expand All @@ -35,6 +40,8 @@ public void actionPerformed(ActionEvent e) {
private void moveToList(List<String> selectedTimelines, Map<String, Timeline> fromList, Map<String, Timeline> toList, String replayName) {
if(replayName.equals("Open Replay")) return;

logger.writeln("Moving timelines " + Arrays.toString(selectedTimelines.toArray()) + " to '" + replayName + "'");

for(String name : selectedTimelines) {
String oldName = name;
while(toList.containsKey(name)) {
Expand Down
Loading

0 comments on commit 2d3f1ad

Please sign in to comment.