libextractor

GNU libextractor
Log | Files | Refs | Submodules | README | LICENSE

commit 05280b00f9893b6aba1501f38658601f45b333cf
parent 3848d00c9ee54cb0358c1bc80e1b35ab6f612d73
Author: Nils Durner <durner@gnunet.org>
Date:   Sat, 10 Mar 2007 23:38:46 +0000

also return filesize

Diffstat:
Msrc/include/extractor.h | 2+-
Msrc/main/extractor.c | 3++-
Msrc/plugins/filenameextractor.c | 50++++++++++++++++++++++++++++++++++++--------------
Msrc/plugins/lowerextractor.c | 5+++++
Msrc/plugins/splitextractor.c | 8+++++---
5 files changed, 49 insertions(+), 19 deletions(-)

diff --git a/src/include/extractor.h b/src/include/extractor.h @@ -184,7 +184,7 @@ typedef enum { EXTRACTOR_STARTING_SONG = 128, EXTRACTOR_HARDWARE_DEPENDENCY = 129, EXTRACTOR_RIPPER = 130, - + EXTRACTOR_FILE_SIZE = 131 } EXTRACTOR_KeywordType; /** diff --git a/src/main/extractor.c b/src/main/extractor.c @@ -172,11 +172,12 @@ static const char *keywordTypes[] = { gettext_noop("starting song"), gettext_noop("hardware dependency"), gettext_noop("ripper"), /* 130 */ + gettext_noop("filesize") /* 131 */, NULL, }; /* the number of keyword types (for bounds-checking) */ -#define HIGHEST_TYPE_NUMBER 131 +#define HIGHEST_TYPE_NUMBER 132 #ifdef HAVE_LIBOGG #if HAVE_VORBIS diff --git a/src/plugins/filenameextractor.c b/src/plugins/filenameextractor.c @@ -33,18 +33,40 @@ libextractor_filename_extract(const char * filename, const char * filenameRoot = filename; int res; - if (filename == NULL) - return prev; - for (res=strlen(filename)-1;res>=0;res--) - if (filename[res] == DIR_SEPARATOR) { - filenameRoot = &filename[res+1]; - break; - } - keyword = malloc(sizeof(EXTRACTOR_KeywordList)); - keyword->next = prev; - keyword->keyword = convertToUtf8(filenameRoot, - strlen(filenameRoot), - nl_langinfo(CODESET)); - keyword->keywordType = EXTRACTOR_FILENAME; - return keyword; + /* get filename */ + if (filename != NULL) { + for (res=strlen(filename)-1;res>=0;res--) + if (filename[res] == DIR_SEPARATOR) { + filenameRoot = &filename[res+1]; + break; + } + keyword = malloc(sizeof(EXTRACTOR_KeywordList)); + keyword->next = prev; + keyword->keyword = convertToUtf8(filenameRoot, + strlen(filenameRoot), + nl_langinfo(CODESET)); + keyword->keywordType = EXTRACTOR_FILENAME; + prev = keyword; + } + + /* get file size */ + if (size > 0) { + keyword = malloc(sizeof(EXTRACTOR_KeywordList)); + keyword->next = prev; + keyword->keyword = malloc(14); + keyword->keywordType = EXTRACTOR_FILE_SIZE; + + if (size >= 1000000000) + snprintf(keyword->keyword, 13, "%.2f %s", size / 1000000000.0, _("GB")); + else if (size >= 1000000) + snprintf(keyword->keyword, 13, "%.2f %s", size / 1000000.0, _("MB")); + else if (size >= 1000) + snprintf(keyword->keyword, 13, "%.2f %s", size / 1000.0, _("KB")); + else + snprintf(keyword->keyword, 13, "%.2f %s", size, _("Bytes")); + + prev = keyword; + } + + return prev; } diff --git a/src/plugins/lowerextractor.c b/src/plugins/lowerextractor.c @@ -48,6 +48,11 @@ libextractor_lower_extract(char * filename, while (pos != NULL) { + if (pos->keywordType == EXTRACTOR_FILE_SIZE) { + pos = pos->next; + continue; + } + needed = strlen(pos->keyword) + 1; if (needed > mem) { diff --git a/src/plugins/splitextractor.c b/src/plugins/splitextractor.c @@ -98,9 +98,11 @@ libextractor_split_extract(const char * filename, options = TOKENIZERS; pos = prev; while (pos != NULL) { - splitKeywords(pos->keyword, - &prev, - options); + if (pos->keywordType != EXTRACTOR_FILE_SIZE) + splitKeywords(pos->keyword, + &prev, + options); + pos = pos->next; } return prev;