diff --git a/src/systems/rendering/thoughts.js b/src/systems/rendering/thoughts.js index af42aa6..3d59c26 100644 --- a/src/systems/rendering/thoughts.js +++ b/src/systems/rendering/thoughts.js @@ -177,6 +177,9 @@ export function renderThoughts() { // Build HTML let html = ''; + debugLog('[RPG Thoughts] ==================== BUILDING HTML ===================='); + debugLog('[RPG Thoughts] Starting HTML generation for', presentCharacters.length + ' characters'); + // If no characters parsed, show a placeholder editable card if (presentCharacters.length === 0) { debugLog('[RPG Thoughts] ⚠ No characters parsed - showing placeholder card'); @@ -214,70 +217,106 @@ export function renderThoughts() { html += ''; } else { html += '
'; + + let characterIndex = 0; for (const char of presentCharacters) { - // Find character portrait - // Use a base64-encoded SVG placeholder as fallback to avoid 400 errors - let characterPortrait = FALLBACK_AVATAR_DATA_URI; + characterIndex++; - // console.log('[RPG Companion] Looking for avatar for:', char.name); + try { + debugLog(`[RPG Thoughts] Building HTML for character ${characterIndex}/${presentCharacters.length}:`, char.name); - // For group chats, search through group members first - if (selected_group) { - const groupMembers = getGroupMembers(selected_group); - const matchingMember = groupMembers.find(member => - member && member.name && namesMatch(member.name, char.name) - ); + // Find character portrait + // Use a base64-encoded SVG placeholder as fallback to avoid 400 errors + let characterPortrait = FALLBACK_AVATAR_DATA_URI; - if (matchingMember && matchingMember.avatar && matchingMember.avatar !== 'none') { - const thumbnailUrl = getSafeThumbnailUrl('avatar', matchingMember.avatar); - if (thumbnailUrl) { - characterPortrait = thumbnailUrl; + debugLog(`[RPG Thoughts] Looking up avatar for: ${char.name}`); + + // For group chats, search through group members first + if (selected_group) { + debugLog('[RPG Thoughts] In group chat, checking group members...'); + + try { + const groupMembers = getGroupMembers(selected_group); + debugLog('[RPG Thoughts] Group members count:', groupMembers ? groupMembers.length : 0); + + if (groupMembers && groupMembers.length > 0) { + const matchingMember = groupMembers.find(member => + member && member.name && namesMatch(member.name, char.name) + ); + + if (matchingMember && matchingMember.avatar && matchingMember.avatar !== 'none') { + const thumbnailUrl = getSafeThumbnailUrl('avatar', matchingMember.avatar); + if (thumbnailUrl) { + characterPortrait = thumbnailUrl; + debugLog('[RPG Thoughts] Found avatar in group members'); + } + } + } + } catch (groupError) { + debugLog('[RPG Thoughts] Error checking group members:', groupError.message); } } - } - // For regular chats or if not found in group, search all characters - if (characterPortrait === FALLBACK_AVATAR_DATA_URI && characters && characters.length > 0) { - const matchingCharacter = characters.find(c => - c && c.name && namesMatch(c.name, char.name) - ); + // For regular chats or if not found in group, search all characters + if (characterPortrait === FALLBACK_AVATAR_DATA_URI && characters && characters.length > 0) { + debugLog('[RPG Thoughts] Searching all characters...'); - if (matchingCharacter && matchingCharacter.avatar && matchingCharacter.avatar !== 'none') { - const thumbnailUrl = getSafeThumbnailUrl('avatar', matchingCharacter.avatar); - if (thumbnailUrl) { - characterPortrait = thumbnailUrl; + const matchingCharacter = characters.find(c => + c && c.name && namesMatch(c.name, char.name) + ); + + if (matchingCharacter && matchingCharacter.avatar && matchingCharacter.avatar !== 'none') { + const thumbnailUrl = getSafeThumbnailUrl('avatar', matchingCharacter.avatar); + if (thumbnailUrl) { + characterPortrait = thumbnailUrl; + debugLog('[RPG Thoughts] Found avatar in all characters'); + } } } - } - // If this is the current character in a 1-on-1 chat, use their portrait - if (this_chid !== undefined && characters[this_chid] && - characters[this_chid].name && namesMatch(characters[this_chid].name, char.name)) { - const thumbnailUrl = getSafeThumbnailUrl('avatar', characters[this_chid].avatar); - if (thumbnailUrl) { - characterPortrait = thumbnailUrl; + // If this is the current character in a 1-on-1 chat, use their portrait + if (this_chid !== undefined && characters[this_chid] && + characters[this_chid].name && namesMatch(characters[this_chid].name, char.name)) { + const thumbnailUrl = getSafeThumbnailUrl('avatar', characters[this_chid].avatar); + if (thumbnailUrl) { + characterPortrait = thumbnailUrl; + debugLog('[RPG Thoughts] Found avatar from current character'); + } } - } - // Get relationship emoji - const relationshipEmoji = relationshipEmojis[char.relationship] || '⚖️'; + debugLog(`[RPG Thoughts] Final avatar for ${char.name}:`, characterPortrait.substring(0, 50) + '...'); - html += ` -
-
- ${char.name} -
${relationshipEmoji}
-
-
-
- ${char.emoji} - ${char.name} + // Get relationship emoji + const relationshipEmoji = relationshipEmojis[char.relationship] || '⚖️'; + + debugLog(`[RPG Thoughts] Building HTML card for ${char.name}...`); + + html += ` +
+
+ ${char.name} +
${relationshipEmoji}
+
+
+
+ ${char.emoji} + ${char.name} +
+
${char.traits}
-
${char.traits}
-
- `; + `; + + debugLog(`[RPG Thoughts] ✓ Successfully built HTML for ${char.name}`); + + } catch (charError) { + debugLog(`[RPG Thoughts] ✗ ERROR building HTML for ${char.name}:`, charError.message); + debugLog('[RPG Thoughts] Error stack:', charError.stack); + // Continue with next character instead of crashing + } } + + debugLog('[RPG Thoughts] Finished building all character cards'); html += '
'; }