From c72358f5df3c0f3f9a3ce60cf58a80e9a55c73eb Mon Sep 17 00:00:00 2001 From: vapormusic Date: Fri, 1 Jul 2022 00:19:49 +0700 Subject: [PATCH] fix --- src/main/base/browserwindow.ts | 1 + src/main/providers/local/index.ts | 27 ++++++++++++++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/main/base/browserwindow.ts b/src/main/base/browserwindow.ts index e4a53270..c233fe5f 100644 --- a/src/main/base/browserwindow.ts +++ b/src/main/base/browserwindow.ts @@ -1189,6 +1189,7 @@ export class BrowserWindow { BrowserWindow.win.webContents.send('getUpdatedLocalList', oldmetadatalist); const metadatalist = await LocalFiles.scanLibrary() BrowserWindow.win.webContents.send('getUpdatedLocalList', metadatalist); + LocalFiles.cleanUpDB() }) ipcMain.on('writeWAV', (event, leftpcm, rightpcm, bufferlength) => { diff --git a/src/main/providers/local/index.ts b/src/main/providers/local/index.ts index 964f9f56..44ce3ae2 100644 --- a/src/main/providers/local/index.ts +++ b/src/main/providers/local/index.ts @@ -4,6 +4,7 @@ const { readdir } = require('fs').promises; import { utils } from '../../base/utils'; import * as mm from 'music-metadata'; import {Md5} from 'ts-md5/dist/md5'; +import e from "express"; export class LocalFiles { static localSongs: any = []; @@ -11,9 +12,9 @@ export class LocalFiles { public static DB = ProviderDB.db; static getDataType(item_id : String | any){ - if (item_id.startsWith('ciderlocalart')) + if ((item_id ?? ('')).startsWith('ciderlocalart')) return 'artwork' - else if (item_id.startsWith('ciderlocal')) + else if ((item_id ?? ('')).startsWith('ciderlocal')) return 'track' } @@ -105,13 +106,33 @@ export class LocalFiles { ProviderDB.db.putIfNotExists(art) metadatalist.push(form) } + //delete removed tracks } catch (e) { } } - // console.log('metadatalist', metadatalist); this.localSongs = metadatalist; this.localSongsArts = metadatalistart; return metadatalist; } + + static async cleanUpDB(){ + let folders = utils.getStoreValue("libraryPrefs.localPaths") + let rows = (await ProviderDB.db.allDocs({include_docs: true, + attachments: true})).rows.map((item: any)=>{return item.doc}) + let tracks = rows.filter((item: any) => {return this.getDataType(item._id) == "track" && !folders.some((i: String) => {return item["attributes"]["assetUrl"].startsWith("file:///" + i)})}) + let hashs = tracks.map((i: any) => {return i._id}) + console.log(hashs) + for (let hash of hashs){ + try{ + ProviderDB.db.get(hash).then(function (doc: any) { + return ProviderDB.db.remove(doc); + });} catch(e){} + try{ + ProviderDB.db.get(hash.replace('ciderlocal','ciderlocalart')).then(function (doc: any) { + return ProviderDB.db.remove(doc); + });} catch(e){} + } + } + static async getFiles(dir: any) { const dirents = await readdir(dir, { withFileTypes: true }); const files = await Promise.all(dirents.map((dirent: any) => {