From c74fdd715c2a1dc4102cd4577aa74ffa5b031c99 Mon Sep 17 00:00:00 2001 From: Alva Swanson Date: Wed, 3 May 2023 09:28:35 +0200 Subject: [PATCH] ElectrumExtractor: Switch to ZipFileExtractor --- .../electrum/ElectrumBinaryExtractor.java | 47 ++----------------- .../wallets/electrum/ElectrumProcess.java | 3 +- .../electrum/ElectrumBinaryExtractorTest.java | 20 ++++---- 3 files changed, 16 insertions(+), 54 deletions(-) diff --git a/wallets/electrum/src/main/java/bisq/wallets/electrum/ElectrumBinaryExtractor.java b/wallets/electrum/src/main/java/bisq/wallets/electrum/ElectrumBinaryExtractor.java index 76e4ba46a3..df7c4301d3 100644 --- a/wallets/electrum/src/main/java/bisq/wallets/electrum/ElectrumBinaryExtractor.java +++ b/wallets/electrum/src/main/java/bisq/wallets/electrum/ElectrumBinaryExtractor.java @@ -17,20 +17,18 @@ package bisq.wallets.electrum; +import bisq.common.archive.ZipFileExtractor; import bisq.common.util.FileUtils; import bisq.common.util.OsUtils; import lombok.extern.slf4j.Slf4j; import java.io.File; -import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; import java.util.concurrent.TimeUnit; -import java.util.zip.ZipEntry; -import java.util.zip.ZipInputStream; @Slf4j public class ElectrumBinaryExtractor { @@ -47,18 +45,18 @@ public ElectrumBinaryExtractor(Path destDirPath) { this.destDir = destDirPath.toFile(); } - public Path extractFileWithSuffix(String fileNameSuffix) { + public void extractArchive() { try { createDestDirIfNotPresent(); try (InputStream inputStream = openBinariesZipAsStream()) { if (OsUtils.isMac()) { extractElectrumAppFileToDataDir(inputStream); - return destDir.toPath().resolve("Electrum.app"); } else { - File extractedFile = extractFileWithSuffixFromStream(inputStream, fileNameSuffix); - return extractedFile.toPath(); + try (ZipFileExtractor zipFileExtractor = new ZipFileExtractor(inputStream, destDir)) { + zipFileExtractor.extractArchive(); + } } } @@ -91,27 +89,6 @@ private void extractElectrumAppFileToDataDir(InputStream inputStream) { unpackZipFileWithUnzipCommand(); } - private File extractFileWithSuffixFromStream(InputStream inputStream, String fileSuffix) { - try (ZipInputStream zipInputStream = new ZipInputStream(inputStream)) { - byte[] buffer = new byte[1024]; - ZipEntry zipEntry = zipInputStream.getNextEntry(); - while (zipEntry != null) { - - String fileName = zipEntry.getName(); - if (fileName.endsWith(fileSuffix)) { - return writeStreamToFile(buffer, zipInputStream, fileName); - } - - zipEntry = zipInputStream.getNextEntry(); - } - zipInputStream.closeEntry(); - - } catch (IOException e) { - throw new ElectrumExtractionFailedException("Couldn't extract Electrum binary.", e); - } - throw new ElectrumExtractionFailedException("Couldn't extract Electrum binary."); - } - private void deleteElectrumAppFileIfExisting() { File electrumAppInDataDir = new File(destDir, "Electrum.app"); if (electrumAppInDataDir.exists()) { @@ -150,18 +127,4 @@ private void unpackZipFileWithUnzipCommand() { throw new ElectrumExtractionFailedException("Could not copy Electrum.app to data directory."); } } - - private File writeStreamToFile(byte[] buffer, InputStream inputStream, String fileName) { - File destFile = new File(destDir, fileName); - try (FileOutputStream outputStream = new FileOutputStream(destFile)) { - int length; - while ((length = inputStream.read(buffer)) > 0) { - outputStream.write(buffer, 0, length); - } - - return destFile; - } catch (IOException e) { - throw new ElectrumExtractionFailedException("Couldn't write to stream to: " + destFile); - } - } } diff --git a/wallets/electrum/src/main/java/bisq/wallets/electrum/ElectrumProcess.java b/wallets/electrum/src/main/java/bisq/wallets/electrum/ElectrumProcess.java index dd7cbc9280..33e3ae28cc 100644 --- a/wallets/electrum/src/main/java/bisq/wallets/electrum/ElectrumProcess.java +++ b/wallets/electrum/src/main/java/bisq/wallets/electrum/ElectrumProcess.java @@ -64,8 +64,7 @@ public void shutdown() { private void unpackArchive() { Path destDirPath = electrumRootDataDir.resolve("bin"); var binaryExtractor = new ElectrumBinaryExtractor(destDirPath); - String binarySuffix = getBinarySuffix(); - binaryExtractor.extractFileWithSuffix(binarySuffix); + binaryExtractor.extractArchive(); } private void createAndStartProcess() { diff --git a/wallets/electrum/src/test/java/bisq/wallets/electrum/ElectrumBinaryExtractorTest.java b/wallets/electrum/src/test/java/bisq/wallets/electrum/ElectrumBinaryExtractorTest.java index 36b2c54011..e27adca8ed 100644 --- a/wallets/electrum/src/test/java/bisq/wallets/electrum/ElectrumBinaryExtractorTest.java +++ b/wallets/electrum/src/test/java/bisq/wallets/electrum/ElectrumBinaryExtractorTest.java @@ -27,22 +27,22 @@ import static org.assertj.core.api.Assertions.assertThat; public class ElectrumBinaryExtractorTest { - private final ElectrumBinaryExtractor binaryExtractor; + private final Path destDirPath = FileUtils.createTempDir(); + private final ElectrumBinaryExtractor binaryExtractor = new ElectrumBinaryExtractor(destDirPath); public ElectrumBinaryExtractorTest() throws IOException { - Path destDirPath = FileUtils.createTempDir(); - binaryExtractor = new ElectrumBinaryExtractor(destDirPath); } @Test void extractBinaries() { - String binarySuffix = ElectrumProcess.getBinarySuffix(); - Path electrumBinaryPath = binaryExtractor.extractFileWithSuffix(binarySuffix); - File electrumBinary = electrumBinaryPath.toFile(); + binaryExtractor.extractArchive(); + + File[] filesInDir = destDirPath.toFile().listFiles(); + assertThat(filesInDir).isNotEmpty(); - assertThat(electrumBinary.exists()) - .isTrue(); - assertThat(electrumBinary.length()) - .isGreaterThan(0); + File extractedFile = filesInDir[0]; + String binarySuffix = ElectrumProcess.getBinarySuffix(); + assertThat(extractedFile.getName()) + .endsWith(binarySuffix); } }