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"