From b651c44136d7af42645bde49ab6f06898f12695d Mon Sep 17 00:00:00 2001 From: Max Rydahl Andersen Date: Mon, 16 Dec 2024 07:35:18 +0100 Subject: [PATCH 1/2] [minor] relase From d32dfedb34d96adcf8009c80e8efa0f8fa9ad679 Mon Sep 17 00:00:00 2001 From: Max Rydahl Andersen Date: Wed, 18 Dec 2024 01:29:28 +0100 Subject: [PATCH 2/2] feat: download progressbar --- build.gradle | 2 + .../jbang/dependencies/ArtifactResolver.java | 11 ++- .../ProgressBarTransferListener.java | 75 +++++++++++++++++++ 3 files changed, 85 insertions(+), 3 deletions(-) create mode 100644 src/main/java/dev/jbang/dependencies/ProgressBarTransferListener.java diff --git a/build.gradle b/build.gradle index 0a443de16..49ca6c73c 100644 --- a/build.gradle +++ b/build.gradle @@ -102,6 +102,8 @@ dependencies { implementation 'org.jsoup:jsoup:1.17.1' implementation 'org.codejive:java-properties:0.0.7' + implementation 'me.tongfei:progressbar:0.10.1' + implementation "org.slf4j:slf4j-nop:1.7.30" implementation "org.slf4j:jcl-over-slf4j:1.7.30" implementation "org.jboss:jandex:2.2.3.Final" diff --git a/src/main/java/dev/jbang/dependencies/ArtifactResolver.java b/src/main/java/dev/jbang/dependencies/ArtifactResolver.java index b91d32857..09b6ca4d5 100644 --- a/src/main/java/dev/jbang/dependencies/ArtifactResolver.java +++ b/src/main/java/dev/jbang/dependencies/ArtifactResolver.java @@ -133,7 +133,10 @@ private ArtifactResolver(Builder builder) { } this.downloadSources = builder.downloadSources; - final RepositoryListener listener = builder.loggingEnabled ? setupSessionLogging() : null; + + ProgressBarTransferListener pblistener = new ProgressBarTransferListener(); + + final RepositoryListener listener = builder.loggingEnabled ? setupSessionLogging(pblistener) : null; ContextOverrides.Builder overridesBuilder = ContextOverrides.create() .userProperties(userProperties) @@ -153,7 +156,8 @@ private ArtifactResolver(Builder builder) { .snapshotUpdatePolicy(builder.updateCache ? ContextOverrides.SnapshotUpdatePolicy.ALWAYS : null) - .repositoryListener(listener); + .repositoryListener(listener) + .transferListener(pblistener); overridesBuilder.extraArtifactTypes( Collections.singletonList(new DefaultArtifactType("fatjar", "jar", null, "java", true, true))); @@ -234,7 +238,7 @@ public List resolve(List depIds) { } } - private AbstractRepositoryListener setupSessionLogging() { + private AbstractRepositoryListener setupSessionLogging(final ProgressBarTransferListener pblistener) { return new AbstractRepositoryListener() { @Override @@ -293,6 +297,7 @@ private void printEvent(String groupId, String artId, String version, String typ infoMsg(" " + coord); } printed.add(id); + pblistener.next(id); } } } diff --git a/src/main/java/dev/jbang/dependencies/ProgressBarTransferListener.java b/src/main/java/dev/jbang/dependencies/ProgressBarTransferListener.java new file mode 100644 index 000000000..0efb6de58 --- /dev/null +++ b/src/main/java/dev/jbang/dependencies/ProgressBarTransferListener.java @@ -0,0 +1,75 @@ +package dev.jbang.dependencies; + +import org.eclipse.aether.transfer.AbstractTransferListener; +import org.eclipse.aether.transfer.TransferCancelledException; +import org.eclipse.aether.transfer.TransferEvent; + +import me.tongfei.progressbar.ProgressBar; +import me.tongfei.progressbar.ProgressBarBuilder; + +public class ProgressBarTransferListener extends AbstractTransferListener { + + private ProgressBar progressBar; + + public ProgressBarTransferListener() { + ProgressBarBuilder pbb = ProgressBar.builder() + .showSpeed()// .hideEta() + .setInitialMax(-1) + // .setStyle(ProgressBarStyle.ASCII) + // .setTaskName("Downloading") + .setUnit("MB", 1024 * 1024); + // .setUpdateIntervalMillis(100) + // .setMaxRenderedLength(100) + // .showSpeed(); + // or .showSpeed(new DecimalFormat("#.##")) to customize speed display + // .setEtaFunction(state -> ...) + + progressBar = pbb.build(); + } + + public void next(String id) { + // progressBar.setExtraMessage(id); + } + + @Override + public void transferInitiated(TransferEvent event) throws TransferCancelledException { + // System.err.println("transferInitiated " + event); + + } + + @Override + public void transferStarted(TransferEvent event) throws TransferCancelledException { + // System.err.println("transferStarted " + event); + long contentLength = event.getResource().getContentLength(); + + if (contentLength < 0) { + contentLength = -1; + } + + long max = progressBar.getMax() + Math.max(0, contentLength); + + progressBar.maxHint(max); + + progressBar.setExtraMessage(event.getResource().getFile().getName()); + } + + @Override + public void transferProgressed(TransferEvent event) throws TransferCancelledException { + // System.err.println("transferProgressed " + event); + // progressBar.maxHint(event.getResource().getContentLength() < 0 ? -1 : + // event.getResource().getContentLength()); + progressBar.stepBy(event.getDataLength()); + } + + @Override + public void transferSucceeded(TransferEvent event) { + // System.out.println("transferSucceeded " + event); + // progressBar.close(); + } + + @Override + public void transferFailed(TransferEvent event) { + // System.out.println("transferFailed " + event); + // progressBar.close(); + } +}