Skip to content

Commit

Permalink
Reuse progressbars
Browse files Browse the repository at this point in the history
  • Loading branch information
Rakambda committed Jun 22, 2024
1 parent a08490d commit 918108d
Show file tree
Hide file tree
Showing 4 changed files with 82 additions and 23 deletions.
3 changes: 2 additions & 1 deletion src/main/java/fr/rakambda/mediaconverter/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import fr.rakambda.mediaconverter.progress.ConversionProgressExecutor;
import fr.rakambda.mediaconverter.progress.ConverterProgressBarGenerator;
import fr.rakambda.mediaconverter.progress.ProgressBarSupplier;
import fr.rakambda.mediaconverter.progress.ReuseProgressBarSupplier;
import fr.rakambda.mediaconverter.utils.CLIParameters;
import lombok.extern.log4j.Log4j2;
import me.tongfei.progressbar.ProgressBar;
Expand Down Expand Up @@ -64,7 +65,7 @@ public static void main(String[] args){
var progressBarGenerator = new ConverterProgressBarGenerator();
try(var converterExecutor = ConversionProgressExecutor.of(Executors.newFixedThreadPool(parameters.getThreadCount()));
var scanningProgressBar = new ProgressBarBuilder().setTaskName("Scanning").setUnit("File", 1).build();
var converterProgressBarSupplier = new ProgressBarSupplier(progressBarGenerator)){
var converterProgressBarSupplier = new ReuseProgressBarSupplier(progressBarGenerator)){
tempPaths = new ArrayList<>(Configuration.loadConfiguration(parameters.getConfiguration())
.stream()
.flatMap(config -> config.getConversions().stream())
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package fr.rakambda.mediaconverter.progress;

import lombok.extern.slf4j.Slf4j;
import me.tongfei.progressbar.ProgressBar;
import org.jetbrains.annotations.NotNull;
import java.util.concurrent.atomic.AtomicInteger;

@Slf4j
public class CreateProgressBarSupplier implements ProgressBarSupplier{
private final ConverterProgressBarGenerator generator;
private final AtomicInteger counter;

public CreateProgressBarSupplier(@NotNull ConverterProgressBarGenerator generator){
this.generator = generator;
counter = new AtomicInteger(0);
}

public void addBack(@NotNull ProgressBar progressBar){
progressBar.close();
}

@Override
public void close(){
}

@NotNull
public ProgressBarHandle get(){
return new ProgressBarHandle(generator.generate(counter.incrementAndGet()), this);
}
}
Original file line number Diff line number Diff line change
@@ -1,28 +1,11 @@
package fr.rakambda.mediaconverter.progress;

import lombok.extern.slf4j.Slf4j;
import me.tongfei.progressbar.ProgressBar;
import java.util.concurrent.atomic.AtomicInteger;
import org.jetbrains.annotations.NotNull;

@Slf4j
public class ProgressBarSupplier implements AutoCloseable{
private final ConverterProgressBarGenerator generator;
private final AtomicInteger counter;
public interface ProgressBarSupplier extends AutoCloseable{
void addBack(@NotNull ProgressBar progressBar);

public ProgressBarSupplier(ConverterProgressBarGenerator generator) {
this.generator = generator;
counter = new AtomicInteger(0);
}

public void addBack(ProgressBar progressBar){
progressBar.close();
}

@Override
public void close(){
}

public ProgressBarHandle get(){
return new ProgressBarHandle(generator.generate(counter.incrementAndGet()), this);
}
@NotNull
ProgressBarHandle get();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@

package fr.rakambda.mediaconverter.progress;

import lombok.extern.slf4j.Slf4j;
import me.tongfei.progressbar.ProgressBar;
import org.jetbrains.annotations.NotNull;
import java.util.Optional;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.atomic.AtomicInteger;

@Slf4j
public class ReuseProgressBarSupplier implements ProgressBarSupplier{
private final ConverterProgressBarGenerator generator;
private final AtomicInteger counter;
private final Queue<ProgressBar> queue;

public ReuseProgressBarSupplier(@NotNull ConverterProgressBarGenerator generator){
this.generator = generator;
this.counter = new AtomicInteger(0);
this.queue = new ConcurrentLinkedQueue<>();
}

public void addBack(@NotNull ProgressBar progressBar){
queue.offer(progressBar
.setExtraMessage("")
.maxHint(-1)
.reset()
.pause());
}

@Override
public void close(){
queue.forEach(ProgressBar::close);
queue.clear();
}

@NotNull
public ProgressBarHandle get(){
var progressBar = Optional.ofNullable(queue.poll())
.orElseGet(() -> generator.generate(counter.incrementAndGet()))
.resume();
return new ProgressBarHandle(progressBar, this);
}
}

0 comments on commit 918108d

Please sign in to comment.