From 4c7f91fec980d515e3c68ff516b43034cdd94db7 Mon Sep 17 00:00:00 2001 From: crschnick Date: Mon, 6 May 2024 03:04:30 +0000 Subject: [PATCH] Rework file transfers --- app/build.gradle | 1 - .../xpipe/app/browser/BrowserStatusBarComp.java | 11 +++++++---- .../app/browser/BrowserTransferProgress.java | 2 +- app/src/main/java/io/xpipe/app/core/AppI18n.java | 16 +++------------- .../io/xpipe/app/util/HumanReadableFormat.java | 10 ++++++++++ app/src/main/java/module-info.java | 1 - 6 files changed, 21 insertions(+), 20 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 3d07a6484..d4ce1bbba 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -43,7 +43,6 @@ dependencies { api 'info.picocli:picocli:4.7.5' api 'org.kohsuke:github-api:1.321' api 'io.sentry:sentry:7.8.0' - api 'org.ocpsoft.prettytime:prettytime:5.0.7.Final' api 'commons-io:commons-io:2.16.1' api group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: "2.17.0" api group: 'com.fasterxml.jackson.module', name: 'jackson-module-parameter-names', version: "2.17.0" diff --git a/app/src/main/java/io/xpipe/app/browser/BrowserStatusBarComp.java b/app/src/main/java/io/xpipe/app/browser/BrowserStatusBarComp.java index 84681fe9e..97be0db3f 100644 --- a/app/src/main/java/io/xpipe/app/browser/BrowserStatusBarComp.java +++ b/app/src/main/java/io/xpipe/app/browser/BrowserStatusBarComp.java @@ -1,5 +1,6 @@ package io.xpipe.app.browser; +import atlantafx.base.controls.Spacer; import io.xpipe.app.browser.file.BrowserContextMenu; import io.xpipe.app.browser.file.BrowserFileListCompEntry; import io.xpipe.app.browser.fs.OpenFileSystemModel; @@ -11,16 +12,16 @@ import io.xpipe.app.fxcomps.augment.ContextMenuAugment; import io.xpipe.app.fxcomps.impl.LabelComp; import io.xpipe.app.fxcomps.util.BindingsHelper; import io.xpipe.app.util.HumanReadableFormat; - import javafx.beans.binding.Bindings; import javafx.scene.control.ToolBar; import javafx.scene.input.MouseButton; import javafx.scene.layout.Region; - -import atlantafx.base.controls.Spacer; import lombok.EqualsAndHashCode; import lombok.Value; +import java.time.Duration; +import java.time.temporal.ChronoUnit; + @Value @EqualsAndHashCode(callSuper = true) public class BrowserStatusBarComp extends SimpleComp { @@ -56,7 +57,9 @@ public class BrowserStatusBarComp extends SimpleComp { var transferred = HumanReadableFormat.progressByteCount(p.getTransferred()); var all = HumanReadableFormat.byteCount(p.getTotal()); var name = (p.getName() != null ? " @ " + p.getName() + " " : ""); - return transferred + " / " + all + name; + var time = p.getTotal() > 50_000_000 && p.elapsedTime().compareTo(Duration.of(200, ChronoUnit.MILLIS)) > 0 ? " | " + + HumanReadableFormat.duration(p.expectedTimeRemaining()) : " | ..."; + return transferred + " / " + all + name + time; } }); var progressComp = new LabelComp(text).styleClass("progress"); diff --git a/app/src/main/java/io/xpipe/app/browser/BrowserTransferProgress.java b/app/src/main/java/io/xpipe/app/browser/BrowserTransferProgress.java index d909c64d1..36d7e2a87 100644 --- a/app/src/main/java/io/xpipe/app/browser/BrowserTransferProgress.java +++ b/app/src/main/java/io/xpipe/app/browser/BrowserTransferProgress.java @@ -39,7 +39,7 @@ public class BrowserTransferProgress { public Duration expectedTimeRemaining() { var elapsed = elapsedTime(); var share = (double) transferred / total; - var rest = 1.0 - share; + var rest = (1.0 - share) / share; var restMillis = (long) (elapsed.toMillis() * rest); return Duration.of(restMillis, ChronoUnit.MILLIS); } diff --git a/app/src/main/java/io/xpipe/app/core/AppI18n.java b/app/src/main/java/io/xpipe/app/core/AppI18n.java index 2d3f634b9..d0a978abe 100644 --- a/app/src/main/java/io/xpipe/app/core/AppI18n.java +++ b/app/src/main/java/io/xpipe/app/core/AppI18n.java @@ -6,21 +6,17 @@ import io.xpipe.app.fxcomps.impl.TooltipAugment; import io.xpipe.app.issue.ErrorEvent; import io.xpipe.app.issue.TrackEvent; import io.xpipe.app.prefs.AppPrefs; -import io.xpipe.app.prefs.SupportedLocale; import io.xpipe.app.util.OptionsBuilder; import io.xpipe.app.util.Translatable; import io.xpipe.core.util.ModuleHelper; import io.xpipe.core.util.XPipeInstallation; - import javafx.beans.binding.Bindings; import javafx.beans.property.Property; import javafx.beans.property.SimpleObjectProperty; import javafx.beans.value.ObservableValue; - import lombok.SneakyThrows; import lombok.Value; import org.apache.commons.io.FilenameUtils; -import org.ocpsoft.prettytime.PrettyTime; import java.io.IOException; import java.io.InputStreamReader; @@ -131,7 +127,7 @@ public class AppI18n { } } - private LoadedTranslations getLoaded() { + public LoadedTranslations getLoaded() { return currentLanguage.getValue() != null ? currentLanguage.getValue() : english; } @@ -278,21 +274,15 @@ public class AppI18n { }); } - var prettyTime = new PrettyTime( - AppPrefs.get() != null - ? AppPrefs.get().language().getValue().getLocale() - : SupportedLocale.getEnglish().getLocale()); - - return new LoadedTranslations(l, translations, markdownDocumentations, prettyTime); + return new LoadedTranslations(l, translations, markdownDocumentations); } @Value - static class LoadedTranslations { + public static class LoadedTranslations { Locale locale; Map translations; Map markdownDocumentations; - PrettyTime prettyTime; } @SuppressWarnings("removal") diff --git a/app/src/main/java/io/xpipe/app/util/HumanReadableFormat.java b/app/src/main/java/io/xpipe/app/util/HumanReadableFormat.java index 9fb9b1095..27767610a 100644 --- a/app/src/main/java/io/xpipe/app/util/HumanReadableFormat.java +++ b/app/src/main/java/io/xpipe/app/util/HumanReadableFormat.java @@ -2,6 +2,7 @@ package io.xpipe.app.util; import java.text.CharacterIterator; import java.text.StringCharacterIterator; +import java.time.Duration; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; @@ -80,4 +81,13 @@ public final class HumanReadableFormat { private static int getWeekNumber(LocalDateTime date) { return date.get(WeekFields.of(Locale.getDefault()).weekOfYear()); } + + + public static String duration(Duration duration) { + return duration.toString() + .substring(2) + .replaceAll("(\\d[HMS])(?!$)", "$1 ") + .replaceAll("\\.\\d+", "") + .toLowerCase(); + } } diff --git a/app/src/main/java/module-info.java b/app/src/main/java/module-info.java index 8faa5e355..a0d3e8280 100644 --- a/app/src/main/java/module-info.java +++ b/app/src/main/java/module-info.java @@ -49,7 +49,6 @@ open module io.xpipe.app { requires org.slf4j; requires org.slf4j.jdk.platform.logging; requires atlantafx.base; - requires org.ocpsoft.prettytime; requires com.vladsch.flexmark; requires com.fasterxml.jackson.core; requires com.fasterxml.jackson.databind;