diff --git a/packages/app/src/pages/music/creator/components/TracksUploads/index.jsx b/packages/app/src/pages/music/creator/components/TracksUploads/index.jsx index 59a79503..79aeee6a 100644 --- a/packages/app/src/pages/music/creator/components/TracksUploads/index.jsx +++ b/packages/app/src/pages/music/creator/components/TracksUploads/index.jsx @@ -4,6 +4,8 @@ import classnames from "classnames" import { DragDropContext, Droppable, Draggable } from "react-beautiful-dnd" import UploadButton from "components/UploadButton" +import PlaylistModel from "models/playlists" + import { Icons } from "components/Icons" import "./index.less" @@ -28,6 +30,10 @@ const FileItemEditor = (props) => { }) } + const onRefreshCache = () => { + props.onRefreshCache(track) + } + const onClose = () => { if (typeof props.close === "function") { props.close() @@ -50,19 +56,19 @@ const FileItemEditor = (props) => {
- +
handleChange("thumbnail", file.url)} + onUploadDone={(file) => handleChange("cover", file.url)} /> { - track.thumbnail && } type="text" - onClick={() => handleChange("thumbnail", null)} + onClick={() => handleChange("cover", null)} > Remove @@ -149,6 +155,15 @@ const FileItemEditor = (props) => {
+ { + track._id && } + onClick={onRefreshCache} + > + Refresh Cache + + } } @@ -194,7 +209,7 @@ const FileListItem = (props) => {
Track cover
@@ -276,12 +291,27 @@ export default (props) => { const onClickEditTrack = (track) => { app.DrawerController.open("track_editor", FileItemEditor, { type: "drawer", + props: { + width: "25vw", + minWidth: "500px", + }, componentProps: { track, onSave: (newTrackData) => { console.log("Saving track", newTrackData) props.handleTrackInfoChange(newTrackData.uid, newTrackData) + }, + onRefreshCache: () => { + console.log("Refreshing cache for track", track.uid) + + PlaylistModel.refreshTrackCache(track._id) + .catch(() => { + app.message.error("Failed to refresh cache for track") + }) + .then(() => { + app.message.success("Successfully refreshed cache for track") + }) } }, }) diff --git a/packages/comty.js/src/models/playlists/index.js b/packages/comty.js/src/models/playlists/index.js index 51c4ddac..99e23b9e 100755 --- a/packages/comty.js/src/models/playlists/index.js +++ b/packages/comty.js/src/models/playlists/index.js @@ -5,6 +5,20 @@ export default class PlaylistsModel { return globalThis.__comty_shared_state.instances["music"] } + static refreshTrackCache = async (track_id) => { + if (!track_id) { + throw new Error("Track ID is required") + } + + const { data } = await request({ + instance: PlaylistsModel.api_instance, + method: "POST", + url: `/tracks/${track_id}/refresh-cache`, + }) + + return data + } + static putPlaylist = async (payload) => { if (!payload) { throw new Error("Payload is required") diff --git a/packages/music_server/src/controllers/tracks/routes/post/:track_id/refresh-cache.js b/packages/music_server/src/controllers/tracks/routes/post/:track_id/refresh-cache.js new file mode 100644 index 00000000..198dca30 --- /dev/null +++ b/packages/music_server/src/controllers/tracks/routes/post/:track_id/refresh-cache.js @@ -0,0 +1,32 @@ +import { Track } from "@models" +import { NotFoundError } from "@classes/Errors" +import getEnhancedLyricsFromTrack from "@services/getEnhancedLyricsFromTrack" + +export default async (req, res) => { + const { track_id } = req.params + + let track = await Track.findOne({ + _id: track_id, + public: true, + }).catch((err) => { + return null + }) + + if (!track) { + return new NotFoundError(req, res, "Track not found") + } + + if (track.lyricsEnabled) { + const enhancedLyrics = await getEnhancedLyricsFromTrack(track, { req }).catch((err) => { + return false + }) + + if (enhancedLyrics) { + await global.redis.set(`lyrics:${track._id.toString()}`, JSON.stringify(enhancedLyrics), "EX", 60 * 60 * 24 * 30) + } + } + + return res.json({ + success: true, + }) +} \ No newline at end of file