deemix-js/deemix/settings.js
RemixDev ffba5ae7bb
Updated getPreferredBitrate and added feelingLucky option
feelingLucky tries to use the old cdns to get the tracks, if disabled 
there will be less tracks, but less calls overall
2021-12-23 14:41:30 +01:00

173 lines
4.6 KiB
JavaScript

const { TrackFormats } = require('deezer-js')
const { getMusicFolder, getConfigFolder } = require('./utils/localpaths.js')
const fs = require('fs')
// Should the lib overwrite files?
const OverwriteOption = {
OVERWRITE: 'y', // Yes, overwrite the file
DONT_OVERWRITE: 'n', // No, don't overwrite the file
DONT_CHECK_EXT: 'e', // No, and don't check for extensions
KEEP_BOTH: 'b', // No, and keep both files
ONLY_TAGS: 't' // Overwrite only the tags
}
// What should I do with featured artists?
const FeaturesOption = {
NO_CHANGE: "0", // Do nothing
REMOVE_TITLE: "1", // Remove from track title
REMOVE_TITLE_ALBUM: "3", // Remove from track title and album title
MOVE_TITLE: "2" // Move to track title
}
const DEFAULTS = {
downloadLocation: getMusicFolder(),
tracknameTemplate: "%artist% - %title%",
albumTracknameTemplate: "%tracknumber% - %title%",
playlistTracknameTemplate: "%position% - %artist% - %title%",
createPlaylistFolder: true,
playlistNameTemplate: "%playlist%",
createArtistFolder: false,
artistNameTemplate: "%artist%",
createAlbumFolder: true,
albumNameTemplate: "%artist% - %album%",
createCDFolder: true,
createStructurePlaylist: false,
createSingleFolder: false,
padTracks: true,
paddingSize: "0",
illegalCharacterReplacer: "_",
queueConcurrency: 3,
maxBitrate: String(TrackFormats.MP3_320),
feelingLucky: false,
fallbackBitrate: false,
fallbackSearch: false,
logErrors: true,
logSearched: false,
overwriteFile: OverwriteOption.DONT_OVERWRITE,
createM3U8File: false,
playlistFilenameTemplate: "playlist",
syncedLyrics: false,
embeddedArtworkSize: 800,
embeddedArtworkPNG: false,
localArtworkSize: 1200,
localArtworkFormat: "jpg",
saveArtwork: true,
coverImageTemplate: "cover",
saveArtworkArtist: false,
artistImageTemplate: "folder",
jpegImageQuality: 90,
dateFormat: "Y-M-D",
albumVariousArtists: true,
removeAlbumVersion: false,
removeDuplicateArtists: true,
featuredToTitle: FeaturesOption.NO_CHANGE,
titleCasing: "nothing",
artistCasing: "nothing",
executeCommand: "",
tags: {
title: true,
artist: true,
artists: true,
album: true,
cover: true,
trackNumber: true,
trackTotal: false,
discNumber: true,
discTotal: false,
albumArtist: true,
genre: true,
year: true,
date: true,
explicit: false,
isrc: true,
length: true,
barcode: true,
bpm: true,
replayGain: false,
label: true,
lyrics: false,
syncedLyrics: false,
copyright: false,
composer: false,
involvedPeople: false,
source: false,
rating: false,
savePlaylistAsCompilation: false,
useNullSeparator: false,
saveID3v1: true,
multiArtistSeparator: "default",
singleAlbumArtist: false,
coverDescriptionUTF8: false
}
}
function save(settings, configFolder){
configFolder = configFolder || getConfigFolder()
if (!fs.existsSync(configFolder)) fs.mkdirSync(configFolder)
fs.writeFileSync(configFolder+'config.json', JSON.stringify(settings, null, 2))
}
function load(configFolder){
configFolder = configFolder || getConfigFolder()
if (!fs.existsSync(configFolder)) fs.mkdirSync(configFolder)
if (! fs.existsSync(configFolder+'config.json')) save(DEFAULTS, configFolder)
let settings
try {
settings = JSON.parse(fs.readFileSync(configFolder+'config.json'))
} catch (e){
if (e.name === "SyntaxError") save(DEFAULTS, configFolder)
settings = JSON.parse(JSON.stringify(DEFAULTS))
}
if (check(settings) > 0) save(settings, configFolder)
return settings
}
function check(settings){
let changes = 0
Object.keys(DEFAULTS).forEach( _iSet => {
if (settings[_iSet] === undefined || typeof settings[_iSet] != typeof DEFAULTS[_iSet]){
settings[_iSet] = DEFAULTS[_iSet]
changes++
}
})
Object.keys(DEFAULTS.tags).forEach( _iSet => {
if (settings.tags[_iSet] === undefined || typeof settings.tags[_iSet] != typeof DEFAULTS.tags[_iSet]){
settings.tags[_iSet] = DEFAULTS.tags[_iSet]
changes++
}
})
if (settings.downloadLocation == ""){
settings.downloadLocation = DEFAULTS.downloadLocation
changes++
}
[
'tracknameTemplate',
'albumTracknameTemplate',
'playlistTracknameTemplate',
'playlistNameTemplate',
'artistNameTemplate',
'albumNameTemplate',
'playlistFilenameTemplate',
'coverImageTemplate',
'artistImageTemplate',
'paddingSize'
].forEach(template => {
if (settings[template] == ""){
settings[template] = DEFAULTS[template]
changes++
}
})
return changes
}
module.exports = {
OverwriteOption,
FeaturesOption,
DEFAULTS,
save,
load
}