forge/arma/server/addons/phone/XEH_preInit.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

219 lines
9.7 KiB
Plaintext

#include "script_component.hpp"
PREP_RECOMPILE_START;
#include "XEH_PREP.hpp"
PREP_RECOMPILE_END;
// private _category = [QUOTE(MOD_NAME), LLSTRING(displayName)];
if (isNil QGVAR(PhoneStore)) then { [] call FUNC(initPhoneStore); };
// Contact Management Events
[QGVAR(requestInitPhone), {
params [["_uid", "", [""]], ["_data", createHashMap, [createHashMap]]];
if (_uid isEqualTo "") exitWith { diag_log "[FORGE:Server:Phone] Empty UID provided to requestInitPhone"; };
GVAR(PhoneStore) call ["init", [_uid]];
}] call CFUNC(addEventHandler);
[QGVAR(requestAddContact), {
params [["_uid", "", [""]], ["_contactUid", "", [""]], ["_player", objNull, [objNull]]];
if (_uid isEqualTo "" || _contactUid isEqualTo "") exitWith { diag_log "[FORGE:Server:Phone] Invalid parameters for requestAddContact"; };
private _result = GVAR(PhoneStore) call ["addContact", [_uid, _contactUid]];
if (!isNull _player) then { ["forge_client_phone_responseAddContact", [_result], _player] call CFUNC(targetEvent); };
}] call CFUNC(addEventHandler);
[QGVAR(requestAddContactByPhone), {
params [["_uid", "", [""]], ["_phoneNumber", "", [""]], ["_player", objNull, [objNull]]];
if (_uid isEqualTo "" || _phoneNumber isEqualTo "") exitWith { diag_log "[FORGE:Server:Phone] Invalid parameters for requestAddContactByPhone"; };
private _result = GVAR(PhoneStore) call ["addContactByPhone", [_uid, _phoneNumber]];
if (!isNull _player) then { ["forge_client_phone_responseAddContactByPhone", [_result, _phoneNumber], _player] call CFUNC(targetEvent); };
}] call CFUNC(addEventHandler);
[QGVAR(requestAddContactByEmail), {
params [["_uid", "", [""]], ["_email", "", [""]], ["_player", objNull, [objNull]]];
if (_uid isEqualTo "" || _email isEqualTo "") exitWith { diag_log "[FORGE:Server:Phone] Invalid parameters for requestAddContactByEmail"; };
private _result = GVAR(PhoneStore) call ["addContactByEmail", [_uid, _email]];
if (!isNull _player) then { ["forge_client_phone_responseAddContactByEmail", [_result, _email], _player] call CFUNC(targetEvent); };
}] call CFUNC(addEventHandler);
[QGVAR(requestRemoveContact), {
params [["_uid", "", [""]], ["_contactUid", "", [""]], ["_player", objNull, [objNull]]];
if (_uid isEqualTo "" || _contactUid isEqualTo "") exitWith { diag_log "[FORGE:Server:Phone] Invalid parameters for requestRemoveContact"; };
private _result = GVAR(PhoneStore) call ["removeContact", [_uid, _contactUid]];
if (!isNull _player) then { ["forge_client_phone_responseRemoveContact", [_result, _contactUid], _player] call CFUNC(targetEvent); };
}] call CFUNC(addEventHandler);
[QGVAR(requestRefreshContacts), {
params [["_uid", "", [""]], ["_player", objNull, [objNull]]];
if (_uid isEqualTo "") exitWith { diag_log "[FORGE:Server:Phone] Empty UID provided to requestRefreshContacts"; };
private _contacts = GVAR(PhoneStore) call ["refreshContacts", [_uid]];
if (!isNull _player) then { ["forge_client_phone_responseRefreshContacts", [_contacts], _player] call CFUNC(targetEvent); };
}] call CFUNC(addEventHandler);
[QGVAR(requestGetContacts), {
params [["_uid", "", [""]], ["_player", objNull, [objNull]]];
if (_uid isEqualTo "") exitWith { diag_log "[FORGE:Server:Phone] Empty UID provided to requestGetContacts"; };
private _contactUids = GVAR(PhoneStore) call ["getContacts", [_uid]];
if (!isNull _player) then { ["forge_client_phone_responseGetContacts", [_contactUids], _player] call CFUNC(targetEvent); };
}] call CFUNC(addEventHandler);
// Messaging Events
[QGVAR(requestSendMessage), {
params [["_fromUid", "", [""]], ["_toUid", "", [""]], ["_message", "", [""]], ["_player", objNull, [objNull]]];
if (_fromUid isEqualTo "" || _toUid isEqualTo "" || _message isEqualTo "") exitWith {
diag_log "[FORGE:Server:Phone] Invalid parameters for requestSendMessage";
};
private _messageObj = GVAR(PhoneStore) call ["sendMessage", [_fromUid, _toUid, _message]];
private _success = _messageObj isEqualType createHashMap && { _messageObj isNotEqualTo createHashMap };
if (!isNull _player) then {
["forge_client_phone_responseSendMessage", [_success], _player] call CFUNC(targetEvent);
if (_success) then {
["forge_client_phone_responseMessageSent", [_messageObj], _player] call CFUNC(targetEvent);
};
};
private _recipient = [_toUid] call EFUNC(common,getPlayer);
if (_success && { _toUid isNotEqualTo _fromUid } && { !isNull _recipient }) then {
["forge_client_phone_responseMessageReceived", [_messageObj], _recipient] call CFUNC(targetEvent);
};
}] call CFUNC(addEventHandler);
[QGVAR(requestGetMessages), {
params [["_uid", "", [""]], ["_player", objNull, [objNull]]];
if (_uid isEqualTo "") exitWith { diag_log "[FORGE:Server:Phone] Empty UID provided to requestGetMessages"; };
private _messages = GVAR(PhoneStore) call ["getMessages", [_uid]];
if (!isNull _player) then { ["forge_client_phone_responseGetMessages", [_messages], _player] call CFUNC(targetEvent); };
}] call CFUNC(addEventHandler);
[QGVAR(requestGetMessageThread), {
params [["_uid", "", [""]], ["_otherUid", "", [""]], ["_player", objNull, [objNull]]];
if (_uid isEqualTo "" || _otherUid isEqualTo "") exitWith {
diag_log "[FORGE:Server:Phone] Invalid parameters for requestGetMessageThread";
};
private _messages = GVAR(PhoneStore) call ["getMessageThread", [_uid, _otherUid]];
if (!isNull _player) then { ["forge_client_phone_responseGetMessageThread", [_messages, _otherUid], _player] call CFUNC(targetEvent); };
}] call CFUNC(addEventHandler);
[QGVAR(requestMarkMessageRead), {
params [["_uid", "", [""]], ["_messageId", "", [""]], ["_player", objNull, [objNull]]];
if (_uid isEqualTo "" || _messageId isEqualTo "") exitWith {
diag_log "[FORGE:Server:Phone] Invalid parameters for requestMarkMessageRead";
};
private _result = GVAR(PhoneStore) call ["markMessageRead", [_uid, _messageId]];
if (!isNull _player) then { ["forge_client_phone_responseMarkMessageRead", [_result, _messageId], _player] call CFUNC(targetEvent); };
}] call CFUNC(addEventHandler);
[QGVAR(requestDeleteMessage), {
params [["_uid", "", [""]], ["_messageId", "", [""]], ["_player", objNull, [objNull]]];
if (_uid isEqualTo "" || _messageId isEqualTo "") exitWith {
diag_log "[FORGE:Server:Phone] Invalid parameters for requestDeleteMessage";
};
private _result = GVAR(PhoneStore) call ["deleteMessage", [_uid, _messageId]];
if (!isNull _player) then { ["forge_client_phone_responseDeleteMessage", [_result, _messageId], _player] call CFUNC(targetEvent); };
}] call CFUNC(addEventHandler);
// Email Events
[QGVAR(requestSendEmail), {
params [["_fromUid", "", [""]], ["_toUid", "", [""]], ["_subject", "", [""]], ["_body", "", [""]], ["_player", objNull, [objNull]]];
if (_subject isEqualTo "") then { _subject = "No subject"; };
if (_fromUid isEqualTo "" || _toUid isEqualTo "" || _body isEqualTo "") exitWith {
diag_log "[FORGE:Server:Phone] Invalid parameters for requestSendEmail";
};
private _emailObj = GVAR(PhoneStore) call ["sendEmail", [_fromUid, _toUid, _subject, _body]];
private _success = _emailObj isEqualType createHashMap && { _emailObj isNotEqualTo createHashMap };
if (!isNull _player) then {
["forge_client_phone_responseSendEmail", [_success], _player] call CFUNC(targetEvent);
if (_success) then {
["forge_client_phone_responseEmailSent", [_emailObj], _player] call CFUNC(targetEvent);
};
};
private _recipient = [_toUid] call EFUNC(common,getPlayer);
if (_success && { _toUid isNotEqualTo _fromUid } && { !isNull _recipient }) then {
["forge_client_phone_responseEmailReceived", [_emailObj], _recipient] call CFUNC(targetEvent);
};
}] call CFUNC(addEventHandler);
[QGVAR(requestGetEmails), {
params [["_uid", "", [""]], ["_player", objNull, [objNull]]];
if (_uid isEqualTo "") exitWith { diag_log "[FORGE:Server:Phone] Empty UID provided to requestGetEmails"; };
private _emails = GVAR(PhoneStore) call ["getEmails", [_uid]];
if (!isNull _player) then { ["forge_client_phone_responseGetEmails", [_emails], _player] call CFUNC(targetEvent); };
}] call CFUNC(addEventHandler);
[QGVAR(requestMarkEmailRead), {
params [["_uid", "", [""]], ["_emailId", "", [""]], ["_player", objNull, [objNull]]];
if (_uid isEqualTo "" || _emailId isEqualTo "") exitWith {
diag_log "[FORGE:Server:Phone] Invalid parameters for requestMarkEmailRead";
};
private _result = GVAR(PhoneStore) call ["markEmailRead", [_uid, _emailId]];
if (!isNull _player) then { ["forge_client_phone_responseMarkEmailRead", [_result, _emailId], _player] call CFUNC(targetEvent); };
}] call CFUNC(addEventHandler);
[QGVAR(requestDeleteEmail), {
params [["_uid", "", [""]], ["_emailId", "", [""]], ["_player", objNull, [objNull]]];
if (_uid isEqualTo "" || _emailId isEqualTo "") exitWith {
diag_log "[FORGE:Server:Phone] Invalid parameters for requestDeleteEmail";
};
private _result = GVAR(PhoneStore) call ["deleteEmail", [_uid, _emailId]];
if (!isNull _player) then { ["forge_client_phone_responseDeleteEmail", [_result, _emailId], _player] call CFUNC(targetEvent); };
}] call CFUNC(addEventHandler);
// Cleanup Event
[QGVAR(requestRemovePhone), {
params [["_uid", "", [""]], ["_player", objNull, [objNull]]];
if (_uid isEqualTo "") exitWith { diag_log "[FORGE:Server:Phone] Empty UID provided to requestRemovePhone"; };
private _result = GVAR(PhoneStore) call ["remove", [_uid]];
if (!isNull _player) then { ["forge_client_phone_responseRemovePhone", [_result], _player] call CFUNC(targetEvent); };
}] call CFUNC(addEventHandler);