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) => {
+ {
+ track._id &&
}
+ onClick={onRefreshCache}
+ >
+ Refresh Cache
+
+ }
}
@@ -194,7 +209,7 @@ const FileListItem = (props) => {
@@ -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