fix 500 when no metadata provided

This commit is contained in:
SrGooglo 2025-02-10 22:27:56 +00:00
parent aa5209d225
commit 78d0ec0e30

View File

@ -6,113 +6,115 @@ import axios from "axios"
import ModifyTrack from "./modify"
export default async (payload = {}) => {
requiredFields(["title", "source", "user_id"], payload)
requiredFields(["title", "source", "user_id"], payload)
let stream = null
let headers = null
let stream = null
let headers = null
if (typeof payload._id === "string") {
return await ModifyTrack(payload._id, payload)
}
if (typeof payload._id === "string") {
return await ModifyTrack(payload._id, payload)
}
let metadata = Object()
let metadata = Object()
try {
const sourceStream = await axios({
url: payload.source,
method: "GET",
responseType: "stream",
})
try {
const sourceStream = await axios({
url: payload.source,
method: "GET",
responseType: "stream",
})
stream = sourceStream.data
headers = sourceStream.headers
stream = sourceStream.data
headers = sourceStream.headers
const streamMetadata = await MusicMetadata.parseStream(stream, {
mimeType: headers["content-type"],
})
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,
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) {
// sowy :(
}
title: streamMetadata.common.title,
artists: streamMetadata.common.artists,
album: streamMetadata.common.album,
}
} catch (error) {
// sowy :(
}
if (typeof payload.metadata === "object") {
metadata = {
...metadata,
...payload.metadata,
}
}
if (typeof payload.metadata === "object") {
metadata = {
...metadata,
...payload.metadata,
}
}
metadata.format = metadata.format.toUpperCase()
if (metadata.format) {
metadata.format = metadata.format.toUpperCase()
}
if (
metadata.format === "FLAC" ||
metadata.format === "WAV" ||
metadata.format === "ALAC"
) {
metadata.lossless = true
}
if (
metadata.format === "FLAC" ||
metadata.format === "WAV" ||
metadata.format === "ALAC"
) {
metadata.lossless = true
}
const obj = {
title: payload.title,
album: payload.album,
cover: payload.cover,
artists: [],
source: payload.source,
metadata: metadata,
lyrics_enabled: payload.lyrics_enabled,
}
const obj = {
title: payload.title,
album: payload.album,
cover: payload.cover,
artists: [],
source: payload.source,
metadata: metadata,
lyrics_enabled: payload.lyrics_enabled,
}
if (Array.isArray(payload.artists)) {
obj.artists = payload.artists
}
if (Array.isArray(payload.artists)) {
obj.artists = payload.artists
}
if (typeof payload.artists === "string") {
obj.artists.push(payload.artists)
}
if (typeof payload.artists === "string") {
obj.artists.push(payload.artists)
}
if (typeof payload.artist === "string") {
obj.artists.push(payload.artist)
}
if (typeof payload.artist === "string") {
obj.artists.push(payload.artist)
}
if (obj.artists.length === 0 || !obj.artists) {
obj.artists = metadata.artists
}
if (obj.artists.length === 0 || !obj.artists) {
obj.artists = metadata.artists
}
let track = null
let track = null
if (payload._id) {
track = await Track.findById(payload._id)
if (payload._id) {
track = await Track.findById(payload._id)
if (!track) {
throw new OperationError(404, "Track not found, cannot update")
}
if (!track) {
throw new OperationError(404, "Track not found, cannot update")
}
throw new OperationError(501, "Not implemented")
} else {
track = new Track({
...obj,
publisher: {
user_id: payload.user_id,
}
})
throw new OperationError(501, "Not implemented")
} else {
track = new Track({
...obj,
publisher: {
user_id: payload.user_id,
},
})
await track.save()
}
await track.save()
}
track = track.toObject()
track = track.toObject()
return track
}
return track
}