livestream: a standalone QR code for each track.
This commit is contained in:
parent
27e170d304
commit
f08d86c6df
4 changed files with 52 additions and 3 deletions
|
|
@ -10,7 +10,7 @@ from .crud import get_livestream, get_livestream_by_track, get_track
|
||||||
|
|
||||||
|
|
||||||
@livestream_ext.route("/lnurl/<ls_id>", methods=["GET"])
|
@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)
|
ls = await get_livestream(ls_id)
|
||||||
if not ls:
|
if not ls:
|
||||||
return jsonify({"status": "ERROR", "reason": "Livestream not found."})
|
return jsonify({"status": "ERROR", "reason": "Livestream not found."})
|
||||||
|
|
@ -34,6 +34,27 @@ async def lnurl_response(ls_id):
|
||||||
return jsonify(params)
|
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"])
|
@livestream_ext.route("/lnurl/cb/<track_id>", methods=["GET"])
|
||||||
async def lnurl_callback(track_id):
|
async def lnurl_callback(track_id):
|
||||||
track = await get_track(track_id)
|
track = await get_track(track_id)
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ class Livestream(NamedTuple):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def lnurl(self) -> Lnurl:
|
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)
|
return lnurl_encode(url)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -33,6 +33,11 @@ class Track(NamedTuple):
|
||||||
def max_sendable(self) -> int:
|
def max_sendable(self) -> int:
|
||||||
return max(50_000_000, self.price_msat * 5)
|
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:
|
async def fullname(self) -> str:
|
||||||
from .crud import get_producer
|
from .crud import get_producer
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -229,6 +229,26 @@
|
||||||
|
|
||||||
<q-dialog v-model="trackDialog.show">
|
<q-dialog v-model="trackDialog.show">
|
||||||
<q-card class="q-pa-lg q-pt-xl lnbits__dialog-card">
|
<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-card-section>
|
||||||
<q-form @submit="addTrack" class="q-gutter-md">
|
<q-form @submit="addTrack" class="q-gutter-md">
|
||||||
<q-select
|
<q-select
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,10 @@ async def api_livestream_from_wallet():
|
||||||
**ls._asdict(),
|
**ls._asdict(),
|
||||||
**{
|
**{
|
||||||
"lnurl": ls.lnurl,
|
"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],
|
"producers": [producer._asdict() for producer in producers],
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue