forge/arma/server/addons/phone/functions/fnc_initMessageStore.sqf
Jacob Schmidt 4532e7b73d Add SurrealDB-backed phone storage and message deletion
- Wire phone, garage, and locker stores to the new storage layer
- Add delete flows for messages and emails in the phone UI
- Update contact, mail, and message views for the new data model
2026-04-11 22:36:11 -05:00

111 lines
4.1 KiB
Plaintext

#include "..\script_component.hpp"
/*
* Author: IDSolutions
* Initialize message store for phone SMS management.
*
* Message state is owned by the extension phone hot-state service.
*/
#pragma hemtt ignore_variables ["_self"]
GVAR(MessageStore) = createHashMapObject [[
["#type", "IMessageStore"],
["#create", {
diag_log "[FORGE:Server:Phone] Message Store Initialized!";
}],
["callPhoneArray", {
params [["_function", "", [""]], ["_arguments", [], [[]]]];
[_function, _arguments] call EFUNC(extension,extCall) params ["_result", "_isSuccess"];
if (!_isSuccess || { !(_result isEqualType "") }) exitWith { [] };
if ((_result find "Error:") == 0) exitWith {
diag_log format ["[FORGE:Server:Phone:Message] Extension call %1 failed: %2", _function, _result];
[]
};
private _data = fromJSON _result;
if !(_data isEqualType []) exitWith { [] };
_data
}],
["callPhoneObject", {
params [["_function", "", [""]], ["_arguments", [], [[]]]];
[_function, _arguments] call EFUNC(extension,extCall) params ["_result", "_isSuccess"];
if (!_isSuccess || { !(_result isEqualType "") }) exitWith { createHashMap };
if ((_result find "Error:") == 0) exitWith {
diag_log format ["[FORGE:Server:Phone:Message] Extension call %1 failed: %2", _function, _result];
createHashMap
};
private _data = fromJSON _result;
if !(_data isEqualType createHashMap) exitWith { createHashMap };
_data
}],
["callPhoneBool", {
params [["_function", "", [""]], ["_arguments", [], [[]]]];
[_function, _arguments] call EFUNC(extension,extCall) params ["_result", "_isSuccess"];
if (!_isSuccess || { !(_result isEqualType "") }) exitWith { false };
if ((_result find "Error:") == 0) exitWith {
diag_log format ["[FORGE:Server:Phone:Message] Extension call %1 failed: %2", _function, _result];
false
};
_result isEqualTo "true"
}],
["init", {
params [["_uid", "", [""]]];
if (_uid isEqualTo "") exitWith { false };
true
}],
["loadMessagesFromDatabase", {
params [["_uid", "", [""]]];
if (_uid isEqualTo "") exitWith { false };
true
}],
["sendMessage", {
params [["_fromUid", "", [""]], ["_toUid", "", [""]], ["_message", "", [""]]];
if (_fromUid isEqualTo "" || { _toUid isEqualTo "" } || { _message isEqualTo "" }) exitWith {
diag_log "[FORGE:Server:Phone:Message] Invalid parameters provided to sendMessage";
false
};
_self call ["callPhoneObject", ["phone:messages:send", [_fromUid, _toUid, _message, str serverTime]]]
}],
["getMessageThread", {
params [["_uid", "", [""]], ["_otherUid", "", [""]]];
if (_uid isEqualTo "" || { _otherUid isEqualTo "" }) exitWith { [] };
_self call ["callPhoneArray", ["phone:messages:thread", [_uid, _otherUid]]]
}],
["markMessageRead", {
params [["_uid", "", [""]], ["_messageId", "", [""]]];
if (_uid isEqualTo "" || { _messageId isEqualTo "" }) exitWith { false };
_self call ["callPhoneBool", ["phone:messages:mark_read", [_uid, _messageId]]]
}],
["deleteMessage", {
params [["_uid", "", [""]], ["_messageId", "", [""]]];
if (_uid isEqualTo "" || { _messageId isEqualTo "" }) exitWith { false };
_self call ["callPhoneBool", ["phone:messages:delete", [_uid, _messageId]]]
}],
["getMessages", {
params [["_uid", "", [""]]];
if (_uid isEqualTo "") exitWith { [] };
_self call ["callPhoneArray", ["phone:messages:list", [_uid]]]
}],
["remove", {
params [["_uid", "", [""]]];
if (_uid isEqualTo "") exitWith { false };
["phone:remove", [_uid]] call EFUNC(extension,extCall) params ["_result", "_isSuccess"];
_isSuccess && { _result isEqualTo "OK" }
}],
["syncMessageIndices", {
params [["_uid", "", [""]]];
_uid isNotEqualTo ""
}]
]];
SETMVAR(FORGE_MessageStore,GVAR(MessageStore));
GVAR(MessageStore)