From 3e728848d79d630d0a6a6b268ea6ad0bd5ef4a9a Mon Sep 17 00:00:00 2001 From: vapormusic Date: Fri, 29 Apr 2022 16:28:12 +0700 Subject: [PATCH 1/8] uptest --- package.json | 2 +- src/main/base/browserwindow.ts | 1 + src/main/plugins/raop.ts | 12 ++++++ src/renderer/less/helpers.less | 3 +- src/renderer/main/vueapp.js | 7 ++++ src/renderer/views/app/panels.ejs | 3 ++ .../views/components/airplay-modal.ejs | 42 +++++++++++++++++++ 7 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 src/renderer/views/components/airplay-modal.ejs diff --git a/package.json b/package.json index 70e22263..6cad8ece 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "@sentry/electron": "^3.0.7", "@sentry/integrations": "^6.19.6", "adm-zip": "0.4.10", - "airtunes2": "git+https://github.com/vapormusic/node_airtunes2.git", + "airtunes2": "git+https://github.com/vapormusic/node_airtunes2.git#hap", "castv2-client": "^1.2.0", "chokidar": "^3.5.3", "discord-rpc": "^4.0.1", diff --git a/src/main/base/browserwindow.ts b/src/main/base/browserwindow.ts index afb38607..56d847be 100644 --- a/src/main/base/browserwindow.ts +++ b/src/main/base/browserwindow.ts @@ -95,6 +95,7 @@ export class BrowserWindow { "components/fullscreen", "components/miniplayer", "components/castmenu", + "components/airplay-modal", "components/artist-chip", "components/hello-world", "components/inline-collection-list", diff --git a/src/main/plugins/raop.ts b/src/main/plugins/raop.ts index e6908375..ba8e8395 100644 --- a/src/main/plugins/raop.ts +++ b/src/main/plugins/raop.ts @@ -178,6 +178,12 @@ export default class RAOP { this._win.webContents.setAudioMuted(true); this._win.webContents.executeJavaScript(`CiderAudio.sendAudio()`).catch((err: any) => console.error(err)); } + if (status == "need_password"){ + this._win.webContents.executeJavaScript(`app.setAirPlayCodeUI()`) + } + if (status == "pair_success"){ + this._win.webContents.executeJavaScript(`app.sendAirPlaySuccess()`) + } if (status == 'stopped') { this.airtunes.stopAll(() => { console.log('end'); @@ -210,6 +216,12 @@ export default class RAOP { }); + electron.ipcMain.on('setAirPlayPasscode', (event, passcode) => { + if (this.device){ + this.device.setPasscode(passcode) + } + }) + electron.ipcMain.on('writeWAV', (event, leftbuffer, rightbuffer) => { if (this.airtunes != null) { if (this.worker == null) { diff --git a/src/renderer/less/helpers.less b/src/renderer/less/helpers.less index db659232..245cce92 100644 --- a/src/renderer/less/helpers.less +++ b/src/renderer/less/helpers.less @@ -70,10 +70,11 @@ .spatialproperties-panel { .modal-window { + &:not(.airplay-modal){ height : 700px; max-height: 700px; width : 800px; - max-width : 800px; + max-width : 800px;} overflow : hidden; .info-header { diff --git a/src/renderer/main/vueapp.js b/src/renderer/main/vueapp.js index bcc7dfce..e40ee7a7 100644 --- a/src/renderer/main/vueapp.js +++ b/src/renderer/main/vueapp.js @@ -207,6 +207,7 @@ const app = new Vue({ showPlaylist: false, castMenu: false, moreInfo: false, + airplayPW: false, }, socialBadges: { badgeMap: {}, @@ -3836,6 +3837,12 @@ const app = new Vue({ // tracks are found in relationship.data }, + setAirPlayCodeUI() { + this.modals.airplayPW = true + }, + sendAirPlaySuccess(){ + notyf.success('Device paired successfully!'); + }, windowFocus(val) { if (val) { document.querySelectorAll(".animated-artwork-video").forEach(el => { diff --git a/src/renderer/views/app/panels.ejs b/src/renderer/views/app/panels.ejs index 69a6f18e..eaccb5f2 100644 --- a/src/renderer/views/app/panels.ejs +++ b/src/renderer/views/app/panels.ejs @@ -28,6 +28,9 @@ + + + diff --git a/src/renderer/views/components/airplay-modal.ejs b/src/renderer/views/components/airplay-modal.ejs new file mode 100644 index 00000000..16ab91a4 --- /dev/null +++ b/src/renderer/views/components/airplay-modal.ejs @@ -0,0 +1,42 @@ + + \ No newline at end of file From c4a33b7cb98bdbaf8d28455c809f6d36e8ba707c Mon Sep 17 00:00:00 2001 From: vapormusic Date: Sat, 30 Apr 2022 10:15:52 +0700 Subject: [PATCH 2/8] Update raop.ts --- src/main/plugins/raop.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/plugins/raop.ts b/src/main/plugins/raop.ts index ba8e8395..165ada02 100644 --- a/src/main/plugins/raop.ts +++ b/src/main/plugins/raop.ts @@ -143,7 +143,7 @@ export default class RAOP { this.castDevices = []; console.log("scan for airplay devices"); - const browser = this.mdns.createBrowser(this.mdns.tcp('raop')); + const browser = this.mdns.createBrowser(); browser.on('ready', browser.discover); browser.on('update', (service: any) => { From fb5ab7b6fd8066d7b8566da2a9b9239e594e5d83 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Sat, 30 Apr 2022 10:31:57 +0700 Subject: [PATCH 3/8] Update raop.ts --- src/main/plugins/raop.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/plugins/raop.ts b/src/main/plugins/raop.ts index 165ada02..ce7127b3 100644 --- a/src/main/plugins/raop.ts +++ b/src/main/plugins/raop.ts @@ -147,12 +147,13 @@ export default class RAOP { browser.on('ready', browser.discover); browser.on('update', (service: any) => { - if (service.addresses && service.fullname && (service.fullname.includes('_raop._tcp') || service.fullname.includes('_airplay._tcp'))) { +// if (service.addresses && service.fullname && (service.fullname.includes('_raop._tcp') || service.fullname.includes('_airplay._tcp'))) { // console.log(service.txt) this._win.webContents.executeJavaScript(`console.log( "${service.name} ${service.host}:${service.port} ${service.addresses}" )`); - this.ondeviceup(service.name, service.host, service.port, service.addresses, service.txt);} + this.ondeviceup(service.name, service.host, service.port, service.addresses, service.txt); +// } }); }); From 223c5e7b3adeb8e44e91b24e85f316bcf0a8ad6c Mon Sep 17 00:00:00 2001 From: vapormusic Date: Sat, 30 Apr 2022 10:48:22 +0700 Subject: [PATCH 4/8] Update raop.ts --- src/main/plugins/raop.ts | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/main/plugins/raop.ts b/src/main/plugins/raop.ts index ce7127b3..ae37f138 100644 --- a/src/main/plugins/raop.ts +++ b/src/main/plugins/raop.ts @@ -143,17 +143,30 @@ export default class RAOP { this.castDevices = []; console.log("scan for airplay devices"); - const browser = this.mdns.createBrowser(); + const browser = this.mdns.createBrowser(this.mdns.tcp('raop'); browser.on('ready', browser.discover); browser.on('update', (service: any) => { -// if (service.addresses && service.fullname && (service.fullname.includes('_raop._tcp') || service.fullname.includes('_airplay._tcp'))) { + if (service.addresses && service.fullname && (service.fullname.includes('_raop._tcp') || service.fullname.includes('_airplay._tcp'))) { // console.log(service.txt) this._win.webContents.executeJavaScript(`console.log( "${service.name} ${service.host}:${service.port} ${service.addresses}" )`); this.ondeviceup(service.name, service.host, service.port, service.addresses, service.txt); -// } + } + }); + + const browser2 = this.mdns.createBrowser(this.mdns.tcp('airplay'); + browser2.on('ready', browser.discover); + + browser2.on('update', (service: any) => { + if (service.addresses && service.fullname && (service.fullname.includes('_raop._tcp') || service.fullname.includes('_airplay._tcp'))) { + // console.log(service.txt) + this._win.webContents.executeJavaScript(`console.log( + "${service.name} ${service.host}:${service.port} ${service.addresses}" + )`); + this.ondeviceup(service.name, service.host, service.port, service.addresses, service.txt); + } }); }); From 9bec345a500f6c55a9e0bb48acdbb69cf9a9002f Mon Sep 17 00:00:00 2001 From: vapormusic Date: Sat, 30 Apr 2022 10:52:01 +0700 Subject: [PATCH 5/8] Update raop.ts --- src/main/plugins/raop.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/plugins/raop.ts b/src/main/plugins/raop.ts index ae37f138..59c4a09c 100644 --- a/src/main/plugins/raop.ts +++ b/src/main/plugins/raop.ts @@ -143,7 +143,7 @@ export default class RAOP { this.castDevices = []; console.log("scan for airplay devices"); - const browser = this.mdns.createBrowser(this.mdns.tcp('raop'); + const browser = this.mdns.createBrowser(this.mdns.tcp('raop')); browser.on('ready', browser.discover); browser.on('update', (service: any) => { @@ -156,7 +156,7 @@ export default class RAOP { } }); - const browser2 = this.mdns.createBrowser(this.mdns.tcp('airplay'); + const browser2 = this.mdns.createBrowser(this.mdns.tcp('airplay')); browser2.on('ready', browser.discover); browser2.on('update', (service: any) => { From 11f34ca4664c327f7a13a5df6448abc9a2d4f914 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Sat, 30 Apr 2022 10:54:24 +0700 Subject: [PATCH 6/8] Update raop.ts --- src/main/plugins/raop.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/plugins/raop.ts b/src/main/plugins/raop.ts index 59c4a09c..cb18ab39 100644 --- a/src/main/plugins/raop.ts +++ b/src/main/plugins/raop.ts @@ -157,7 +157,7 @@ export default class RAOP { }); const browser2 = this.mdns.createBrowser(this.mdns.tcp('airplay')); - browser2.on('ready', browser.discover); + browser2.on('ready', browser2.discover); browser2.on('update', (service: any) => { if (service.addresses && service.fullname && (service.fullname.includes('_raop._tcp') || service.fullname.includes('_airplay._tcp'))) { From 3aca5dc92bffb6429a79cb757a5cc57103ac51f1 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Sat, 30 Apr 2022 11:20:54 +0700 Subject: [PATCH 7/8] Update raop.ts --- src/main/plugins/raop.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/plugins/raop.ts b/src/main/plugins/raop.ts index cb18ab39..a7de1854 100644 --- a/src/main/plugins/raop.ts +++ b/src/main/plugins/raop.ts @@ -168,7 +168,7 @@ export default class RAOP { this.ondeviceup(service.name, service.host, service.port, service.addresses, service.txt); } }); - + }); From 2deaa22e719b1829b679e36dc420989c139c0b45 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Sun, 1 May 2022 16:45:46 +0700 Subject: [PATCH 8/8] fix some stuffs --- src/main/base/browserwindow.ts | 4 ++++ src/main/plugins/chromecast.ts | 12 ++++++++++-- src/main/plugins/raop.ts | 22 +++++++++++----------- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/main/base/browserwindow.ts b/src/main/base/browserwindow.ts index 56d847be..2089686c 100644 --- a/src/main/base/browserwindow.ts +++ b/src/main/base/browserwindow.ts @@ -898,6 +898,10 @@ export class BrowserWindow { event.returnValue = process.platform; }); + ipcMain.on("get-port", (event) => { + event.returnValue = this.clientPort; + }); + ipcMain.on("is-dev", (event) => { event.returnValue = this.devMode; }); diff --git a/src/main/plugins/chromecast.ts b/src/main/plugins/chromecast.ts index 5702fefc..0cac3506 100644 --- a/src/main/plugins/chromecast.ts +++ b/src/main/plugins/chromecast.ts @@ -28,7 +28,7 @@ export default class ChromecastPlugin { // private GCstream = new Stream.PassThrough(), private connectedHosts: any = {}; private connectedPlayer: any; - // private port = false; + private ciderPort :any = 9000; // private server = false; // private bufcount = 0; // private bufcount2 = 0; @@ -148,7 +148,7 @@ export default class ChromecastPlugin { } let media = { // Here you can plug an URL to any mp4, webm, mp3 or jpg file with the proper contentType. - contentId: 'http://' + this.getIp() + ':9000/audio.wav', + contentId: 'http://' + this.getIp() + ':'+ this.ciderPort +'/audio.wav', contentType: 'audio/wav', streamType: 'LIVE', // or LIVE @@ -361,4 +361,12 @@ export default class ChromecastPlugin { } + onRendererReady(): void { + this._win.webContents.executeJavaScript( + `ipcRenderer.sendSync('get-port')` + ).then((result: any) => { + this.ciderPort = result; + }); + } + } \ No newline at end of file diff --git a/src/main/plugins/raop.ts b/src/main/plugins/raop.ts index a7de1854..77f9f8d1 100644 --- a/src/main/plugins/raop.ts +++ b/src/main/plugins/raop.ts @@ -156,18 +156,18 @@ export default class RAOP { } }); - const browser2 = this.mdns.createBrowser(this.mdns.tcp('airplay')); - browser2.on('ready', browser2.discover); + // const browser2 = this.mdns.createBrowser(this.mdns.tcp('airplay')); + // browser2.on('ready', browser2.discover); - browser2.on('update', (service: any) => { - if (service.addresses && service.fullname && (service.fullname.includes('_raop._tcp') || service.fullname.includes('_airplay._tcp'))) { - // console.log(service.txt) - this._win.webContents.executeJavaScript(`console.log( - "${service.name} ${service.host}:${service.port} ${service.addresses}" - )`); - this.ondeviceup(service.name, service.host, service.port, service.addresses, service.txt); - } - }); + // browser2.on('update', (service: any) => { + // if (service.addresses && service.fullname && (service.fullname.includes('_raop._tcp') || service.fullname.includes('_airplay._tcp'))) { + // // console.log(service.txt) + // this._win.webContents.executeJavaScript(`console.log( + // "${service.name} ${service.host}:${service.port} ${service.addresses}" + // )`); + // this.ondeviceup(service.name, service.host, service.port, service.addresses, service.txt); + // } + // }); });