ref: 2d0983f7322153b0c6ed729479976e31de8e4541
parent: c402d678bf078f5aed978229c400a9f1362824b1
author: Tevo <[email protected]>
date: Sat Feb 13 22:21:23 EST 2021
Handle SONGWRITER properly (!)
--- a/cue.c
+++ b/cue.c
@@ -60,10 +60,8 @@
}
free(e->title);
free(e->isrc);
- /*
- * TODO maybe we should keep track of every performer in
- * the Cuesheet, even if they're "song only" performers?
- */
+ if(e->songwriter != s->songwriter)
+ free(e->songwriter);
if(e->performer != s->performer)
free(e->performer);
@@ -81,6 +79,7 @@
free(s->title);
free(s->performer);
+ free(s->songwriter);
free(s->mcn);
free(s);
@@ -134,6 +133,23 @@
}
void
+setsongwriter(Cuesheet *c, char *composer)
+{
+ composer = strdup(composer);
+ if(c->curentry == nil)
+ {
+ free(c->songwriter);
+ c->songwriter = composer;
+ }
+ else
+ {
+ if(c->curentry->songwriter != c->songwriter)
+ free(c->curentry->songwriter);
+ c->curentry->songwriter = composer;
+ }
+}
+
+void
settitle(Cuesheet *c, char *title)
{
title = strdup(title);
@@ -215,6 +231,7 @@
new->sheet = c;
new->file = c->curfile;
new->performer = c->performer;
+ new->songwriter = c->songwriter;
new->index = i;
if(c->entries == nil)
--- a/cue.y
+++ b/cue.y
@@ -44,6 +44,7 @@
| ISRC ISRCCODE { setisrc(cursheet, $2); }
| PREGAP timestamp { setpregap(cursheet, $2); }
| POSTGAP timestamp { setpostgap(cursheet, $2); }
+ | SONGWRITER STRING { setsongwriter(cursheet, $2); }
;
flags: { $$ = 0; }
--- a/cuefs.h
+++ b/cuefs.h
@@ -75,7 +75,7 @@
Start *starts;
AFile *file;
int index, flags;
- char *title, *performer, *isrc;
+ char *title, *performer, *songwriter, *isrc;
Timestamp pregap, postgap;
Entry *next;
};
@@ -82,7 +82,7 @@
struct Cuesheet
{
- char *title, *performer, *mcn;
+ char *title, *performer, *songwriter, *mcn;
AFile *files, *curfile;
Entry *entries, *curentry;
};
@@ -102,6 +102,7 @@
void setflags(Cuesheet*, int);
void setmcn(Cuesheet*, char*);
void setperformer(Cuesheet*, char*);
+void setsongwriter(Cuesheet*, char*);
void settitle(Cuesheet*, char*);
void addfile(Cuesheet*, char*, int);
void addnewtrack(Cuesheet*, int);
--- a/fs.c
+++ b/fs.c
@@ -392,6 +392,8 @@
ret = tagflag(&c, ret, esmprint("TRACKNUMBER=%d", e->index));
if(e->performer != nil)
ret = tagflag(&c, ret, esmprint("ARTIST=%s", e->performer));
+ if(e->songwriter != nil)
+ ret = tagflag(&c, ret, esmprint("COMPOSER=%s", e->songwriter));
if(e->isrc != nil)
ret = tagflag(&c, ret, esmprint("ISRC=%s", e->isrc));
if(e->sheet->performer != nil)