From b0194e10a87e16797a568d8a30d53ebecd27d8a4 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Sat, 18 Oct 2025 15:04:51 +0000
Subject: [PATCH] =DataStore.js and UploaderManager.js overhaul

---
 assets/js/concise/FrontendFavourites.js |  126 +++++++++++++++++++++++++++++++++++++++--
 1 files changed, 118 insertions(+), 8 deletions(-)

diff --git a/assets/js/concise/FrontendFavourites.js b/assets/js/concise/FrontendFavourites.js
index 2ef641b..769b4aa 100644
--- a/assets/js/concise/FrontendFavourites.js
+++ b/assets/js/concise/FrontendFavourites.js
@@ -3,9 +3,13 @@
 		// Initialize DataStore for queue persistence
 		this.store = new window.jvbStore({
 			name: 'favourites',
+			storeName: 'favourites',
 			endpoint: 'favourites',
-			useIndexedDB: true,
-			TTL: Infinity,
+			indexes: [
+				{name: 'content', keyPath: 'content'},
+				{name: 'listId', keyPath: 'listId'},
+			],
+			TTL: 86400000,
 			showLoading: false,
 			filters: {
 				user: jvbSettings.currentUser,
@@ -17,6 +21,14 @@
 			}
 		});
 
+		this.listStore = new window.jvbStore({
+			name: 'favourites_lists',
+			storeName: 'lists',
+			keyPath: 'listId',
+			endpoint: 'favourites/lists',
+			TTL: 86400000,
+		})
+
 		this.store.subscribe((event, data) => {
 			switch (event) {
 				case 'data-fetched':
@@ -61,12 +73,110 @@
 		});
 	}
 
-	isFavourited(content, id){
-		if(!jvbSettings.currentUser){
-			return false;
-		}
-		let item = this.store.getItem(id);
-		return (item) ? item.action === 'add' : false;
+	// async toggleFavourite(itemType, itemId) {
+	// 	const favId = `${this.userId}_${itemType}_${itemId}`;
+	// 	const existing = this.store.get(favId);
+	//
+	// 	if (existing) {
+	// 		// Remove favorite
+	// 		await this.store.delete(favId);
+	//
+	// 		// Queue for server deletion
+	// 		if (window.jvbQueue) {
+	// 			window.jvbQueue.addOperation({
+	// 				type: 'remove_favourite',
+	// 				endpoint: 'favourites',
+	// 				data: { favId }
+	// 			});
+	// 		}
+	//
+	// 		return false; // Not favorited anymore
+	//
+	// 	} else {
+	// 		// Add favorite
+	// 		const favourite = {
+	// 			id: favId,
+	// 			userId: this.userId,
+	// 			itemType,
+	// 			itemId,
+	// 			listId: 'default',
+	// 			timestamp: Date.now()
+	// 		};
+	//
+	// 		await this.store.save(favourite);
+	//
+	// 		// Queue for server save
+	// 		if (window.jvbQueue) {
+	// 			window.jvbQueue.addOperation({
+	// 				type: 'add_favourite',
+	// 				endpoint: 'favourites',
+	// 				data: favourite
+	// 			});
+	// 		}
+	//
+	// 		return true; // Now favorited
+	// 	}
+	// }
+
+
+	// async createList(name, visibility = 'private') {
+	// 	const list = {
+	// 		listId: `list_${Date.now()}`,
+	// 		userId: this.userId,
+	// 		name,
+	// 		visibility,
+	// 		created: Date.now(),
+	// 		itemCount: 0
+	// 	};
+	//
+	// 	await this.listsStore.save(list);
+	//
+	// 	// Queue for server
+	// 	if (window.jvbQueue) {
+	// 		window.jvbQueue.addOperation({
+	// 			type: 'create_list',
+	// 			endpoint: 'favourite-lists',
+	// 			data: list
+	// 		});
+	// 	}
+	//
+	// 	return list;
+	// }
+	//
+	// async addToList(listId, itemType, itemId) {
+	// 	const favId = `${this.userId}_${itemType}_${itemId}_${listId}`;
+	//
+	// 	const favourite = {
+	// 		id: favId,
+	// 		userId: this.userId,
+	// 		itemType,
+	// 		itemId,
+	// 		listId,
+	// 		timestamp: Date.now()
+	// 	};
+	//
+	// 	await this.store.save(favourite);
+	//
+	// 	// Update list count
+	// 	const list = this.listsStore.get(listId);
+	// 	if (list) {
+	// 		list.itemCount++;
+	// 		await this.listsStore.save(list);
+	// 	}
+	//
+	// 	// Queue for server
+	// 	if (window.jvbQueue) {
+	// 		window.jvbQueue.addOperation({
+	// 			type: 'add_to_list',
+	// 			endpoint: 'favourites',
+	// 			data: favourite
+	// 		});
+	// 	}
+	// }
+
+	isFavourited(itemType, itemId) {
+		const favId = `${this.userId}_${itemType}_${itemId}`;
+		return this.store.get(favId) !== undefined;
 	}
 }
 document.addEventListener('DOMContentLoaded', function() {

--
Gitblit v1.10.0