const char *comments_get_albumartist(const struct keyval *comments) { const char *val = keyvals_get_val(comments, "albumartist"); if (!val || strcmp(val, "") == 0) val = keyvals_get_val(comments, "artist"); return val; }
int track_is_va_compilation(const struct keyval *comments) { const char *c, *aa; aa = keyvals_get_val(comments, "albumartist"); if (aa) return is_various_artists(aa); c = keyvals_get_val(comments, "compilation"); return c && is_freeform_true(c); }
/* Return date as an integer in the form YYYYMMDD, for sorting purposes. * This function is not year 10000 compliant. */ int comments_get_date(const struct keyval *comments, const char *key) { const char *val; char *endptr; int year, month, day; long int ival; val = keyvals_get_val(comments, key); if (val == NULL) return -1; year = strtol(val, &endptr, 10); /* Looking for a four-digit number */ if (year < 1000 || year > 9999) return -1; ival = year * 10000; if (*endptr == '-' || *endptr == ' ' || *endptr == '/') { month = strtol(endptr+1, &endptr, 10); if (month < 1 || month > 12) return ival; ival += month * 100; } if (*endptr == '-' || *endptr == ' ' || *endptr == '/') { day = strtol(endptr+1, &endptr, 10); if (day < 1 || day > 31) return ival; ival += day; } return ival; }
const char *comments_get_artistsort(const struct keyval *comments) { const char *val; if (track_is_va_compilation(comments)) return NULL; val = keyvals_get_val(comments, "albumartistsort"); if (!track_is_compilation(comments)) { if (!val || strcmp(val, "") == 0) val = keyvals_get_val(comments, "artistsort"); } if (!val || strcmp(val, "") == 0) return NULL; return val; }
int track_is_compilation(const struct keyval *comments) { const char *c, *a, *aa; c = keyvals_get_val(comments, "compilation"); if (c && is_freeform_true(c)) return 1; aa = keyvals_get_val(comments, "albumartist"); if (aa && is_various_artists(aa)) return 1; a = keyvals_get_val(comments, "artist"); if (aa && a && !u_strcase_equal(aa, a)) return 1; return 0; }
int comments_get_int(const struct keyval *comments, const char *key) { const char *val; long int ival; val = keyvals_get_val(comments, key); if (val == NULL) return -1; while (*val && !(*val >= '0' && *val <= '9')) val++; if (str_to_int(val, &ival) == -1) return -1; return ival; }
double comments_get_double(const struct keyval *comments, const char *key) { const char *val; char *end; double d; val = keyvals_get_val(comments, key); if (!val || strcmp(val, "") == 0) goto error; d = strtod(val, &end); if (val == end) goto error; return d; error: return strtod("NAN", NULL); }