Skip to content

Commit 8033e5b

Browse files
chore(docs): update code docs
1 parent 729201a commit 8033e5b

5 files changed

Lines changed: 140 additions & 9 deletions

File tree

docs/components_settings_settings.bs.html

Lines changed: 114 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@
9999

100100
' Called when reset button is selected in HexKeyboard
101101
sub onHexResetRequested()
102-
m.global.sceneManager.callFunc("optionDialog", tr("Reset Setting"), tr("Are you sure? This will reset the setting to its default value."), [tr("Yes"), tr("No")])
102+
m.global.sceneManager.callFunc("optionDialog", tr("Reset Setting"), tr("Are you sure? This will reset the setting to its default value."), [tr("Cancel"), tr("Reset")])
103103
m.global.sceneManager.observeFieldScoped("dataReturned", "onResetDialogResponse")
104104
end sub
105105

@@ -110,8 +110,8 @@
110110
returnData = m.global.sceneManager.returnData
111111
if not isValid(returnData) then return
112112

113-
' User selected "No" or closed dialog
114-
if returnData.indexSelected <> 0
113+
' User selected "Cancel" or closed dialog
114+
if returnData.indexSelected <> 1
115115
m.hexSetting.findNode("resetButton").setFocus(true)
116116
return
117117
end if
@@ -177,7 +177,7 @@
177177

178178
' Called when reset button is selected in AlphaKeyboard
179179
sub onAlphaResetRequested()
180-
m.global.sceneManager.callFunc("optionDialog", tr("Reset Setting"), tr("Are you sure? This will reset the setting to its default value."), [tr("Yes"), tr("No")])
180+
m.global.sceneManager.callFunc("optionDialog", tr("Reset Setting"), tr("Are you sure? This will reset the setting to its default value."), [tr("Cancel"), tr("Reset")])
181181
m.global.sceneManager.observeFieldScoped("dataReturned", "onAlphaResetDialogResponse")
182182
end sub
183183

@@ -188,8 +188,8 @@
188188
returnData = m.global.sceneManager.returnData
189189
if not isValid(returnData) then return
190190

191-
' User selected "No" or closed dialog
192-
if returnData.indexSelected <> 0
191+
' User selected "Cancel" or closed dialog
192+
if returnData.indexSelected <> 1
193193
m.alphaSetting.findNode("resetButton").setFocus(true)
194194
return
195195
end if
@@ -244,6 +244,21 @@
244244
listItem.id = item.id
245245
end for
246246

247+
' Inject "Reset User Settings" action at root level only
248+
if m.userLocation.Count() = 1
249+
resetItem = {
250+
title: "Reset User Settings",
251+
description: "Reset all settings to their default values. Your login session will not be affected.",
252+
type: "action",
253+
actionId: "resetUserSettings"
254+
}
255+
filteredChildren.push(resetItem)
256+
listItem = result.CreateChild("ContentNode")
257+
listItem.title = tr(resetItem.title)
258+
listItem.Description = tr(resetItem.description)
259+
listItem.id = "resetUserSettings"
260+
end if
261+
247262
m.settingsMenu.content = result
248263

249264
if isValid(configSection.selectedIndex) and configSection.selectedIndex > -1
@@ -332,6 +347,8 @@
332347
m.alphaSetting.text = ""
333348
end if
334349
m.alphaSetting.visible = true
350+
else if selectedSetting.type = "action"
351+
' Action items show description only, no setting controls
335352
else
336353
m.log.warn("Unknown setting type", selectedSetting.type)
337354
end if
@@ -343,6 +360,12 @@
343360

344361
selectedItem = m.userLocation.peek().filteredChildren[m.settingsMenu.itemFocused]
345362

363+
' Handle action items (e.g., Reset User Settings)
364+
if isValid(selectedItem.actionId) and selectedItem.actionId = "resetUserSettings"
365+
confirmResetUserSettings()
366+
return
367+
end if
368+
346369
if isValid(selectedItem.type) ' Show setting
347370
if selectedItem.type = "bool"
348371
m.boolSetting.setFocus(true)
@@ -470,6 +493,22 @@
470493
listItem.Description = tr(item.description)
471494
listItem.id = item.id
472495
end for
496+
497+
' Re-inject reset button at root level
498+
if m.userLocation.Count() = 1
499+
resetItem = {
500+
title: "Reset User Settings",
501+
description: "Reset all settings to their default values. Your login session will not be affected.",
502+
type: "action",
503+
actionId: "resetUserSettings"
504+
}
505+
filteredChildren.push(resetItem)
506+
listItem = result.CreateChild("ContentNode")
507+
listItem.title = tr(resetItem.title)
508+
listItem.Description = tr(resetItem.description)
509+
listItem.id = "resetUserSettings"
510+
end if
511+
473512
m.settingsMenu.content = result
474513

475514
' Restore focus, clamping to new list bounds
@@ -517,6 +556,75 @@
517556
return false
518557
end function
519558

559+
' Show confirmation dialog before resetting all user settings
560+
sub confirmResetUserSettings()
561+
m.global.sceneManager.callFunc("optionDialog", tr("Reset User Settings"), tr("Are you sure you want to reset all settings to their default values? Your login session will not be affected."), [tr("Cancel"), tr("Reset")])
562+
m.global.sceneManager.observeFieldScoped("dataReturned", "onResetUserSettingsResponse")
563+
end sub
564+
565+
' Handle user response from reset user settings confirmation dialog
566+
sub onResetUserSettingsResponse()
567+
m.global.sceneManager.unobserveFieldScoped("dataReturned")
568+
569+
returnData = m.global.sceneManager.returnData
570+
if not isValid(returnData) or returnData.indexSelected <> 1
571+
' User selected "Cancel" or closed dialog
572+
m.settingsMenu.setFocus(true)
573+
return
574+
end if
575+
576+
executeResetUserSettings()
577+
end sub
578+
579+
' Reset all user settings to defaults from settings.json
580+
' Preserves session keys (authToken, username, serverId, primaryImageTag, LastRunVersion)
581+
sub executeResetUserSettings()
582+
localUser = m.global.user
583+
userId = localUser.id
584+
if not isValid(userId) or userId = ""
585+
m.log.warn("Cannot reset settings - user ID is invalid")
586+
m.settingsMenu.setFocus(true)
587+
return
588+
end if
589+
590+
m.log.info("Resetting all user settings to defaults")
591+
592+
' Disable auto-sync to prevent observers from firing during cleanup
593+
localUser.settings.callFunc("disableAutoSync")
594+
595+
' Delete all non-session keys from user registry
596+
sessionKeys = ["authToken", "username", "serverId", "primaryImageTag", "LastRunVersion"]
597+
allRegistryData = RegistryReadAll(userId)
598+
keysToDelete = getSettingKeysToDelete(allRegistryData, sessionKeys)
599+
600+
for each key in keysToDelete
601+
registry_delete(key, userId)
602+
end for
603+
604+
' Reload all defaults from settings.json onto the settings node
605+
user.settings.SaveDefaults()
606+
607+
' globalRememberMe was reset to false — clear auto-login state
608+
unset_setting("active_user")
609+
610+
' Clear per-library display settings
611+
localUser.settings.displaySettings = {}
612+
613+
' Re-enable auto-sync for future changes
614+
localUser.settings.callFunc("enableAutoSync")
615+
616+
' Theme colors were reset to defaults - flag for refresh on exit
617+
m.themeColorsChanged = true
618+
619+
m.log.info("User settings reset complete", { deletedKeys: keysToDelete.Count() })
620+
621+
' Show success feedback (toast lives on JRScene, persists across scene transitions)
622+
m.top.getScene().callFunc("showToast", tr("Settings reset to defaults"), "success")
623+
624+
' Exit settings and reload home with fresh theme colors
625+
performSettingsExit()
626+
end sub
627+
520628
' JRScreen hook that gets ran when the screen is shown.
521629
sub OnScreenShown()
522630
' Clear backdrop on settings screens

docs/data/search.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

docs/module-config.html

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

docs/module-settings.html

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

docs/source_utils_config.bs.html

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,29 @@
148148
return key.StartsWith("global")
149149
end function
150150

151+
' Filter registry keys to find those that should be deleted during a settings reset
152+
' Preserves session/identity keys, deletes everything else
153+
' @param {object} allKeys - associative array of all registry key-value pairs
154+
' @param {object} preserveKeys - array of key names to preserve
155+
' @return {object} - array of key names that should be deleted
156+
function getSettingKeysToDelete(allKeys as object, preserveKeys as object) as object
157+
keysToDelete = []
158+
for each key in allKeys
159+
shouldPreserve = false
160+
for each preserveKey in preserveKeys
161+
' Case-insensitive compare: roAssociativeArray iteration returns lowercase keys
162+
if LCase(key) = LCase(preserveKey)
163+
shouldPreserve = true
164+
exit for
165+
end if
166+
end for
167+
if not shouldPreserve
168+
keysToDelete.push(key)
169+
end if
170+
end for
171+
return keysToDelete
172+
end function
173+
151174
' Recursivly search the config tree for entry with settingname equal to key
152175
function findConfigTreeKey(key as string, tree)
153176
for each item in tree

0 commit comments

Comments
 (0)