ref: 2b330da8ae103be1970421a4a97a5c263fc09177
parent: 238db3819fb5fecd884a487cb62abbf4fd22ba32
author: Sigrid Solveig Haflínudóttir <ftrvxmtrx@gmail.com>
date: Tue Dec 22 11:16:37 EST 2020
add -G argument to dump the playlist in a new format
--- a/README.md
+++ b/README.md
@@ -12,6 +12,12 @@
* good metadata support
* basic livestreams (ie IceCast) support
+## 2020/12/22
+
+New playlist format. Zuke still will load old format and you can convert to the new one like so:
+
+ audio/zuke -G <old.plist >new.plist
+
## Installing
Install [libtags](https://git.sr.ht/~ft/libtags) first.
--- a/mkplist.c
+++ b/mkplist.c
@@ -222,29 +222,6 @@
return 0;
}
-static void
-printmeta(Meta *m)
-{
- int i;
-
- Bprint(&out, "%c %s\n%c %s\n", Ppath, m->path, Pfilefmt, m->filefmt);
- for(i = 0; i < m->numartist; i++)
- Bprint(&out, "%c %s\n", Partist, m->artist[i]);
- if(m->album != nil)
- Bprint(&out, "%c %s\n", Palbum, m->album);
- if(m->title != nil)
- Bprint(&out, "%c %s\n", Ptitle, m->title);
- if(m->date != nil)
- Bprint(&out, "%c %s\n", Pdate, m->date);
- if(m->track != nil)
- Bprint(&out, "%c %s\n", Ptrack, m->track);
- if(m->duration > 0)
- Bprint(&out, "%c %llud\n", Pduration, m->duration);
- if(m->imagesize > 0)
- Bprint(&out, "%c %d %d %d %s\n", Pimage, m->imageoffset, m->imagesize, m->imagereader, m->imagefmt);
- Bprint(&out, "\n");
-}
-
static int
cmpmeta(void *a_, void *b_)
{
@@ -320,7 +297,7 @@
fprint(2, "no artists: %s\n", all[i].path);
if(all[i].title == nil)
fprint(2, "no title: %s\n", all[i].path);
- printmeta(all+i);
+ printmeta(&out, all+i);
}
Bterm(&out);
fprint(2, "found %d tagged tracks\n", numall);
--- a/plist.h
+++ b/plist.h
@@ -46,3 +46,26 @@
int imagesize;
int imagereader; /* non-zero if a special reader required */
};
+
+static void
+printmeta(Biobuf *b, Meta *m)
+{
+ int i;
+
+ Bprint(b, "%c %s\n%c %s\n", Ppath, m->path, Pfilefmt, m->filefmt);
+ for(i = 0; i < m->numartist; i++)
+ Bprint(b, "%c %s\n", Partist, m->artist[i]);
+ if(m->album != nil)
+ Bprint(b, "%c %s\n", Palbum, m->album);
+ if(m->title != nil)
+ Bprint(b, "%c %s\n", Ptitle, m->title);
+ if(m->date != nil)
+ Bprint(b, "%c %s\n", Pdate, m->date);
+ if(m->track != nil)
+ Bprint(b, "%c %s\n", Ptrack, m->track);
+ if(m->duration > 0)
+ Bprint(b, "%c %llud\n", Pduration, m->duration);
+ if(m->imagesize > 0)
+ Bprint(b, "%c %d %d %d %s\n", Pimage, m->imageoffset, m->imagesize, m->imagereader, m->imagefmt);
+ Bprint(b, "\n");
+}
--- a/zuke.c
+++ b/zuke.c
@@ -64,6 +64,7 @@
static double seekoff; /* ms */
static QLock audiolock;
static int audioerr = 0;
+static Biobuf out;
static char *covers[] = {"art", "folder", "cover", "Cover", "scans/CD", "Scans/Front", "Covers/Front"};
static int Scrollwidth;
@@ -674,6 +675,15 @@
}
static void
+writeplist(void)
+{
+ int i;
+
+ for(i = 0; i < plnum; i++)
+ printmeta(&out, pl+i);
+}
+
+static void
readplistnew(void)
{
char *s, *e, *a[5];
@@ -979,7 +989,7 @@
static void
usage(void)
{
- fprint(2, "usage: %s [-s] [-c aAdDtTp]\n", argv0);
+ fprint(2, "usage: %s [-s] [-G] [-c aAdDtTp]\n", argv0);
sysfatal("usage");
}
@@ -995,9 +1005,10 @@
{ nil, &key, CHANRCV },
{ nil, nil, CHANEND },
};
- int n, scrolling, oldpcur, oldbuttons, pnew, shuffled, themetid;
+ int n, scrolling, oldpcur, oldbuttons, pnew, shuffled, themetid, nogui;
shuffled = 0;
+ nogui = 0;
ARGBEGIN{
case 'd':
debug++;
@@ -1010,6 +1021,9 @@
if(strlen(cols) >= nelem(colwidth))
sysfatal("max %d columns allowed", nelem(colwidth));
break;
+ case 'G':
+ nogui = 1;
+ break;
default:
usage();
break;
@@ -1019,6 +1033,13 @@
if(plnum < 1){
fprint(2, "empty playlist\n");
sysfatal("empty");
+ }
+
+ if(nogui){
+ Binit(&out, 1, OWRITE);
+ writeplist();
+ Bterm(&out);
+ threadexitsall(nil);
}
if(initdraw(nil, nil, "zuke") < 0)