From a15cfbf2d3abc5a66b394e2da551828d39994d51 Mon Sep 17 00:00:00 2001 From: Alexander Lantsev Date: Thu, 11 Jun 2015 00:44:38 +0000 Subject: MirLua: - added m_database module - added examples git-svn-id: http://svn.miranda-ng.org/main/trunk@14111 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/MirLua/src/m_database.cpp | 127 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 plugins/MirLua/src/m_database.cpp (limited to 'plugins/MirLua/src/m_database.cpp') diff --git a/plugins/MirLua/src/m_database.cpp b/plugins/MirLua/src/m_database.cpp new file mode 100644 index 0000000000..6adca91ecc --- /dev/null +++ b/plugins/MirLua/src/m_database.cpp @@ -0,0 +1,127 @@ +#include "stdafx.h" + +static int lua_FindFirstContact(lua_State *L) +{ + MCONTACT hContact = db_find_first(lua_tostring(L, 1)); + lua_pushinteger(L, hContact); + + return 1; +} + +static int lua_FindNextContact(lua_State *L) +{ + MCONTACT hContact = db_find_next(luaL_checkinteger(L, 1), lua_tostring(L, 2)); + lua_pushinteger(L, hContact); + + return 1; +} + +static int lua_WriteContactSetting(lua_State *L) +{ + MCONTACT hContact = lua_tointeger(L, 1); + LPCSTR szModule = luaL_checkstring(L, 2); + LPCSTR szSetting = luaL_checkstring(L, 3); + + DBVARIANT dbv = { 0 }; + int type = lua_type(L, 4); + switch (type) + { + case LUA_TBOOLEAN: + dbv.bVal = lua_toboolean(L, 4); + dbv.type = DBVT_BYTE; + break; + case LUA_TNUMBER: + dbv.dVal = lua_tonumber(L, 4); + dbv.type = DBVT_DWORD; + break; + case LUA_TSTRING: + dbv.pszVal = (char*)lua_tostring(L, 4); + dbv.type = DBVT_UTF8; + break; + + default: + lua_pushinteger(L, hContact); + return 1; + } + + INT_PTR res = db_set(hContact, szModule, szSetting, &dbv); + lua_pushinteger(L, res); + + return 1; +} + +static int lua_GetContactSetting(lua_State *L) +{ + MCONTACT hContact = lua_tointeger(L, 1); + LPCSTR szModule = luaL_checkstring(L, 2); + LPCSTR szSetting = luaL_checkstring(L, 3); + + DBVARIANT dbv; + if (db_get(hContact, szModule, szSetting, &dbv)) + { + lua_pushnil(L); + return 1; + } + + + switch (dbv.type) + { + case DBVT_BYTE: + lua_pushboolean(L, dbv.bVal); + break; + case DBVT_WORD: + lua_pushinteger(L, dbv.wVal); + case DBVT_DWORD: + lua_pushnumber(L, dbv.dVal); + break; + case DBVT_ASCIIZ: + lua_pushstring(L, ptrA(mir_utf8encode(dbv.pszVal))); + break; + case DBVT_UTF8: + lua_pushstring(L, dbv.pszVal); + break; + case DBVT_WCHAR: + lua_pushstring(L, ptrA(mir_utf8encodeW(dbv.pwszVal))); + break; + + default: + db_free(&dbv); + lua_pushnil(L); + return 1; + } + + db_free(&dbv); + + return 1; +} + +static int lua_DeleteContactSetting(lua_State *L) +{ + MCONTACT hContact = lua_tointeger(L, 1); + LPCSTR szModule = luaL_checkstring(L, 2); + LPCSTR szSetting = luaL_checkstring(L, 3); + + INT_PTR res = db_unset(hContact, szModule, szSetting); + lua_pushinteger(L, res); + + return 1; +} + +static luaL_Reg databaseApi[] = +{ + { "FindFirstContact", lua_FindFirstContact }, + { "FindNextContact", lua_FindNextContact }, + + { "WriteContactSetting", lua_WriteContactSetting }, + { "GetContactSetting", lua_GetContactSetting }, + { "DeleteContactSetting", lua_DeleteContactSetting }, + + { NULL, NULL } +}; + +LUAMOD_API int luaopen_m_database(lua_State *L) +{ + luaL_newlib(L, databaseApi); + + return 1; +} -- cgit v1.2.3