diff --git a/.circleci/config.yml b/.circleci/config.yml index 84153171..4e911f55 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -27,6 +27,9 @@ jobs: name: Restore Yarn Package Cache keys: - yarn-packages-{{ checksum "cider.lock" }} + - run: + name: Clear node_airtunes2 cache + command: sudo rm -rf ~/.cache/yarn/v6/.tmp/cf5bc2de2629636ca224995234b8eaa1 || true - run: name: Install Node Dependencies command: yarn install --frozen-lockfile --cache-folder ~/.cache/yarn @@ -88,12 +91,6 @@ jobs: sudo dpkg --add-architecture i386 sudo apt-get update -y sudo apt-get install -y wine32 - - run: - name: Reinstall proper rust node module - command: | - cd ./node_modules/cider_utils - yarn run prebuild-downloads --platform=win32 --verbose - cd ../.. - run: name: Generate Builds (Windows) command: yarn electron-builder -w --x64 -p never @@ -119,12 +116,6 @@ jobs: sudo dpkg --add-architecture i386 sudo apt-get update -y sudo apt-get install -y wine32 - - run: - name: Reinstall proper rust node module - command: | - cd ./node_modules/cider_utils - yarn run prebuild-downloads --platform=win32 --verbose - cd ../.. - run: name: Generate Builds (Winget) command: yarn electron-builder --win -c winget.json -p never diff --git a/package.json b/package.json index e51e8009..fbe42bc3 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,6 @@ "airtunes2": "git+https://github.com/ciderapp/node_airtunes2.git", "castv2-client": "^1.2.0", "chokidar": "^3.5.3", - "cider_utils": "git+https://github.com/ciderapp/cider_utils.git", "discord-auto-rpc": "^1.0.16", "dns-js": "git+https://github.com/ciderapp/node-dns-js.git", "ejs": "^3.1.6", @@ -75,6 +74,7 @@ "react": "^18.0.0", "react-dom": "^18.0.0", "run-script-os": "^1.1.6", + "request": "^2.88.2", "source-map-support": "^0.5.21", "ts-md5": "^1.2.11", "v8-compile-cache": "^2.3.0", diff --git a/resources/afterPack.js b/resources/afterPack.js index 16bdbee8..7cbae403 100644 --- a/resources/afterPack.js +++ b/resources/afterPack.js @@ -24,10 +24,7 @@ exports.default = function(context) { // execSync('python3 -m castlabs_evs.vmp -n sign-pkg dist/mac',{stdio: 'inherit'}) // if (fs.existsSync('dist/mac-arm64')) // execSync('python3 -m castlabs_evs.vmp -n sign-pkg dist/mac-arm64 -z',{stdio: 'inherit'}) - - if (fs.existsSync('dist/mac-x64') || fs.existsSync('dist/mac-universal--x64') ) - execSync('cd ./node_modules/cider_utils; yarn run prebuild-downloads --platform=darwin --arch=arm64 --verbose; cd ../..',{stdio: 'inherit'}) - + // console.log('VMP signing complete') } diff --git a/src/main/base/browserwindow.ts b/src/main/base/browserwindow.ts index e8ca660f..5c1ad676 100644 --- a/src/main/base/browserwindow.ts +++ b/src/main/base/browserwindow.ts @@ -708,6 +708,15 @@ export class BrowserWindow { if (itspod != null) details.requestHeaders["Cookie"] = `itspod=${itspod}`; } + if(details.url.includes("apple.com")) { + details.requestHeaders["DNT"] = "1"; + details.requestHeaders["authority"] = "amp-api.music.apple.com"; + details.requestHeaders["origin"] = "https://beta.music.apple.com"; + details.requestHeaders["referer"] = "https://beta.music.apple.com"; + details.requestHeaders["sec-fetch-dest"] = "empty"; + details.requestHeaders["sec-fetch-mode"] = "cors"; + details.requestHeaders["sec-fetch-site"] = "same-site"; + } if (details.url.startsWith("https://music.163.com")) { details.requestHeaders["Referer"] = "https://music.163.com/"; details.requestHeaders["user-agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Cider/1.0.0 Chrome/96.0.4664.45 Electron/16.0.0 Safari/537.36"; diff --git a/src/main/plugins/raop.ts b/src/main/plugins/raop.ts index 0116746d..9f0300d6 100644 --- a/src/main/plugins/raop.ts +++ b/src/main/plugins/raop.ts @@ -89,10 +89,10 @@ export default class RAOP { `; private ondeviceup(name: any, host: any, port: any, addresses: any, text: any, airplay2: any = null) { - console.log(this.castDevices.findIndex((item: any) => {return (item.name == host.replace(".local","") && item.port == port )})) - if (this.castDevices.findIndex((item: any) => {return (item.name == host.replace(".local","") && item.port == port )}) == -1) { + // console.log(this.castDevices.findIndex((item: any) => {return (item.name == host.replace(".local","") && item.port == port )})) + if (this.castDevices.findIndex((item: any) => {return (item != null && item.name == (host ?? "Unknown").replace(".local","") && item.port == port )}) == -1) { this.castDevices.push({ - name: host.replace(".local",""), + name: (host ?? "Unknown").replace(".local",""), host: addresses ? addresses[0] : '', port: port, addresses: addresses, diff --git a/src/main/providers/local/index.ts b/src/main/providers/local/index.ts index 289cad82..bdcf547c 100644 --- a/src/main/providers/local/index.ts +++ b/src/main/providers/local/index.ts @@ -6,7 +6,6 @@ import * as mm from 'music-metadata'; import {Md5} from 'ts-md5/dist/md5'; import e from "express"; import { EventEmitter } from 'events'; -import { parseFile, recursiveFolderSearch } from 'cider_utils'; export class LocalFiles { static localSongs: any = []; @@ -36,22 +35,18 @@ export class LocalFiles { ProviderDB.init() let folders = utils.getStoreValue("libraryPrefs.localPaths") if (folders == null || folders.length == null || folders.length == 0) folders = [] - console.log('folders', folders) - let parseFileQueue: any[] = []; let mmQueue: any[] = [] + let files: any[] = [] for (var folder of folders) { - // Recursively search and add - let result = await recursiveFolderSearch(folder) - parseFileQueue = parseFileQueue.concat(result.parseFile) - mmQueue = mmQueue.concat(result.musicMetadata) + // get files from the Music folder + files = files.concat(await LocalFiles.getFiles(folder)) } - if (parseFileQueue.length !== 0 || mmQueue.length !== 0) {console.log('Recursive Folder Search in Cider Utils worki')} + + let supporttedformats = ["mp3", "aac", "webm", "flac", "m4a", "ogg", "wav", "opus"] + let audiofiles = files.filter(f => supporttedformats.includes(f.substring(f.lastIndexOf('.') + 1))); let metadatalist = [] let metadatalistart = [] let numid = 0; - mmQueue = mmQueue.concat(parseFileQueue) - parseFileQueue = [] - // Music Metadata fallback - for (var audio of mmQueue) { + for (var audio of audiofiles) { try { const metadata = await mm.parseFile(audio); let lochash = Md5.hashStr(audio) ?? numid; @@ -120,85 +115,21 @@ export class LocalFiles { if (this.localSongs.length === 0 && numid % 10 === 0) { // send updated chunks only if there is no previous database this.eventEmitter.emit('newtracks', metadatalist)} } - } catch (e) {console.error("error:", e)} - } - - // Cider-Utils supported formats. - for (var audio of parseFileQueue) { - try { - const metadata = await parseFile(audio); - let lochash = Md5.hashStr(audio) ?? numid; - if (metadata != null) { - let form = { - "id": "ciderlocal" + lochash, - "_id": "ciderlocal" + lochash, - "type": "podcast-episodes", - "href": audio, - "attributes": { - "artwork": { - "width": 3000, - "height": 3000, - "url": "/ciderlocalart/" + "ciderlocal" + lochash, - }, - "topics": [], - "url": "", - "subscribable": true, - "mediaKind": "audio", - "genreNames": [ - "" - ], - // "playParams": { - // "id": "ciderlocal" + numid, - // "kind": "podcast", - // "isLibrary": true, - // "reporting": false }, - "trackNumber": metadata.track_number ?? 0, - "discNumber": metadata.disc_number ?? 0, - "name": metadata.title == 0 ? audio.substring(audio.lastIndexOf('\\') + 1) : metadata.title, - "albumName": metadata.album, - "artistName": metadata.artist, - "copyright": metadata.copyright ?? "", - "assetUrl": "file:///" + audio, - "contentAdvisory": "", - "releaseDateTime": `${metadata.year ?? '2022'}-05-13T00:23:00Z`, - "durationInMillis": metadata.duration_in_ms ?? 0, - "bitrate": metadata.bitrate ?? 0, - "offers": [ - { - "kind": "get", - "type": "STDQ" - } - ], - "contentRating": "clean" - }, - flavor: metadata.bitrate, - localFilesMetadata: { - lossless: metadata.lossless, - container: metadata.container, - bitDepth: metadata.bit_depth, - sampleRate: metadata.sample_rate ?? 0, - }, - }; - let art = { - id: "ciderlocal" + lochash, - _id: "ciderlocalart" + lochash, - url: metadata.artwork != undefined ? metadata.artwork : "", - } - metadatalistart.push(art) - numid += 1; - ProviderDB.db.putIfNotExists(form) - ProviderDB.db.putIfNotExists(art) - metadatalist.push(form) - - if (this.localSongs.length === 0 && numid % 10 === 0) { // send updated chunks only if there is no previous database - this.eventEmitter.emit('newtracks', metadatalist)} - } - } catch (e) {console.error("error:", e)} + } catch (e) {console.error("localfiles error:", e)} } + // console.log('metadatalist', metadatalist); this.localSongs = metadatalist; this.localSongsArts = metadatalistart; return metadatalist; } + static async getFiles(dir: any) { + const dirents = await readdir(dir, { withFileTypes: true }); + const files = await Promise.all(dirents.map((dirent: any) => { + const res = path.resolve(dir, dirent.name); + return dirent.isDirectory() ? this.getFiles(res) : res; + })); + return Array.prototype.concat(...files); + } static async cleanUpDB(){ let folders = utils.getStoreValue("libraryPrefs.localPaths") @@ -218,15 +149,6 @@ export class LocalFiles { } } - static async getFiles(dir: any) { - const dirents = await readdir(dir, { withFileTypes: true }); - const files = await Promise.all(dirents.map((dirent: any) => { - const res = path.resolve(dir, dirent.name); - return dirent.isDirectory() ? this.getFiles(res) : res; - })); - return Array.prototype.concat(...files); - } - static setupHandlers () { const app = utils.getExpress() console.log("Setting up handlers for local files") diff --git a/src/renderer/views/components/settings-window.ejs b/src/renderer/views/components/settings-window.ejs index e1000337..a4d9f9aa 100644 --- a/src/renderer/views/components/settings-window.ejs +++ b/src/renderer/views/components/settings-window.ejs @@ -1210,21 +1210,6 @@ - -
-
- Local Files -
-
- -
-
-
{{$root.getLz('settings.option.experimental.compactUI')}} diff --git a/src/renderer/views/components/sidebar.ejs b/src/renderer/views/components/sidebar.ejs index ae664b66..ad88b271 100644 --- a/src/renderer/views/components/sidebar.ejs +++ b/src/renderer/views/components/sidebar.ejs @@ -138,7 +138,7 @@ > -