From a023bd619c5c3cbdf559ca37ddd59087a937c033 Mon Sep 17 00:00:00 2001 From: vapormusic Date: Wed, 31 Aug 2022 17:43:57 +0700 Subject: [PATCH] add dlna and ui fixes --- package.json | 3 +- src/main/plugins/chromecast.ts | 62 +++++++++---------- src/main/plugins/raop.ts | 2 +- src/renderer/main/vueapp.js | 14 +++-- .../views/components/mediaitem-mvview-sp.ejs | 2 +- .../views/components/mediaitem-square.ejs | 9 ++- src/renderer/views/pages/apple-curator.ejs | 7 ++- src/renderer/views/pages/search.ejs | 4 +- .../views/components/mediaitem-artwork.ejs | 5 +- .../views/components/mediaitem-square.ejs | 2 +- 10 files changed, 64 insertions(+), 46 deletions(-) diff --git a/package.json b/package.json index bc85142f..ab00ee7a 100644 --- a/package.json +++ b/package.json @@ -68,6 +68,7 @@ "run-script-os": "^1.1.6", "source-map-support": "^0.5.21", "ts-md5": "1.2.11", + "upnp-mediarenderer-client": "github:vapormusic/node-upnp-mediarenderer-client", "v8-compile-cache": "^2.3.0", "wallpaper": "5.0.1", "ws": "^8.8.1", @@ -78,9 +79,9 @@ "@types/adm-zip": "^0.5.0", "@types/discord-rpc": "4.0.3", "@types/express": "^4.17.13", + "@types/node": "^18.7.13", "@types/qrcode-terminal": "^0.12.0", "@types/ws": "^8.5.3", - "@types/node": "^18.7.13", "electron": "git+https://github.com/castlabs/electron-releases.git", "electron-builder": "^23.0.2", "electron-builder-notarize-pkg": "^1.2.0", diff --git a/src/main/plugins/chromecast.ts b/src/main/plugins/chromecast.ts index 4ef8c02c..fa709e06 100644 --- a/src/main/plugins/chromecast.ts +++ b/src/main/plugins/chromecast.ts @@ -2,6 +2,7 @@ import * as electron from "electron"; import * as os from "os"; import { resolve } from "path"; import * as CiderReceiver from "../base/castreceiver"; +const MediaRendererClient = require('upnp-mediarenderer-client') export default class ChromecastPlugin { /** @@ -14,6 +15,7 @@ export default class ChromecastPlugin { private _timer: any; private audioClient = require("castv2-client").Client; private mdns = require("mdns-js"); + private devices: any = []; private castDevices: any = []; @@ -67,19 +69,17 @@ export default class ChromecastPlugin { ssdpBrowser.search("urn:dial-multiscreen-org:device:dial:1"); - // // actual upnp devices - // if (app.cfg.get("audio.enableDLNA")) { - // let ssdpBrowser2 = new Client(); - // ssdpBrowser2.on('response', (headers, statusCode, rinfo) => { - // var location = getLocation(headers); - // if (location != null) { - // this.getServiceDescription(location, rinfo.address); - // } + // actual upnp devices + let ssdpBrowser2 = new Client(); + ssdpBrowser2.on('response', (headers: any, statusCode: any, rinfo: any) => { + var location = getLocation(headers); + if (location != null) { + this.getServiceDescription(location, rinfo.address); + } - // }); - // ssdpBrowser2.search('urn:schemas-upnp-org:device:MediaRenderer:1'); + }); + ssdpBrowser2.search('urn:schemas-upnp-org:device:MediaRenderer:1'); - // } } catch (e) { console.log("Search GC err", e); } @@ -257,26 +257,26 @@ export default class ChromecastPlugin { }); } else { // upnp devices - //try { - // client = new MediaRendererClient(UPNPDesc); - // const options = { - // autoplay: true, - // contentType: 'audio/x-wav', - // dlnaFeatures: 'DLNA.ORG_PN=-;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=01700000000000000000000000000000', - // metadata: { - // title: 'Apple Music Electron', - // creator: 'Streaming ...', - // type: 'audio', // can be 'video', 'audio' or 'image' - // // url: 'http://' + getIp() + ':' + server.address().port + '/', - // // protocolInfo: 'DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01700000000000000000000000000000; - // } - // }; - // client.load('http://' + getIp() + ':' + server.address().port + '/a.wav', options, function (err, _result) { - // if (err) throw err; - // console.log('playing ...'); - // }); - // } catch (e) { - // } + try { + let client = new MediaRendererClient(UPNPDesc); + const options = { + autoplay: true, + contentType: 'audio/x-wav', + dlnaFeatures: 'DLNA.ORG_PN=-;DLNA.ORG_OP=01;DLNA.ORG_FLAGS=01700000000000000000000000000000', + metadata: { + title: 'Cider', + creator: 'Streaming ...', + type: 'audio', // can be 'video', 'audio' or 'image' + // url: 'http://' + getIp() + ':' + server.address().port + '/', + // protocolInfo: 'DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01700000000000000000000000000000; + } + }; + client.load('http://' + this.getIp() + ':' + this.ciderPort + '/audio.wav', options, function (err: any, _result: any) { + if (err) throw err; + console.log('playing ...'); + }); + } catch (e) { + } } } diff --git a/src/main/plugins/raop.ts b/src/main/plugins/raop.ts index d9ab814f..2bdb51d3 100644 --- a/src/main/plugins/raop.ts +++ b/src/main/plugins/raop.ts @@ -216,7 +216,7 @@ export default class RAOP { password: sepassword, txt: txt, airplay2: airplay2dv, - debug: true, + debug: null, }); // console.log('lol',txt) this.device.on("status", (status: any) => { diff --git a/src/renderer/main/vueapp.js b/src/renderer/main/vueapp.js index ca0b9509..175c1f5d 100644 --- a/src/renderer/main/vueapp.js +++ b/src/renderer/main/vueapp.js @@ -2007,9 +2007,10 @@ const app = new Vue({ include: "grouping,playlists", extend: "editorialArtwork", "art[url]": "f", - }); + }).then(() => { + kind = "appleCurator"; window.location.hash = `${kind}/${id}`; - document.querySelector("#app-content").scrollTop = 0; + document.querySelector("#app-content").scrollTop = 0}); } else if (kind == "editorial-elements" || kind == "editorial-items") { console.debug(item); if (item.relationships?.contents?.data != null && item.relationships?.contents?.data.length > 0) { @@ -4022,6 +4023,7 @@ const app = new Vue({ } }, getMediaItemArtwork(url, height = 64, width) { + try { if (typeof url == "undefined" || url == "") { return "./assets/MissingArtwork.svg"; } @@ -4029,7 +4031,7 @@ const app = new Vue({ if (width) { width = parseInt(width * window.devicePixelRatio); } - let newurl = `${url + let newurl = `${(url ?? "") .replace("{w}", width ?? height) .replace("{h}", height) .replace("{f}", "webp") @@ -4038,7 +4040,11 @@ const app = new Vue({ if (newurl.includes("900x516")) { newurl = newurl.replace("900x516cc", "900x516sr").replace("900x516bb", "900x516sr"); } - return newurl; + return newurl;} + catch (e) { + console.log(url) + return "./assets/MissingArtwork.svg" + } }, _rgbToRgb(rgb = [0, 0, 0]) { // if rgb diff --git a/src/renderer/views/components/mediaitem-mvview-sp.ejs b/src/renderer/views/components/mediaitem-mvview-sp.ejs index ea0bc5aa..5ec81176 100644 --- a/src/renderer/views/components/mediaitem-mvview-sp.ejs +++ b/src/renderer/views/components/mediaitem-mvview-sp.ejs @@ -15,7 +15,7 @@
diff --git a/src/renderer/views/components/mediaitem-square.ejs b/src/renderer/views/components/mediaitem-square.ejs index 838477f3..e10c873b 100644 --- a/src/renderer/views/components/mediaitem-square.ejs +++ b/src/renderer/views/components/mediaitem-square.ejs @@ -45,9 +45,9 @@
-
{{ item.attributes?.name.replace(/ /g, ' ').replace(/Apple Music |^Apple |/g, '') ?? +
{{ (item.attributes?.editorialElementKind == "394" && item.relationships?.contents?.data[0]?.attributes?.shortName != null ) ? item.relationships?.contents?.data[0]?.attributes?.shortName : (item.attributes?.name ? ((removeamtext ) ? item.attributes?.name.replace(/ /g, ' ').replace(/Apple Music |^Apple |/g, '') : item.attributes?.name.replace(/ /g, ' ')) : (item.relationships?.contents?.data[0]?.attributes?.name ?? - (item.attributes?.editorialNotes?.name ?? '')) }} + (item.attributes?.editorialNotes?.name ?? ''))) }}
@@ -98,6 +98,11 @@ Vue.component('mediaitem-square', { default: 'cc', required: false }, + removeamtext: { + type: Boolean, + default: false, + required: false + }, 'contextExt': { type: Object, required: false }, }, data: function () { diff --git a/src/renderer/views/pages/apple-curator.ejs b/src/renderer/views/pages/apple-curator.ejs index 0e11bea5..f6e9d055 100644 --- a/src/renderer/views/pages/apple-curator.ejs +++ b/src/renderer/views/pages/apple-curator.ejs @@ -1,6 +1,6 @@ diff --git a/src/renderer/views/pages/search.ejs b/src/renderer/views/pages/search.ejs index 0bdd63de..2f8d967a 100644 --- a/src/renderer/views/pages/search.ejs +++ b/src/renderer/views/pages/search.ejs @@ -142,10 +142,10 @@
- + v-for="item of getFlattenedCategories()"/>
diff --git a/src/web-remote/views/components/mediaitem-artwork.ejs b/src/web-remote/views/components/mediaitem-artwork.ejs index 9f651a45..e4760eb8 100644 --- a/src/web-remote/views/components/mediaitem-artwork.ejs +++ b/src/web-remote/views/components/mediaitem-artwork.ejs @@ -86,6 +86,7 @@ this.isVisible = isVisible }, getMediaItemArtwork(url, height = 64, width) { + try{ if (typeof url == "undefined" || url == "") { return "./assets/MissingArtwork.svg" } @@ -98,7 +99,9 @@ if (newurl.includes("900x516")) { newurl = newurl.replace("900x516cc", "900x516sr").replace("900x516bb", "900x516sr"); } - return newurl + return newurl} catch (e){ + return "./assets/MissingArtwork.svg" + } }, } }); diff --git a/src/web-remote/views/components/mediaitem-square.ejs b/src/web-remote/views/components/mediaitem-square.ejs index c3d6ab13..0d8d27da 100644 --- a/src/web-remote/views/components/mediaitem-square.ejs +++ b/src/web-remote/views/components/mediaitem-square.ejs @@ -213,7 +213,7 @@ } switch (this.kind) { case "385": - artwork = this.item.attributes.editorialArtwork.subscriptionHero.url + artwork = this.item.attributes?.editorialArtwork?.subscriptionHero?.url break; } if (!includeUrl) {