Merge pull request #87 from tomt610/fix/quest-removal-sync

Fix: Sync quest changes to committedTrackerData
This commit is contained in:
Spicy Marinara
2026-01-09 09:29:28 +01:00
committed by GitHub
+39 -2
View File
@@ -3,10 +3,35 @@
* Handles UI rendering for quests system (main and optional quests) * Handles UI rendering for quests system (main and optional quests)
*/ */
import { extensionSettings, $questsContainer } from '../../core/state.js'; import { extensionSettings, $questsContainer, committedTrackerData, lastGeneratedData } from '../../core/state.js';
import { saveSettings } from '../../core/persistence.js'; import { saveSettings, saveChatData } from '../../core/persistence.js';
import { isItemLocked, setItemLock } from '../generation/lockManager.js'; import { isItemLocked, setItemLock } from '../generation/lockManager.js';
/**
* Syncs the current extensionSettings.quests to committedTrackerData.userStats
* This ensures quest changes made via UI are reflected in the data sent to AI
*/
function syncQuestsToCommittedData() {
const currentData = committedTrackerData.userStats || lastGeneratedData.userStats;
if (!currentData) return;
const trimmed = currentData.trim();
if (trimmed.startsWith('{') || trimmed.startsWith('[')) {
try {
const jsonData = JSON.parse(currentData);
if (jsonData && typeof jsonData === 'object') {
// Update quests in the JSON data
jsonData.quests = extensionSettings.quests || { main: 'None', optional: [] };
const updatedJSON = JSON.stringify(jsonData, null, 2);
committedTrackerData.userStats = updatedJSON;
lastGeneratedData.userStats = updatedJSON;
}
} catch (e) {
console.warn('[RPG Quests] Failed to sync quests to committed data:', e);
}
}
}
/** /**
* Helper to generate lock icon HTML if setting is enabled * Helper to generate lock icon HTML if setting is enabled
* @param {string} tracker - Tracker name * @param {string} tracker - Tracker name
@@ -250,7 +275,10 @@ function attachQuestEventHandlers() {
} }
extensionSettings.quests.optional.push(questTitle); extensionSettings.quests.optional.push(questTitle);
} }
// Sync quest changes to committedTrackerData so AI sees the addition
syncQuestsToCommittedData();
saveSettings(); saveSettings();
saveChatData();
renderQuests(); renderQuests();
} }
}); });
@@ -278,7 +306,10 @@ function attachQuestEventHandlers() {
if (questTitle) { if (questTitle) {
extensionSettings.quests.main = questTitle; extensionSettings.quests.main = questTitle;
// Sync quest changes to committedTrackerData so AI sees the edit
syncQuestsToCommittedData();
saveSettings(); saveSettings();
saveChatData();
renderQuests(); renderQuests();
} }
}); });
@@ -293,7 +324,10 @@ function attachQuestEventHandlers() {
} else { } else {
extensionSettings.quests.optional.splice(index, 1); extensionSettings.quests.optional.splice(index, 1);
} }
// Sync quest changes to committedTrackerData so AI sees the removal
syncQuestsToCommittedData();
saveSettings(); saveSettings();
saveChatData();
renderQuests(); renderQuests();
}); });
@@ -306,7 +340,10 @@ function attachQuestEventHandlers() {
if (newTitle && field === 'optional' && index !== undefined) { if (newTitle && field === 'optional' && index !== undefined) {
extensionSettings.quests.optional[index] = newTitle; extensionSettings.quests.optional[index] = newTitle;
// Sync quest changes to committedTrackerData so AI sees the edit
syncQuestsToCommittedData();
saveSettings(); saveSettings();
saveChatData();
} }
}); });