Craig Raw
4 years ago
4 changed files with 129 additions and 5 deletions
@ -0,0 +1,106 @@ |
|||
package com.sparrowwallet.sparrow.control; |
|||
|
|||
import com.google.common.io.ByteStreams; |
|||
import com.google.gson.JsonParseException; |
|||
import com.sparrowwallet.drongo.policy.Policy; |
|||
import com.sparrowwallet.drongo.policy.PolicyType; |
|||
import com.sparrowwallet.drongo.protocol.ScriptType; |
|||
import com.sparrowwallet.drongo.wallet.Keystore; |
|||
import com.sparrowwallet.drongo.wallet.Wallet; |
|||
import com.sparrowwallet.sparrow.EventManager; |
|||
import com.sparrowwallet.sparrow.event.WalletImportEvent; |
|||
import com.sparrowwallet.sparrow.io.ImportException; |
|||
import com.sparrowwallet.sparrow.io.KeystoreFileImport; |
|||
import javafx.collections.FXCollections; |
|||
import javafx.geometry.Insets; |
|||
import javafx.geometry.Pos; |
|||
import javafx.scene.Node; |
|||
import javafx.scene.control.Button; |
|||
import javafx.scene.control.ComboBox; |
|||
import javafx.scene.control.Label; |
|||
import javafx.scene.layout.HBox; |
|||
import javafx.scene.layout.Priority; |
|||
import javafx.scene.layout.Region; |
|||
import org.slf4j.Logger; |
|||
import org.slf4j.LoggerFactory; |
|||
|
|||
import java.io.ByteArrayInputStream; |
|||
import java.io.IOException; |
|||
import java.io.InputStream; |
|||
|
|||
public class FileWalletKeystoreImportPane extends FileImportPane { |
|||
private static final Logger log = LoggerFactory.getLogger(FileWalletKeystoreImportPane.class); |
|||
|
|||
private final KeystoreFileImport importer; |
|||
private String fileName; |
|||
private byte[] fileBytes; |
|||
|
|||
public FileWalletKeystoreImportPane(KeystoreFileImport importer) { |
|||
super(importer, importer.getName(), "Wallet file import", importer.getKeystoreImportDescription(), "image/" + importer.getWalletModel().getType() + ".png"); |
|||
this.importer = importer; |
|||
} |
|||
|
|||
protected void importFile(String fileName, InputStream inputStream, String password) throws ImportException { |
|||
this.fileName = fileName; |
|||
try { |
|||
fileBytes = ByteStreams.toByteArray(inputStream); |
|||
} catch(IOException e) { |
|||
throw new ImportException("Could not read file", e); |
|||
} |
|||
|
|||
setContent(getScriptTypeEntry()); |
|||
setExpanded(true); |
|||
importButton.setDisable(true); |
|||
} |
|||
|
|||
private void importWallet(ScriptType scriptType) throws ImportException { |
|||
ByteArrayInputStream bais = new ByteArrayInputStream(fileBytes); |
|||
Keystore keystore = importer.getKeystore(scriptType, bais, ""); |
|||
|
|||
Wallet wallet = new Wallet(); |
|||
wallet.setName(fileName); |
|||
wallet.setPolicyType(PolicyType.SINGLE); |
|||
wallet.setScriptType(scriptType); |
|||
wallet.getKeystores().add(keystore); |
|||
wallet.setDefaultPolicy(Policy.getPolicy(PolicyType.SINGLE, scriptType, wallet.getKeystores(), null)); |
|||
|
|||
EventManager.get().post(new WalletImportEvent(wallet)); |
|||
} |
|||
|
|||
private Node getScriptTypeEntry() { |
|||
Label label = new Label("Script Type:"); |
|||
ComboBox<ScriptType> scriptTypeComboBox = new ComboBox<>(FXCollections.observableArrayList(ScriptType.getAddressableScriptTypes(PolicyType.SINGLE))); |
|||
scriptTypeComboBox.setValue(ScriptType.P2WPKH); |
|||
|
|||
Region region = new Region(); |
|||
HBox.setHgrow(region, Priority.SOMETIMES); |
|||
|
|||
Button importFileButton = new Button("Import"); |
|||
importFileButton.setOnAction(event -> { |
|||
showHideLink.setVisible(true); |
|||
setExpanded(false); |
|||
try { |
|||
importWallet(scriptTypeComboBox.getValue()); |
|||
} catch(ImportException e) { |
|||
log.error("Error importing file", e); |
|||
String errorMessage = e.getMessage(); |
|||
if(e.getCause() instanceof JsonParseException) { |
|||
errorMessage = "File was not in JSON format"; |
|||
} else if(e.getCause() != null && e.getCause().getMessage() != null && !e.getCause().getMessage().isEmpty()) { |
|||
errorMessage = e.getCause().getMessage(); |
|||
} |
|||
setError("Import Error", errorMessage); |
|||
importButton.setDisable(false); |
|||
} |
|||
}); |
|||
|
|||
HBox contentBox = new HBox(); |
|||
contentBox.setAlignment(Pos.CENTER_RIGHT); |
|||
contentBox.setSpacing(20); |
|||
contentBox.getChildren().addAll(label, scriptTypeComboBox, region, importFileButton); |
|||
contentBox.setPadding(new Insets(10, 30, 10, 30)); |
|||
contentBox.setPrefHeight(60); |
|||
|
|||
return contentBox; |
|||
} |
|||
} |
Loading…
Reference in new issue