Adds ability to rename favorite

This commit is contained in:
2025-03-05 00:10:23 -08:00
parent 0a86dbed49
commit 2b533cf1db
6 changed files with 187 additions and 20 deletions

View File

@@ -106,6 +106,24 @@ export class FavoritesStore {
await this.saveFavorites();
}
async updateFavoriteTitle(filename: string, title: string): Promise<void> {
console.log(`Updating title for favorite ${filename} to "${title}"`);
const index = this.favorites.findIndex(f => f.filename === filename);
if (index !== -1) {
// Create metadata object if it doesn't exist
if (!this.favorites[index].metadata) {
this.favorites[index].metadata = {};
}
// Update the title in metadata
this.favorites[index].metadata!.title = title;
await this.saveFavorites();
} else {
throw new Error(`Favorite with filename ${filename} not found`);
}
}
async clearFavorites(): Promise<void> {
this.favorites = [];
await this.saveFavorites();

View File

@@ -186,6 +186,10 @@ export class MediaPlayer {
return this.favoritesStore.clearFavorites();
}
public async updateFavoriteTitle(filename: string, title: string) {
return this.favoritesStore.updateFavoriteTitle(filename, title);
}
private async loadFile(url: string, mode: string) {
this.modify(UserEvent.PlaylistUpdate, () => this.writeCommand("loadfile", [url, mode]));
@@ -257,7 +261,7 @@ export class MediaPlayer {
}
private handleEvent(event: string, data: any) {
console.log("Event [" + event + "]: " + JSON.stringify(data, null, 2));
console.log("Event [" + event + "]: ", data);
// Notify all subscribers
this.eventSubscribers.forEach(subscriber => {
@@ -294,4 +298,4 @@ export class MediaPlayer {
}
}
}
}
}

View File

@@ -158,6 +158,22 @@ apiRouter.delete("/favorites", withErrorHandling(async (req, res) => {
res.send(JSON.stringify({ success: true }));
}));
apiRouter.put("/favorites/:filename/title", withErrorHandling(async (req, res) => {
const { filename } = req.params as { filename: string };
const { title } = req.body as { title: string };
if (!title) {
res.status(400).send(JSON.stringify({
success: false,
error: "Title is required"
}));
return;
}
await mediaPlayer.updateFavoriteTitle(filename, title);
res.send(JSON.stringify({ success: true }));
}));
// Serve static files for React app (after building)
app.use(express.static(path.join(__dirname, "../dist/frontend")));