Skip to content

Commit

Permalink
Added TimestampFormat
Browse files Browse the repository at this point in the history
  • Loading branch information
LatvianModder committed Oct 19, 2024
1 parent cdfa5ab commit 636c849
Show file tree
Hide file tree
Showing 5 changed files with 150 additions and 50 deletions.
59 changes: 59 additions & 0 deletions src/main/java/dev/latvian/apps/ansi/log/CallbackPrintStream.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package dev.latvian.apps.ansi.log;

import java.io.OutputStream;
import java.io.PrintStream;
import java.util.function.Consumer;

public class CallbackPrintStream extends PrintStream {
public final Consumer<Object> callback;

public CallbackPrintStream(Consumer<Object> callback) {
super(OutputStream.nullOutputStream());
this.callback = callback;
}

@Override
public void println(int x) {
callback.accept(x);
}

@Override
public void println(char x) {
callback.accept(x);
}

@Override
public void println(long x) {
callback.accept(x);
}

@Override
public void println(float x) {
callback.accept(x);
}

@Override
public void println(char[] x) {
callback.accept(new String(x));
}

@Override
public void println(double x) {
callback.accept(x);
}

@Override
public void println(String x) {
callback.accept(x);
}

@Override
public void println(boolean x) {
callback.accept(x);
}

@Override
public void println(Object x) {
callback.accept(x);
}
}
9 changes: 9 additions & 0 deletions src/main/java/dev/latvian/apps/ansi/log/CombinedLog.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package dev.latvian.apps.ansi.log;

public record CombinedLog(Log first, Log second) implements Log {
@Override
public void log(LogType type, Object message) {
first.log(type, message);
second.log(type, message);
}
}
51 changes: 3 additions & 48 deletions src/main/java/dev/latvian/apps/ansi/log/DefaultLog.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,67 +3,22 @@
import dev.latvian.apps.ansi.ANSI;
import dev.latvian.apps.ansi.style.Style;

import java.util.Calendar;
import java.util.function.Consumer;

public class DefaultLog implements FormattedTimeLog {
public static final String[] MONTH_NAMES = {
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec",
};

private final Consumer<ANSI> output;
private final Style timeStyle;
private final Calendar calendar;
private final StringBuilder builder;

private static void pad0(StringBuilder sb, int num) {
if (num < 10) {
sb.append('0');
}

sb.append(num);
}

public static void appendDate(StringBuilder builder, Calendar calendar) {
pad0(builder, calendar.get(Calendar.DAY_OF_MONTH));
builder.append('-');
builder.append(MONTH_NAMES[calendar.get(Calendar.MONTH)]);
builder.append('-');
builder.append(calendar.get(Calendar.YEAR));
builder.append(' ');
pad0(builder, calendar.get(Calendar.HOUR_OF_DAY));
builder.append(':');
pad0(builder, calendar.get(Calendar.MINUTE));
builder.append(':');
pad0(builder, calendar.get(Calendar.SECOND));
}
private final TimestampFormat timestampFormat;

public DefaultLog(Consumer<ANSI> output, Style timeStyle) {
this.output = output;
this.timeStyle = timeStyle;
this.calendar = Calendar.getInstance();
this.builder = new StringBuilder(21);
// ANSI.text(formatTime(now), TIME_STYLE)
this.timestampFormat = new TimestampFormat(true, true);
}

@Override
public synchronized ANSI prefix(long time) {
calendar.setTimeInMillis(time);
builder.setLength(0);
appendDate(builder, calendar);
builder.append(' ');
return ANSI.of(builder.toString(), timeStyle);
return ANSI.of(timestampFormat.format(time) + " ", timeStyle);
}

@Override
Expand Down
77 changes: 77 additions & 0 deletions src/main/java/dev/latvian/apps/ansi/log/TimestampFormat.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package dev.latvian.apps.ansi.log;

import java.util.Calendar;

public class TimestampFormat {
public static final String[] MONTH_NAMES = {
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec",
};

private final Calendar calendar;
private final StringBuilder builder;
private final boolean date;
private final boolean time;

public TimestampFormat(boolean date, boolean time) {
this.calendar = Calendar.getInstance();
this.builder = new StringBuilder(21);
this.date = date;
this.time = time;
}

private void pad0(int num) {
if (num < 10) {
builder.append('0');
}

builder.append(num);
}

public StringBuilder format(StringBuilder builder, long millis) {
calendar.setTimeInMillis(millis);

if (date) {
pad0(calendar.get(Calendar.DAY_OF_MONTH));
builder.append('-');
builder.append(MONTH_NAMES[calendar.get(Calendar.MONTH)]);
builder.append('-');
builder.append(calendar.get(Calendar.YEAR));
}

if (date && time) {
builder.append(' ');
}

if (time) {
pad0(calendar.get(Calendar.HOUR_OF_DAY));
builder.append(':');
pad0(calendar.get(Calendar.MINUTE));
builder.append(':');
pad0(calendar.get(Calendar.SECOND));
}

return builder;
}

public String format(long millis) {
var str = format(builder, millis).toString();
builder.setLength(0);
return str;
}

@Override
public String toString() {
return date && time ? "yyyy-MMM-dd HH:mm:ss" : date ? "yyyy-MMM-dd" : time ? "HH:mm:ss" : "";
}
}
4 changes: 2 additions & 2 deletions src/test/java/dev/latvian/apps/ansi/test/ANSITests.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@

public class ANSITests {
private static final ANSI TEST_123 = ANSI.empty()
.foreground(218)
.background(0xFF3F2B45)
.foreground(224)
.background(96)
.append(" Text 1 ")
.append(ANSI.of(" Text 2 ").reverse())
.append(" Text 3 ");
Expand Down

0 comments on commit 636c849

Please sign in to comment.