actual/packages/node-libofx/emscripten.cpp
2022-04-28 22:44:38 -04:00

133 lines
3.5 KiB
C++

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "libofx/inc/libofx.h"
#include "emscripten.h"
extern "C" {
void set_ofx_version(OfxFiLogin *login, char *version) {
strncpy(login->header_version, version, OFX_HEADERVERSION_LENGTH - 1);
}
void set_app_version(OfxFiLogin *login, char *version) {
strncpy(login->appver, version, OFX_APPVER_LENGTH - 1);
}
void set_app_id(OfxFiLogin *login, char *id) {
strncpy(login->appid, id, OFX_APPID_LENGTH - 1);
}
OfxAccountData *copy_account(OfxAccountData *acct) {
OfxAccountData *target = (OfxAccountData*)malloc(sizeof(OfxAccountData));
*target = *acct;
return target;
}
// OfxAccountData *make_account(int type, char* acct, char* bank=NULL, char* broker=NULL) {
// OfxAccountData *account = (OfxAccountData*)malloc(sizeof(OfxAccountData));
// memset(account, 0, sizeof(OfxAccountData));
// switch(type) {
// case 1:
// account->account_type = account->OFX_CHECKING;
// case 2:
// account->account_type = account->OFX_INVESTMENT;
// case 3:
// account->account_type = account->OFX_CREDITCARD;
// }
// strncpy(account->account_number, acct, OFX_ACCTID_LENGTH - 1);
// if(bank != NULL) {
// strncpy(account->bank_id, bank, OFX_BANKID_LENGTH - 1);
// }
// if(broker != NULL) {
// strncpy(account->broker_id, broker, OFX_BROKERID_LENGTH - 1);
// }
// return account;
// }
// Account accessors
// char* acct_number(OfxAccountData *acct) {
// return acct->account_number;
// }
// char* acct_name(OfxAccountData *acct) {
// return acct->account_name;
// }
// char* acct_bankid(OfxAccountData *acct) {
// return acct->bank_id;
// }
// int acct_type(OfxAccountData *acct) {
// return acct->account_type_valid;
// }
// Transaction accessors
double transaction_amount(OfxTransactionData *trans) {
return trans->amount;
}
char* transaction_fi_id(OfxTransactionData *trans) {
return trans->fi_id_corrected_valid ? trans->fi_id_corrected : trans->fi_id;
}
time_t transaction_date(OfxTransactionData *trans) {
return trans->date_posted;
}
char* transaction_payee(OfxTransactionData *trans) {
return trans->payee_id;
}
char* transaction_name(OfxTransactionData *trans) {
return trans->name;
}
char* transaction_memo(OfxTransactionData *trans) {
return trans->memo;
}
// Context
LibofxContextPtr get_new_context() {
LibofxContextPtr ctx = libofx_get_new_context();
libofx_set_dtd_dir(ctx, "libofx/dtd/");
return ctx;
}
// Parsing
void parse_data(LibofxContextPtr ctx, char* res) {
// char *name = "/tmp/fooT_ofx";
char *name = tmpnam(0);
FILE *fp = fopen(name, "w");
fputs(res, fp);
fclose(fp);
libofx_proc_file(ctx, name, OFX);
}
void init() {
// EM_ASM(
// FS.mkdir('/data');
// FS.mount(NODEFS, { root: './libofx' }, '/data');
// );
}
void debug() {
// ofx_PARSER_msg = true;
// ofx_DEBUG_msg = true;
// ofx_DEBUG1_msg = true;
// ofx_WARNING_msg = true;
ofx_ERROR_msg = true;
// ofx_INFO_msg = true;
// ofx_STATUS_msg = true;
}
}