wishlist button
This commit is contained in:
parent
888299fe83
commit
017d72b38a
3 changed files with 82 additions and 0 deletions
|
|
@ -3453,6 +3453,18 @@ def get_database_stats():
|
||||||
print(f"Error getting database stats: {e}")
|
print(f"Error getting database stats: {e}")
|
||||||
return jsonify({"error": str(e)}), 500
|
return jsonify({"error": str(e)}), 500
|
||||||
|
|
||||||
|
@app.route('/api/wishlist/count', methods=['GET'])
|
||||||
|
def get_wishlist_count():
|
||||||
|
"""Endpoint to get current wishlist count."""
|
||||||
|
try:
|
||||||
|
from core.wishlist_service import get_wishlist_service
|
||||||
|
wishlist_service = get_wishlist_service()
|
||||||
|
count = wishlist_service.get_wishlist_count()
|
||||||
|
return jsonify({"count": count})
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error getting wishlist count: {e}")
|
||||||
|
return jsonify({"error": str(e)}), 500
|
||||||
|
|
||||||
@app.route('/api/database/update', methods=['POST'])
|
@app.route('/api/database/update', methods=['POST'])
|
||||||
def start_database_update():
|
def start_database_update():
|
||||||
"""Endpoint to start the database update process."""
|
"""Endpoint to start the database update process."""
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ let isSortReversed = false;
|
||||||
let searchAbortController = null;
|
let searchAbortController = null;
|
||||||
let dbStatsInterval = null;
|
let dbStatsInterval = null;
|
||||||
let dbUpdateStatusInterval = null;
|
let dbUpdateStatusInterval = null;
|
||||||
|
let wishlistCountInterval = null;
|
||||||
|
|
||||||
// --- Add these globals for the Sync Page ---
|
// --- Add these globals for the Sync Page ---
|
||||||
let spotifyPlaylists = [];
|
let spotifyPlaylists = [];
|
||||||
|
|
@ -273,6 +274,7 @@ async function loadPageData(pageId) {
|
||||||
// Stop any active polling when navigating away
|
// Stop any active polling when navigating away
|
||||||
stopDbStatsPolling();
|
stopDbStatsPolling();
|
||||||
stopDbUpdatePolling();
|
stopDbUpdatePolling();
|
||||||
|
stopWishlistCountPolling();
|
||||||
switch (pageId) {
|
switch (pageId) {
|
||||||
case 'dashboard':
|
case 'dashboard':
|
||||||
stopDownloadPolling();
|
stopDownloadPolling();
|
||||||
|
|
@ -1733,6 +1735,14 @@ async function loadDashboardData() {
|
||||||
</div>
|
</div>
|
||||||
`).join('');
|
`).join('');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Initialize wishlist count when dashboard loads
|
||||||
|
await updateWishlistCount();
|
||||||
|
|
||||||
|
// Start periodic refresh of wishlist count (every 30 seconds, matching GUI behavior)
|
||||||
|
stopWishlistCountPolling(); // Ensure no duplicates
|
||||||
|
wishlistCountInterval = setInterval(updateWishlistCount, 30000);
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error loading dashboard data:', error);
|
console.error('Error loading dashboard data:', error);
|
||||||
}
|
}
|
||||||
|
|
@ -4946,6 +4956,13 @@ function stopDbUpdatePolling() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function stopWishlistCountPolling() {
|
||||||
|
if (wishlistCountInterval) {
|
||||||
|
clearInterval(wishlistCountInterval);
|
||||||
|
wishlistCountInterval = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function loadDashboardData() {
|
async function loadDashboardData() {
|
||||||
// Attach event listeners for the DB updater tool
|
// Attach event listeners for the DB updater tool
|
||||||
const updateButton = document.getElementById('db-update-button');
|
const updateButton = document.getElementById('db-update-button');
|
||||||
|
|
@ -4960,6 +4977,13 @@ async function loadDashboardData() {
|
||||||
stopDbStatsPolling(); // Ensure no duplicates
|
stopDbStatsPolling(); // Ensure no duplicates
|
||||||
dbStatsInterval = setInterval(fetchAndUpdateDbStats, 30000);
|
dbStatsInterval = setInterval(fetchAndUpdateDbStats, 30000);
|
||||||
|
|
||||||
|
// Initial load of wishlist count
|
||||||
|
await updateWishlistCount();
|
||||||
|
|
||||||
|
// Start periodic refresh of wishlist count (every 30 seconds, matching GUI behavior)
|
||||||
|
stopWishlistCountPolling(); // Ensure no duplicates
|
||||||
|
wishlistCountInterval = setInterval(updateWishlistCount, 30000);
|
||||||
|
|
||||||
// Also check the status of any ongoing update when the page loads
|
// Also check the status of any ongoing update when the page loads
|
||||||
await checkAndUpdateDbProgress();
|
await checkAndUpdateDbProgress();
|
||||||
}
|
}
|
||||||
|
|
@ -5021,6 +5045,35 @@ function updateDbUpdaterCardInfo(stats) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --- Wishlist Count Functions ---
|
||||||
|
|
||||||
|
async function updateWishlistCount() {
|
||||||
|
try {
|
||||||
|
const response = await fetch('/api/wishlist/count');
|
||||||
|
if (!response.ok) return;
|
||||||
|
|
||||||
|
const data = await response.json();
|
||||||
|
const count = data.count || 0;
|
||||||
|
|
||||||
|
const wishlistButton = document.getElementById('wishlist-button');
|
||||||
|
if (wishlistButton) {
|
||||||
|
wishlistButton.textContent = `🎵 Wishlist (${count})`;
|
||||||
|
|
||||||
|
// Update button styling based on count (matching GUI behavior)
|
||||||
|
if (count === 0) {
|
||||||
|
wishlistButton.classList.remove('wishlist-active');
|
||||||
|
wishlistButton.classList.add('wishlist-inactive');
|
||||||
|
} else {
|
||||||
|
wishlistButton.classList.remove('wishlist-inactive');
|
||||||
|
wishlistButton.classList.add('wishlist-active');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
console.warn('Could not fetch wishlist count:', error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function checkAndUpdateDbProgress() {
|
async function checkAndUpdateDbProgress() {
|
||||||
try {
|
try {
|
||||||
const response = await fetch('/api/database/update/status');
|
const response = await fetch('/api/database/update/status');
|
||||||
|
|
|
||||||
|
|
@ -3411,6 +3411,23 @@ body {
|
||||||
background: linear-gradient(135deg, #1ed760 0%, #22ff6b 100%);
|
background: linear-gradient(135deg, #1ed760 0%, #22ff6b 100%);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Wishlist button states based on count */
|
||||||
|
.wishlist-button.wishlist-inactive {
|
||||||
|
background: linear-gradient(135deg, #404040 0%, #505050 100%);
|
||||||
|
color: #888888;
|
||||||
|
}
|
||||||
|
.wishlist-button.wishlist-inactive:hover {
|
||||||
|
background: linear-gradient(135deg, #505050 0%, #666666 100%);
|
||||||
|
color: #999999;
|
||||||
|
}
|
||||||
|
.wishlist-button.wishlist-active {
|
||||||
|
background: linear-gradient(135deg, #1db954 0%, #1ed760 100%);
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
.wishlist-button.wishlist-active:hover {
|
||||||
|
background: linear-gradient(135deg, #1ed760 0%, #22ff6b 100%);
|
||||||
|
}
|
||||||
|
|
||||||
.watchlist-button {
|
.watchlist-button {
|
||||||
background: linear-gradient(135deg, #ffc107 0%, #ffca28 100%);
|
background: linear-gradient(135deg, #ffc107 0%, #ffca28 100%);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue