cinera.c: Add -q flag

This sets cinera to "oneshot mode" which makes a Project Edition instance
quit after syncing from annotation files in project input directory
This commit is contained in:
Matt Mascarenhas 2017-12-18 14:31:05 +00:00
parent 1bbdf5aea4
commit 4a954b6ac6
1 changed files with 21 additions and 3 deletions

View File

@ -14,7 +14,7 @@ typedef struct
version CINERA_APP_VERSION = {
.Major = 0,
.Minor = 5,
.Patch = 11
.Patch = 12
};
#define CINERA_DB_VERSION 2
@ -69,7 +69,8 @@ enum
enum
{
MODE_BARE,
MODE_INTEGRATE
MODE_INTEGRATE,
MODE_ONESHOT
} modes;
enum
@ -1694,6 +1695,9 @@ PrintUsage(char *BinaryLocation, config *DefaultConfig)
"\n"
" -p <project ID>\n"
" Set the project ID, corresponding to the \"project\" field in the HMML files\n"
" -q\n"
" Quit after syncing with annotation files in project input directory\n"
" (Only affects PROJECT edition)\n"
" -s <style>\n"
" Set the style / theme, corresponding to a cinera__*.css file\n"
" This is equal to the \"project\" field in the HMML files by default\n"
@ -2281,6 +2285,7 @@ HMMLToBuffers(buffers *CollationBuffers, char *Filename)
break;
case RC_ERROR_FILE:
case RC_ERROR_MEMORY:
hmml_free(&HMML);
return RC_ERROR_FATAL;
};
if(!HasFilterMenu)
@ -2542,6 +2547,7 @@ AppendedIdentifier:
break;
case RC_ERROR_FILE:
case RC_ERROR_MEMORY:
hmml_free(&HMML);
return RC_ERROR_FATAL;
};
if(!HasFilterMenu)
@ -3880,6 +3886,8 @@ IndexToBuffer(buffers *CollationBuffers)
if(!ProjectFound)
{
fprintf(stderr, "Missing Project Info for %s\n", Config.ProjectID);
FreeBuffer(&Index.Metadata.Buffer);
FreeBuffer(&Index.File.Buffer);
return RC_ERROR_PROJECT;
}
@ -3934,6 +3942,8 @@ IndexToBuffer(buffers *CollationBuffers)
CollationBuffers->Index.Size = StringLength(queryContainer) + (Index.Header.EntryCount * EntryLength) + StringLength(Script);
if(!(CollationBuffers->Index.Location = malloc(CollationBuffers->Index.Size)))
{
FreeBuffer(&Index.Metadata.Buffer);
FreeBuffer(&Index.File.Buffer);
return(RC_ERROR_MEMORY);
}
CollationBuffers->Index.Ptr = CollationBuffers->Index.Location;
@ -4001,6 +4011,7 @@ IndexToBuffer(buffers *CollationBuffers)
CopyStringToBuffer(&CollationBuffers->Index, Script);
FreeBuffer(&Index.Metadata.Buffer);
FreeBuffer(&Index.File.Buffer);
return RC_SUCCESS;
}
else
@ -4544,7 +4555,7 @@ main(int ArgC, char **Args)
}
char CommandLineArg;
while((CommandLineArg = getopt(ArgC, Args, "a:b:B:c:d:fhi:j:l:m:n:o:p:r:R:s:t:U:vx:")) != -1)
while((CommandLineArg = getopt(ArgC, Args, "a:b:B:c:d:fhi:j:l:m:n:o:p:qr:R:s:t:U:vx:")) != -1)
{
switch(CommandLineArg)
{
@ -4589,6 +4600,9 @@ main(int ArgC, char **Args)
case 'p':
Config.ProjectID = optarg;
break;
case 'q':
Config.Mode = MODE_ONESHOT;
break;
case 'r':
Config.RootDir = StripTrailingSlash(optarg);
break;
@ -4821,6 +4835,10 @@ main(int ArgC, char **Args)
printf("┌╼ Synchronising with annotation files in Project Input Directory ╾┐\n");
SyncIndexWithInput(&CollationBuffers, IndexTemplate, PlayerTemplate);
if(Config.Mode == MODE_ONESHOT)
{
goto RIP;
}
printf("\n┌╼ Monitoring Project Directory for \e[1;32mnew\e[0m, \e[1;33medited\e[0m and \e[1;30mdeleted\e[0m .hmml files ╾┐\n");
int inotifyInstance = inotify_init1(IN_NONBLOCK);