lx-music-desktop/src/main/utils/mp3Meta.js
2020-11-10 08:31:47 +08:00

61 lines
1.7 KiB
JavaScript

const NodeID3 = require('node-id3')
const path = require('path')
const fs = require('fs')
const request = require('request')
const extReg = /^(\.(?:jpe?g|png)).*$/
const handleWriteMeta = (meta, filePath) => {
if (meta.lyrics) {
meta.unsynchronisedLyrics = {
language: 'zho',
text: meta.lyrics,
}
delete meta.lyrics
}
NodeID3.write(meta, filePath)
}
module.exports = (filePath, meta) => {
if (!meta.APIC) return handleWriteMeta(meta, filePath)
if (!/^http/.test(meta.APIC)) {
delete meta.APIC
return handleWriteMeta(meta, filePath)
}
let ext = path.extname(meta.APIC)
let picPath = filePath.replace(/\.mp3$/, '') + (ext ? ext.replace(extReg, '$1') : '.jpg')
request(meta.APIC)
.on('response', respones => {
if (respones.statusCode !== 200 && respones.statusCode != 206) {
delete meta.APIC
handleWriteMeta(meta, filePath)
return
}
respones
.pipe(fs.createWriteStream(picPath))
.on('finish', () => {
if (respones.complete) {
meta.APIC = picPath
handleWriteMeta(meta, filePath)
} else {
delete meta.APIC
handleWriteMeta(meta, filePath)
}
fs.unlink(picPath, err => {
if (err) console.log(err.message)
})
}).on('error', err => {
if (err) console.log(err.message)
delete meta.APIC
handleWriteMeta(meta, filePath)
fs.unlink(picPath, err => {
if (err) console.log(err.message)
})
})
})
.on('error', err => {
if (err) console.log(err.message)
delete meta.APIC
handleWriteMeta(meta, filePath)
})
}