|
|
@ -1,6 +1,9 @@ |
|
|
|
package com.sparrowwallet.sparrow.wallet; |
|
|
|
|
|
|
|
import com.csvreader.CsvWriter; |
|
|
|
import com.google.common.eventbus.Subscribe; |
|
|
|
import com.sparrowwallet.drongo.BitcoinUnit; |
|
|
|
import com.sparrowwallet.drongo.protocol.Transaction; |
|
|
|
import com.sparrowwallet.sparrow.AppServices; |
|
|
|
import com.sparrowwallet.sparrow.CurrencyRate; |
|
|
|
import com.sparrowwallet.sparrow.EventManager; |
|
|
@ -8,14 +11,26 @@ import com.sparrowwallet.sparrow.control.*; |
|
|
|
import com.sparrowwallet.sparrow.event.*; |
|
|
|
import com.sparrowwallet.sparrow.net.ExchangeSource; |
|
|
|
import javafx.collections.ListChangeListener; |
|
|
|
import javafx.event.ActionEvent; |
|
|
|
import javafx.fxml.FXML; |
|
|
|
import javafx.fxml.Initializable; |
|
|
|
import javafx.scene.control.Button; |
|
|
|
import javafx.scene.control.TreeItem; |
|
|
|
|
|
|
|
import javafx.stage.FileChooser; |
|
|
|
import javafx.stage.Stage; |
|
|
|
import org.slf4j.Logger; |
|
|
|
import org.slf4j.LoggerFactory; |
|
|
|
|
|
|
|
import java.io.File; |
|
|
|
import java.io.FileOutputStream; |
|
|
|
import java.io.IOException; |
|
|
|
import java.net.URL; |
|
|
|
import java.nio.charset.StandardCharsets; |
|
|
|
import java.util.Locale; |
|
|
|
import java.util.ResourceBundle; |
|
|
|
|
|
|
|
public class TransactionsController extends WalletFormController implements Initializable { |
|
|
|
private static final Logger log = LoggerFactory.getLogger(TransactionsController.class); |
|
|
|
|
|
|
|
@FXML |
|
|
|
private CoinLabel balance; |
|
|
@ -38,6 +53,9 @@ public class TransactionsController extends WalletFormController implements Init |
|
|
|
@FXML |
|
|
|
private BalanceChart balanceChart; |
|
|
|
|
|
|
|
@FXML |
|
|
|
private Button exportCsv; |
|
|
|
|
|
|
|
@Override |
|
|
|
public void initialize(URL location, ResourceBundle resources) { |
|
|
|
EventManager.get().register(this); |
|
|
@ -81,6 +99,41 @@ public class TransactionsController extends WalletFormController implements Init |
|
|
|
transactionCount.setText(walletTransactionsEntry.getChildren() != null ? Integer.toString(walletTransactionsEntry.getChildren().size()) : "0"); |
|
|
|
} |
|
|
|
|
|
|
|
public void exportCSV(ActionEvent event) { |
|
|
|
WalletTransactionsEntry walletTransactionsEntry = getWalletForm().getWalletTransactionsEntry(); |
|
|
|
|
|
|
|
Stage window = new Stage(); |
|
|
|
FileChooser fileChooser = new FileChooser(); |
|
|
|
fileChooser.setTitle("Export Transactions as CSV"); |
|
|
|
fileChooser.setInitialFileName(getWalletForm().getWallet().getName() + ".csv"); |
|
|
|
|
|
|
|
File file = fileChooser.showSaveDialog(window); |
|
|
|
if(file != null) { |
|
|
|
try(FileOutputStream outputStream = new FileOutputStream(file)) { |
|
|
|
CsvWriter writer = new CsvWriter(outputStream, ',', StandardCharsets.UTF_8); |
|
|
|
writer.writeRecord(new String[] {"Date", "Label", "Value", "Balance"}); |
|
|
|
for(Entry entry : walletTransactionsEntry.getChildren()) { |
|
|
|
TransactionEntry txEntry = (TransactionEntry)entry; |
|
|
|
writer.write(EntryCell.DATE_FORMAT.format(txEntry.getBlockTransaction().getDate())); |
|
|
|
writer.write(txEntry.getLabel()); |
|
|
|
writer.write(getCoinValue(txEntry.getValue())); |
|
|
|
writer.write(getCoinValue(txEntry.getBalance())); |
|
|
|
writer.endRecord(); |
|
|
|
} |
|
|
|
writer.close(); |
|
|
|
} catch(IOException e) { |
|
|
|
log.error("Error exporting transactions as CSV", e); |
|
|
|
AppServices.showErrorDialog("Error exporting transactions as CSV", e.getMessage()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private String getCoinValue(Long value) { |
|
|
|
return BitcoinUnit.BTC.equals(transactionsTable.getBitcoinUnit()) ? |
|
|
|
CoinLabel.getBTCFormat().format(value.doubleValue() / Transaction.SATOSHIS_PER_BITCOIN) : |
|
|
|
String.format(Locale.ENGLISH, "%d", value); |
|
|
|
} |
|
|
|
|
|
|
|
@Subscribe |
|
|
|
public void walletNodesChanged(WalletNodesChangedEvent event) { |
|
|
|
if(event.getWallet().equals(walletForm.getWallet())) { |
|
|
|