diff --git a/pom.xml b/pom.xml
index ae165d1..a1fac2b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -154,6 +154,11 @@
commons-lang3
3.12.0
+
+ me.tongfei
+ progressbar
+ 0.9.3
+
diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/AttributeUpdaterKernel.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/AttributeUpdaterKernel.java
index ade9974..940ea1f 100644
--- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/AttributeUpdaterKernel.java
+++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/AttributeUpdaterKernel.java
@@ -8,6 +8,9 @@ import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.FileInfoDto;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ResultStatistic;
import lombok.SneakyThrows;
import lombok.extern.log4j.Log4j2;
+import me.tongfei.progressbar.ProgressBar;
+import me.tongfei.progressbar.ProgressBarBuilder;
+import me.tongfei.progressbar.ProgressBarStyle;
import java.io.File;
import java.io.IOException;
@@ -33,31 +36,43 @@ public class AttributeUpdaterKernel {
public void execute() {
statistic.startTimer();
- List files = collector.loadFiles(Config.getInstance().getLibraryPath());
- files.forEach(file -> executor.submit(() -> process(file)));
- executor.shutdown();
- executor.awaitTermination(1, TimeUnit.DAYS);
+ try (ProgressBar progressBar = pbBuilder().build()) {
+ List files = collector.loadFiles(Config.getInstance().getLibraryPath());
+ progressBar.maxHint(files.size());
+ files.forEach(file -> executor.submit(() -> process(file, progressBar)));
+ executor.shutdown();
+ executor.awaitTermination(1, TimeUnit.DAYS);
+ }
statistic.stopTimer();
System.out.println(statistic);
}
- private void process(File file) {
+ private void process(File file, ProgressBar progressBar) {
+ statistic.total();
List attributes = processor.loadAttributes(file);
FileInfoDto fileInfo = processor.filterAttributes(attributes);
if (fileInfo.isChangeNecessary()) {
- statistic.shouldChange(file, fileInfo);
+ statistic.shouldChange();
if (!Config.getInstance().isSafeMode()) {
try {
processor.update(file, fileInfo);
- statistic.success(file, fileInfo);
+ statistic.success();
} catch (IOException e) {
- statistic.failure(file, fileInfo);
+ statistic.failure();
log.warn("File couldn't be updated: {}", file.getAbsoluteFile());
}
}
} else {
- statistic.fits(file, fileInfo);
+ statistic.fits();
}
+ progressBar.step();
+ }
+
+ private static ProgressBarBuilder pbBuilder() {
+ return new ProgressBarBuilder()
+ .setStyle(ProgressBarStyle.ASCII)
+ .setUpdateIntervalMillis(250)
+ .setMaxRenderedLength(75);
}
}
diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/ResultStatistic.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/ResultStatistic.java
index fb21473..3cc4cee 100644
--- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/ResultStatistic.java
+++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/ResultStatistic.java
@@ -7,12 +7,14 @@ import java.io.File;
@Getter
public class ResultStatistic {
- private static final String result = "Files should change: %s%n" +
- "Files successfully changed: %s%n" +
- "Files failed changing: %s%n" +
- "Files already fitting config: %s%n" +
+ private static final String result = "Total files: %s%n" +
+ "├─ Should change: %s%n" +
+ "├─ Successfully changed: %s%n" +
+ "├─ Already fit config: %s%n" +
+ "└─ Failed: %s%n" +
"Runtime: %ss";
+ private int filesTotal = 0;
private int filesShouldChange = 0;
private int filesSuccessfullyChanged = 0;
private int filesFailed = 0;
@@ -21,19 +23,23 @@ public class ResultStatistic {
private long startTime = 0;
private long runtime = 0;
- public void shouldChange(File file, FileInfoDto fileInfo) {
+ public synchronized void total() {
+ filesTotal++;
+ }
+
+ public synchronized void shouldChange() {
filesShouldChange++;
}
- public void success(File file, FileInfoDto fileInfo) {
+ public synchronized void success() {
filesSuccessfullyChanged++;
}
- public void failure(File file, FileInfoDto fileInfo) {
+ public synchronized void failure() {
filesFailed++;
}
- public void fits(File file, FileInfoDto fileInfo) {
+ public synchronized void fits() {
filesAlreadyFit++;
}
@@ -47,7 +53,7 @@ public class ResultStatistic {
@Override
public String toString() {
- return String.format(result, filesShouldChange, filesSuccessfullyChanged, filesFailed, filesAlreadyFit,
- runtime / 1000);
+ return String.format(result, filesTotal, filesShouldChange, filesSuccessfullyChanged, filesAlreadyFit,
+ filesFailed, runtime / 1000);
}
}