diff --git a/lnbits/extensions/jukebox/crud.py b/lnbits/extensions/jukebox/crud.py index 4e3ba2f1..f7a726a3 100644 --- a/lnbits/extensions/jukebox/crud.py +++ b/lnbits/extensions/jukebox/crud.py @@ -1,22 +1,13 @@ from typing import List, Optional from . import db -from .models import Jukebox, JukeboxPayment +from .models import Jukebox, JukeboxPayment, CreateJukeLinkData from lnbits.helpers import urlsafe_short_hash async def create_jukebox( - inkey: str, - user: str, - wallet: str, - title: str, - price: int, - sp_user: str, - sp_secret: str, - sp_access_token: Optional[str] = "", - sp_refresh_token: Optional[str] = "", - sp_device: Optional[str] = "", - sp_playlists: Optional[str] = "", + data: CreateJukeLinkData, + inkey: Optional[str] = "", ) -> Jukebox: juke_id = urlsafe_short_hash() result = await db.execute( @@ -26,16 +17,16 @@ async def create_jukebox( """, ( juke_id, - user, - title, - wallet, - sp_user, - sp_secret, - sp_access_token, - sp_refresh_token, - sp_device, - sp_playlists, - int(price), + data.user, + data.title, + data.wallet, + data.sp_user, + data.sp_secret, + data.sp_access_token, + data.sp_refresh_token, + data.sp_device, + data.sp_playlists, + data.price, 0, ), ) @@ -44,11 +35,15 @@ async def create_jukebox( return jukebox -async def update_jukebox(juke_id: str, **kwargs) -> Optional[Jukebox]: - q = ", ".join([f"{field[0]} = ?" for field in kwargs.items()]) - await db.execute( - f"UPDATE jukebox.jukebox SET {q} WHERE id = ?", (*kwargs.values(), juke_id) - ) +async def update_jukebox( + data: CreateJukeLinkData, juke_id: Optional[str] = "" +) -> Optional[Jukebox]: + q = ", ".join([f"{field[0]} = ?" for field in data]) + items = [f"{field[1]}" for field in data] + items.append(juke_id) + print(q) + print(items) + await db.execute(f"UPDATE jukebox.jukebox SET {q} WHERE id = ?", (items)) row = await db.fetchone("SELECT * FROM jukebox.jukebox WHERE id = ?", (juke_id,)) return Jukebox(**row) if row else None @@ -66,10 +61,13 @@ async def get_jukebox_by_user(user: str) -> Optional[Jukebox]: async def get_jukeboxs(user: str) -> List[Jukebox]: rows = await db.fetchall("SELECT * FROM jukebox.jukebox WHERE user = ?", (user,)) for row in rows: - if row.sp_playlists == "": + + if row.sp_playlists == None: + print("cunt") await delete_jukebox(row.id) rows = await db.fetchall("SELECT * FROM jukebox.jukebox WHERE user = ?", (user,)) - return [Jukebox.from_row(row) for row in rows] + + return [Jukebox(**row) for row in rows] async def delete_jukebox(juke_id: str): diff --git a/lnbits/extensions/jukebox/models.py b/lnbits/extensions/jukebox/models.py index 8752ae85..6cb49a5e 100644 --- a/lnbits/extensions/jukebox/models.py +++ b/lnbits/extensions/jukebox/models.py @@ -2,6 +2,8 @@ from typing import NamedTuple from sqlite3 import Row from fastapi.param_functions import Query from pydantic.main import BaseModel +from pydantic import BaseModel +from typing import Optional class CreateJukeLinkData(BaseModel): @@ -17,32 +19,24 @@ class CreateJukeLinkData(BaseModel): price: str = Query(None) -class Jukebox(NamedTuple): - id: str - user: str - title: str - wallet: str - inkey: str - sp_user: str - sp_secret: str - sp_access_token: str - sp_refresh_token: str - sp_device: str - sp_playlists: str - price: int - profit: int - - @classmethod - def from_row(cls, row: Row) -> "Jukebox": - return cls(**dict(row)) +class Jukebox(BaseModel): + id: Optional[str] + user: Optional[str] + title: Optional[str] + wallet: Optional[str] + inkey: Optional[str] + sp_user: Optional[str] + sp_secret: Optional[str] + sp_access_token: Optional[str] + sp_refresh_token: Optional[str] + sp_device: Optional[str] + sp_playlists: Optional[str] + price: Optional[int] + profit: Optional[int] -class JukeboxPayment(NamedTuple): +class JukeboxPayment(BaseModel): payment_hash: str juke_id: str song_id: str paid: bool - - @classmethod - def from_row(cls, row: Row) -> "JukeboxPayment": - return cls(**dict(row)) diff --git a/lnbits/extensions/jukebox/static/js/index.js b/lnbits/extensions/jukebox/static/js/index.js index fc382d71..049b600e 100644 --- a/lnbits/extensions/jukebox/static/js/index.js +++ b/lnbits/extensions/jukebox/static/js/index.js @@ -3,17 +3,25 @@ Vue.component(VueQrcode.name, VueQrcode) var mapJukebox = obj => { - obj._data = _.clone(obj) - obj.sp_id = obj.id - obj.device = obj.sp_device.split('-')[0] - playlists = obj.sp_playlists.split(',') - var i - playlistsar = [] - for (i = 0; i < playlists.length; i++) { - playlistsar.push(playlists[i].split('-')[0]) + if(obj.sp_device){ + obj._data = _.clone(obj) + + obj.sp_id = obj._data.id + obj.device = obj._data.sp_device.split('-')[0] + playlists = obj._data.sp_playlists.split(',') + var i + playlistsar = [] + for (i = 0; i < playlists.length; i++) { + playlistsar.push(playlists[i].split('-')[0]) + } + obj.playlist = playlistsar.join() + console.log(obj) + return obj } - obj.playlist = playlistsar.join() - return obj + else { + return + } + } new Vue({ @@ -79,13 +87,14 @@ new Vue({ var link = _.findWhere(this.JukeboxLinks, {id: linkId}) this.qrCodeDialog.data = _.clone(link) - console.log(this.qrCodeDialog.data) + this.qrCodeDialog.data.url = window.location.protocol + '//' + window.location.host this.qrCodeDialog.show = true }, getJukeboxes() { self = this + LNbits.api .request( 'GET', @@ -93,10 +102,11 @@ new Vue({ self.g.user.wallets[0].adminkey ) .then(function (response) { - self.JukeboxLinks = response.data.map(mapJukebox) - }) - .catch(err => { - LNbits.utils.notifyApiError(err) + self.JukeboxLinks = response.data.map(function (obj) { + + return mapJukebox(obj) + }) + console.log(self.JukeboxLinks) }) }, deleteJukebox(juke_id) { @@ -125,7 +135,6 @@ new Vue({ self = this var link = _.findWhere(self.JukeboxLinks, {id: linkId}) self.jukeboxDialog.data = _.clone(link._data) - console.log(this.jukeboxDialog.data.sp_access_token) self.refreshDevices() self.refreshPlaylists() @@ -145,7 +154,7 @@ new Vue({ submitSpotifyKeys() { self = this self.jukeboxDialog.data.user = self.g.user.id - + LNbits.api .request( 'POST', @@ -193,9 +202,6 @@ new Vue({ if (self.jukeboxDialog.data.sp_access_token) { self.refreshPlaylists() self.refreshDevices() - console.log('this.devices') - console.log(self.devices) - console.log('this.devices') setTimeout(function () { if (self.devices.length < 1 || self.playlists.length < 1) { self.$q.notify({ @@ -259,16 +265,14 @@ new Vue({ }, updateDB() { self = this - console.log(self.jukeboxDialog.data) LNbits.api .request( 'PUT', - '/jukebox/api/v1/jukebox/' + this.jukeboxDialog.data.sp_id, + '/jukebox/api/v1/jukebox/' + self.jukeboxDialog.data.sp_id, self.g.user.wallets[0].adminkey, self.jukeboxDialog.data ) .then(function (response) { - console.log(response.data) if ( self.jukeboxDialog.data.sp_playlists && self.jukeboxDialog.data.sp_devices @@ -307,7 +311,6 @@ new Vue({ responseObj.items[i].name + '-' + responseObj.items[i].id ) } - console.log(self.playlists) } }, refreshPlaylists() { @@ -372,13 +375,6 @@ new Vue({ }, callAuthorizationApi(body) { self = this - console.log( - btoa( - self.jukeboxDialog.data.sp_user + - ':' + - self.jukeboxDialog.data.sp_secret - ) - ) let xhr = new XMLHttpRequest() xhr.open('POST', 'https://accounts.spotify.com/api/token', true) xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded') @@ -403,7 +399,6 @@ new Vue({ } }, created() { - console.log(this.g.user.wallets[0]) var getJukeboxes = this.getJukeboxes getJukeboxes() this.selectedWallet = this.g.user.wallets[0] diff --git a/lnbits/extensions/jukebox/static/js/jukebox.js b/lnbits/extensions/jukebox/static/js/jukebox.js deleted file mode 100644 index ddbb2764..00000000 --- a/lnbits/extensions/jukebox/static/js/jukebox.js +++ /dev/null @@ -1,14 +0,0 @@ -/* globals Quasar, Vue, _, VueQrcode, windowMixin, LNbits, LOCALE */ - -Vue.component(VueQrcode.name, VueQrcode) - -new Vue({ - el: '#vue', - mixins: [windowMixin], - data() { - return {} - }, - computed: {}, - methods: {}, - created() {} -}) diff --git a/lnbits/extensions/jukebox/templates/jukebox/jukebox.html b/lnbits/extensions/jukebox/templates/jukebox/jukebox.html index cb3ab49d..6a49f7c4 100644 --- a/lnbits/extensions/jukebox/templates/jukebox/jukebox.html +++ b/lnbits/extensions/jukebox/templates/jukebox/jukebox.html @@ -1,4 +1,4 @@ -{% extends "public.html" %} {% block page %} {% raw %} +{% extends "public.html" %} {% block page %}
@@ -9,10 +9,12 @@
+ {% raw %} {{ currentPlay.name }}
{{ currentPlay.artist }}
+ {% endraw %}
@@ -46,7 +48,7 @@ > - {{ item.name }} - ({{ item.artist }}) + {% raw %} {{ item.name }} - ({{ item.artist }}){% endraw %} @@ -54,49 +56,48 @@ - - - - -
-
- -
-
- {{ receive.name }}
- {{ receive.artist }} + + + +
+
+ +
+
+ {% raw %} + {{ receive.name }}
+ {{ receive.artist }} +
+
+
+
+ Play for {% endraw %}{{ price }}sats +
- -
-
- Play for {% endraw %}{{ price }}{% raw %} sats - -
-
-
- - - - - -
- Copy invoice -
-
-
+ + + + + + + +
+ Copy invoice +
+
+
+
-{% endraw %} {% endblock %} {% block scripts %} - - +{% endblock %} {% block scripts %}