mirror of
https://github.com/ragestudio/comty.git
synced 2025-06-09 10:34:17 +00:00
improve music release
This commit is contained in:
parent
e0ae3ca064
commit
31fe2c1e71
@ -12,6 +12,23 @@ const AllowedUpdateFields = [
|
||||
|
||||
export default class Release {
|
||||
static async create(payload) {
|
||||
if (!payload.title) {
|
||||
throw new OperationError(400, "Release title is required")
|
||||
}
|
||||
|
||||
if (!payload.list) {
|
||||
throw new OperationError(400, "Release list is required")
|
||||
}
|
||||
|
||||
// ensure list is an array of strings with tracks ids only
|
||||
playload.list = playload.list.map((item) => {
|
||||
if (typeof item !== "string") {
|
||||
item = item._id
|
||||
}
|
||||
|
||||
return item
|
||||
})
|
||||
|
||||
const release = new MusicRelease({
|
||||
user_id: payload.user_id,
|
||||
created_at: Date.now(),
|
||||
@ -48,13 +65,21 @@ export default class Release {
|
||||
}
|
||||
}
|
||||
|
||||
// ensure list is an array of strings with tracks ids only
|
||||
release.list = release.list.map((item) => {
|
||||
if (typeof item !== "string") {
|
||||
item = item._id
|
||||
}
|
||||
|
||||
return item
|
||||
})
|
||||
|
||||
release = await MusicRelease.findByIdAndUpdate(id, release)
|
||||
|
||||
return release
|
||||
}
|
||||
|
||||
static async fullfillItemData(release) {
|
||||
|
||||
return release
|
||||
}
|
||||
}
|
@ -15,6 +15,8 @@ export default async (payload = {}) => {
|
||||
return await ModifyTrack(payload._id, payload)
|
||||
}
|
||||
|
||||
let metadata = Object()
|
||||
|
||||
try {
|
||||
const sourceStream = await axios({
|
||||
url: payload.source,
|
||||
@ -24,25 +26,26 @@ export default async (payload = {}) => {
|
||||
|
||||
stream = sourceStream.data
|
||||
headers = sourceStream.headers
|
||||
|
||||
const streamMetadata = await MusicMetadata.parseStream(stream, {
|
||||
mimeType: headers["content-type"],
|
||||
})
|
||||
|
||||
metadata = {
|
||||
...metadata,
|
||||
format: streamMetadata.format.codec,
|
||||
channels: streamMetadata.format.numberOfChannels,
|
||||
sampleRate: streamMetadata.format.sampleRate,
|
||||
bits: streamMetadata.format.bitsPerSample,
|
||||
lossless: streamMetadata.format.lossless,
|
||||
duration: streamMetadata.format.duration,
|
||||
|
||||
title: streamMetadata.common.title,
|
||||
artists: streamMetadata.common.artists,
|
||||
album: streamMetadata.common.album,
|
||||
}
|
||||
} catch (error) {
|
||||
throw new OperationError(500, `Failed to process fetching source: ${error.message}`)
|
||||
}
|
||||
|
||||
const fileMetadata = await MusicMetadata.parseStream(stream, {
|
||||
mimeType: headers["content-type"],
|
||||
})
|
||||
|
||||
let metadata = {
|
||||
format: fileMetadata.format.codec,
|
||||
channels: fileMetadata.format.numberOfChannels,
|
||||
sampleRate: fileMetadata.format.sampleRate,
|
||||
bits: fileMetadata.format.bitsPerSample,
|
||||
lossless: fileMetadata.format.lossless,
|
||||
duration: fileMetadata.format.duration,
|
||||
|
||||
title: fileMetadata.common.title,
|
||||
artists: fileMetadata.common.artists,
|
||||
album: fileMetadata.common.album,
|
||||
// sowy :(
|
||||
}
|
||||
|
||||
if (typeof payload.metadata === "object") {
|
||||
@ -52,6 +55,16 @@ export default async (payload = {}) => {
|
||||
}
|
||||
}
|
||||
|
||||
metadata.format = metadata.format.toUpperCase()
|
||||
|
||||
if (
|
||||
metadata.format === "FLAC" ||
|
||||
metadata.format === "WAV" ||
|
||||
metadata.format === "ALAC"
|
||||
) {
|
||||
metadata.lossless = true
|
||||
}
|
||||
|
||||
const obj = {
|
||||
title: payload.title,
|
||||
album: payload.album,
|
||||
@ -70,6 +83,10 @@ export default async (payload = {}) => {
|
||||
obj.artists.push(payload.artists)
|
||||
}
|
||||
|
||||
if (typeof payload.artist === "string") {
|
||||
obj.artists.push(payload.artist)
|
||||
}
|
||||
|
||||
if (obj.artists.length === 0 || !obj.artists) {
|
||||
obj.artists = metadata.artists
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user