X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=aft.c;h=d1c46ba0255da44bf5d42a4fa83aa1c4db53a7c8;hp=423731f6b70e770f4b84924bbf9e3640b8e8ba51;hb=28c8e051a5e94db5105787e8450bab35931f78b8;hpb=2c679eeb8bbc93220f85403eca6e9380dc624a6a diff --git a/aft.c b/aft.c index 423731f6..d1c46ba0 100644 --- a/aft.c +++ b/aft.c @@ -1,3 +1,11 @@ +/* + * Copyright (C) 2007 Andre Noll + * + * Licensed under the GPL v2. For licencing details see COPYING. + */ + +/** \file aft.c Audio file table functions. */ + #include "para.h" #include "error.h" #include @@ -1695,6 +1703,54 @@ err: return ret; } +/* TODO: optionally fix problems by removing offending rows */ +static int check_audio_file(struct osl_row *row, void *data) +{ + char *path; + struct para_buffer *pb = data; + struct stat statbuf; + int ret = get_audio_file_path_of_row(row, &path); + struct afs_info afsi; + char *blob_name; + + if (ret < 0) { + para_printf(pb, "%s\n", PARA_STRERROR(-ret)); + return 1; + } + if (stat(path, &statbuf) < 0) + para_printf(pb, "%s: stat error (%s)\n", path, strerror(errno)); + else { + if (!S_ISREG(statbuf.st_mode)) + para_printf(pb, "%s: not a regular file\n", path); + } + ret = get_afsi_of_row(row, &afsi); + if (ret < 0) { + para_printf(pb, "%s: %s\n", path, PARA_STRERROR(-ret)); + return 1; + } + ret = lyr_get_name_by_id(afsi.lyrics_id, &blob_name); + if (ret < 0) + para_printf(pb, "%s lyrics id %u: %s\n", path, afsi.lyrics_id, + PARA_STRERROR(-ret)); + ret = img_get_name_by_id(afsi.image_id, &blob_name); + if (ret < 0) + para_printf(pb, "%s image id %u: %s\n", path, afsi.image_id, + PARA_STRERROR(-ret)); + return 1; +} + +int aft_check_callback(__a_unused const struct osl_object *query, struct osl_object *result) +{ + struct para_buffer pb = {.buf = NULL}; + + para_printf(&pb, "checking audio file table...\n"); + audio_file_loop(&pb, check_audio_file); + result->data = pb.buf; + result->size = pb.size; + return 1; + +} + /** * Close the audio file table. *