|
|
@ -347,6 +347,8 @@ class Plugin(BasePlugin): |
|
|
|
self.win = self.gui.main_window |
|
|
|
self.win.connect(self.win, SIGNAL("refresh_currencies()"), self.win.update_status) |
|
|
|
self.btc_rate = Decimal("0.0") |
|
|
|
self.resp_hist = {} |
|
|
|
self.tx_list = {} |
|
|
|
if self.exchanger is None: |
|
|
|
# Do price discovery |
|
|
|
self.exchanger = Exchanger(self) |
|
|
@ -416,103 +418,109 @@ class Plugin(BasePlugin): |
|
|
|
tx_list[tx_hash] = {'value': value, 'timestamp': timestamp, 'balance': balance} |
|
|
|
|
|
|
|
self.tx_list = tx_list |
|
|
|
self.cur_exchange = self.config.get('use_exchange', "Blockchain") |
|
|
|
threading.Thread(target=self.request_history_rates, args=()).start() |
|
|
|
|
|
|
|
|
|
|
|
def requires_settings(self): |
|
|
|
return True |
|
|
|
|
|
|
|
|
|
|
|
@hook |
|
|
|
def history_tab_update(self): |
|
|
|
if self.config.get('history_rates', 'unchecked') == "checked": |
|
|
|
cur_exchange = self.config.get('use_exchange', "Blockchain") |
|
|
|
def request_history_rates(self): |
|
|
|
if self.config.get('history_rates') != "checked": |
|
|
|
return |
|
|
|
if not self.tx_list: |
|
|
|
return |
|
|
|
|
|
|
|
try: |
|
|
|
mintimestr = datetime.datetime.fromtimestamp(int(min(self.tx_list.items(), key=lambda x: x[1]['timestamp'])[1]['timestamp'])).strftime('%Y-%m-%d') |
|
|
|
except Exception: |
|
|
|
return |
|
|
|
maxtimestr = datetime.datetime.now().strftime('%Y-%m-%d') |
|
|
|
|
|
|
|
if self.cur_exchange == "CoinDesk": |
|
|
|
try: |
|
|
|
tx_list = self.tx_list |
|
|
|
self.resp_hist = self.exchanger.get_json('api.coindesk.com', "/v1/bpi/historical/close.json?start=" + mintimestr + "&end=" + maxtimestr) |
|
|
|
except Exception: |
|
|
|
return |
|
|
|
|
|
|
|
elif self.cur_exchange == "Winkdex": |
|
|
|
try: |
|
|
|
mintimestr = datetime.datetime.fromtimestamp(int(min(tx_list.items(), key=lambda x: x[1]['timestamp'])[1]['timestamp'])).strftime('%Y-%m-%d') |
|
|
|
self.resp_hist = self.exchanger.get_json('winkdex.com', "/api/v0/series?start_time=1342915200")['series'][0]['results'] |
|
|
|
except Exception: |
|
|
|
return |
|
|
|
maxtimestr = datetime.datetime.now().strftime('%Y-%m-%d') |
|
|
|
|
|
|
|
if cur_exchange == "CoinDesk": |
|
|
|
elif self.cur_exchange == "BitcoinVenezuela": |
|
|
|
cur_currency = self.fiat_unit() |
|
|
|
if cur_currency == "VEF": |
|
|
|
try: |
|
|
|
resp_hist = self.exchanger.get_json('api.coindesk.com', "/v1/bpi/historical/close.json?start=" + mintimestr + "&end=" + maxtimestr) |
|
|
|
self.resp_hist = self.exchanger.get_json('api.bitcoinvenezuela.com', "/historical/index.php?coin=BTC")['VEF_BTC'] |
|
|
|
except Exception: |
|
|
|
return |
|
|
|
elif cur_exchange == "Winkdex": |
|
|
|
elif cur_currency == "ARS": |
|
|
|
try: |
|
|
|
resp_hist = self.exchanger.get_json('winkdex.com', "/api/v0/series?start_time=1342915200")['series'][0]['results'] |
|
|
|
self.resp_hist = self.exchanger.get_json('api.bitcoinvenezuela.com', "/historical/index.php?coin=BTC")['ARS_BTC'] |
|
|
|
except Exception: |
|
|
|
return |
|
|
|
elif cur_exchange == "BitcoinVenezuela": |
|
|
|
cur_currency = self.fiat_unit() |
|
|
|
if cur_currency == "VEF": |
|
|
|
try: |
|
|
|
resp_hist = self.exchanger.get_json('api.bitcoinvenezuela.com', "/historical/index.php?coin=BTC")['VEF_BTC'] |
|
|
|
except Exception: |
|
|
|
return |
|
|
|
elif cur_currency == "ARS": |
|
|
|
try: |
|
|
|
resp_hist = self.exchanger.get_json('api.bitcoinvenezuela.com', "/historical/index.php?coin=BTC")['ARS_BTC'] |
|
|
|
except Exception: |
|
|
|
return |
|
|
|
else: |
|
|
|
return |
|
|
|
else: |
|
|
|
return |
|
|
|
|
|
|
|
self.win.need_update.set() |
|
|
|
|
|
|
|
@hook |
|
|
|
def history_tab_update(self): |
|
|
|
if self.config.get('history_rates') != "checked": |
|
|
|
return |
|
|
|
if not self.resp_hist: |
|
|
|
return |
|
|
|
|
|
|
|
self.gui.main_window.is_edit = True |
|
|
|
self.gui.main_window.history_list.setColumnCount(6) |
|
|
|
self.gui.main_window.history_list.setHeaderLabels( [ '', _('Date'), _('Description') , _('Amount'), _('Balance'), _('Fiat Amount')] ) |
|
|
|
root = self.gui.main_window.history_list.invisibleRootItem() |
|
|
|
childcount = root.childCount() |
|
|
|
for i in range(childcount): |
|
|
|
item = root.child(i) |
|
|
|
self.gui.main_window.is_edit = True |
|
|
|
self.gui.main_window.history_list.setColumnCount(6) |
|
|
|
self.gui.main_window.history_list.setHeaderLabels( [ '', _('Date'), _('Description') , _('Amount'), _('Balance'), _('Fiat Amount')] ) |
|
|
|
root = self.gui.main_window.history_list.invisibleRootItem() |
|
|
|
childcount = root.childCount() |
|
|
|
for i in range(childcount): |
|
|
|
item = root.child(i) |
|
|
|
try: |
|
|
|
tx_info = self.tx_list[str(item.data(0, Qt.UserRole).toPyObject())] |
|
|
|
except Exception: |
|
|
|
newtx = self.wallet.get_tx_history() |
|
|
|
v = newtx[[x[0] for x in newtx].index(str(item.data(0, Qt.UserRole).toPyObject()))][3] |
|
|
|
tx_info = {'timestamp':int(time.time()), 'value': v } |
|
|
|
pass |
|
|
|
tx_time = int(tx_info['timestamp']) |
|
|
|
if self.cur_exchange == "CoinDesk": |
|
|
|
tx_time_str = datetime.datetime.fromtimestamp(tx_time).strftime('%Y-%m-%d') |
|
|
|
try: |
|
|
|
tx_info = tx_list[str(item.data(0, Qt.UserRole).toPyObject())] |
|
|
|
except Exception: |
|
|
|
newtx = self.wallet.get_tx_history() |
|
|
|
v = newtx[[x[0] for x in newtx].index(str(item.data(0, Qt.UserRole).toPyObject()))][3] |
|
|
|
tx_fiat_val = "%.2f %s" % (Decimal(str(tx_info['value'])) / 100000000 * Decimal(self.resp_hist['bpi'][tx_time_str]), "USD") |
|
|
|
except KeyError: |
|
|
|
tx_fiat_val = "%.2f %s" % (self.btc_rate * Decimal(str(tx_info['value']))/100000000 , "USD") |
|
|
|
elif self.cur_exchange == "Winkdex": |
|
|
|
tx_time_str = datetime.datetime.fromtimestamp(tx_time).strftime('%Y-%m-%d') + "T16:00:00-04:00" |
|
|
|
try: |
|
|
|
tx_rate = self.resp_hist[[x['timestamp'] for x in self.resp_hist].index(tx_time_str)]['price'] |
|
|
|
tx_fiat_val = "%.2f %s" % (Decimal(tx_info['value']) / 100000000 * Decimal(tx_rate)/Decimal("100.0"), "USD") |
|
|
|
except ValueError: |
|
|
|
tx_fiat_val = "%.2f %s" % (self.btc_rate * Decimal(tx_info['value'])/100000000 , "USD") |
|
|
|
except KeyError: |
|
|
|
tx_fiat_val = _("No data") |
|
|
|
elif self.cur_exchange == "BitcoinVenezuela": |
|
|
|
tx_time_str = datetime.datetime.fromtimestamp(tx_time).strftime('%Y-%m-%d') |
|
|
|
try: |
|
|
|
num = self.resp_hist[tx_time_str].replace(',','') |
|
|
|
tx_fiat_val = "%.2f %s" % (Decimal(str(tx_info['value'])) / 100000000 * Decimal(num), cur_currency) |
|
|
|
except KeyError: |
|
|
|
tx_fiat_val = _("No data") |
|
|
|
|
|
|
|
tx_info = {'timestamp':int(time.time()), 'value': v } |
|
|
|
pass |
|
|
|
tx_time = int(tx_info['timestamp']) |
|
|
|
if cur_exchange == "CoinDesk": |
|
|
|
tx_time_str = datetime.datetime.fromtimestamp(tx_time).strftime('%Y-%m-%d') |
|
|
|
try: |
|
|
|
tx_USD_val = "%.2f %s" % (Decimal(str(tx_info['value'])) / 100000000 * Decimal(resp_hist['bpi'][tx_time_str]), "USD") |
|
|
|
except KeyError: |
|
|
|
tx_USD_val = "%.2f %s" % (self.btc_rate * Decimal(str(tx_info['value']))/100000000 , "USD") |
|
|
|
elif cur_exchange == "Winkdex": |
|
|
|
tx_time_str = datetime.datetime.fromtimestamp(tx_time).strftime('%Y-%m-%d') + "T16:00:00-04:00" |
|
|
|
try: |
|
|
|
tx_rate = resp_hist[[x['timestamp'] for x in resp_hist].index(tx_time_str)]['price'] |
|
|
|
tx_USD_val = "%.2f %s" % (Decimal(tx_info['value']) / 100000000 * Decimal(tx_rate)/Decimal("100.0"), "USD") |
|
|
|
except ValueError: |
|
|
|
tx_USD_val = "%.2f %s" % (self.btc_rate * Decimal(tx_info['value'])/100000000 , "USD") |
|
|
|
except KeyError: |
|
|
|
tx_USD_val = _("No data") |
|
|
|
elif cur_exchange == "BitcoinVenezuela": |
|
|
|
tx_time_str = datetime.datetime.fromtimestamp(tx_time).strftime('%Y-%m-%d') |
|
|
|
try: |
|
|
|
num = resp_hist[tx_time_str].replace(',','') |
|
|
|
tx_BTCVEN_val = "%.2f %s" % (Decimal(str(tx_info['value'])) / 100000000 * Decimal(num), cur_currency) |
|
|
|
except KeyError: |
|
|
|
tx_BTCVEN_val = _("No data") |
|
|
|
|
|
|
|
if cur_exchange in ["CoinDesk", "Winkdex"]: |
|
|
|
item.setText(5, tx_USD_val) |
|
|
|
elif cur_exchange == "BitcoinVenezuela": |
|
|
|
item.setText(5, tx_BTCVEN_val) |
|
|
|
if Decimal(str(tx_info['value'])) < 0: |
|
|
|
item.setForeground(5, QBrush(QColor("#BC1E1E"))) |
|
|
|
|
|
|
|
for i, width in enumerate(self.gui.main_window.column_widths['history']): |
|
|
|
self.gui.main_window.history_list.setColumnWidth(i, width) |
|
|
|
self.gui.main_window.history_list.setColumnWidth(4, 140) |
|
|
|
self.gui.main_window.history_list.setColumnWidth(5, 120) |
|
|
|
self.gui.main_window.is_edit = False |
|
|
|
tx_fiat_val = " "*(12-len(tx_fiat_val)) + tx_fiat_val |
|
|
|
item.setText(5, tx_fiat_val) |
|
|
|
item.setFont(5, QFont(MONOSPACE_FONT)) |
|
|
|
if Decimal(str(tx_info['value'])) < 0: |
|
|
|
item.setForeground(5, QBrush(QColor("#BC1E1E"))) |
|
|
|
|
|
|
|
for i, width in enumerate(self.gui.main_window.column_widths['history']): |
|
|
|
self.gui.main_window.history_list.setColumnWidth(i, width) |
|
|
|
self.gui.main_window.history_list.setColumnWidth(4, 140) |
|
|
|
self.gui.main_window.history_list.setColumnWidth(5, 120) |
|
|
|
self.gui.main_window.is_edit = False |
|
|
|
|
|
|
|
|
|
|
|
def settings_widget(self, window): |
|
|
@ -574,7 +582,7 @@ class Plugin(BasePlugin): |
|
|
|
def on_change_hist(checked): |
|
|
|
if checked: |
|
|
|
self.config.set_key('history_rates', 'checked') |
|
|
|
self.history_tab_update() |
|
|
|
self.request_history_rates() |
|
|
|
else: |
|
|
|
self.config.set_key('history_rates', 'unchecked') |
|
|
|
self.gui.main_window.history_list.setHeaderLabels( [ '', _('Date'), _('Description') , _('Amount'), _('Balance')] ) |
|
|
|