Skip to content
Snippets Groups Projects
Commit 076eab92 authored by Rob Swindell's avatar Rob Swindell :speech_balloon:
Browse files

Add an optional weekly fixed system event

Yes, you can do the same thing with timed events, pretty much
parent 486b5e6a
No related branches found
No related tags found
No related merge requests found
......@@ -639,8 +639,12 @@ uint sbbs_t::logonstats()
sys_status |= SS_NEW_DAY;
if (tm.tm_mon != update_tm.tm_mon)
sys_status |= SS_NEW_MONTH;
safe_snprintf(msg, sizeof(msg), "New Day%s - Prev: %s "
, (sys_status & SS_NEW_MONTH) ? " and Month" :"", timestr(stats.date));
if (tm.tm_wday == 0 || difftime(now, stats.date) > (7 * 24 * 60 * 60))
sys_status |= SS_NEW_WEEK;
safe_snprintf(msg, sizeof(msg), "New Day%s%s - Prev: %s "
, (sys_status & SS_NEW_WEEK) ? " and Week" :""
, (sys_status & SS_NEW_MONTH) ? " and Month" :""
, timestr(stats.date));
logline(LOG_NOTICE, "!=", msg);
safe_snprintf(path, sizeof(path), "%slogon.lst", cfg.data_dir); /* Truncate logon list (LEGACY) */
int file;
......
......@@ -4813,22 +4813,26 @@ void sbbs_t::daily_maint(void)
smb_close(&smb);
}
online = ON_LOCAL;
if (cfg.sys_daily.cmd[0] && !(cfg.sys_daily.misc & EVENT_DISABLED)) {
lputs(LOG_INFO, "DAILY: Running system event");
const char* cmd = cmdstr(cfg.sys_daily.cmd, nulstr, nulstr, NULL, cfg.sys_daily.misc);
online = ON_LOCAL;
int result = external(cmd, EX_OFFLINE | cfg.sys_daily.misc);
online = false;
lprintf(result ? LOG_ERR : LOG_INFO, "Daily event: '%s' returned %d", cmd, result);
}
if ((sys_status & SS_NEW_WEEK) && cfg.sys_weekly.cmd[0] && !(cfg.sys_weekly.misc & EVENT_DISABLED)) {
lputs(LOG_INFO, "DAILY: Running weekly event");
const char* cmd = cmdstr(cfg.sys_weekly.cmd, nulstr, nulstr, NULL, cfg.sys_weekly.misc);
int result = external(cmd, EX_OFFLINE | cfg.sys_monthly.misc);
lprintf(result ? LOG_ERR : LOG_INFO, "Weekly event: '%s' returned %d", cmd, result);
}
if ((sys_status & SS_NEW_MONTH) && cfg.sys_monthly.cmd[0] && !(cfg.sys_monthly.misc & EVENT_DISABLED)) {
lputs(LOG_INFO, "DAILY: Running monthly event");
const char* cmd = cmdstr(cfg.sys_monthly.cmd, nulstr, nulstr, NULL, cfg.sys_monthly.misc);
online = ON_LOCAL;
int result = external(cmd, EX_OFFLINE | cfg.sys_monthly.misc);
online = false;
lprintf(result ? LOG_ERR : LOG_INFO, "Monthly event: '%s' returned %d", cmd, result);
}
online = false;
lputs(LOG_INFO, "DAILY: System maintenance ended");
sys_status &= ~SS_DAILY;
}
......
......@@ -617,6 +617,7 @@ typedef enum { /* Values for xtrn_t.event */
#define SS_LCHAT (1 << 4) /* Local chat in progress */
#define SS_NEW_MONTH (1 << 8) // Execute System Monthly Event
#define SS_NEW_DAY (1 << 9) // Execute System Daily Event
#define SS_NEW_WEEK (1 << 10) // Execute System Weekly Event
#define SS_ABORT (1 << 11) /* Global abort input or output flag */
#define SS_SYSPAGE (1 << 12) /* Paging sysop */
#define SS_GURUCHAT (1 << 14) /* Guru chat in progress */
......@@ -635,7 +636,7 @@ typedef enum { /* Values for xtrn_t.event */
#define SS_QWKLOGON (1 << 30) /* QWK logon */
#define SS_FASTLOGON (1U << 31)/* Fast logon */
#define SS_DAILY (SS_NEW_DAY | SS_NEW_MONTH)
#define SS_DAILY (SS_NEW_DAY | SS_NEW_MONTH | SS_NEW_WEEK)
/* Bits in 'mode' for getkey and getstr */
#define K_NONE 0 /* Use as a place holder for no mode flags */
......
......@@ -364,6 +364,7 @@ void fevents_cfg()
snprintf(opt[i++], MAX_OPLN, "%-12s%s", "Logon", (cfg.sys_logon.misc & EVENT_DISABLED) ? "<DISABLED>" : cfg.sys_logon.cmd);
snprintf(opt[i++], MAX_OPLN, "%-12s%s", "Logout", (cfg.sys_logout.misc & EVENT_DISABLED) ? "<DISABLED>" : cfg.sys_logout.cmd);
snprintf(opt[i++], MAX_OPLN, "%-12s%s", "Daily", (cfg.sys_daily.misc & EVENT_DISABLED) ? "<DISABLED>" : cfg.sys_daily.cmd);
snprintf(opt[i++], MAX_OPLN, "%-12s%s", "Weekly", (cfg.sys_weekly.misc & EVENT_DISABLED) ? "<DISABLED>" : cfg.sys_weekly.cmd);
snprintf(opt[i++], MAX_OPLN, "%-12s%s", "Monthly", (cfg.sys_monthly.misc & EVENT_DISABLED) ? "<DISABLED>" : cfg.sys_monthly.cmd);
opt[i][0] = 0;
uifc.helpbuf =
......@@ -416,10 +417,23 @@ void fevents_cfg()
);
break;
case 3:
fevent_cfg("Weekly Event", &cfg.sys_weekly,
"`Weekly Event:`\n"
"\n"
"Enter a command line for a program that will run once each new week.\n"
"\n"
"The event will normally run on Sunday.\n"
SCFG_CMDLINE_PREFIX_HELP
SCFG_CMDLINE_SPEC_HELP
);
break;
case 4:
fevent_cfg("Monthly Event", &cfg.sys_monthly,
"`Monthly Event:`\n"
"\n"
"Enter a command line for a program that will run once each new month.\n"
"\n"
"The event will normally run on the first day of the month.\n"
SCFG_CMDLINE_PREFIX_HELP
SCFG_CMDLINE_SPEC_HELP
);
......
......@@ -481,6 +481,7 @@ typedef struct
char sys_date_sep;
bool sys_date_verbal;
fevent_t sys_monthly; /* Monthly event */
fevent_t sys_weekly; /* Weekly event */
fevent_t sys_daily; /* Daily event */
fevent_t sys_logon; /* Logon event */
fevent_t sys_logout; /* Logout event */
......
......@@ -145,6 +145,8 @@ bool read_main_cfg(scfg_t* cfg, char* error, size_t maxerrlen)
cfg->sys_daily.misc = iniGetUInt32(ini, "daily_event", "settings", 0);
SAFECOPY(cfg->sys_monthly.cmd, iniGetString(ini, "monthly_event", "cmd", "", value));
cfg->sys_monthly.misc = iniGetUInt32(ini, "monthly_event", "settings", 0);
SAFECOPY(cfg->sys_weekly.cmd, iniGetString(ini, "weekly_event", "cmd", "", value));
cfg->sys_weekly.misc = iniGetUInt32(ini, "weekly_event", "settings", 0);
named_str_list_t** sections = iniParseSections(ini);
......
......@@ -210,6 +210,8 @@ bool write_main_cfg(scfg_t* cfg)
iniSetHexInt(&ini, "daily_event", "settings", cfg->sys_daily.misc, &ini_style);
iniSetString(&ini, "monthly_event", "cmd", cfg->sys_monthly.cmd, &ini_style);
iniSetHexInt(&ini, "monthly_event", "settings", cfg->sys_monthly.misc, &ini_style);
iniSetString(&ini, "weekly_event", "cmd", cfg->sys_weekly.cmd, &ini_style);
iniSetHexInt(&ini, "weekly_event", "settings", cfg->sys_weekly.misc, &ini_style);
{
const char* name = "expired";
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment