mirror of
https://github.com/lnbits/lnbits.git
synced 2025-09-28 04:46:18 +02:00
livestream: a standalone QR code for each track.
This commit is contained in:
@@ -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)
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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],
|
||||
},
|
||||
}
|
||||
|
Reference in New Issue
Block a user