SrGooglo 8482f2e457 Feat: Implement Music Library and overhaul Studio TV
- Introduces a new Music Library system for managing favorites (tracks,
  playlists, releases), replacing the previous TrackLike model.
- Completely revamps the Studio TV profile page, adding live statistics,
  stream configuration, restream management, and media URL display.
- Enhances the media player with a custom seekbar and improved audio
  playback logic for MPD and non-MPD sources.
- Lays foundational groundwork for chat encryption with new models and APIs.
- Refactors critical UI components like PlaylistView and PagePanel.
- Standardizes monorepo development scripts to use npm.
- Updates comty.js submodule and adds various new UI components.
2025-05-10 02:32:41 +00:00

46 lines
866 B
JavaScript

import { MusicLibraryItem } from "@db_models"
export default async (user_id, item_id, kind) => {
if (!user_id) {
throw new OperationError(400, "Missing user_id")
}
if (!item_id) {
throw new OperationError(400, "Missing item_id")
}
if (Array.isArray(item_id)) {
const libraryItems = await MusicLibraryItem.find({
user_id: user_id,
item_id: { $in: item_id },
kind: kind,
})
.lean()
.catch(() => {
return []
})
return item_id.map((id) => {
const libItem = libraryItems.find(
(item) => item.item_id.toString() === id.toString(),
)
return {
item_id: id,
liked: !!libItem,
created_at: libItem?.created_at,
}
})
} else {
let libraryItem = await MusicLibraryItem.findOne({
user_id: user_id,
item_id: item_id,
kind: kind,
}).catch(() => null)
return {
liked: !!libraryItem,
}
}
}