diff --git a/index.js b/index.js index 7579e6ea..c3358359 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,6 @@ require('v8-compile-cache'); const {app, components} = require('electron'), - {resolve} = require("path"), + {resolve, join} = require("path"), CiderBase = require('./src/main/cider-base'); // Analytics for debugging. @@ -27,8 +27,8 @@ const configDefaults = { "spatial_properties": { "presets": [], "gain": 0.8, - "listener_position": [0,0,0], - "audio_position": [0,0,0], + "listener_position": [0, 0, 0], + "audio_position": [0, 0, 0], "room_dimensions": { "width": 32, "height": 12, @@ -75,15 +75,13 @@ const configDefaults = { const merge = (target, source) => { // Iterate through `source` properties and if an `Object` set property to merge of `target` and `source` properties for (const key of Object.keys(source)) { - if (source[key] instanceof Object) Object.assign(source[key], merge(target[key], source[key])) + if (source[key] instanceof Object) Object.assign(source[key], merge(target[key], source[key])) } // Join `target` and modified `source` Object.assign(target || {}, source) return target - } +} -// Enable WebGPU and list adapters (EXPERIMENTAL.) -// Note: THIS HAS TO BE BEFORE ANYTHING GETS INITIALIZED. const Store = require("electron-store"); app.cfg = new Store({ @@ -92,6 +90,11 @@ app.cfg = new Store({ let currentCfg = app.cfg.get() app.cfg.set(merge(configDefaults, currentCfg)) +app.paths = { + ciderCache: resolve(app.getPath("userData"), "CiderCache"), + themes: resolve(app.getPath("userData"), "Themes"), + plugins: resolve(app.getPath("userData"), "Plugins"), +} switch (app.cfg.get("visual.hw_acceleration")) { default: diff --git a/src/main/cider-base.js b/src/main/cider-base.js index 3a8ba2b5..ae416385 100644 --- a/src/main/cider-base.js +++ b/src/main/cider-base.js @@ -8,7 +8,8 @@ const os = require('os'); const yt = require('youtube-search-without-api-key'); const discord = require('./discordrpc'); const lastfm = require('./lastfm'); -const { writeFile } = require('fs'); +const { writeFile, writeFileSync, existsSync, mkdirSync } = require('fs'); +const fs = require('fs'); const mpris = require('./mpris'); const mm = require('music-metadata'); const fetch = require('electron-fetch').default; @@ -28,6 +29,7 @@ const CiderBase = { }, clientPort: 0, CreateBrowserWindow() { + this.VerifyFiles() // Set default window sizes const mainWindowState = windowStateKeeper({ defaultWidth: 1024, @@ -132,6 +134,51 @@ const CiderBase = { win.close(); }) + ipcMain.on('put-library-songs', (event, arg) => { + fs.writeFileSync(join(app.paths.ciderCache, "library-songs.json"), JSON.stringify(arg)) + }) + + ipcMain.on('put-library-artists', (event, arg) => { + fs.writeFileSync(join(app.paths.ciderCache, "library-artists.json"), JSON.stringify(arg)) + }) + + ipcMain.on('put-library-albums', (event, arg) => { + fs.writeFileSync(join(app.paths.ciderCache, "library-albums.json"), JSON.stringify(arg)) + }) + + ipcMain.on('put-library-playlists', (event, arg) => { + fs.writeFileSync(join(app.paths.ciderCache, "library-playlists.json"), JSON.stringify(arg)) + }) + + ipcMain.on('put-library-recentlyAdded', (event, arg) => { + fs.writeFileSync(join(app.paths.ciderCache, "library-recentlyAdded.json"), JSON.stringify(arg)) + }) + + ipcMain.on('get-library-songs', (event) => { + let librarySongs = fs.readFileSync(join(app.paths.ciderCache, "library-songs.json"), "utf8") + event.returnValue = JSON.parse(librarySongs) + }) + + ipcMain.on('get-library-artists', (event) => { + let libraryArtists = fs.readFileSync(join(app.paths.ciderCache, "library-artists.json"), "utf8") + event.returnValue = JSON.parse(libraryArtists) + }) + + ipcMain.on('get-library-albums', (event) => { + let libraryAlbums = fs.readFileSync(join(app.paths.ciderCache, "library-albums.json"), "utf8") + event.returnValue = JSON.parse(libraryAlbums) + }) + + ipcMain.on('get-library-playlists', (event) => { + let libraryPlaylists = fs.readFileSync(join(app.paths.ciderCache, "library-playlists.json"), "utf8") + event.returnValue = JSON.parse(libraryPlaylists) + }) + + ipcMain.on('get-library-recentlyAdded', (event) => { + let libraryRecentlyAdded = fs.readFileSync(join(app.paths.ciderCache, "library-recentlyAdded.json"), "utf8") + event.returnValue = JSON.parse(libraryRecentlyAdded) + }) + ipcMain.handle('getYTLyrics', async (event, track, artist) => { var u = track + " " + artist + " official video"; const videos = await yt.search(u); @@ -258,7 +305,29 @@ const CiderBase = { return win }, - + VerifyFiles() { + const expectedDirectories = [ + "CiderCache" + ] + const expectedFiles = [ + "library-songs.json", + "library-artists.json", + "library-albums.json", + "library-playlists.json", + "library-recentlyAdded.json", + ] + for (let i = 0; i < expectedDirectories.length; i++) { + if (!existsSync(path.join(app.getPath("userData"), expectedDirectories[i]))) { + mkdirSync(path.join(app.getPath("userData"), expectedDirectories[i])) + } + } + for (let i = 0; i < expectedFiles.length; i++) { + const file = path.join(app.paths.ciderCache, expectedFiles[i]) + if (!existsSync(file)) { + writeFileSync(file, JSON.stringify([])) + } + } + }, EnvironmentVariables: { "env": { platform: os.platform(), diff --git a/src/renderer/index.js b/src/renderer/index.js index 8033627b..114cc94e 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -103,10 +103,10 @@ Array.prototype.limit = function (n) { const store = new Vuex.Store({ state: { library: { - songs: [], - albums: [], - recentlyAdded: [], - playlists: [] + songs: ipcRenderer.sendSync("get-library-songs"), + albums: ipcRenderer.sendSync("get-library-albums"), + recentlyAdded: ipcRenderer.sendSync("get-library-recentlyAdded"), + playlists: ipcRenderer.sendSync("get-library-playlists") }, artwork: { playerLCD: "" @@ -2856,6 +2856,7 @@ const app = new Vue({ menus.normal.items = menus.normal.items.concat(this.contextExt.normal) } } + // isLibrary = await app.inLibrary([this.mk.nowPlayingItem]) // console.warn(isLibrary) // if(isLibrary.length != 0) {