diff --git a/basicswap/basicswap.py b/basicswap/basicswap.py index 711b029..088c884 100644 --- a/basicswap/basicswap.py +++ b/basicswap/basicswap.py @@ -245,6 +245,7 @@ class BasicSwap(BaseApp): self.network_pubkey = self.settings['network_pubkey'] self.network_addr = pubkeyToAddress(chainparams[Coins.PART][self.chain]['pubkey_address'], bytes.fromhex(self.network_pubkey)) + self.db_echo = self.settings.get('db_echo', False) self.sqlite_file = os.path.join(self.data_dir, 'db{}.sqlite'.format('' if self.chain == 'mainnet' else ('_' + self.chain))) db_exists = os.path.exists(self.sqlite_file) @@ -257,7 +258,8 @@ class BasicSwap(BaseApp): close_all_sessions() Base.metadata.create_all(self.engine) self.engine.dispose() - self.engine = sa.create_engine('sqlite:///' + self.sqlite_file) + + self.engine = sa.create_engine('sqlite:///' + self.sqlite_file, echo=self.db_echo) self.session_factory = sessionmaker(bind=self.engine, expire_on_commit=False) session = scoped_session(self.session_factory) @@ -5392,10 +5394,13 @@ class BasicSwap(BaseApp): now = int(time.time()) session = scoped_session(self.session_factory) + subquery = session.query(sa.func.sum(Bid.amount).label('completed_bid_amount')).filter(sa.and_(Bid.offer_id == Offer.offer_id, Bid.state == BidStates.SWAP_COMPLETED)).correlate(Offer).scalar_subquery() + q = session.query(Offer, subquery) + if sent: - q = session.query(Offer).filter(Offer.was_sent == True) # noqa: E712 + q = q.filter(Offer.was_sent == True) # noqa: E712 else: - q = session.query(Offer).filter(sa.and_(Offer.expire_at > now, Offer.active_ind == 1)) + q = q.filter(sa.and_(Offer.expire_at > now, Offer.active_ind == 1)) filter_offer_id = filters.get('offer_id', None) if filter_offer_id is not None: @@ -5424,11 +5429,11 @@ class BasicSwap(BaseApp): for row in q: # Show offers for enabled coins only try: - ci_from = self.ci(row.coin_from) - ci_to = self.ci(row.coin_to) + ci_from = self.ci(row[0].coin_from) + ci_to = self.ci(row[0].coin_to) except Exception as e: continue - rv.append(row) + rv.append((row[0], 0 if row[1] is None else row[1])) return rv finally: session.close() diff --git a/basicswap/js_server.py b/basicswap/js_server.py index bdb3c42..08119c0 100644 --- a/basicswap/js_server.py +++ b/basicswap/js_server.py @@ -129,7 +129,8 @@ def js_offers(self, url_split, post_string, is_json, sent=False): offers = self.server.swap_client.listOffers(sent, filters) rv = [] - for o in offers: + for row in offers: + o, _ = row ci_from = self.server.swap_client.ci(o.coin_from) ci_to = self.server.swap_client.ci(o.coin_to) rv.append({ diff --git a/basicswap/templates/offer.html b/basicswap/templates/offer.html index 249e31d..90dd011 100644 --- a/basicswap/templates/offer.html +++ b/basicswap/templates/offer.html @@ -20,8 +20,9 @@ Amount From{{ data.amt_from }} {{ data.tla_from }} Amount To{{ data.amt_to }} {{ data.tla_to }} Rate{{ data.rate }} -Amount Variable{{ data.amount_negotiable }} -Rate Variable{{ data.rate_negotiable }} +Amount Swapped{{ data.amt_swapped }} {{ data.tla_from }} +Amount Variable{{ data.amount_negotiable }} +Rate Variable{{ data.rate_negotiable }} Script Lock Type{{ data.lock_type }} Script Lock Value{{ data.lock_value }} {{ data.lock_value_hr }} {% if data.addr_to == "Public" %} diff --git a/basicswap/templates/offers.html b/basicswap/templates/offers.html index f8c18f3..a4fda31 100644 --- a/basicswap/templates/offers.html +++ b/basicswap/templates/offers.html @@ -51,9 +51,9 @@ - + {% for o in offers %} - + {% endfor %}
AtFromRecipientOffer IDCoin FromCoin ToAmount FromAmount ToRate
AtFromRecipientOffer IDCoin FromCoin ToAmount FromAmount ToRateAmount From Swapped
{{ o[0] }}{{ o[8]|truncate(12, True) }}{% if o[9]==true %} Sent{% endif %}{{ o[7] }}{{ o[1] }}{{ o[2] }}{{ o[3] }}{{ o[4] }}{{ o[5] }}{{ o[6] }}
{{ o[0] }}{{ o[8]|truncate(12, True) }}{% if o[9]==true %} Sent{% endif %}{{ o[7] }}{{ o[1] }}{{ o[2] }}{{ o[3] }}{{ o[4] }}{{ o[5] }}{{ o[6] }}{{ o[10] }}
diff --git a/basicswap/ui/page_offers.py b/basicswap/ui/page_offers.py index 3b0537c..cec92d2 100644 --- a/basicswap/ui/page_offers.py +++ b/basicswap/ui/page_offers.py @@ -461,6 +461,12 @@ def page_offer(self, url_split, post_string): pass # None found bids = swap_client.listBids(offer_id=offer_id) + formatted_bids = [] + amt_swapped = 0 + for b in bids: + amt_swapped += b[4] + formatted_bids.append((b[2].hex(), ci_from.format_amount(b[4]), strBidState(b[5]), ci_to.format_amount(b[10]), b[11])) + data['amt_swapped'] = ci_from.format_amount(amt_swapped) template = server.env.get_template('offer.html') return bytes(template.render( @@ -470,7 +476,7 @@ def page_offer(self, url_split, post_string): sent_bid_id=sent_bid_id, messages=messages, data=data, - bids=[(b[2].hex(), ci_from.format_amount(b[4]), strBidState(b[5]), ci_to.format_amount(b[10]), b[11]) for b in bids], + bids=formatted_bids, addrs=None if show_bid_form is None else swap_client.listSmsgAddresses('bid'), form_id=os.urandom(8).hex(), ), 'UTF-8') @@ -517,7 +523,8 @@ def page_offers(self, url_split, post_string, sent=False): offers = swap_client.listOffers(sent, filters) formatted_offers = [] - for o in offers: + for row in offers: + o, completed_amount = row ci_from = swap_client.ci(Coins(o.coin_from)) ci_to = swap_client.ci(Coins(o.coin_to)) formatted_offers.append(( @@ -529,7 +536,8 @@ def page_offers(self, url_split, post_string, sent=False): ci_to.format_amount(o.rate), 'Public' if o.addr_to == swap_client.network_addr else o.addr_to, o.addr_from, - o.was_sent)) + o.was_sent, + ci_from.format_amount(completed_amount))) template = server.env.get_template('offers.html') return bytes(template.render(