47 lines
1.6 KiB
JavaScript
47 lines
1.6 KiB
JavaScript
/**
|
|
* Avatar Utilities Module
|
|
* Handles safe avatar/thumbnail URL generation with error handling
|
|
*/
|
|
|
|
import { getThumbnailUrl } from '../../../../../../script.js';
|
|
|
|
/**
|
|
* Safely retrieves a thumbnail URL from SillyTavern's API with error handling.
|
|
* Returns null instead of throwing errors to prevent extension crashes.
|
|
*
|
|
* @param {string} type - Type of thumbnail ('avatar' or 'persona')
|
|
* @param {string} filename - Filename of the avatar/persona
|
|
* @returns {string|null} Thumbnail URL or null if unavailable/error
|
|
*/
|
|
export function getSafeThumbnailUrl(type, filename) {
|
|
// Return null if no filename provided
|
|
if (!filename || filename === 'none') {
|
|
// console.log(`[RPG Companion] No valid filename provided for ${type} thumbnail`);
|
|
return null;
|
|
}
|
|
|
|
try {
|
|
// Attempt to get thumbnail URL from SillyTavern API
|
|
const url = getThumbnailUrl(type, filename);
|
|
|
|
// Validate that we got a string back
|
|
if (typeof url !== 'string' || url.trim() === '') {
|
|
console.warn(`[RPG Companion] getThumbnailUrl returned invalid result for ${type}:`, filename);
|
|
return null;
|
|
}
|
|
|
|
// console.log(`[RPG Companion] Successfully generated ${type} thumbnail URL for: ${filename}`);
|
|
return url;
|
|
} catch (error) {
|
|
// Log detailed error information for debugging
|
|
console.error(`[RPG Companion] Failed to get ${type} thumbnail for "${filename}":`, error);
|
|
console.error('[RPG Companion] Error details:', {
|
|
type,
|
|
filename,
|
|
errorMessage: error.message,
|
|
errorStack: error.stack
|
|
});
|
|
return null;
|
|
}
|
|
}
|