From 9751b4f8375d12a0a08684c6ce8f34a74e8a0500 Mon Sep 17 00:00:00 2001 From: krtirtho Date: Sat, 6 Mar 2021 22:40:13 +0600 Subject: [PATCH] CacheDir & ConfigDir changed, tweaked basic configurations --- deploy/linux/spotube/default.desktop | 8 -------- deploy/linux/spotube/spotube.desktop | 8 ++++++++ deploy/linux/spotube/spotube.jpg | Bin 0 -> 59514 bytes src/app.tsx | 7 ++++++- src/components/Library.tsx | 3 ++- src/conf.ts | 3 +++ src/helpers/getCachedImageBuffer.ts | 17 +++++++++-------- 7 files changed, 28 insertions(+), 18 deletions(-) delete mode 100644 deploy/linux/spotube/default.desktop create mode 100644 deploy/linux/spotube/spotube.desktop create mode 100644 deploy/linux/spotube/spotube.jpg diff --git a/deploy/linux/spotube/default.desktop b/deploy/linux/spotube/default.desktop deleted file mode 100644 index b4ffcef0..00000000 --- a/deploy/linux/spotube/default.desktop +++ /dev/null @@ -1,8 +0,0 @@ -[Desktop Entry] -Type=Application -Name=Application -Exec=AppRun %F -Icon=default -Comment=Edit this default file -Terminal=true -Categories=Utility; \ No newline at end of file diff --git a/deploy/linux/spotube/spotube.desktop b/deploy/linux/spotube/spotube.desktop new file mode 100644 index 00000000..a5c80915 --- /dev/null +++ b/deploy/linux/spotube/spotube.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Type=Application +Name=Spotube +Exec=AppRun +Icon=default +Comment=A music streaming app combining the power of Spotify & Youtube +Terminal=true +Categories=Music; diff --git a/deploy/linux/spotube/spotube.jpg b/deploy/linux/spotube/spotube.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4b544b7114973fc38794fe57f25d6038d6ffcaa4 GIT binary patch literal 59514 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 a4JJT(?__6XnhdS%VAlU{{&D^?_WuAm^XZ)c literal 0 HcmV?d00001 diff --git a/src/app.tsx b/src/app.tsx index e4e1a319..ed02e1ec 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -13,6 +13,9 @@ import express from "express"; import open from "open"; import spotifyApi from "./initializations/spotifyApi"; import showError from "./helpers/showError"; +import fs from "fs" +import path from "path"; +import { confDir } from "./conf"; export enum CredentialKeys { credentials = "credentials", @@ -26,7 +29,9 @@ export interface Credentials { const minSize = { width: 700, height: 750 }; const winIcon = new QIcon(nodeguiIcon); -global.localStorage = new LocalStorage("./local"); +const localStorageDir = path.join(confDir, "local"); +fs.mkdirSync(localStorageDir, {recursive: true}); +global.localStorage = new LocalStorage(localStorageDir); const queryClient = new QueryClient({ defaultOptions: { queries: { diff --git a/src/components/Library.tsx b/src/components/Library.tsx index 76e739e2..a7aa19d8 100644 --- a/src/components/Library.tsx +++ b/src/components/Library.tsx @@ -68,8 +68,9 @@ function UserSavedTracks() { - {userTracks?.map(({ track }) => ( + {userTracks?.map(({ track }, index) => ( x.name).join(", ")} name={track.name} diff --git a/src/conf.ts b/src/conf.ts index 5087c25e..dffe27da 100644 --- a/src/conf.ts +++ b/src/conf.ts @@ -1,10 +1,13 @@ import dotenv from "dotenv" +import { homedir } from "os"; import { join } from "path"; const env = dotenv.config({path: join(process.cwd(), ".env")}).parsed as any export const clientId = ""; export const trace = process.argv.find(arg => arg === "--trace") ?? false; export const redirectURI = "http://localhost:4304/auth/spotify/callback" +export const confDir = join(homedir(), ".config", "spotube") +export const cacheDir = join(homedir(), ".cache", "spotube") export enum QueryCacheKeys{ categories="categories", diff --git a/src/helpers/getCachedImageBuffer.ts b/src/helpers/getCachedImageBuffer.ts index 3ef3ca5c..38661f8e 100644 --- a/src/helpers/getCachedImageBuffer.ts +++ b/src/helpers/getCachedImageBuffer.ts @@ -6,6 +6,7 @@ import { Stream } from "stream"; import { streamToBuffer } from "./streamToBuffer"; import Jimp from "jimp"; import du from "du"; +import { cacheDir } from "../conf"; interface ImageDimensions { @@ -18,15 +19,15 @@ const fsm = fs.promises; export async function getCachedImageBuffer(name: string, dims?: ImageDimensions): Promise { try { const MB_5 = 5000000; //5 Megabytes - const cacheFolder = path.join(process.cwd(), "cache", "images"); + const cacheImgFolder = path.join(cacheDir, "images"); // for clearing up the cache if it reaches out of the size const cacheName = `${isUrl(name) ? name.split("/").slice(-1)[0] : name}.cnim`; - const cachePath = path.join(cacheFolder, cacheName); + const cachePath = path.join(cacheImgFolder, cacheName); // checking if the cached image already exists or not if (fs.existsSync(cachePath)) { // automatically removing cache after a certain 50 MB oversize - if ((await du(cacheFolder)) > MB_5) { - fs.rmSync(cacheFolder, { recursive: true, force: true }); + if ((await du(cacheImgFolder)) > MB_5) { + fs.rmSync(cacheImgFolder, { recursive: true, force: true }); } const cachedImg = await fsm.readFile(cachePath); const cachedImgMeta = (await Jimp.read(cachedImg)).bitmap; @@ -35,7 +36,7 @@ export async function getCachedImageBuffer(name: string, dims?: ImageDimensions) // images are removed and replaced with a new one if (dims && (cachedImgMeta.height !== dims.height || cachedImgMeta.width !== dims?.width)) { fs.rmSync(cachePath); - return await imageResizeAndWrite(cachedImg, { cacheFolder, cacheName, dims }); + return await imageResizeAndWrite(cachedImg, { cacheFolder: cacheImgFolder, cacheName, dims }); } return cachedImg; } else { @@ -44,11 +45,11 @@ export async function getCachedImageBuffer(name: string, dims?: ImageDimensions) // converting axios stream to buffer const resImgBuf = await streamToBuffer(imgData); // creating cache_dir - await fsm.mkdir(cacheFolder, { recursive: true }); + await fsm.mkdir(cacheImgFolder, { recursive: true }); if (dims) { - return await imageResizeAndWrite(resImgBuf, { cacheFolder, cacheName, dims }); + return await imageResizeAndWrite(resImgBuf, { cacheFolder: cacheImgFolder, cacheName, dims }); } - await fsm.writeFile(path.join(cacheFolder, cacheName), resImgBuf); + await fsm.writeFile(path.join(cacheImgFolder, cacheName), resImgBuf); return resImgBuf; } } catch (error) {