The settings library is used to allow addons to create per-character configuration files. The library manages and handles the switching of characters automatically, addons simply need to register to an event, per-settings block, to receive the updated settings table information when a character switch happens.
Settings are serialized into a readable Lua table format making it easy for users to modify the settings on disk if needed.
The library will default to a character alias of _default_ when no character is logged in. Most of the functions of this library that accept an alias consider the alias optional. When no alias is given to these functions, then a default alias of settings is used instead.
The settings files are saved to the daochook configurations folder. These are saved within this folder under a series of subfolders. For example:
<daochook_path>/config/addons/<addon_name>/_defaults_/<alias>.lua<daochook_path>/config/addons/<addon_name>/<character_name>/<alias>.luaAn example set of paths would be the following for the fps addon:
<daochook_path>/config/addons/fps/_defaults_/settings.lua<daochook_path>/config/addons/fps/Atomos/settings.lua1local settings = require 'settings';
settings_pathReturns the current settings path. (Specific to the given addons namespace.)
1string settings.settings_path();
| Parameter Name | Type | Description |
|---|---|---|
| None. |
| Returns |
|---|
| (string) The settings path for the current addon. |
The path returned by this function will look like this:
<daochook_path>/config/addons/<addon_name>/_defaults_/<daochook_path>/config/addons/<addon_name>/<character_name>/loadLoads and returns a settings table.
1table settings.load(defaults);
2table settings.load(defaults, alias);
| Parameter Name | Type | Description |
|---|---|---|
defaults | table | The default settings table to be used if no settings are loaded from disk. |
alias | string | [Optional] The alias to store the settings within. |
| Returns |
|---|
| (table) The settings table. |
If no alias is given, then the default alias of settings will be used instead.
Note: This function will raise events against the alias.
saveSaves a settings table to disk.
1boolean settings.save();
2boolean settings.save(alias);
| Parameter Name | Type | Description |
|---|---|---|
alias | string | [Optional] The alias of the settings to save. |
| Returns |
|---|
| (boolean) True on success, false otherwise. |
If no alias is given, then the default alias of settings will be used instead.
reloadReloads a settings table from disk.
1boolean settings.reload();
2boolean settings.reload(alias);
| Parameter Name | Type | Description |
|---|---|---|
alias | string | [Optional] The alias of the settings to reload. |
| Returns |
|---|
| (boolean) True on success, false otherwise. |
If no alias is given, then the default alias of settings will be used instead.
Note: This function will raise events against the alias.
resetResets a settings table to its defaults.
1boolean settings.reset();
2boolean settings.reset(alias);
| Parameter Name | Type | Description |
|---|---|---|
alias | string | [Optional] The alias of the settings to reset. |
| Returns |
|---|
| (boolean) True on success, false otherwise. |
If no alias is given, then the default alias of settings will be used instead.
Note: This function will raise events against the alias.
getReturns the settings table for the given alias.
1table|nil settings.get();
2table|nil settings.get(alias);
| Parameter Name | Type | Description |
|---|---|---|
alias | string | [Optional] The alias of the settings to get. |
| Returns |
|---|
| (table | nil) The settings table on success, nil otherwise. |
If no alias is given, then the default alias of settings will be used instead.
registerRegisters an event callback to a settings block.
1settings.register(alias, event_alias, callback);
| Parameter Name | Type | Description |
|---|---|---|
alias | string | The alias of the settings block to register the event for. |
event_alias | string | The alias of the event callback. (Must be unique per-alias.) |
callback | function | The callback function to invoke when a settings event is raised. |
| Returns |
|---|
| None. |
unregisterUnregisters an event callback from a settings block.
1settings.unregister(alias, event_alias);
| Parameter Name | Type | Description |
|---|---|---|
alias | string | The alias of the settings block to unregister the event for. |
event_alias | string | The alias of the event callback. |
| Returns |
|---|
| None. |
processProcesses a settings table, converting it to a string that can be reloaded into Lua later.
1string settings.process(o, space);
| Parameter Name | Type | Description |
|---|---|---|
o | any | The object to process. (Generally a table to begin.) |
space | string | [Optional] The indent spacing to use. (Default is 4 spaces.) |
| Returns |
|---|
(string) The processed string of the given o data. |
The settings library makes use of a custom event setup (similar to normal addon events) that is used to inform an addon of when a settings table is changed. (Via loading, reload, or resetting.) Addons can register to a specific settings table for this event to ensure their current settings are up to date with what the library has currently loaded and cached.
The registration to the given event looks like this:
1settings.register('settings', 'settings_update', function (e)
2
3end);
Note: The alias given here, settings is the default alias when a unique one is not given. If you are using a specific alias for your settings, then you should change this string to match!
When this event is invoked, e will contain the updated settings table that your addon should make use of. It is also ideal for your addon to make any adjustments, update its various properties/UI/etc. and such in relation to these new settings to ensure what is curerntly being shown/used is properly up to date. Afterward, it is suggested that you also save the settings after to ensure your settings and the library match on disk.
Here is an example of all of this:
1-- Include the needed libraries..
2require 'common';
3local settings = require 'settings';
4
5-- Define your addons default settings..
6local default_settings = T{
7 value1 = 1234,
8 value2 = true,
9 value3 = 'Hello world.',
10};
11
12-- Load the addon settings..
13local cfg = settings.load(default_settings);
14
15-- Register to the settings update event..
16settings.register('settings', 'settings_update', function (e)
17 -- Update the settings table..
18 cfg = e;
19
20 --[[
21 Do additional updates to your addons properties here.
22 --]]
23
24 -- Ensure settings are saved to disk when changed..
25 settings.save();
26end);
You should not edit your default_settings table ever when defining it as the defauls/outline of what you expect for your addons settings. All edits should be made to the table returned from settings.load(...). If you need to obtain the settings table again you can use settings.get(...) to obtain the table from the settings library.