From 4b9e1a2fa0542192d1585412d7a5eeb2a84713e6 Mon Sep 17 00:00:00 2001 From: Matt Mascarenhas Date: Thu, 5 Apr 2018 22:25:23 +0100 Subject: [PATCH] cinera.c: Add new reference combination --- cinera/cinera.c | 180 +++++++++++++++++++++++++----------------------- 1 file changed, 95 insertions(+), 85 deletions(-) diff --git a/cinera/cinera.c b/cinera/cinera.c index 3d63bef..a955f35 100644 --- a/cinera/cinera.c +++ b/cinera/cinera.c @@ -14,7 +14,7 @@ typedef struct version CINERA_APP_VERSION = { .Major = 0, .Minor = 5, - .Patch = 42 + .Patch = 43 }; // TODO(matt): Copy in the DB 3 stuff from cinera_working.c @@ -1559,20 +1559,22 @@ BuildCredits(buffer *CreditsMenu, bool *HasCreditsMenu, HMML_VideoMetaData *Meta return RC_SUCCESS; } +enum +{ + REF_SITE = 1 << 0, + REF_PAGE = 1 << 1, + REF_URL = 1 << 2, + REF_TITLE = 1 << 3, + REF_ARTICLE = 1 << 4, + REF_AUTHOR = 1 << 5, + REF_EDITOR = 1 << 6, + REF_PUBLISHER = 1 << 7, + REF_ISBN = 1 << 8, +} reference_fields; + int BuildReference(ref_info *ReferencesArray, int RefIdentifier, int UniqueRefs, HMML_Reference *Ref, HMML_Annotation *Anno) { - -#define REF_SITE (1 << 0) -#define REF_PAGE (1 << 1) -#define REF_URL (1 << 2) -#define REF_TITLE (1 << 3) -#define REF_ARTICLE (1 << 4) -#define REF_AUTHOR (1 << 5) -#define REF_EDITOR (1 << 6) -#define REF_PUBLISHER (1 << 7) -#define REF_ISBN (1 << 8) - int Mask = 0; if(Ref->site) { Mask |= REF_SITE; } @@ -1585,82 +1587,90 @@ BuildReference(ref_info *ReferencesArray, int RefIdentifier, int UniqueRefs, HMM if(Ref->publisher) { Mask |= REF_PUBLISHER; } if(Ref->isbn) { Mask |= REF_ISBN; } - if((REF_URL | REF_TITLE | REF_AUTHOR | REF_PUBLISHER | REF_ISBN) == Mask) + // TODO(matt): Consider handling the various combinations more flexibly + switch(Mask) { - CopyString(ReferencesArray[UniqueRefs].ID, Ref->isbn); - CopyString(ReferencesArray[UniqueRefs].Source, "%s (%s)", Ref->author, Ref->publisher); - CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->title); - CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); - } - else if((REF_AUTHOR | REF_SITE | REF_PAGE | REF_URL) == Mask) - { - CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); - CopyStringNoFormat(ReferencesArray[UniqueRefs].Source, Ref->site); - CopyString(ReferencesArray[UniqueRefs].RefTitle, "%s: \"%s\"", Ref->author, Ref->page); - CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); - } - else if((REF_PAGE | REF_URL | REF_TITLE) == Mask) - { - CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); - CopyStringNoFormat(ReferencesArray[UniqueRefs].Source, Ref->title); - CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->page); - CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); - } - else if((REF_SITE | REF_PAGE | REF_URL) == Mask) - { - CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); - CopyStringNoFormat(ReferencesArray[UniqueRefs].Source, Ref->site); - CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->page); - CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); - } - else if((REF_SITE | REF_URL | REF_TITLE) == Mask) - { - CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); - CopyStringNoFormat(ReferencesArray[UniqueRefs].Source, Ref->site); - CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->title); - CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); - } - else if((REF_TITLE | REF_AUTHOR | REF_ISBN) == Mask) - { - CopyString(ReferencesArray[UniqueRefs].ID, Ref->isbn); - CopyString(ReferencesArray[UniqueRefs].Source, Ref->author); - CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->title); - CopyString(ReferencesArray[UniqueRefs].URL, "http://www.openisbn.com/isbn/%s", Ref->isbn); - } - else if((REF_URL | REF_ARTICLE | REF_AUTHOR) == Mask) - { - CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); - CopyString(ReferencesArray[UniqueRefs].Source, Ref->author); - CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->article); - CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); - } - else if((REF_URL | REF_TITLE | REF_AUTHOR) == Mask) - { - CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); - CopyString(ReferencesArray[UniqueRefs].Source, Ref->author); - CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->title); - CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); - } - else if((REF_URL | REF_TITLE) == Mask) - { - CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); - CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->title); - CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); - } - else if((REF_SITE | REF_URL) == Mask) - { - CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); - CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->site); - CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); - } - else - { - return 1; + case (REF_URL | REF_TITLE | REF_AUTHOR | REF_PUBLISHER | REF_ISBN): + { + CopyString(ReferencesArray[UniqueRefs].ID, Ref->isbn); + CopyString(ReferencesArray[UniqueRefs].Source, "%s (%s)", Ref->author, Ref->publisher); + CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->title); + CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); + } break; + case (REF_AUTHOR | REF_SITE | REF_PAGE | REF_URL): + { + CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); + CopyStringNoFormat(ReferencesArray[UniqueRefs].Source, Ref->site); + CopyString(ReferencesArray[UniqueRefs].RefTitle, "%s: \"%s\"", Ref->author, Ref->page); + CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); + } break; + case (REF_PAGE | REF_URL | REF_TITLE): + { + CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); + CopyStringNoFormat(ReferencesArray[UniqueRefs].Source, Ref->title); + CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->page); + CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); + } break; + case (REF_SITE | REF_PAGE | REF_URL): + { + CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); + CopyStringNoFormat(ReferencesArray[UniqueRefs].Source, Ref->site); + CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->page); + CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); + } break; + case (REF_SITE | REF_URL | REF_TITLE): + { + CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); + CopyStringNoFormat(ReferencesArray[UniqueRefs].Source, Ref->site); + CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->title); + CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); + } break; + case (REF_TITLE | REF_AUTHOR | REF_ISBN): + { + CopyString(ReferencesArray[UniqueRefs].ID, Ref->isbn); + CopyString(ReferencesArray[UniqueRefs].Source, Ref->author); + CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->title); + CopyString(ReferencesArray[UniqueRefs].URL, "http://www.openisbn.com/isbn/%s", Ref->isbn); + } break; + case (REF_URL | REF_ARTICLE | REF_AUTHOR): + { + CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); + CopyString(ReferencesArray[UniqueRefs].Source, Ref->author); + CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->article); + CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); + } break; + case (REF_URL | REF_TITLE | REF_AUTHOR): + { + CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); + CopyString(ReferencesArray[UniqueRefs].Source, Ref->author); + CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->title); + CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); + } break; + case (REF_URL | REF_TITLE | REF_PUBLISHER): + { + CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); + CopyString(ReferencesArray[UniqueRefs].Source, Ref->publisher); + CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->title); + CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); + } break; + case (REF_URL | REF_TITLE): + { + CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); + CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->title); + CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); + } break; + case (REF_SITE | REF_URL): + { + CopyStringNoFormat(ReferencesArray[UniqueRefs].ID, Ref->url); + CopyStringNoFormat(ReferencesArray[UniqueRefs].RefTitle, Ref->site); + CopyStringNoFormat(ReferencesArray[UniqueRefs].URL, Ref->url); + } break; + default: return RC_INVALID_REFERENCE; break; } CopyString(ReferencesArray[UniqueRefs].Identifier[ReferencesArray[UniqueRefs].IdentifierCount].Timecode, Anno->time); ReferencesArray[UniqueRefs].Identifier[ReferencesArray[UniqueRefs].IdentifierCount].Identifier = RefIdentifier; - return 0; + return RC_SUCCESS; } void @@ -3399,7 +3409,7 @@ HMMLToBuffers(buffers *CollationBuffers, template **BespokeTemplate, char *Filen "
\n" "
\n"); - if(BuildReference(ReferencesArray, RefIdentifier, UniqueRefs, CurrentRef, Anno) == 1) + if(BuildReference(ReferencesArray, RefIdentifier, UniqueRefs, CurrentRef, Anno) == RC_INVALID_REFERENCE) { LogError(LOG_ERROR, "Reference combination processing failed: %s:%d", Filename, Anno->line); fprintf(stderr, "%s:%d: Cannot process new combination of reference info\n" @@ -3455,7 +3465,7 @@ HMMLToBuffers(buffers *CollationBuffers, template **BespokeTemplate, char *Filen } } - if(BuildReference(ReferencesArray, RefIdentifier, UniqueRefs, CurrentRef, Anno) == 1) + if(BuildReference(ReferencesArray, RefIdentifier, UniqueRefs, CurrentRef, Anno) == RC_INVALID_REFERENCE) { LogError(LOG_ERROR, "Reference combination processing failed: %s:%d", Filename, Anno->line); fprintf(stderr, "%s:%d: Cannot process new combination of reference info\n"