#include "../shared/TclUtil.h" #include "ReportAlertsTcl.h" // Find the thread. Return null on failure. If there is an error, and interp // is not null, set an error message in interp. static ReportAlertsThread *getThread(ClientData clientData, Tcl_Interp *interp) { ReportAlertsThread *thread = (ReportAlertsThread *)clientData; if (!thread) thread = ReportAlertsThread::getInstance(); if (thread) return thread; if (interp) Tcl_SetObjResult(interp, makeTclString("Report alerts thread not found.")); return NULL; } static int reportAlertCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) { if (objc != 3) { Tcl_WrongNumArgs(interp, 1, objv, "category info"); return TCL_ERROR; } ReportAlertsThread *reportAlertsThread = getThread(clientData, interp); if (!reportAlertsThread) return TCL_ERROR; reportAlertsThread->reportAlert(getString(objv[1]), getString(objv[2])); return TCL_OK; } static int addAlertCategoryCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) { if (objc != 3) { Tcl_WrongNumArgs(interp, 1, objv, "category description"); return TCL_ERROR; } ReportAlertsThread *reportAlertsThread = getThread(clientData, interp); if (!reportAlertsThread) return TCL_ERROR; reportAlertsThread->addAlertCategory(getString(objv[1]), getString(objv[2])); return TCL_OK; } static int setCacheableCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) { if (objc != 2) { Tcl_WrongNumArgs(interp, 1, objv, "category"); return TCL_ERROR; } ReportAlertsThread *reportAlertsThread = getThread(clientData, interp); if (!reportAlertsThread) return TCL_ERROR; reportAlertsThread->setCacheable(getString(objv[1])); return TCL_OK; } void installReportAlerts(Tcl_Interp *interp, ReportAlertsThread *reportAlertsThread) { Tcl_CreateNamespace(interp, "ti", NULL, NULL); Tcl_CreateObjCommand(interp, "ti::report_alert", reportAlertCmd, (ClientData)reportAlertsThread, NULL); Tcl_CreateObjCommand(interp, "ti::add_alert_category", addAlertCategoryCmd, (ClientData)reportAlertsThread, NULL); Tcl_CreateObjCommand(interp, "ti::set_cacheable", setCacheableCmd, (ClientData)reportAlertsThread, NULL); }