qrcode
This commit is contained in:
parent
0cd8293472
commit
e1f9b966da
6 changed files with 97 additions and 5 deletions
|
@ -39,6 +39,7 @@
|
||||||
"lastfmapi": "^0.1.1",
|
"lastfmapi": "^0.1.1",
|
||||||
"mpris-service": "^2.1.2",
|
"mpris-service": "^2.1.2",
|
||||||
"music-metadata": "^7.11.4",
|
"music-metadata": "^7.11.4",
|
||||||
|
"qrcode": "^1.5.0",
|
||||||
"qrcode-terminal": "^0.12.0",
|
"qrcode-terminal": "^0.12.0",
|
||||||
"react": "^17.0.2",
|
"react": "^17.0.2",
|
||||||
"react-dom": "^17.0.2",
|
"react-dom": "^17.0.2",
|
||||||
|
|
|
@ -8,6 +8,7 @@ import * as yt from "youtube-search-without-api-key";
|
||||||
import * as fs from "fs";
|
import * as fs from "fs";
|
||||||
import { Stream } from "stream";
|
import { Stream } from "stream";
|
||||||
import * as qrcode from "qrcode-terminal";
|
import * as qrcode from "qrcode-terminal";
|
||||||
|
import * as qrcode2 from "qrcode";
|
||||||
import * as os from "os";
|
import * as os from "os";
|
||||||
import {wsapi} from "./wsapi";
|
import {wsapi} from "./wsapi";
|
||||||
|
|
||||||
|
@ -400,6 +401,35 @@ export class Win {
|
||||||
this.win.setFullScreen(flag)
|
this.win.setFullScreen(flag)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
function getIp() {
|
||||||
|
let ip = false;
|
||||||
|
let alias = 0;
|
||||||
|
let ifaces = os.networkInterfaces();
|
||||||
|
for (var dev in ifaces) {
|
||||||
|
ifaces[dev].forEach(details => {
|
||||||
|
if (details.family === 'IPv4') {
|
||||||
|
if (!/(loopback|vmware|internal|hamachi|vboxnet|virtualbox)/gi.test(dev + (alias ? ':' + alias : ''))) {
|
||||||
|
if (details.address.substring(0, 8) === '192.168.' ||
|
||||||
|
details.address.substring(0, 7) === '172.16.' ||
|
||||||
|
details.address.substring(0, 3) === '10.'
|
||||||
|
) {
|
||||||
|
ip = details.address;
|
||||||
|
++alias;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return ip;
|
||||||
|
}
|
||||||
|
|
||||||
|
//QR Code
|
||||||
|
electron.ipcMain.handle('setRemoteQR', async (event , _) => {
|
||||||
|
let url = await qrcode2.toDataURL(`http://${getIp()}:${this.remotePort}`)
|
||||||
|
console.log(url)
|
||||||
|
return url;
|
||||||
|
})
|
||||||
|
|
||||||
/* *********************************************************************************************
|
/* *********************************************************************************************
|
||||||
* Window Events
|
* Window Events
|
||||||
* **********************************************************************************************/
|
* **********************************************************************************************/
|
||||||
|
|
|
@ -231,6 +231,7 @@ const app = new Vue({
|
||||||
loadingState: 0, // 0 loading, 1 loaded, 2 error
|
loadingState: 0, // 0 loading, 1 loaded, 2 error
|
||||||
id: ""
|
id: ""
|
||||||
},
|
},
|
||||||
|
webremoteqr: "",
|
||||||
mxmtoken: "",
|
mxmtoken: "",
|
||||||
mkIsReady: false,
|
mkIsReady: false,
|
||||||
playerReady: false,
|
playerReady: false,
|
||||||
|
@ -291,7 +292,8 @@ const app = new Vue({
|
||||||
musicBaseUrl: "https://api.music.apple.com/",
|
musicBaseUrl: "https://api.music.apple.com/",
|
||||||
modals: {
|
modals: {
|
||||||
addToPlaylist: false,
|
addToPlaylist: false,
|
||||||
spatialProperties: false
|
spatialProperties: false,
|
||||||
|
qrcode: false
|
||||||
},
|
},
|
||||||
socialBadges: {
|
socialBadges: {
|
||||||
badgeMap: {},
|
badgeMap: {},
|
||||||
|
@ -3288,11 +3290,15 @@ const app = new Vue({
|
||||||
},
|
},
|
||||||
isElementOverflowing(selector) {
|
isElementOverflowing(selector) {
|
||||||
try{
|
try{
|
||||||
let element = document.querySelector(selector);
|
let element = document.querySelector(selector);
|
||||||
var overflowX = element.offsetWidth < element.scrollWidth,
|
var overflowX = element.offsetWidth < element.scrollWidth,
|
||||||
overflowY = element.offsetHeight < element.scrollHeight;
|
overflowY = element.offsetHeight < element.scrollHeight;
|
||||||
|
|
||||||
return (overflowX || overflowY); } catch (e) { return false}
|
return (overflowX || overflowY); } catch (e) { return false}
|
||||||
|
},
|
||||||
|
async showWebRemoteQR(){
|
||||||
|
this.webremoteqr = await ipcRenderer.invoke('setRemoteQR','')
|
||||||
|
this.modals.qrcode = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -5160,4 +5160,12 @@ body.no-gpu {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.qrimg {
|
||||||
|
width: -webkit-fill-available;
|
||||||
|
max-block-size: -webkit-fill-available;
|
||||||
|
object-fit: contain;
|
||||||
|
overflow-x: hidden;
|
||||||
|
overflow-y: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
@import url("less/compact.less");
|
@import url("less/compact.less");
|
||||||
|
|
34
src/renderer/views/components/qrcode-modal.ejs
Normal file
34
src/renderer/views/components/qrcode-modal.ejs
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
<script type="text/x-template" id="qrcode-modal">
|
||||||
|
<div class="modal-fullscreen spatialproperties-panel">
|
||||||
|
<div class="modal-window" >
|
||||||
|
<div class="modal-header">
|
||||||
|
<div class="modal-title">Web Remote QR</div>
|
||||||
|
<button class="close-btn" @click="close()"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-content">
|
||||||
|
<img class="qrimg" :src="src"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
Vue.component('qrcode-modal', {
|
||||||
|
template: '#qrcode-modal',
|
||||||
|
data: function () {
|
||||||
|
return {
|
||||||
|
app: this.$root,
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
props: ["src"],
|
||||||
|
mounted() {
|
||||||
|
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
close() {
|
||||||
|
app.resetState()
|
||||||
|
},
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -231,6 +231,13 @@
|
||||||
<transition name="wpfade">
|
<transition name="wpfade">
|
||||||
<div class="usermenu-container" v-if="chrome.menuOpened">
|
<div class="usermenu-container" v-if="chrome.menuOpened">
|
||||||
<div class="usermenu-body">
|
<div class="usermenu-body">
|
||||||
|
<button class="usermenu-item" @click="showWebRemoteQR()">
|
||||||
|
<div class="row nopadding">
|
||||||
|
<div class="col nopadding">
|
||||||
|
Show Web Remote QR
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</button>
|
||||||
<button class="usermenu-item" @click="toggleHideUserInfo()">
|
<button class="usermenu-item" @click="toggleHideUserInfo()">
|
||||||
<div class="row nopadding">
|
<div class="row nopadding">
|
||||||
<div class="col nopadding">
|
<div class="col nopadding">
|
||||||
|
@ -601,6 +608,9 @@
|
||||||
<transition name="modal">
|
<transition name="modal">
|
||||||
<spatial-properties v-if="modals.spatialProperties"></spatial-properties>
|
<spatial-properties v-if="modals.spatialProperties"></spatial-properties>
|
||||||
</transition>
|
</transition>
|
||||||
|
<transition name="modal">
|
||||||
|
<qrcode-modal v-if="modals.qrcode" :src="webremoteqr"></qrcode-modal>
|
||||||
|
</transition>
|
||||||
<div id="apple-music-video-container">
|
<div id="apple-music-video-container">
|
||||||
<div id="apple-music-video-player-controls">
|
<div id="apple-music-video-player-controls">
|
||||||
<div id="player-exit" title="Close" @click="exitMV()">
|
<div id="player-exit" title="Close" @click="exitMV()">
|
||||||
|
@ -704,7 +714,10 @@
|
||||||
<%- include('components/sidebar-playlist')
|
<%- include('components/sidebar-playlist')
|
||||||
%>
|
%>
|
||||||
<!-- Spatial Properties -->
|
<!-- Spatial Properties -->
|
||||||
<%- include('components/spatial-properties')
|
<%- include('components/spatial-properties')
|
||||||
|
%>
|
||||||
|
<!-- QRCode Modal -->
|
||||||
|
<%- include('components/qrcode-modal')
|
||||||
%>
|
%>
|
||||||
<!-- Add to playlist -->
|
<!-- Add to playlist -->
|
||||||
<%- include('components/add-to-playlist')
|
<%- include('components/add-to-playlist')
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue