tSIP softphone: settings for Lua scripts

This is proposed template for storing script settings, that is parameters that are supposed to survive application restart. Settings are stored in json file in application directory. JSON parsing and generating is handling by dkjson module, placed in \scripts\inc subdirectory.

  -- settings.lua
  local M = {} -- public interface
  
  local json = require("scripts.inc.dkjson")
  local filename = "lua_settings.json"
  
  function M.get()
  	local cfg = {}
  
  	local param1, param1IsSet = GetVariable("Param1")
  	if param1IsSet == 1 then
  		param1 = tonumber(param1)
  	else
  		-- default
  		param1 = 0
  	end
  
  	cfg.param1 = param1;
  	
  	return cfg
  end
  
  function M.load()
  	local cfg = M.get()
  
  	local f = io.open(filename, "r")
  	if f == nil then
  		return cfg
  	end
  	local str = f:read("*all")
  	f.close()
  	
  	local obj, pos, err = json.decode (str, 1, nil)
  	if err then
  		print ("Error:", err)
  		return cfg
  	else
  		cfg = obj
  	end	
  	
  	if cfg.param1 ~= nil then
  		SetVariable("Param1", cfg.param1)
  	end
  	
  	return cfg
  end
  
  function M.store()
  	local cfg = M.get()
  	local str = json.encode (cfg, { indent = true })
  	local f = assert(io.open(filename, "w"))
  	f:write(str)
  	f.close()
  end
  
  return M
  -- end of settings.lua
  
  
  -- settings_store.lua
  SetVariable("Param1", 1234)
  
  local settings = require("scripts.settings")
  settings.store()
  -- end of settings_store.lua  
  
  
  -- settings_load.lua
  local settings = require("scripts.settings")
  local cfg = settings.load()
  
  local str = string.format("Found in file: cfg.param1 = %d", cfg.param1)
  ShowMessage(str)
  -- end of settings_load.lua    
  

Back to howto list