Skip to content
This repository has been archived by the owner on Jun 5, 2024. It is now read-only.

Commit

Permalink
Storage Overrides
Browse files Browse the repository at this point in the history
  • Loading branch information
Stuyk committed Apr 13, 2023
1 parent 57c79cf commit b220a6f
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 0 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ AthenaClient.systems.rpc.on
Fix Vehicle Checks for Jobs
Storage System Overrides
--------------------------------------
--- Everything Below is Before April 2
--------------------------------------
Expand Down
58 changes: 58 additions & 0 deletions src/core/server/systems/storage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@ export interface StorageInstance<CustomData = {}> {
* @return {Promise<string>}
*/
export async function create(items: Array<StoredItem>): Promise<string> {
if (Overrides.create) {
return Overrides.create(items);
}

const document = await Database.insertData<StorageInstance>(
{ items, lastUsed: Date.now() },
Athena.database.collections.Storage,
Expand All @@ -58,6 +62,10 @@ export async function create(items: Array<StoredItem>): Promise<string> {
* @returns {Promise<boolean>}
*/
export async function set(id: string, items: Array<StoredItem>): Promise<boolean> {
if (Overrides.set) {
return Overrides.set(id, items);
}

return await Database.updatePartialData(id, { items, lastUsed: Date.now() }, Athena.database.collections.Storage);
}

Expand All @@ -70,6 +78,10 @@ export async function set(id: string, items: Array<StoredItem>): Promise<boolean
* @return {Promise<Array<StoredItem<CustomData>>>}
*/
export async function get<CustomData = {}>(id: string): Promise<Array<StoredItem<CustomData>>> {
if (Overrides.get) {
return Overrides.get<CustomData>(id);
}

const document = await Database.fetchData<StorageInstance<CustomData>>(
'_id',
id,
Expand All @@ -89,6 +101,10 @@ export async function get<CustomData = {}>(id: string): Promise<Array<StoredItem
* @return {boolean}
*/
export function setAsOpen(id: string): boolean {
if (Overrides.setAsOpen) {
return Overrides.setAsOpen(id);
}

const index = openIdentifiers.findIndex((x) => x === id);
if (index >= 0) {
return false;
Expand All @@ -106,6 +122,10 @@ export function setAsOpen(id: string): boolean {
* @return {void}
*/
export function isOpen(id: string): boolean {
if (Overrides.isOpen) {
return Overrides.isOpen(id);
}

return openIdentifiers.findIndex((x) => x === id) >= 0;
}

Expand All @@ -119,6 +139,10 @@ export function isOpen(id: string): boolean {
* @returns {boolean}
*/
export function removeAsOpen(id: string): boolean {
if (Overrides.removeAsOpen) {
return Overrides.removeAsOpen(id);
}

let wasRemoved = false;

for (let i = openIdentifiers.length - 1; i >= 0; i--) {
Expand Down Expand Up @@ -152,6 +176,10 @@ export function removeAsOpen(id: string): boolean {
* @returns {boolean}
*/
export function closeOnDisconnect(player: alt.Player, id: string): boolean {
if (Overrides.closeOnDisconnect) {
return Overrides.closeOnDisconnect(player, id);
}

const index = boundIdentifiers.findIndex((x) => x.id === player.id);
if (index >= 0) {
return false;
Expand All @@ -171,3 +199,33 @@ alt.on('playerDisconnect', (player: alt.Player) => {
});

init();

interface StorageFuncs {
create: typeof create;
set: typeof set;
get: typeof get;
setAsOpen: typeof setAsOpen;
removeAsOpen: typeof removeAsOpen;
isOpen: typeof isOpen;
closeOnDisconnect: typeof closeOnDisconnect;
}

const Overrides: Partial<StorageFuncs> = {};

export function override(functionName: 'create', callback: typeof create);
export function override(functionName: 'set', callback: typeof set);
export function override(functionName: 'get', callback: typeof get);
export function override(functionName: 'setAsOpen', callback: typeof setAsOpen);
export function override(functionName: 'isOpen', callback: typeof isOpen);
export function override(functionName: 'removeAsOpen', callback: typeof removeAsOpen);
export function override(functionName: 'closeOnDisconnect', callback: typeof closeOnDisconnect);
/**
* Used to override storage functions.
*
*
* @param {keyof StorageFuncs} functionName
* @param {*} callback
*/
export function override(functionName: keyof StorageFuncs, callback: any): void {
Overrides[functionName] = callback;
}

0 comments on commit b220a6f

Please sign in to comment.