Fix frontend JavaScript to work with define-api endpoints
- Update API paths from /asteroid/api/ to /api/asteroid/ in users.js and profile.js - Add RADIANCE API wrapper handling for icecast-status responses - Improve error handling in player.js loadTracks function - All frontend code now properly handles define-api response format
This commit is contained in:
parent
a77b7768c4
commit
82785e1da1
|
|
@ -57,9 +57,11 @@ async function updateNowPlaying() {
|
||||||
try {
|
try {
|
||||||
const response = await fetch('/api/asteroid/icecast-status')
|
const response = await fetch('/api/asteroid/icecast-status')
|
||||||
const data = await response.json()
|
const data = await response.json()
|
||||||
if (data.icestats && data.icestats.source) {
|
// Handle RADIANCE API wrapper format
|
||||||
|
const icecastData = data.data || data;
|
||||||
|
if (icecastData.icestats && icecastData.icestats.source) {
|
||||||
// Find the high quality stream (asteroid.mp3)
|
// Find the high quality stream (asteroid.mp3)
|
||||||
const sources = Array.isArray(data.icestats.source) ? data.icestats.source : [data.icestats.source];
|
const sources = Array.isArray(icecastData.icestats.source) ? icecastData.icestats.source : [icecastData.icestats.source];
|
||||||
const mainStream = sources.find(s => s.listenurl && s.listenurl.includes('asteroid.mp3'));
|
const mainStream = sources.find(s => s.listenurl && s.listenurl.includes('asteroid.mp3'));
|
||||||
|
|
||||||
if (mainStream && mainStream.title) {
|
if (mainStream && mainStream.title) {
|
||||||
|
|
|
||||||
|
|
@ -56,11 +56,16 @@ async function loadTracks() {
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
throw new Error(`HTTP ${response.status}`);
|
throw new Error(`HTTP ${response.status}`);
|
||||||
}
|
}
|
||||||
const data = await response.json();
|
const result = await response.json();
|
||||||
|
// Handle RADIANCE API wrapper format
|
||||||
|
const data = result.data || result;
|
||||||
|
|
||||||
if (data.status === 'success') {
|
if (data.status === 'success') {
|
||||||
tracks = data.tracks || [];
|
tracks = data.tracks || [];
|
||||||
displayTracks(tracks);
|
displayTracks(tracks);
|
||||||
|
} else {
|
||||||
|
console.error('Error loading tracks:', data.error);
|
||||||
|
document.getElementById('track-list').innerHTML = '<div class="error">Error loading tracks</div>';
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error loading tracks:', error);
|
console.error('Error loading tracks:', error);
|
||||||
|
|
@ -566,9 +571,11 @@ async function updateLiveStream() {
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
throw new Error(`HTTP ${response.status}`);
|
throw new Error(`HTTP ${response.status}`);
|
||||||
}
|
}
|
||||||
const data = await response.json();
|
const result = await response.json();
|
||||||
console.log('Live stream data:', data); // Debug log
|
console.log('Live stream data:', result); // Debug log
|
||||||
|
|
||||||
|
// Handle RADIANCE API wrapper format
|
||||||
|
const data = result.data || result;
|
||||||
if (data.icestats && data.icestats.source) {
|
if (data.icestats && data.icestats.source) {
|
||||||
const sources = Array.isArray(data.icestats.source) ? data.icestats.source : [data.icestats.source];
|
const sources = Array.isArray(data.icestats.source) ? data.icestats.source : [data.icestats.source];
|
||||||
const mainStream = sources.find(s => s.listenurl && s.listenurl.includes('asteroid.mp3'));
|
const mainStream = sources.find(s => s.listenurl && s.listenurl.includes('asteroid.mp3'));
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ function loadProfileData() {
|
||||||
console.log('Loading profile data...');
|
console.log('Loading profile data...');
|
||||||
|
|
||||||
// Load user info
|
// Load user info
|
||||||
fetch('/asteroid/api/user/profile')
|
fetch('/api/asteroid/user/profile')
|
||||||
.then(response => response.json())
|
.then(response => response.json())
|
||||||
.then(data => {
|
.then(data => {
|
||||||
if (data.status === 'success') {
|
if (data.status === 'success') {
|
||||||
|
|
@ -50,7 +50,7 @@ function updateProfileDisplay(user) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadListeningStats() {
|
function loadListeningStats() {
|
||||||
fetch('/asteroid/api/user/listening-stats')
|
fetch('/api/asteroid/user/listening-stats')
|
||||||
.then(response => response.json())
|
.then(response => response.json())
|
||||||
.then(data => {
|
.then(data => {
|
||||||
if (data.status === 'success') {
|
if (data.status === 'success') {
|
||||||
|
|
@ -72,7 +72,7 @@ function loadListeningStats() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadRecentTracks() {
|
function loadRecentTracks() {
|
||||||
fetch('/asteroid/api/user/recent-tracks?limit=3')
|
fetch('/api/asteroid/user/recent-tracks?limit=3')
|
||||||
.then(response => response.json())
|
.then(response => response.json())
|
||||||
.then(data => {
|
.then(data => {
|
||||||
if (data.status === 'success' && data.tracks.length > 0) {
|
if (data.status === 'success' && data.tracks.length > 0) {
|
||||||
|
|
@ -99,7 +99,7 @@ function loadRecentTracks() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadTopArtists() {
|
function loadTopArtists() {
|
||||||
fetch('/asteroid/api/user/top-artists?limit=5')
|
fetch('/api/asteroid/user/top-artists?limit=5')
|
||||||
.then(response => response.json())
|
.then(response => response.json())
|
||||||
.then(data => {
|
.then(data => {
|
||||||
if (data.status === 'success' && data.artists.length > 0) {
|
if (data.status === 'success' && data.artists.length > 0) {
|
||||||
|
|
@ -139,7 +139,7 @@ function exportListeningData() {
|
||||||
console.log('Exporting listening data...');
|
console.log('Exporting listening data...');
|
||||||
showMessage('Preparing data export...', 'info');
|
showMessage('Preparing data export...', 'info');
|
||||||
|
|
||||||
fetch('/asteroid/api/user/export-data', {
|
fetch('/api/asteroid/user/export-data', {
|
||||||
method: 'POST'
|
method: 'POST'
|
||||||
})
|
})
|
||||||
.then(response => response.blob())
|
.then(response => response.blob())
|
||||||
|
|
@ -168,7 +168,7 @@ function clearListeningHistory() {
|
||||||
console.log('Clearing listening history...');
|
console.log('Clearing listening history...');
|
||||||
showMessage('Clearing listening history...', 'info');
|
showMessage('Clearing listening history...', 'info');
|
||||||
|
|
||||||
fetch('/asteroid/api/user/clear-history', {
|
fetch('/api/asteroid/user/clear-history', {
|
||||||
method: 'POST'
|
method: 'POST'
|
||||||
})
|
})
|
||||||
.then(response => response.json())
|
.then(response => response.json())
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
|
||||||
async function loadUserStats() {
|
async function loadUserStats() {
|
||||||
try {
|
try {
|
||||||
const response = await fetch('/asteroid/api/users/stats');
|
const response = await fetch('/api/asteroid/users/stats');
|
||||||
const result = await response.json();
|
const result = await response.json();
|
||||||
|
|
||||||
if (result.status === 'success') {
|
if (result.status === 'success') {
|
||||||
|
|
@ -37,7 +37,7 @@ async function loadUserStats() {
|
||||||
|
|
||||||
async function loadUsers() {
|
async function loadUsers() {
|
||||||
try {
|
try {
|
||||||
const response = await fetch('/asteroid/api/users');
|
const response = await fetch('/api/asteroid/users');
|
||||||
const result = await response.json();
|
const result = await response.json();
|
||||||
|
|
||||||
if (result.status === 'success') {
|
if (result.status === 'success') {
|
||||||
|
|
@ -101,7 +101,7 @@ async function updateUserRole(userId, newRole) {
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
formData.append('role', newRole);
|
formData.append('role', newRole);
|
||||||
|
|
||||||
const response = await fetch(`/asteroid/api/users/${userId}/role`, {
|
const response = await fetch(`/api/asteroid/users/${userId}/role`, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
body: formData
|
body: formData
|
||||||
});
|
});
|
||||||
|
|
@ -126,7 +126,7 @@ async function deactivateUser(userId) {
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await fetch(`/asteroid/api/users/${userId}/deactivate`, {
|
const response = await fetch(`/api/asteroid/users/${userId}/deactivate`, {
|
||||||
method: 'POST'
|
method: 'POST'
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -147,7 +147,7 @@ async function deactivateUser(userId) {
|
||||||
|
|
||||||
async function activateUser(userId) {
|
async function activateUser(userId) {
|
||||||
try {
|
try {
|
||||||
const response = await fetch(`/asteroid/api/users/${userId}/activate`, {
|
const response = await fetch(`/api/asteroid/users/${userId}/activate`, {
|
||||||
method: 'POST'
|
method: 'POST'
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -195,7 +195,7 @@ async function createNewUser(event) {
|
||||||
formData.append('password', password);
|
formData.append('password', password);
|
||||||
formData.append('role', role);
|
formData.append('role', role);
|
||||||
|
|
||||||
const response = await fetch('/asteroid/api/users/create', {
|
const response = await fetch('/api/asteroid/users/create', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
body: formData
|
body: formData
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue