From db0728692e09b239dfd0554b7e94e6d6f9b00332 Mon Sep 17 00:00:00 2001 From: Ryan Feline Date: Wed, 17 Apr 2019 08:55:16 +0100 Subject: [PATCH] Add FileSize to the batch creation bypassing the initial head requests that are required. --- .../com/novoda/downloadmanager/BatchFile.java | 18 ++++++++++++++---- .../downloadmanager/BatchFileBuilder.java | 2 ++ .../downloadmanager/CompletedDownloadFile.java | 3 ++- .../downloadmanager/DownloadBatchFactory.java | 3 +++ .../InternalFileSizeCreator.java | 4 ++++ .../downloadmanager/LiteBatchFileBuilder.java | 9 ++++++++- .../NetworkFileSizeRequester.java | 3 +++ 7 files changed, 36 insertions(+), 6 deletions(-) diff --git a/library/src/main/java/com/novoda/downloadmanager/BatchFile.java b/library/src/main/java/com/novoda/downloadmanager/BatchFile.java index 4ca8bf74a..14ba3e8f8 100644 --- a/library/src/main/java/com/novoda/downloadmanager/BatchFile.java +++ b/library/src/main/java/com/novoda/downloadmanager/BatchFile.java @@ -5,11 +5,13 @@ public class BatchFile { private final String networkAddress; private final String path; private final Optional downloadFileId; + private final Optional fileSize; - BatchFile(String networkAddress, Optional downloadFileId, String path) { + public BatchFile(String networkAddress, String path, Optional downloadFileId, Optional fileSize) { this.networkAddress = networkAddress; - this.downloadFileId = downloadFileId; this.path = path; + this.downloadFileId = downloadFileId; + this.fileSize = fileSize; } static InternalBatchFileBuilder from(StorageRoot storageRoot, DownloadBatchId downloadBatchId, String networkAddress) { @@ -28,6 +30,10 @@ public Optional downloadFileId() { return downloadFileId; } + public Optional fileSize() { + return fileSize; + } + @Override public boolean equals(Object o) { if (this == o) { @@ -45,7 +51,10 @@ public boolean equals(Object o) { if (path != null ? !path.equals(batchFile.path) : batchFile.path != null) { return false; } - return downloadFileId != null ? downloadFileId.equals(batchFile.downloadFileId) : batchFile.downloadFileId == null; + if (downloadFileId != null ? !downloadFileId.equals(batchFile.downloadFileId) : batchFile.downloadFileId != null) { + return false; + } + return fileSize != null ? fileSize.equals(batchFile.fileSize) : batchFile.fileSize == null; } @Override @@ -53,6 +62,7 @@ public int hashCode() { int result = networkAddress != null ? networkAddress.hashCode() : 0; result = 31 * result + (path != null ? path.hashCode() : 0); result = 31 * result + (downloadFileId != null ? downloadFileId.hashCode() : 0); + result = 31 * result + (fileSize != null ? fileSize.hashCode() : 0); return result; } @@ -62,7 +72,7 @@ public String toString() { + "networkAddress='" + networkAddress + '\'' + ", path='" + path + '\'' + ", downloadFileId=" + downloadFileId + + ", fileSize=" + fileSize + '}'; } - } diff --git a/library/src/main/java/com/novoda/downloadmanager/BatchFileBuilder.java b/library/src/main/java/com/novoda/downloadmanager/BatchFileBuilder.java index 8727e0add..17d546146 100644 --- a/library/src/main/java/com/novoda/downloadmanager/BatchFileBuilder.java +++ b/library/src/main/java/com/novoda/downloadmanager/BatchFileBuilder.java @@ -34,6 +34,8 @@ public interface BatchFileBuilder { */ BatchFileBuilder saveTo(String path, String fileName); + BatchFileBuilder withSize(FileSize fileSize); + /** * Creates a {@link BatchFile} from the {@link BatchFileBuilder} and * adds it to the parent {@link BatchBuilder} before returning to diff --git a/library/src/main/java/com/novoda/downloadmanager/CompletedDownloadFile.java b/library/src/main/java/com/novoda/downloadmanager/CompletedDownloadFile.java index bcbfc2640..27fe5a917 100644 --- a/library/src/main/java/com/novoda/downloadmanager/CompletedDownloadFile.java +++ b/library/src/main/java/com/novoda/downloadmanager/CompletedDownloadFile.java @@ -44,8 +44,9 @@ public BatchFile asBatchFile() { DownloadFileId downloadFileId = DownloadFileIdCreator.createFrom(fileId); return new BatchFile( originalNetworkAddress, + newFileLocation, Optional.of(downloadFileId), - newFileLocation + Optional.of(fileSize) ); } diff --git a/library/src/main/java/com/novoda/downloadmanager/DownloadBatchFactory.java b/library/src/main/java/com/novoda/downloadmanager/DownloadBatchFactory.java index ed3df646f..d8619de77 100644 --- a/library/src/main/java/com/novoda/downloadmanager/DownloadBatchFactory.java +++ b/library/src/main/java/com/novoda/downloadmanager/DownloadBatchFactory.java @@ -34,6 +34,9 @@ static DownloadBatch newInstance(Batch batch, String networkAddress = batchFile.networkAddress(); InternalFileSize fileSize = InternalFileSizeCreator.unknownFileSize(); + if (batchFile.fileSize().isPresent()) { + fileSize = InternalFileSizeCreator.from(batchFile.fileSize().get()); + } FilePersistence filePersistence = fileOperations.filePersistenceCreator().create(); diff --git a/library/src/main/java/com/novoda/downloadmanager/InternalFileSizeCreator.java b/library/src/main/java/com/novoda/downloadmanager/InternalFileSizeCreator.java index dd1af636a..5f355bf09 100644 --- a/library/src/main/java/com/novoda/downloadmanager/InternalFileSizeCreator.java +++ b/library/src/main/java/com/novoda/downloadmanager/InternalFileSizeCreator.java @@ -16,4 +16,8 @@ static InternalFileSize unknownFileSize() { static InternalFileSize createFromCurrentAndTotalSize(long currentSize, long totalSize) { return new LiteFileSize(currentSize, totalSize); } + + static InternalFileSize from(FileSize fileSize) { + return new LiteFileSize(fileSize.currentSize(), fileSize.totalSize()); + } } diff --git a/library/src/main/java/com/novoda/downloadmanager/LiteBatchFileBuilder.java b/library/src/main/java/com/novoda/downloadmanager/LiteBatchFileBuilder.java index 2a77b7ff6..72cf6cf6b 100644 --- a/library/src/main/java/com/novoda/downloadmanager/LiteBatchFileBuilder.java +++ b/library/src/main/java/com/novoda/downloadmanager/LiteBatchFileBuilder.java @@ -15,6 +15,7 @@ final class LiteBatchFileBuilder implements InternalBatchFileBuilder { private Optional downloadFileId = Optional.absent(); private Optional path = Optional.absent(); private Optional fileName = Optional.absent(); + private Optional fileSize = Optional.absent(); private InternalBatchBuilder parentBuilder; @@ -49,6 +50,12 @@ public BatchFileBuilder saveTo(String path, String fileName) { return this; } + @Override + public BatchFileBuilder withSize(FileSize fileSize) { + this.fileSize = Optional.fromNullable(fileSize); + return this; + } + @Override public BatchBuilder apply() { String absolutePath = buildPath( @@ -58,7 +65,7 @@ public BatchBuilder apply() { fileName.getOrElse(() -> FileNameExtractor.extractFrom(networkAddress)) ); - parentBuilder.withFile(new BatchFile(networkAddress, downloadFileId, absolutePath)); + parentBuilder.withFile(new BatchFile(networkAddress, absolutePath, downloadFileId, fileSize)); return parentBuilder; } diff --git a/library/src/main/java/com/novoda/downloadmanager/NetworkFileSizeRequester.java b/library/src/main/java/com/novoda/downloadmanager/NetworkFileSizeRequester.java index 02ce0ca65..2ba381e83 100644 --- a/library/src/main/java/com/novoda/downloadmanager/NetworkFileSizeRequester.java +++ b/library/src/main/java/com/novoda/downloadmanager/NetworkFileSizeRequester.java @@ -1,5 +1,7 @@ package com.novoda.downloadmanager; +import android.util.Log; + import java.io.IOException; class NetworkFileSizeRequester implements FileSizeRequester { @@ -18,6 +20,7 @@ class NetworkFileSizeRequester implements FileSizeRequester { @Override public FileSize requestFileSize(String url) { + Log.e("TAG", "requestFileSize: " + url); try { long fileSize = executeRequestFileSize(url); if (fileSize == UNKNOWN_CONTENT_LENGTH || fileSize == ZERO_FILE_SIZE) {