Merge branch 'main' into enhancement/ci
This commit is contained in:
commit
6e6de42f3f
8 changed files with 35 additions and 131 deletions
|
@ -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
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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')
|
||||
|
||||
}
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -1210,21 +1210,6 @@
|
|||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="md-option-line">
|
||||
<div class="md-option-segment">
|
||||
Local Files
|
||||
</div>
|
||||
<div class="md-option-segment md-option-segment_auto">
|
||||
<label>
|
||||
<input type="checkbox"
|
||||
v-model="app.cfg.advanced.experiments.includes('localLibrary')"
|
||||
@click="app.cfg.advanced.experiments.includes('localLibrary') ? removeExperiment('localLibrary') : addExperiment('localLibrary')"
|
||||
switch/>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="md-option-line">
|
||||
<div class="md-option-segment">
|
||||
{{$root.getLz('settings.option.experimental.compactUI')}}
|
||||
|
|
|
@ -138,7 +138,7 @@
|
|||
>
|
||||
</sidebar-library-item>
|
||||
</template>
|
||||
<template v-if="$root.cfg.libraryPrefs.localPaths.length != 0 && $root.cfg.advanced.experiments.includes('localLibrary')">
|
||||
<template v-if="$root.cfg.libraryPrefs.localPaths.length != 0">
|
||||
<div class="app-sidebar-header-text"
|
||||
@click="$root.cfg.general.sidebarCollapsed.localLibrary = !$root.cfg.general.sidebarCollapsed.localLibrary"
|
||||
:class="{collapsed: $root.cfg.general.sidebarCollapsed.localLibrary}">
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue