commit 05280b00f9893b6aba1501f38658601f45b333cf
parent 3848d00c9ee54cb0358c1bc80e1b35ab6f612d73
Author: Nils Durner <durner@gnunet.org>
Date: Sat, 10 Mar 2007 23:38:46 +0000
also return filesize
Diffstat:
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;