livestream: a standalone QR code for each track.

This commit is contained in:
fiatjaf
2021-04-17 00:15:03 -03:00
parent 27e170d304
commit f08d86c6df
4 changed files with 52 additions and 3 deletions

View File

@@ -10,7 +10,7 @@ from .crud import get_livestream, get_livestream_by_track, get_track
@livestream_ext.route("/lnurl/<ls_id>", methods=["GET"])
async def lnurl_response(ls_id):
async def lnurl_livestream(ls_id):
ls = await get_livestream(ls_id)
if not ls:
return jsonify({"status": "ERROR", "reason": "Livestream not found."})
@@ -34,6 +34,27 @@ async def lnurl_response(ls_id):
return jsonify(params)
@livestream_ext.route("/lnurl/t/<track_id>", methods=["GET"])
async def lnurl_track(track_id):
track = await get_track(track_id)
if not track:
return jsonify({"status": "ERROR", "reason": "Track not found."})
resp = LnurlPayResponse(
callback=url_for(
"livestream.lnurl_callback", track_id=track.id, _external=True
),
min_sendable=track.min_sendable,
max_sendable=track.max_sendable,
metadata=await track.lnurlpay_metadata(),
)
params = resp.dict()
params["commentAllowed"] = 300
return jsonify(params)
@livestream_ext.route("/lnurl/cb/<track_id>", methods=["GET"])
async def lnurl_callback(track_id):
track = await get_track(track_id)

View File

@@ -14,7 +14,7 @@ class Livestream(NamedTuple):
@property
def lnurl(self) -> Lnurl:
url = url_for("livestream.lnurl_response", ls_id=self.id, _external=True)
url = url_for("livestream.lnurl_livestream", ls_id=self.id, _external=True)
return lnurl_encode(url)
@@ -33,6 +33,11 @@ class Track(NamedTuple):
def max_sendable(self) -> int:
return max(50_000_000, self.price_msat * 5)
@property
def lnurl(self) -> Lnurl:
url = url_for("livestream.lnurl_track", track_id=self.id, _external=True)
return lnurl_encode(url)
async def fullname(self) -> str:
from .crud import get_producer

View File

@@ -229,6 +229,26 @@
<q-dialog v-model="trackDialog.show">
<q-card class="q-pa-lg q-pt-xl lnbits__dialog-card">
<q-card-section v-if="trackDialog.data.lnurl" class="q-pa-none text-center">
<p class="text-subtitle1 q-my-none">Standalone QR Code for this track</p>
<a :href="'lightning:' + trackDialog.data.lnurl">
<q-responsive :ratio="1" class="q-mx-sm">
<qrcode
:value="trackDialog.data.lnurl"
:options="{width: 800}"
class="rounded-borders"
></qrcode>
</q-responsive>
</a>
<q-btn
outline
color="grey"
@click="copyText(trackDialog.data.lnurl)"
class="text-center q-mb-md"
>Copy LNURL-pay code</q-btn
>
</q-card-section>
<q-card-section>
<q-form @submit="addTrack" class="q-gutter-md">
<q-select

View File

@@ -32,7 +32,10 @@ async def api_livestream_from_wallet():
**ls._asdict(),
**{
"lnurl": ls.lnurl,
"tracks": [track._asdict() for track in tracks],
"tracks": [
dict(lnurl=track.lnurl, **track._asdict())
for track in tracks
],
"producers": [producer._asdict() for producer in producers],
},
}