Files
smupdater-godtony/scripting/updater/api.sp
T
2020-08-19 20:37:30 +02:00

116 lines
3.0 KiB
SourcePawn

/* API - Natives & Forwards */
static Handle fwd_OnPluginChecking = INVALID_HANDLE;
static Handle fwd_OnPluginDownloading = INVALID_HANDLE;
static Handle fwd_OnPluginUpdating = INVALID_HANDLE;
static Handle fwd_OnPluginUpdated = INVALID_HANDLE;
void API_Init()
{
CreateNative("Updater_AddPlugin", Native_AddPlugin);
CreateNative("Updater_RemovePlugin", Native_RemovePlugin);
CreateNative("Updater_ForceUpdate", Native_ForceUpdate);
fwd_OnPluginChecking = CreateForward(ET_Event);
fwd_OnPluginDownloading = CreateForward(ET_Event);
fwd_OnPluginUpdating = CreateForward(ET_Ignore);
fwd_OnPluginUpdated = CreateForward(ET_Ignore);
}
// native Updater_AddPlugin(const char[] url);
public int Native_AddPlugin(Handle plugin, int numParams)
{
char url[MAX_URL_LENGTH];
GetNativeString(1, url, sizeof(url));
Updater_AddPlugin(plugin, url);
}
// native Updater_RemovePlugin();
public int Native_RemovePlugin(Handle plugin, int numParams)
{
int index = PluginToIndex(plugin);
if (index != -1)
{
Updater_QueueRemovePlugin(plugin);
}
}
// native bool Updater_ForceUpdate();
public int Native_ForceUpdate(Handle plugin, int numParams)
{
int index = PluginToIndex(plugin);
if (index == -1)
{
ThrowNativeError(SP_ERROR_NOT_FOUND, "Plugin not found in updater.");
}
else if (Updater_GetStatus(index) == Status_Idle)
{
Updater_Check(index);
return 1;
}
return 0;
}
// forward Action:Updater_OnPluginChecking();
Action Fwd_OnPluginChecking(Handle plugin)
{
Action result = Plugin_Continue;
Function func = GetFunctionByName(plugin, "Updater_OnPluginChecking");
if (func != INVALID_FUNCTION && AddToForward(fwd_OnPluginChecking, plugin, func))
{
Call_StartForward(fwd_OnPluginChecking);
Call_Finish(result);
RemoveAllFromForward(fwd_OnPluginChecking, plugin);
}
return result;
}
// forward Action:Updater_OnPluginDownloading();
Action Fwd_OnPluginDownloading(Handle plugin)
{
Action result = Plugin_Continue;
Function func = GetFunctionByName(plugin, "Updater_OnPluginDownloading");
if (func != INVALID_FUNCTION && AddToForward(fwd_OnPluginDownloading, plugin, func))
{
Call_StartForward(fwd_OnPluginDownloading);
Call_Finish(result);
RemoveAllFromForward(fwd_OnPluginDownloading, plugin);
}
return result;
}
// forward Updater_OnPluginUpdating();
void Fwd_OnPluginUpdating(Handle plugin)
{
Function func = GetFunctionByName(plugin, "Updater_OnPluginUpdating");
if (func != INVALID_FUNCTION && AddToForward(fwd_OnPluginUpdating, plugin, func))
{
Call_StartForward(fwd_OnPluginUpdating);
Call_Finish();
RemoveAllFromForward(fwd_OnPluginUpdating, plugin);
}
}
// forward Updater_OnPluginUpdated();
void Fwd_OnPluginUpdated(Handle plugin)
{
Function func = GetFunctionByName(plugin, "Updater_OnPluginUpdated");
if (func != INVALID_FUNCTION && AddToForward(fwd_OnPluginUpdated, plugin, func))
{
Call_StartForward(fwd_OnPluginUpdated);
Call_Finish();
RemoveAllFromForward(fwd_OnPluginUpdated, plugin);
}
}