URI: 
       tMinor fixes to exchange_rate plugin - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit c0b93c83abc2d6f3077e93fe81cf9ea1cdf051b3
   DIR parent 0db2dbf3d7ea1f0fa7ecaa17fa07914b2cc3ab83
  HTML Author: Neil Booth <kyuupichan@gmail.com>
       Date:   Mon,  7 Sep 2015 00:01:26 +0900
       
       Minor fixes to exchange_rate plugin
       
       - some exchanges only server their API via http
       - add/remove columns as the history check box is selected/deselected
       
       Diffstat:
         M plugins/exchange_rate.py            |      41 +++++++++++++++++++++++--------
       
       1 file changed, 31 insertions(+), 10 deletions(-)
       ---
   DIR diff --git a/plugins/exchange_rate.py b/plugins/exchange_rate.py
       t@@ -34,8 +34,12 @@ class ExchangeBase(PrintError):
                self.quotes = {}
                self.sig = sig
        
       +    def protocol(self):
       +        return "https"
       +
            def get_json(self, site, get_string):
       -        response = requests.request('GET', 'https://' + site + get_string,
       +        url = "".join([self.protocol(), '://', site, get_string])
       +        response = requests.request('GET', url,
                                            headers={'User-Agent' : 'Electrum'})
                return response.json()
        
       t@@ -44,10 +48,13 @@ class ExchangeBase(PrintError):
        
            def update(self, ccy):
                self.print_error("getting fx quotes for", ccy)
       -        self.quotes = self.get_rates(ccy)
       -        self.print_error("received fx quotes")
       -        self.sig.emit(SIGNAL('fx_quotes'))
       -        return self.quotes
       +        try:
       +            self.quotes = self.get_rates(ccy)
       +            self.print_error("received fx quotes")
       +            self.sig.emit(SIGNAL('fx_quotes'))
       +        except:
       +            traceback.print_exc(file=sys.stderr)
       +            self.print_error("failed to get fx quotes")
        
            def history_ccys(self):
                return []
       t@@ -74,7 +81,7 @@ class ExchangeBase(PrintError):
        class BitcoinAverage(ExchangeBase):
            def update(self, ccy):
                json = self.get_json('api.bitcoinaverage.com', '/ticker/global/all')
       -        return dict([(r, Decimal(jsonresp[r]['last']))
       +        return dict([(r, Decimal(json[r]['last']))
                             for r in json if r != 'timestamp'])
        
        class BitcoinVenezuela(ExchangeBase):
       t@@ -83,6 +90,9 @@ class BitcoinVenezuela(ExchangeBase):
                return dict([(r, Decimal(json['BTC'][r]))
                             for r in json['BTC']])
        
       +    def protocol(self):
       +        return "http"
       +
            def history_ccys(self):
                return ['ARS', 'EUR', 'USD', 'VEF']
        
       t@@ -95,6 +105,9 @@ class BTCParalelo(ExchangeBase):
                json = self.get_json('btcparalelo.com', '/api/price')
                return {'VEF': Decimal(json['price'])}
        
       +    def protocol(self):
       +        return "http"
       +
        class Bitcurex(ExchangeBase):
            def get_rates(self, ccy):
                json = self.get_json('pln.bitcurex.com', '/data/ticker.json')
       t@@ -237,6 +250,9 @@ class Plugin(BasePlugin, ThreadJob):
            def config_history(self):
                return self.config.get('history_rates', 'unchecked') != 'unchecked'
        
       +    def show_history(self):
       +        return self.config_history() and self.exchange.history_ccys()
       +
            def set_exchange(self, name):
                class_ = self.exchanges.get(name) or self.exchanges.values()[0]
                name = class_.__name__
       t@@ -311,12 +327,16 @@ class Plugin(BasePlugin, ThreadJob):
                # Get rid of hooks before updating status bars.
                BasePlugin.close(self)
                self.update_status_bars()
       +        self.refresh_headers()
                for window, data in self.windows.items():
                    for edit in data['edits']:
                        edit.hide()
       -            window.history_list.refresh_headers()
                    window.update_status()
        
       +    def refresh_headers(self):
       +        for window in self.windows:
       +            window.history_list.refresh_headers()
       +
            def on_fx_history(self):
                '''Called when historical fx quotes are updated'''
                for window in self.windows:
       t@@ -378,7 +398,7 @@ class Plugin(BasePlugin, ThreadJob):
                result['text'] = text
        
            def get_historical_rates(self):
       -        if self.config_history():
       +        if self.show_history():
                    self.exchange.get_historical_rates(self.ccy)
        
            def requires_settings(self):
       t@@ -401,7 +421,7 @@ class Plugin(BasePlugin, ThreadJob):
        
            @hook
            def history_tab_headers(self, headers):
       -        if self.config_history():
       +        if self.show_history():
                    headers.extend([_('Fiat Amount'), _('Fiat Balance')])
        
            @hook
       t@@ -410,7 +430,7 @@ class Plugin(BasePlugin, ThreadJob):
        
            @hook
            def history_tab_update(self, tx, entry):
       -        if not self.config_history():
       +        if not self.show_history():
                    return
                tx_hash, conf, value, timestamp, balance = tx
                date = timestamp_to_datetime(timestamp)
       t@@ -448,6 +468,7 @@ class Plugin(BasePlugin, ThreadJob):
                        self.get_historical_rates()
                    else:
                        self.config.set_key('history_rates', 'unchecked')
       +            self.refresh_headers()
        
                def ok_clicked():
                    self.timeout = 0