mirror of
https://salsa.debian.org/dskoll/remind.git
synced 2026-04-17 14:59:20 +02:00
Start implementing a "-j" mode to purge old reminders.
This commit is contained in:
@@ -94,6 +94,13 @@ int DoRem(ParsePtr p)
|
||||
if (r) return r;
|
||||
}
|
||||
|
||||
if (PurgeMode) {
|
||||
if (trig.expired) {
|
||||
PurgeEchoLine("### EXPIRED: %s\n", CurLine);
|
||||
} else {
|
||||
PurgeEchoLine("%s\n", CurLine);
|
||||
}
|
||||
}
|
||||
/* Queue the reminder, if necessary */
|
||||
if (jul == JulianToday &&
|
||||
!(!IgnoreOnce &&
|
||||
|
||||
@@ -79,6 +79,7 @@ EXTERN INIT( int MaxSatIter, 150);
|
||||
EXTERN INIT( int MaxStringLen, MAX_STR_LEN);
|
||||
EXTERN INIT( char *FileName, NULL);
|
||||
EXTERN INIT( int UseStdin, 0);
|
||||
EXTERN INIT( int PurgeMode, 0);
|
||||
EXTERN FILE *ErrFp;
|
||||
EXTERN INIT( int NumIfs, 0);
|
||||
EXTERN INIT( unsigned int IfFlags, 0);
|
||||
|
||||
@@ -67,6 +67,7 @@
|
||||
* -kcmd = Run 'cmd' for MSG-type reminders instead of printing to stdout
|
||||
* -iVAR=EXPR = Initialize and preserve VAR.
|
||||
* -m = Start calendar with Monday instead of Sunday.
|
||||
* -j = Purge all junk from reminder files
|
||||
* A minus sign alone indicates to take input from stdin
|
||||
*
|
||||
**************************************************************/
|
||||
@@ -194,6 +195,10 @@ void InitRemind(int argc, char const *argv[])
|
||||
while (*arg) {
|
||||
switch(*arg++) {
|
||||
|
||||
case 'j':
|
||||
case 'J':
|
||||
PurgeMode = 1;
|
||||
break;
|
||||
case 'i':
|
||||
case 'I':
|
||||
InitializeVar(arg);
|
||||
|
||||
48
src/main.c
48
src/main.c
@@ -70,6 +70,12 @@ int main(int argc, char *argv[])
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Are we purging old reminders? Then just run through the loop once! */
|
||||
if (PurgeMode) {
|
||||
DoReminders();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Not doing a calendar. Do the regular remind loop */
|
||||
ShouldCache = (Iterations > 1);
|
||||
|
||||
@@ -123,6 +129,15 @@ int main(int argc, char *argv[])
|
||||
return 0;
|
||||
}
|
||||
|
||||
void PurgeEchoLine(char const *fmt, ...)
|
||||
{
|
||||
va_list argptr;
|
||||
va_start(argptr, fmt);
|
||||
(void) vfprintf(stdout, fmt, argptr);
|
||||
va_end(argptr);
|
||||
|
||||
}
|
||||
|
||||
/***************************************************************/
|
||||
/* */
|
||||
/* DoReminders */
|
||||
@@ -136,6 +151,7 @@ static void DoReminders(void)
|
||||
Token tok;
|
||||
char const *s;
|
||||
Parser p;
|
||||
int was_rem;
|
||||
|
||||
if (!UseStdin) {
|
||||
FileAccessDate = GetAccessDate(InitialFile);
|
||||
@@ -173,8 +189,12 @@ static void DoReminders(void)
|
||||
ShouldIgnoreLine())
|
||||
{
|
||||
/*** IGNORE THE LINE ***/
|
||||
if (PurgeMode) {
|
||||
PurgeEchoLine("%s\n", CurLine);
|
||||
}
|
||||
}
|
||||
else {
|
||||
was_rem = 0;
|
||||
/* Create a parser to parse the line */
|
||||
CreateParser(s, &p);
|
||||
switch(tok.type) {
|
||||
@@ -183,7 +203,7 @@ static void DoReminders(void)
|
||||
case T_Comment:
|
||||
break;
|
||||
|
||||
case T_Rem: r=DoRem(&p); break;
|
||||
case T_Rem: r=DoRem(&p); was_rem = 1; break;
|
||||
case T_ErrMsg: r=DoErrMsg(&p); break;
|
||||
case T_If: r=DoIf(&p); break;
|
||||
case T_IfTrig: r=DoIfTrig(&p); break;
|
||||
@@ -204,32 +224,42 @@ static void DoReminders(void)
|
||||
DestroyParser(&p);
|
||||
CreateParser(s, &p);
|
||||
r=DoRem(&p);
|
||||
was_rem = 1;
|
||||
}
|
||||
break;
|
||||
case T_Pop: r=PopOmitContext(&p); break;
|
||||
case T_Preserve: r=DoPreserve(&p); break;
|
||||
case T_Push: r=PushOmitContext(&p); break;
|
||||
case T_RemType: if (tok.val == RUN_TYPE) {
|
||||
r=DoRun(&p);
|
||||
r=DoRun(&p);
|
||||
} else {
|
||||
CreateParser(CurLine, &p);
|
||||
r=DoRem(&p);
|
||||
was_rem = 1;
|
||||
}
|
||||
break;
|
||||
} else {
|
||||
CreateParser(CurLine, &p);
|
||||
r=DoRem(&p);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
/* If we don't recognize the command, do a REM by default */
|
||||
/* Note: Since the parser hasn't been used yet, we don't */
|
||||
/* need to destroy it here. */
|
||||
|
||||
default: CreateParser(CurLine, &p); r=DoRem(&p); break;
|
||||
default: CreateParser(CurLine, &p); was_rem = 1; r=DoRem(&p); break;
|
||||
|
||||
}
|
||||
if (r && (!Hush || r != E_RUN_DISABLED)) {
|
||||
Eprint("%s", ErrMsg[r]);
|
||||
}
|
||||
|
||||
if (PurgeMode) {
|
||||
if (!was_rem) {
|
||||
PurgeEchoLine("%s\n", CurLine);
|
||||
} else {
|
||||
if (r) {
|
||||
PurgeEchoLine("### Could not parse next line: %s\n", ErrMsg[r]);
|
||||
PurgeEchoLine("%s\n", CurLine);
|
||||
}
|
||||
}
|
||||
}
|
||||
/* Destroy the parser - free up resources it may be tying up */
|
||||
DestroyParser(&p);
|
||||
}
|
||||
|
||||
@@ -134,3 +134,4 @@ int CompareRems (int dat1, int tim1, int prio1, int dat2, int tim2, int prio2, i
|
||||
void SigIntHandler (int d);
|
||||
void GotSigInt (void);
|
||||
void SynthesizeTag(char *);
|
||||
void PurgeEchoLine(char const *fmt, ...);
|
||||
|
||||
@@ -422,6 +422,7 @@ int ComputeTrigger(int today, Trigger *trig, int *err, int save_in_globals)
|
||||
y, m, d, omit,
|
||||
result;
|
||||
|
||||
trig->expired = 0;
|
||||
if (save_in_globals) LastTrigValid = 0;
|
||||
|
||||
/* Assume everything works */
|
||||
@@ -449,6 +450,7 @@ int ComputeTrigger(int today, Trigger *trig, int *err, int save_in_globals)
|
||||
/* If there's an error, die immediately */
|
||||
if (*err) return -1;
|
||||
if (result == -1) {
|
||||
trig->expired = 1;
|
||||
if (DebugFlag & DB_PRTTRIG) {
|
||||
fprintf(ErrFp, "%s(%d): %s\n",
|
||||
FileName, LineNo, ErrMsg[E_EXPIRED]);
|
||||
@@ -485,6 +487,7 @@ int ComputeTrigger(int today, Trigger *trig, int *err, int save_in_globals)
|
||||
if (trig->back == NO_BACK &&
|
||||
trig->skip == NO_SKIP &&
|
||||
trig->rep == NO_REP) {
|
||||
trig->expired = 1;
|
||||
if (DebugFlag & DB_PRTTRIG) {
|
||||
fprintf(ErrFp, "%s(%d): %s\n",
|
||||
FileName, LineNo, ErrMsg[E_EXPIRED]);
|
||||
@@ -513,6 +516,7 @@ int ComputeTrigger(int today, Trigger *trig, int *err, int save_in_globals)
|
||||
LastTrigValid = 1;
|
||||
}
|
||||
}
|
||||
trig->expired = 1;
|
||||
if (DebugFlag & DB_PRTTRIG) {
|
||||
fprintf(ErrFp, "%s(%d): %s\n",
|
||||
FileName, LineNo, ErrMsg[E_EXPIRED]);
|
||||
|
||||
@@ -54,6 +54,7 @@ typedef struct var {
|
||||
|
||||
/* A trigger */
|
||||
typedef struct {
|
||||
int expired;
|
||||
int wd;
|
||||
int d;
|
||||
int m;
|
||||
|
||||
Reference in New Issue
Block a user