diff --git a/main.py b/main.py index f9c4dca..36ac240 100644 --- a/main.py +++ b/main.py @@ -273,74 +273,85 @@ def auctions(): if not account: return redirect("/logout") - # Get sort parameters with defaults - sort = request.args.get("sort", "time").lower() - direction = request.args.get("direction") - if direction is None: - direction = "⬆" if sort == "time" else "⬇" - - reverse = (direction == "⬆") - - # Initialize sort indicators with a more efficient approach - sort_indicators = { - "price": ["", "⬇"], - "state": ["", "⬇"], - "domain": ["", "⬇"], - "time": ["", "⬇"] - } - # Set the current sort column's indicators - sort_indicators[sort][0] = direction - sort_indicators[sort][1] = reverseDirection(direction) - - # Efficiently retrieve data + bids = account_module.getBids(account) - domains = account_module.getDomains(account, False) + domains = account_module.getDomains(account,False) - # Determine if sorting by domains and apply appropriate sort + # Sort + sort = request.args.get("sort") + if sort == None: + sort = "time" + sort = sort.lower() + sort_price = "" + sort_price_next = "⬇" + sort_state = "" + sort_state_next = "⬇" + sort_domain = "" + sort_domain_next = "⬇" + sort_time = "" + sort_time_next = "⬇" + reverse = False + + direction = request.args.get("direction") + if direction == None: + if sort == "time": + direction = "⬆" + else: + direction = "⬇" + + if direction == "⬆": + reverse = True + sortbyDomain = False - + if sort == "price": - bids = sorted(bids, key=lambda k: k['value'], reverse=reverse) + # Sort by price + bids = sorted(bids, key=lambda k: k['value'],reverse=reverse) + sort_price = direction + sort_price_next = reverseDirection(direction) elif sort == "state": - domains = sorted(domains, key=lambda k: k['state'], reverse=reverse) + sort_state = direction + sort_state_next = reverseDirection(direction) + domains = sorted(domains, key=lambda k: k['state'],reverse=reverse) sortbyDomain = True elif sort == "time": - # Handle older HSD versions that don't have height in bids - if bids and bids[0]['height'] == 0: - domains = sorted(domains, key=lambda k: k['height'], reverse=reverse) + sort_time = direction + sort_time_next = reverseDirection(direction) + + # If older HSD version sort by domain height + if bids[0]['height'] == 0: + domains = sorted(domains, key=lambda k: k['height'],reverse=reverse) sortbyDomain = True else: - bids = sorted(bids, key=lambda k: k['height'], reverse=reverse) - else: # Default to domain name sorting - bids = sorted(bids, key=lambda k: k['name'], reverse=reverse) + bids = sorted(bids, key=lambda k: k['height'],reverse=reverse) + else: + # Sort by domain + bids = sorted(bids, key=lambda k: k['name'],reverse=reverse) + sort_domain = direction + sort_domain_next = reverseDirection(direction) - # Get outbids only if explicitly requested - outbids = [] - if request.args.get("outbids", "").lower() == "true": + # Check if outbids set to true + outbids = request.args.get("outbids") + if outbids is not None and outbids.lower() == "true": + # Get outbid domains outbids = account_module.getPossibleOutbids(account) - - # Generate HTML just once - bidsHtml = render.bidDomains(bids, domains, sortbyDomain, outbids) - - # Get message if present - message = request.args.get("message", "") - - return render_template("auctions.html", account=account, - domains=bidsHtml, - domainsMobile=bidsHtml, - plugins="", - domain_count=bidsHtml, - sort_price=sort_indicators["price"][0], - sort_state=sort_indicators["state"][0], - sort_domain=sort_indicators["domain"][0], - sort_time=sort_indicators["time"][0], - sort_price_next=sort_indicators["price"][1], - sort_state_next=sort_indicators["state"][1], - sort_domain_next=sort_indicators["domain"][1], - sort_time_next=sort_indicators["time"][1], - bids=len(bids), - message=message) -#endregion + else: + outbids = [] + + bidsHtml = render.bidDomains(bids,domains,sortbyDomain,outbids) + plugins = "" + message = '' + if 'message' in request.args: + message = request.args.get("message") + return render_template("auctions.html", account=account, domains=bidsHtml, + domainsMobile=bidsHtml, plugins=plugins, + domain_count=bidsHtml,sort_price=sort_price, + sort_state=sort_state,sort_domain=sort_domain, + sort_price_next=sort_price_next, + sort_state_next=sort_state_next,sort_domain_next=sort_domain_next, + bids=len(bids),message=message, + sort_time=sort_time,sort_time_next=sort_time_next) + #region All Auctions @app.route('/reveal') diff --git a/render.py b/render.py index bd01ba9..11dc574 100644 --- a/render.py +++ b/render.py @@ -336,77 +336,47 @@ def bids(bids,reveals): return html -def bidDomains(bids, domains, sortbyDomains=False, outbids=[]): +def bidDomains(bids,domains, sortbyDomains=False, outbids=[]): html = '' - - # Create lookup dictionaries for O(1) lookups instead of O(n) searches - domain_lookup = {d['name']: d for d in domains} - bid_lookup = {} - for bid in bids: - if bid['name'] not in bid_lookup or bid['value'] > bid_lookup[bid['name']]['value']: - bid_lookup[bid['name']] = bid - if not sortbyDomains: - # Process by bids first for bid in bids: - domain_name = bid['name'] - if domain_name not in domain_lookup: - continue - - domain = domain_lookup[domain_name] - - lockup = bid['lockup'] - lockup = lockup / 1000000 - bidValue = bid['value'] / 1000000 - blind = lockup - bidValue + for domain in domains: + if bid['name'] == domain['name']: + lockup = bid['lockup'] + lockup = lockup / 1000000 + bidValue = bid['value'] / 1000000 + blind = lockup - bidValue - if blind > 0: - bidDisplay = f'{bidValue:,.2f} (+{blind:,.2f}) HNS' - else: - bidDisplay = f'{bidValue:,.2f} HNS' - - html += "" - - # Efficiently check if domain is in outbids list - is_outbid = domain_name in outbids - td_style = " style='background-color: red;'" if is_outbid else "" - - html += f"{renderDomain(domain_name)}" - html += f"{domain['state']}" - html += f"{bidDisplay}" - html += f"{bid['height']:,}" - html += "" + if blind > 0: + bidDisplay = f'{bidValue:,.2f} (+{blind:,.2f}) HNS' + else: + bidDisplay = f'{bidValue:,.2f} HNS' + + html += "" + if domain['name'] in outbids: + html += f"{renderDomain(domain['name'])}" + else: + html += f"{renderDomain(domain['name'])}" + html += f"{domain['state']}" + html += f"{bidDisplay}" + html += f"{bid['height']:,}" + html += "" else: - # Process by domains first (for state sorting) for domain in domains: - domain_name = domain['name'] - if domain_name not in bid_lookup: - continue - - bid = bid_lookup[domain_name] - - lockup = bid['lockup'] - lockup = lockup / 1000000 - bidValue = bid['value'] / 1000000 - blind = lockup - bidValue + for bid in bids: + if bid['name'] == domain['name']: + lockup = bid['lockup'] + lockup = lockup / 1000000 + bidValue = bid['value'] / 1000000 + blind = lockup - bidValue - if blind > 0: - bidDisplay = f'{bidValue:,.2f} (+{blind:,.2f}) HNS' - else: - bidDisplay = f'{bidValue:,.2f} HNS' - - html += "" - - # Efficiently check if domain is in outbids list - is_outbid = domain_name in outbids - td_style = " style='background-color: red;'" if is_outbid else "" - - html += f"{renderDomain(domain_name)}" - html += f"{domain['state']}" - html += f"{bidDisplay}" - html += f"{bid['height']:,}" - html += "" - + bidDisplay = f'{bidValue:,.2f} HNS + {blind:,.2f} HNS blind' + html += "" + html += f"{renderDomain(domain['name'])}" + html += f"{domain['state']}" + html += f"{bidDisplay}" + html += f"{bid['height']:,}" + html += "" return html