diff --git a/main.py b/main.py index d5a1c50..cf2a7a4 100644 --- a/main.py +++ b/main.py @@ -16,6 +16,8 @@ import importlib import plugin as plugins_module import gitinfo import datetime +import functools +import time dotenv.load_dotenv() @@ -68,6 +70,10 @@ def reverseDirection(direction: str): #region Transactions +# Add a cache for transactions with a timeout +tx_cache = {} +TX_CACHE_TIMEOUT = 60*5 # Cache timeout in seconds + @app.route('/tx') def transactions(): # Check if the user is logged in @@ -84,13 +90,34 @@ def transactions(): if page < 1: page = 1 - - transactions = account_module.getTransactions(account,page) - txCount = len(transactions) - transactions = render.transactions(transactions) + + # Check for force refresh parameter + force_refresh = request.args.get('refresh') == 'true' + + # Create a cache key based on account and page + cache_key = f"{account}_{page}" + + # Check if data is in cache and not expired + current_time = time.time() + if not force_refresh and cache_key in tx_cache and (current_time - tx_cache[cache_key]['time'] < TX_CACHE_TIMEOUT): + transactions = tx_cache[cache_key]['data'] + txCount = len(transactions) + transactions_html = tx_cache[cache_key]['html'] + else: + # Fetch transactions from account module + transactions = account_module.getTransactions(account, page) + txCount = len(transactions) + transactions_html = render.transactions(transactions) + + # Store in cache + tx_cache[cache_key] = { + 'data': transactions, + 'html': transactions_html, + 'time': current_time + } return render_template("tx.html", account=account, - tx=transactions, - page=page,txCount=txCount) + tx=transactions_html, + page=page, txCount=txCount) @app.route('/send') diff --git a/render.py b/render.py index 8de31c4..d6336f3 100644 --- a/render.py +++ b/render.py @@ -96,54 +96,60 @@ def transactions(txs): if len(txs) == 0: return 'No transactions found' html = '' + + test = "1de69f8138513fd8d9f1b3a8285b06e4b94f74b919b123f5da37beb164bb1688" for tx in txs: action = "HNS Transfer" address = tx["outputs"][0]["address"] hash = tx["hash"] confirmations=tx["confirmations"] + incomming = True amount = 0 - incomming = False isMulti = False nameHashes = [] - - if not tx["inputs"][0]["path"]: - incomming = True + + if tx["hash"] == test: + with open("test.json", "w") as f: + json.dump(tx, f, indent=4) for txInput in tx["inputs"]: if txInput["path"]: + incomming = False amount -= txInput["value"] - + + if tx["hash"] == test: + print(f"TEXT TX INPUT VALUE: {amount}") + for output in tx["outputs"]: if output["covenant"]["action"] != "NONE": if action == "HNS Transfer": action = output["covenant"]["action"] elif action == output["covenant"]["action"]: isMulti = True - continue else: action = "Multiple Actions" if output["covenant"]["items"] and len(output["covenant"]["items"]) > 0: nameHashes.append(output["covenant"]["items"][0]) - - # Skip value of domains - if output["covenant"]["action"] in ["FINALIZE", "RENEW"]: - continue + if not incomming: + if output["path"]: + amount += output["value"] + else: + if output["path"] and output["covenant"]["action"] == "NONE": + amount += output["value"] - if not output["path"] and not incomming: - amount += output["value"] - elif output["path"] and incomming: - amount += output["value"] - + if not incomming: + # Subtract fee to make it easier to read + amount += tx["fee"] amount = amount / 1000000 humanAction = action if action == "HNS Transfer": - if incomming: + if amount > 0: humanAction = "Received HNS" else: humanAction = "Sent HNS" @@ -173,9 +179,9 @@ def transactions(txs): name = None humanAction += renderDomain(name) if name else "domain" - if not incomming and amount > 0: - amount = f"-{amount:,.2f}" - elif incomming and amount > 0: + if amount < 0: + amount = f"{amount:,.2f}" + elif amount > 0: amount = f"+{amount:,.2f}" else: amount = f"0.00"