Example #1
0
 def main(self):
     # setup Ctrl-C handling and tear-down code first, so that user can easily exit whenever
     self.app.setQuitOnLastWindowClosed(
         False)  # so _we_ can decide whether to quit
     self.app.lastWindowClosed.connect(self._maybe_quit_if_no_windows_open)
     self.app.aboutToQuit.connect(self._cleanup_before_exit)
     signal.signal(signal.SIGINT, lambda *args: self.app.quit())
     # hook for crash reporter
     Exception_Hook.maybe_setup(config=self.config)
     # first-start network-setup
     try:
         self.init_network()
     except UserCancelled:
         return
     except GoBack:
         return
     except Exception as e:
         self.logger.exception('')
         return
     # start wizard to select/create wallet
     self.timer.start()
     path = self.config.get_wallet_path(use_gui_last_wallet=True)
     try:
         if not self.start_new_window(
                 path, self.config.get('url'), app_is_starting=True):
             return
     except Exception as e:
         self.logger.error(
             "error loading wallet (or creating window for it)")
         send_exception_to_crash_reporter(e)
         # Let Qt event loop start properly so that crash reporter window can appear.
         # We will shutdown when the user closes that window, via lastWindowClosed signal.
     # main loop
     self.logger.info("starting Qt main loop")
     self.app.exec_()
 def get_max_amount(self):
     from electrum.transaction import TxOutput
     if run_hook('abort_send', self):
         return ''
     inputs = self.wallet.get_spendable_coins(None, self.electrum_config)
     if not inputs:
         return ''
     addr = None
     if self.send_screen:
         addr = str(self.send_screen.screen.address)
     if not addr:
         addr = self.wallet.dummy_address()
     outputs = [TxOutput(TYPE_ADDRESS, addr, '!')]
     try:
         tx = self.wallet.make_unsigned_transaction(inputs, outputs,
                                                    self.electrum_config)
     except NoDynamicFeeEstimates as e:
         Clock.schedule_once(
             lambda dt, bound_e=e: self.show_error(str(bound_e)))
         return ''
     except NotEnoughFunds:
         return ''
     except InternalAddressCorruption as e:
         self.show_error(str(e))
         send_exception_to_crash_reporter(e)
         return ''
     amount = tx.output_value()
     __, x_fee_amount = run_hook('get_tx_extra_fee', self.wallet,
                                 tx) or (None, 0)
     amount_after_all_fees = amount - x_fee_amount
     return format_satoshis_plain(amount_after_all_fees,
                                  self.decimal_point())
 def on_qr_result(requestCode, resultCode, intent):
     try:
         if resultCode == -1:  # RESULT_OK:
             #  this doesn't work due to some bug in jnius:
             # contents = intent.getStringExtra("text")
             String = autoclass("java.lang.String")
             contents = intent.getStringExtra(String("text"))
             on_complete(contents)
     except Exception as e:  # exc would otherwise get lost
         send_exception_to_crash_reporter(e)
     finally:
         activity.unbind(on_activity_result=on_qr_result)
 def load_wallet(self, wallet):
     if self.wallet:
         self.stop_wallet()
     self.wallet = wallet
     self.wallet_name = wallet.basename()
     self.update_wallet()
     # Once GUI has been initialized check if we want to announce something
     # since the callback has been called before the GUI was initialized
     if self.receive_screen:
         self.receive_screen.clear()
     self.update_tabs()
     run_hook('load_wallet', wallet, self)
     try:
         wallet.try_detecting_internal_addresses_corruption()
     except InternalAddressCorruption as e:
         self.show_error(str(e))
         send_exception_to_crash_reporter(e)
Example #5
0
 def load_wallet(self, wallet):
     if self.wallet:
         self.stop_wallet()
     self.wallet = wallet
     self.wallet_name = wallet.basename()
     self.update_wallet()
     # Once GUI has been initialized check if we want to announce something
     # since the callback has been called before the GUI was initialized
     if self.receive_screen:
         self.receive_screen.clear()
     self.update_tabs()
     run_hook('load_wallet', wallet, self)
     try:
         wallet.try_detecting_internal_addresses_corruption()
     except InternalAddressCorruption as e:
         self.show_error(str(e))
         send_exception_to_crash_reporter(e)
 def get_new_address(self) -> bool:
     """Sets the address field, and returns whether the set address
     is unused."""
     if not self.app.wallet:
         return False
     self.clear()
     unused = True
     try:
         addr = self.app.wallet.get_unused_address()
         if addr is None:
             addr = self.app.wallet.get_receiving_address() or ''
             unused = False
     except InternalAddressCorruption as e:
         addr = ''
         self.app.show_error(str(e))
         send_exception_to_crash_reporter(e)
     self.screen.address = addr
     return unused
Example #7
0
 def get_new_address(self) -> bool:
     """Sets the address field, and returns whether the set address
     is unused."""
     if not self.app.wallet:
         return False
     self.clear()
     unused = True
     try:
         addr = self.app.wallet.get_unused_address()
         if addr is None:
             addr = self.app.wallet.get_receiving_address() or ''
             unused = False
     except InternalAddressCorruption as e:
         addr = ''
         self.app.show_error(str(e))
         send_exception_to_crash_reporter(e)
     self.screen.address = addr
     return unused
Example #8
0
 def get_max_amount(self):
     from electrum.transaction import TxOutput
     if run_hook('abort_send', self):
         return ''
     inputs = self.wallet.get_spendable_coins(None, self.electrum_config)
     if not inputs:
         return ''
     addr = str(self.send_screen.screen.address) or self.wallet.dummy_address()
     outputs = [TxOutput(TYPE_ADDRESS, addr, '!')]
     try:
         tx = self.wallet.make_unsigned_transaction(inputs, outputs, self.electrum_config)
     except NoDynamicFeeEstimates as e:
         Clock.schedule_once(lambda dt, bound_e=e: self.show_error(str(bound_e)))
         return ''
     except NotEnoughFunds:
         return ''
     except InternalAddressCorruption as e:
         self.show_error(str(e))
         send_exception_to_crash_reporter(e)
         return ''
     amount = tx.output_value()
     __, x_fee_amount = run_hook('get_tx_extra_fee', self.wallet, tx) or (None, 0)
     amount_after_all_fees = amount - x_fee_amount
     return format_satoshis_plain(amount_after_all_fees, self.decimal_point())