/*
* Modified from example here:
* http://stackoverflow.com/questions/11341931/how-to-create-a-csv-on-android
*/
package com.thanksmister.btcblue.data;
import android.os.Environment;
import com.thanksmister.btcblue.data.api.model.Exchange;
import com.thanksmister.btcblue.utils.Conversions;
import com.thanksmister.btcblue.utils.Dates;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.Date;
import javax.inject.Inject;
import javax.inject.Singleton;
import rx.Observable;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
@Singleton
public class WriterService
{
@Inject
public WriterService()
{
}
public Observable<File> writeReceiptFileObservable(final String title, final Exchange exchange,
final String btcValue, final String arsValue, final String usdValue)
{
return Observable.create(new Observable.OnSubscribe<File>()
{
@Override
public void call(Subscriber<? super File> subscriber)
{
File folder = new File(Environment.getExternalStorageDirectory() + "/BitcoinBlue");
Date date = new Date();
String dateString = Dates.getLocalDateTime(date);
String timestamp = Dates.parseFileTimeStamp(date);
final String filename = (title.isEmpty()) ? timestamp : (title + "_" + timestamp) + ".csv";
File outFile = new File(folder, filename);
try {
BufferedWriter bw = new BufferedWriter(new FileWriter(outFile));
bw.append("NAME");
bw.append(',');
bw.append("DATE");
bw.append(',');
bw.append("EXCHANGE");
bw.append(',');
bw.append("ARS/USDB");
bw.append(',');
bw.append("ARS/USD");
bw.append(',');
bw.append("ARS AMOUNT");
bw.append(',');
bw.append("USD AMOUNT");
bw.append(',');
bw.append("BTC AMOUNT");
bw.append(',');
bw.newLine();
bw.append(title);
bw.append(',');
bw.append(dateString);
bw.append(',');
bw.append(exchange.getDisplay_name());
bw.append(',');
bw.append(exchange.getBlueFormatted());
bw.append(',');
bw.append(exchange.getOfficialFormatted());
bw.append(',');
bw.append(Conversions.formatCurrencyAmount(arsValue));
bw.append(',');
bw.append(usdValue);
bw.append(',');
bw.append(btcValue);
// bw.append(',');
bw.newLine();
bw.close();
subscriber.onNext(outFile);
subscriber.onCompleted();
} catch (Exception e) {
String err = (e.getMessage() == null) ? "Failed to write file." : e.getMessage();
subscriber.onError(new Throwable(err));
}
}
}).subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
}
}