mirror of
https://github.com/lnbits/lnbits.git
synced 2025-06-15 11:21:44 +02:00
Added shareable qr, broke jukebox creation
This commit is contained in:
parent
be234c349f
commit
bfdff79dd5
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "SpotifyJukebox",
|
"name": "SpotifyJukebox",
|
||||||
"short_description": "Spotify jukebox middleware",
|
"short_description": "Spotify jukebox middleware",
|
||||||
"icon": "audiotrack",
|
"icon": "radio",
|
||||||
"contributors": ["benarc"]
|
"contributors": ["benarc"]
|
||||||
}
|
}
|
||||||
|
@ -72,11 +72,24 @@ new Vue({
|
|||||||
show: false,
|
show: false,
|
||||||
data: {}
|
data: {}
|
||||||
},
|
},
|
||||||
spotifyDialog: false
|
spotifyDialog: false,
|
||||||
|
qrCodeDialog: {
|
||||||
|
show: false,
|
||||||
|
data: null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {},
|
computed: {},
|
||||||
methods: {
|
methods: {
|
||||||
|
openQrCodeDialog: function (linkId) {
|
||||||
|
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() {
|
getJukeboxes() {
|
||||||
self = this
|
self = this
|
||||||
LNbits.api
|
LNbits.api
|
||||||
@ -123,6 +136,7 @@ new Vue({
|
|||||||
self.jukeboxDialog.data.sp_device = []
|
self.jukeboxDialog.data.sp_device = []
|
||||||
self.jukeboxDialog.data.sp_playlists = []
|
self.jukeboxDialog.data.sp_playlists = []
|
||||||
self.jukeboxDialog.data.sp_id = self.jukeboxDialog.data.id
|
self.jukeboxDialog.data.sp_id = self.jukeboxDialog.data.id
|
||||||
|
self.jukeboxDialog.data.price = String(self.jukeboxDialog.data.price)
|
||||||
self.jukeboxDialog.show = true
|
self.jukeboxDialog.show = true
|
||||||
},
|
},
|
||||||
closeFormDialog() {
|
closeFormDialog() {
|
||||||
@ -210,18 +224,24 @@ new Vue({
|
|||||||
},
|
},
|
||||||
createJukebox() {
|
createJukebox() {
|
||||||
self = this
|
self = this
|
||||||
console.log(this.jukeboxDialog.data)
|
self.jukeboxDialog.data.sp_playlists = self.jukeboxDialog.data.sp_playlists.join()
|
||||||
this.jukeboxDialog.data.sp_playlists = this.jukeboxDialog.data.sp_playlists.join()
|
self.updateDB()
|
||||||
|
self.jukeboxDialog.show = false
|
||||||
|
},
|
||||||
|
updateDB(){
|
||||||
|
self = this
|
||||||
|
console.log(self.jukeboxDialog.data)
|
||||||
LNbits.api
|
LNbits.api
|
||||||
.request(
|
.request(
|
||||||
'PUT',
|
'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.g.user.wallets[0].adminkey,
|
||||||
self.jukeboxDialog.data
|
self.jukeboxDialog.data
|
||||||
)
|
)
|
||||||
.then(function (response) {
|
.then(function (response) {
|
||||||
self.JukeboxLinks.push(mapJukebox(response.data))
|
console.log(response.data)
|
||||||
self.jukeboxDialog.show = false
|
self.getJukeboxes()
|
||||||
|
//self.JukeboxLinks.push(mapJukebox(response.data))
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
playlistApi(method, url, body) {
|
playlistApi(method, url, body) {
|
||||||
@ -235,6 +255,10 @@ new Vue({
|
|||||||
)
|
)
|
||||||
xhr.send(body)
|
xhr.send(body)
|
||||||
xhr.onload = function () {
|
xhr.onload = function () {
|
||||||
|
if(xhr.status == 401){
|
||||||
|
self.refreshAccessToken()
|
||||||
|
self.playlistApi('GET', 'https://api.spotify.com/v1/me/playlists', null)
|
||||||
|
}
|
||||||
let responseObj = JSON.parse(xhr.response)
|
let responseObj = JSON.parse(xhr.response)
|
||||||
self.jukeboxDialog.data.playlists = null
|
self.jukeboxDialog.data.playlists = null
|
||||||
self.playlists = []
|
self.playlists = []
|
||||||
@ -262,6 +286,10 @@ new Vue({
|
|||||||
)
|
)
|
||||||
xhr.send(body)
|
xhr.send(body)
|
||||||
xhr.onload = function () {
|
xhr.onload = function () {
|
||||||
|
if(xhr.status == 401){
|
||||||
|
self.refreshAccessToken()
|
||||||
|
self.deviceApi('GET', 'https://api.spotify.com/v1/me/player/devices', null)
|
||||||
|
}
|
||||||
let responseObj = JSON.parse(xhr.response)
|
let responseObj = JSON.parse(xhr.response)
|
||||||
self.jukeboxDialog.data.devices = []
|
self.jukeboxDialog.data.devices = []
|
||||||
|
|
||||||
@ -319,7 +347,7 @@ new Vue({
|
|||||||
if (responseObj.access_token) {
|
if (responseObj.access_token) {
|
||||||
self.jukeboxDialog.data.sp_access_token = responseObj.access_token
|
self.jukeboxDialog.data.sp_access_token = responseObj.access_token
|
||||||
self.jukeboxDialog.data.sp_refresh_token = responseObj.refresh_token
|
self.jukeboxDialog.data.sp_refresh_token = responseObj.refresh_token
|
||||||
console.log(responseObj)
|
self.updateDB()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
19
lnbits/extensions/jukebox/static/js/jukebox.js
Normal file
19
lnbits/extensions/jukebox/static/js/jukebox.js
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/* globals Quasar, Vue, _, VueQrcode, windowMixin, LNbits, LOCALE */
|
||||||
|
|
||||||
|
Vue.component(VueQrcode.name, VueQrcode)
|
||||||
|
|
||||||
|
new Vue({
|
||||||
|
el: '#vue',
|
||||||
|
mixins: [windowMixin],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {},
|
||||||
|
methods: {
|
||||||
|
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
@ -48,13 +48,11 @@
|
|||||||
unelevated
|
unelevated
|
||||||
dense
|
dense
|
||||||
size="xs"
|
size="xs"
|
||||||
icon="link"
|
icon="launch"
|
||||||
:color="($q.dark.isActive) ? 'grey-7' : 'grey-5'"
|
:color="($q.dark.isActive) ? 'grey-7' : 'grey-5'"
|
||||||
type="a"
|
@click="openQrCodeDialog(props.row.sp_id)"
|
||||||
:href="props.row.displayUrl"
|
|
||||||
target="_blank"
|
|
||||||
>
|
>
|
||||||
<q-tooltip> Jukebox link </q-tooltip>
|
<q-tooltip> Jukebox QR </q-tooltip>
|
||||||
</q-btn>
|
</q-btn>
|
||||||
</q-td>
|
</q-td>
|
||||||
<q-td auto-width>
|
<q-td auto-width>
|
||||||
@ -308,6 +306,36 @@
|
|||||||
</q-stepper>
|
</q-stepper>
|
||||||
</q-card>
|
</q-card>
|
||||||
</q-dialog>
|
</q-dialog>
|
||||||
|
|
||||||
|
<q-dialog v-model="qrCodeDialog.show" position="top">
|
||||||
|
<q-card v-if="qrCodeDialog.data" class="q-pa-lg lnbits__dialog-card">
|
||||||
|
<center><h5 class="q-my-none">Shareable Jukebox QR</h5></center>
|
||||||
|
<q-responsive :ratio="1" class="q-mx-xl q-mb-md">
|
||||||
|
<qrcode
|
||||||
|
:value="qrCodeDialog.data.url + '/jukebox/' + qrCodeDialog.data.id"
|
||||||
|
:options="{width: 800}"
|
||||||
|
class="rounded-borders"
|
||||||
|
></qrcode>
|
||||||
|
</q-responsive>
|
||||||
|
<div class="row q-mt-lg q-gutter-sm">
|
||||||
|
<q-btn
|
||||||
|
outline
|
||||||
|
color="grey"
|
||||||
|
@click="copyText(qrCodeDialog.data.url + '/jukebox/' + qrCodeDialog.data.id, 'Link copied to clipboard!')"
|
||||||
|
>Copy jukebox link</q-btn
|
||||||
|
>
|
||||||
|
<q-btn
|
||||||
|
outline
|
||||||
|
color="grey"
|
||||||
|
type="a"
|
||||||
|
:href="qrCodeDialog.data.url + '/jukebox/' + qrCodeDialog.data.id"
|
||||||
|
target="_blank"
|
||||||
|
>Open jukebox</q-btn
|
||||||
|
>
|
||||||
|
<q-btn v-close-popup flat color="grey" class="q-ml-auto">Close</q-btn>
|
||||||
|
</div>
|
||||||
|
</q-card>
|
||||||
|
</q-dialog>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %} {% block scripts %} {{ window_vars(user) }}
|
{% endblock %} {% block scripts %} {{ window_vars(user) }}
|
||||||
<script src="https://cdn.jsdelivr.net/npm/pica@6.1.1/dist/pica.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/pica@6.1.1/dist/pica.min.js"></script>
|
||||||
|
@ -102,3 +102,15 @@ async def api_delete_item(juke_id):
|
|||||||
)
|
)
|
||||||
except:
|
except:
|
||||||
return "", HTTPStatus.NO_CONTENT
|
return "", HTTPStatus.NO_CONTENT
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
################JUKEBOX ENDPOINTS##################
|
||||||
|
|
||||||
|
|
||||||
|
@jukebox_ext.route("/api/v1/jukebox/jb/<sp_id>", methods=["GET"])
|
||||||
|
async def api_get_jukebox_songs(sp_id):
|
||||||
|
jukebox = await get_jukebox(sp_id)
|
||||||
|
print(jukebox.playlists.split(",")[0].split("-")[1])
|
||||||
|
|
||||||
|
return jsonify(jukebox._asdict()), HTTPStatus.CREATED
|
Loading…
x
Reference in New Issue
Block a user