diff --git a/bal.py b/bal.py index 047bad0..b51f2cc 100644 --- a/bal.py +++ b/bal.py @@ -47,18 +47,19 @@ class BalConfig: class BalPlugin(BasePlugin): - LATEST_VERSION = "1" - KNOWN_VERSIONS = ("0", "1") - assert LATEST_VERSION in KNOWN_VERSIONS + _version=None - def version(): - try: - f = "" - with open("VERSION", "r") as fi: - f = str(fi.readline()) - return f - except Exception: - return "unknown" + def version(self): + if not self._version: + try: + f = "" + with open("{}/VERSION".format(self.plugin_dir), "r") as fi: + f = str(fi.read()) + self._version = f.strip() + except Exception as e: + _logger.error(f"failed to get version: {e}") + self._version="unknown" + return self._version SIZE = (159, 97) diff --git a/manifest.json b/manifest.json index e4824b1..546c444 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "name": "BAL", "fullname": "Bitcoin After Life", - "description": "Provides free and decentralized inheritance support
Version: 0.2.5", + "description": "Provides free and decentralized inheritance support
Version: 0.2.6", "author":"Svatantrya", "available_for": ["qt"], "icon":"icons/bal32x32.png" diff --git a/qt.py b/qt.py index 1560f32..f8e9164 100644 --- a/qt.py +++ b/qt.py @@ -1046,7 +1046,7 @@ class BalWindow(Logger): self.waiting_dialog.exe() def push_transactions_to_willexecutors(self, force=False): - willexecutors = Willexecutors.get_willexecutor_transactions(self.willitems) + willexecutors = Willexecutors.get_willexecutor_transactions(self.bal_plugin, self.willitems) def getMsg(willexecutors): msg = "Broadcasting Transactions to Will-Executors:\n" @@ -1060,7 +1060,7 @@ class BalWindow(Logger): self.waiting_dialog.update(getMsg(willexecutors)) if "txs" in willexecutor: try: - if Willexecutors.push_transactions_to_willexecutor( + if Willexecutors.push_transactions_to_willexecutor(self.bal_plugin, willexecutors[url] ): for wid in willexecutors[url]["txsids"]: @@ -1079,7 +1079,14 @@ class BalWindow(Logger): self.willitems[wid].we["url"], wid, "Waiting" ) ) - self.willitems[wid].check_willexecutor() + w = self.willitems[wid] + w.set_check_willexecutor( + Willexecutors.check_transaction( + self.bal_plugin, + w._id, + w.we["url"] + ) + ) self.waiting_dialog.update( "checked {} - {} : {}".format( self.willitems[wid].we["url"], @@ -1128,7 +1135,8 @@ class BalWindow(Logger): self.waiting_dialog.update( "checking transaction: {}\n willexecutor: {}".format(wid, w.we["url"]) ) - w.check_willexecutor() + w.set_check_willexecutor(Willexecutors.check_transaction(self.bal_plugin,w._id, w.we["url"])) + if time.time() - start < 3: time.sleep(3 - (time.time() - start)) @@ -1176,7 +1184,7 @@ class BalWindow(Logger): self.waiting_dialog.update(get_title()) except Exception: pass - wes[url] = Willexecutors.get_info_task(url, we) + wes[url] = Willexecutors.get_info_task(self.bal_plugin, url, we) if wes[url]["status"] == "KO": failed.append(url) else: @@ -2048,6 +2056,7 @@ class BalBuildWillDialog(BalDialog): self.parent = parent self.updatemessage.connect(self.update) self.bal_window = bal_window + self.bal_plugin = bal_window.bal_plugin self.message_label = QLabel(_("Building Will:")) self.vbox = QVBoxLayout(self) self.vbox.addWidget(self.message_label) @@ -2237,7 +2246,7 @@ class BalBuildWillDialog(BalDialog): self.bal_window.willexecutors.get(url) ): _logger.debug(f"{url}: {willexecutor}") - if not Willexecutors.push_transactions_to_willexecutor( + if not Willexecutors.push_transactions_to_willexecutor(self.bal_plugin, willexecutor ): for wid in willexecutor["txsids"]: @@ -2257,7 +2266,9 @@ class BalBuildWillDialog(BalDialog): self.bal_window.willitems[wid].we["url"], wid, "Waiting" ) ) - self.bal_window.willitems[wid].check_willexecutor() + self.bal_plugin = bal_window.bal_plugin + w = self.bal_window.willitems[wid] + w.set_check_willexecutor(Willexecutors.check_transaction(self.bal_plugin,w._id, w.we["url"])) row = self.msg_edit_row( "checked {} - {} : {}".format( self.bal_window.willitems[wid].we["url"], @@ -2509,6 +2520,7 @@ class HeirList(MyTreeView, MessageBoxMixin): self.decimal_point = bal_window.window.get_decimal_point() self.bal_window = bal_window + try: self.setModel(QStandardItemModel(self)) self.sortByColumn(self.Columns.NAME, Qt.SortOrder.AscendingOrder) @@ -2592,12 +2604,6 @@ class HeirList(MyTreeView, MessageBoxMixin): menu.addAction(_("Delete"), lambda: self.delete_heirs(selected_keys)) menu.exec(self.viewport().mapToGlobal(position)) - # def get_selected_keys(self): - # selected_keys = [] - # for s_idx in self.selected_in_column(self.Columns.NAME): - # sel_key = self.model().itemFromIndex(s_idx).data(0) - # selected_keys.append(sel_key) - # return selected_keys def update(self): current_key = self.get_role_data_for_current_item( col=self.Columns.NAME, role=self.ROLE_HEIR_KEY @@ -2747,6 +2753,7 @@ class HeirList(MyTreeView, MessageBoxMixin): self.heir_tx_fees.setValue(int(self.bal_window.will_settings["baltx_fees"])) except Exception as e: + pass _logger.debug(f"Exception update_will_settings {e}") def build_transactions(self): diff --git a/will.py b/will.py index 6e8beb3..4d255de 100644 --- a/will.py +++ b/will.py @@ -793,9 +793,9 @@ class WillItem(Logger): iw = inp[1] self.set_anticipate(iw) - def check_willexecutor(self): + def set_check_willexecutor(self,resp): try: - if resp := Willexecutors.check_transaction(self._id, self.we["url"]): + if resp : if "tx" in resp and resp["tx"] == str(self.tx): self.set_status("PUSHED") self.set_status("CHECKED") diff --git a/willexecutors.py b/willexecutors.py index 9ee820f..93ee7cb 100644 --- a/willexecutors.py +++ b/willexecutors.py @@ -125,14 +125,14 @@ class Willexecutors: # ) def send_request( - method, url, data=None, *, timeout=10, handle_response=None, count_reply=0 + bal_plugin,method, url, data=None, *, timeout=10, handle_response=None, count_reply=0 ): network = Network.get_instance() if not network: raise Exception("You are offline.") _logger.debug(f"<-- {method} {url} {data}") headers = {} - headers["user-agent"] = f"BalPlugin v:{BalPlugin.version()}" + headers["user-agent"] = f"BalPlugin v:{bal_plugin.version()}" headers["Content-Type"] = "text/plain" if not handle_response: handle_response = Willexecutors.handle_response @@ -162,6 +162,7 @@ class Willexecutors: _logger.debug(f"timeout({count_reply}) error: retry in 3 sec...") time.sleep(3) return Willexecutors.send_request( + bal_plugin, method, url, data, @@ -199,11 +200,12 @@ class Willexecutors: class AlreadyPresentException(Exception): pass - def push_transactions_to_willexecutor(willexecutor): + def push_transactions_to_willexecutor(bal_plugin, willexecutor): out = True try: _logger.debug(f"{willexecutor['url']}: {willexecutor['txs']}") if w := Willexecutors.send_request( + bal_plugin, "post", willexecutor["url"] + "/" + chainname + "/pushtxs", data=willexecutor["txs"].encode("ascii"), @@ -224,16 +226,16 @@ class Willexecutors: return out - def ping_servers(willexecutors): + def ping_servers(bal_plugin, willexecutors): for url, we in willexecutors.items(): - Willexecutors.get_info_task(url, we) + Willexecutors.get_info_task(bal_plugin,url, we) - def get_info_task(url, willexecutor): + def get_info_task(bal_plugin,url, willexecutor): w = None try: _logger.info("GETINFO_WILLEXECUTOR") _logger.debug(url) - w = Willexecutors.send_request("get", url + "/" + chainname + "/info") + w = Willexecutors.send_request(bal_plugin,"get", url + "/" + chainname + "/info") if isinstance(w, dict): willexecutor["url"] = url willexecutor["status"] = 200 @@ -263,6 +265,7 @@ class Willexecutors: def download_list(bal_plugin,old_willexecutors): try: willexecutors = Willexecutors.send_request( + bal_plugin, "get", f"https://welist.bitcoin-after.life/data/{chainname}?page=0&limit=100", ) @@ -294,10 +297,11 @@ class Willexecutors: return {} - def check_transaction(txid, url): + def check_transaction(bal_plugin,txid, url): _logger.debug(f"{url}:{txid}") try: w = Willexecutors.send_request( + bal_plugin, "post", url + "/searchtx", data=txid.encode("ascii") ) return w