diff --git a/package.json b/package.json
index 527ab5ab..f88fd44f 100644
--- a/package.json
+++ b/package.json
@@ -39,6 +39,7 @@
"lastfmapi": "^0.1.1",
"mpris-service": "^2.1.2",
"music-metadata": "^7.11.4",
+ "qrcode": "^1.5.0",
"qrcode-terminal": "^0.12.0",
"react": "^17.0.2",
"react-dom": "^17.0.2",
diff --git a/src/main/base/win.ts b/src/main/base/win.ts
index 7c3094ee..d3a31a68 100644
--- a/src/main/base/win.ts
+++ b/src/main/base/win.ts
@@ -8,6 +8,7 @@ import * as yt from "youtube-search-without-api-key";
import * as fs from "fs";
import { Stream } from "stream";
import * as qrcode from "qrcode-terminal";
+import * as qrcode2 from "qrcode";
import * as os from "os";
import {wsapi} from "./wsapi";
@@ -400,6 +401,35 @@ export class Win {
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
* **********************************************************************************************/
diff --git a/src/renderer/index.js b/src/renderer/index.js
index ee23936f..de743f00 100644
--- a/src/renderer/index.js
+++ b/src/renderer/index.js
@@ -231,6 +231,7 @@ const app = new Vue({
loadingState: 0, // 0 loading, 1 loaded, 2 error
id: ""
},
+ webremoteqr: "",
mxmtoken: "",
mkIsReady: false,
playerReady: false,
@@ -291,7 +292,8 @@ const app = new Vue({
musicBaseUrl: "https://api.music.apple.com/",
modals: {
addToPlaylist: false,
- spatialProperties: false
+ spatialProperties: false,
+ qrcode: false
},
socialBadges: {
badgeMap: {},
@@ -3288,11 +3290,15 @@ const app = new Vue({
},
isElementOverflowing(selector) {
try{
- let element = document.querySelector(selector);
- var overflowX = element.offsetWidth < element.scrollWidth,
- overflowY = element.offsetHeight < element.scrollHeight;
+ let element = document.querySelector(selector);
+ var overflowX = element.offsetWidth < element.scrollWidth,
+ overflowY = element.offsetHeight < element.scrollHeight;
return (overflowX || overflowY); } catch (e) { return false}
+ },
+ async showWebRemoteQR(){
+ this.webremoteqr = await ipcRenderer.invoke('setRemoteQR','')
+ this.modals.qrcode = true;
}
}
diff --git a/src/renderer/style.less b/src/renderer/style.less
index 68372223..cc5860a2 100644
--- a/src/renderer/style.less
+++ b/src/renderer/style.less
@@ -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");
diff --git a/src/renderer/views/components/qrcode-modal.ejs b/src/renderer/views/components/qrcode-modal.ejs
new file mode 100644
index 00000000..84d366fa
--- /dev/null
+++ b/src/renderer/views/components/qrcode-modal.ejs
@@ -0,0 +1,34 @@
+
+
+
\ No newline at end of file
diff --git a/src/renderer/views/main.ejs b/src/renderer/views/main.ejs
index 5f63f93d..40650bf1 100644
--- a/src/renderer/views/main.ejs
+++ b/src/renderer/views/main.ejs
@@ -231,6 +231,13 @@