Gentoo Archives: gentoo-commits

From: "Mike Frysinger (vapier)" <vapier@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] gentoo-x86 commit in net-misc/mediatomb/files: mediatomb-0.12.1-libextractor.patch
Date: Tue, 02 Oct 2012 06:36:02
Message-Id: 20121002063533.3322C21601@flycatcher.gentoo.org
1 vapier 12/10/02 06:35:33
2
3 Added: mediatomb-0.12.1-libextractor.patch
4 Log:
5 Port to libextractor-0.6.x by me #435394 by BT.
6
7 (Portage version: 2.2.0_alpha131/cvs/Linux x86_64)
8
9 Revision Changes Path
10 1.1 net-misc/mediatomb/files/mediatomb-0.12.1-libextractor.patch
11
12 file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/net-misc/mediatomb/files/mediatomb-0.12.1-libextractor.patch?rev=1.1&view=markup
13 plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/net-misc/mediatomb/files/mediatomb-0.12.1-libextractor.patch?rev=1.1&content-type=text/plain
14
15 Index: mediatomb-0.12.1-libextractor.patch
16 ===================================================================
17 http://bugs.gentoo.org/435394
18
19 port to libextractor-0.6.x
20
21 patch by Mike Frysinger <vapier@g.o>
22
23 --- a/configure.ac
24 +++ b/configure.ac
25 @@ -1631,7 +1631,7 @@ MT_CHECK_OPTIONAL_PACKAGE([lastfmlib], [disable],
26 ######## extractor
27
28 if test "x$LIBEXTRACTOR_OPTION_ENABLED" = xyes; then
29 - MT_CHECK_PACKAGE([libextractor], [extractor], [extractor], [EXTRACTOR_getKeywords])
30 + MT_CHECK_PACKAGE([libextractor], [extractor], [extractor], [EXTRACTOR_extract])
31 fi
32
33 if test "x$LIBEXTRACTOR_STATUS" = xyes; then
34 --- a/src/metadata/extractor_handler.cc
35 +++ b/src/metadata/extractor_handler.cc
36 @@ -55,322 +55,344 @@ ExtractorHandler::ExtractorHandler() : MetadataHandler()
37 {
38 }
39
40 -static EXTRACTOR_KeywordType getTagFromString(String tag)
41 +static EXTRACTOR_MetaType getTagFromString(String tag)
42 {
43 - if (tag == "EXTRACTOR_UNKNOWN")
44 - return EXTRACTOR_UNKNOWN;
45 - if (tag == "EXTRACTOR_FILENAME")
46 - return EXTRACTOR_FILENAME;
47 - if (tag == "EXTRACTOR_MIMETYPE")
48 - return EXTRACTOR_MIMETYPE;
49 - if (tag == "EXTRACTOR_TITLE")
50 - return EXTRACTOR_TITLE;
51 - if (tag == "EXTRACTOR_AUTHOR")
52 - return EXTRACTOR_AUTHOR;
53 - if (tag == "EXTRACTOR_ARTIST")
54 - return EXTRACTOR_ARTIST;
55 - if (tag == "EXTRACTOR_DESCRIPTION")
56 - return EXTRACTOR_DESCRIPTION;
57 - if (tag == "EXTRACTOR_COMMENT")
58 - return EXTRACTOR_COMMENT;
59 - if (tag == "EXTRACTOR_DATE")
60 - return EXTRACTOR_DATE;
61 - if (tag == "EXTRACTOR_PUBLISHER")
62 - return EXTRACTOR_PUBLISHER;
63 - if (tag == "EXTRACTOR_LANGUAGE")
64 - return EXTRACTOR_LANGUAGE;
65 - if (tag == "EXTRACTOR_ALBUM")
66 - return EXTRACTOR_ALBUM;
67 - if (tag == "EXTRACTOR_GENRE")
68 - return EXTRACTOR_GENRE;
69 - if (tag == "EXTRACTOR_LOCATION")
70 - return EXTRACTOR_LOCATION;
71 - if (tag == "EXTRACTOR_VERSIONNUMBER")
72 - return EXTRACTOR_VERSIONNUMBER;
73 - if (tag == "EXTRACTOR_ORGANIZATION")
74 - return EXTRACTOR_ORGANIZATION;
75 - if (tag == "EXTRACTOR_COPYRIGHT")
76 - return EXTRACTOR_COPYRIGHT;
77 - if (tag == "EXTRACTOR_SUBJECT")
78 - return EXTRACTOR_SUBJECT;
79 - if (tag == "EXTRACTOR_KEYWORDS")
80 - return EXTRACTOR_KEYWORDS;
81 - if (tag == "EXTRACTOR_CONTRIBUTOR")
82 - return EXTRACTOR_CONTRIBUTOR;
83 - if (tag == "EXTRACTOR_RESOURCE_TYPE")
84 - return EXTRACTOR_RESOURCE_TYPE;
85 - if (tag == "EXTRACTOR_FORMAT")
86 - return EXTRACTOR_FORMAT;
87 - if (tag == "EXTRACTOR_RESOURCE_IDENTIFIER")
88 - return EXTRACTOR_RESOURCE_IDENTIFIER;
89 - if (tag == "EXTRACTOR_SOURCE")
90 - return EXTRACTOR_SOURCE;
91 - if (tag == "EXTRACTOR_RELATION")
92 - return EXTRACTOR_RELATION;
93 - if (tag == "EXTRACTOR_COVERAGE")
94 - return EXTRACTOR_COVERAGE;
95 - if (tag == "EXTRACTOR_SOFTWARE")
96 - return EXTRACTOR_SOFTWARE;
97 - if (tag == "EXTRACTOR_DISCLAIMER")
98 - return EXTRACTOR_DISCLAIMER;
99 - if (tag == "EXTRACTOR_WARNING")
100 - return EXTRACTOR_WARNING;
101 - if (tag == "EXTRACTOR_TRANSLATED")
102 - return EXTRACTOR_TRANSLATED;
103 - if (tag == "EXTRACTOR_CREATION_DATE")
104 - return EXTRACTOR_CREATION_DATE;
105 - if (tag == "EXTRACTOR_MODIFICATION_DATE")
106 - return EXTRACTOR_MODIFICATION_DATE;
107 - if (tag == "EXTRACTOR_CREATOR")
108 - return EXTRACTOR_CREATOR;
109 - if (tag == "EXTRACTOR_PRODUCER")
110 - return EXTRACTOR_PRODUCER;
111 - if (tag == "EXTRACTOR_PAGE_COUNT")
112 - return EXTRACTOR_PAGE_COUNT;
113 - if (tag == "EXTRACTOR_PAGE_ORIENTATION")
114 - return EXTRACTOR_PAGE_ORIENTATION;
115 - if (tag == "EXTRACTOR_PAPER_SIZE")
116 - return EXTRACTOR_PAPER_SIZE;
117 - if (tag == "EXTRACTOR_USED_FONTS")
118 - return EXTRACTOR_USED_FONTS;
119 - if (tag == "EXTRACTOR_PAGE_ORDER")
120 - return EXTRACTOR_PAGE_ORDER;
121 - if (tag == "EXTRACTOR_CREATED_FOR")
122 - return EXTRACTOR_CREATED_FOR;
123 - if (tag == "EXTRACTOR_MAGNIFICATION")
124 - return EXTRACTOR_MAGNIFICATION;
125 - if (tag == "EXTRACTOR_RELEASE")
126 - return EXTRACTOR_RELEASE;
127 - if (tag == "EXTRACTOR_GROUP")
128 - return EXTRACTOR_GROUP;
129 - if (tag == "EXTRACTOR_SIZE")
130 - return EXTRACTOR_SIZE;
131 - if (tag == "EXTRACTOR_SUMMARY")
132 - return EXTRACTOR_SUMMARY;
133 - if (tag == "EXTRACTOR_PACKAGER")
134 - return EXTRACTOR_PACKAGER;
135 - if (tag == "EXTRACTOR_VENDOR")
136 - return EXTRACTOR_VENDOR;
137 - if (tag == "EXTRACTOR_LICENSE")
138 - return EXTRACTOR_LICENSE;
139 - if (tag == "EXTRACTOR_DISTRIBUTION")
140 - return EXTRACTOR_DISTRIBUTION;
141 - if (tag == "EXTRACTOR_BUILDHOST")
142 - return EXTRACTOR_BUILDHOST;
143 - if (tag == "EXTRACTOR_OS")
144 - return EXTRACTOR_OS;
145 - if (tag == "EXTRACTOR_DEPENDENCY")
146 - return EXTRACTOR_DEPENDENCY;
147 - if (tag == "EXTRACTOR_HASH_MD4")
148 - return EXTRACTOR_HASH_MD4;
149 - if (tag == "EXTRACTOR_HASH_MD5")
150 - return EXTRACTOR_HASH_MD5;
151 - if (tag == "EXTRACTOR_HASH_SHA0")
152 - return EXTRACTOR_HASH_SHA0;
153 - if (tag == "EXTRACTOR_HASH_SHA1")
154 - return EXTRACTOR_HASH_SHA1;
155 - if (tag == "EXTRACTOR_HASH_RMD160")
156 - return EXTRACTOR_HASH_RMD160;
157 - if (tag == "EXTRACTOR_RESOLUTION")
158 - return EXTRACTOR_RESOLUTION;
159 - if (tag == "EXTRACTOR_CATEGORY")
160 - return EXTRACTOR_CATEGORY;
161 - if (tag == "EXTRACTOR_BOOKTITLE")
162 - return EXTRACTOR_BOOKTITLE;
163 - if (tag == "EXTRACTOR_PRIORITY")
164 - return EXTRACTOR_PRIORITY;
165 - if (tag == "EXTRACTOR_CONFLICTS")
166 - return EXTRACTOR_CONFLICTS;
167 - if (tag == "EXTRACTOR_REPLACES")
168 - return EXTRACTOR_REPLACES;
169 - if (tag == "EXTRACTOR_PROVIDES")
170 - return EXTRACTOR_PROVIDES;
171 - if (tag == "EXTRACTOR_CONDUCTOR")
172 - return EXTRACTOR_CONDUCTOR;
173 - if (tag == "EXTRACTOR_INTERPRET")
174 - return EXTRACTOR_INTERPRET;
175 - if (tag == "EXTRACTOR_OWNER")
176 - return EXTRACTOR_OWNER;
177 - if (tag == "EXTRACTOR_LYRICS")
178 - return EXTRACTOR_LYRICS;
179 - if (tag == "EXTRACTOR_MEDIA_TYPE")
180 - return EXTRACTOR_MEDIA_TYPE;
181 - if (tag == "EXTRACTOR_CONTACT")
182 - return EXTRACTOR_CONTACT;
183 - if (tag == "EXTRACTOR_THUMBNAIL_DATA")
184 - return EXTRACTOR_THUMBNAIL_DATA;
185 -
186 -#ifdef EXTRACTOR_GE_0_5_2
187 - if (tag == "EXTRACTOR_PUBLICATION_DATE")
188 - return EXTRACTOR_PUBLICATION_DATE;
189 - if (tag == "EXTRACTOR_CAMERA_MAKE")
190 - return EXTRACTOR_CAMERA_MAKE;
191 - if (tag == "EXTRACTOR_CAMERA_MODEL")
192 - return EXTRACTOR_CAMERA_MODEL;
193 - if (tag == "EXTRACTOR_EXPOSURE")
194 - return EXTRACTOR_EXPOSURE;
195 - if (tag == "EXTRACTOR_APERTURE")
196 - return EXTRACTOR_APERTURE;
197 - if (tag == "EXTRACTOR_EXPOSURE_BIAS")
198 - return EXTRACTOR_EXPOSURE_BIAS;
199 - if (tag == "EXTRACTOR_FLASH")
200 - return EXTRACTOR_FLASH;
201 - if (tag == "EXTRACTOR_FLASH_BIAS")
202 - return EXTRACTOR_FLASH_BIAS;
203 - if (tag == "EXTRACTOR_FOCAL_LENGTH")
204 - return EXTRACTOR_FOCAL_LENGTH;
205 - if (tag == "EXTRACTOR_FOCAL_LENGTH_35MM")
206 - return EXTRACTOR_FOCAL_LENGTH_35MM;
207 - if (tag == "EXTRACTOR_ISO_SPEED")
208 - return EXTRACTOR_ISO_SPEED;
209 - if (tag == "EXTRACTOR_EXPOSURE_MODE")
210 - return EXTRACTOR_EXPOSURE_MODE;
211 - if (tag == "EXTRACTOR_METERING_MODE")
212 - return EXTRACTOR_METERING_MODE;
213 - if (tag == "EXTRACTOR_MACRO_MODE")
214 - return EXTRACTOR_MACRO_MODE;
215 - if (tag == "EXTRACTOR_IMAGE_QUALITY")
216 - return EXTRACTOR_IMAGE_QUALITY;
217 - if (tag == "EXTRACTOR_WHITE_BALANCE")
218 - return EXTRACTOR_WHITE_BALANCE;
219 - if (tag == "EXTRACTOR_ORIENTATION")
220 - return EXTRACTOR_ORIENTATION;
221 -#endif // EXTRACTOR_GE_0_5_2
222 +#define T(x) [EXTRACTOR_METATYPE_##x] = "EXTRACTOR_METATYPE_"#x,
223 + /* XXX: should convert to EXTRACTOR_metatype_to_string() somehow */
224 + const char *types[] =
225 + {
226 + T(RESERVED)
227 + T(MIMETYPE)
228 + T(FILENAME)
229 + T(COMMENT)
230 +
231 + T(TITLE)
232 + T(BOOK_TITLE)
233 + T(BOOK_EDITION)
234 + T(BOOK_CHAPTER_NUMBER)
235 + T(JOURNAL_NAME)
236 + T(JOURNAL_VOLUME)
237 + T(JOURNAL_NUMBER)
238 + T(PAGE_COUNT)
239 + T(PAGE_RANGE)
240 + T(AUTHOR_NAME)
241 + T(AUTHOR_EMAIL)
242 + T(AUTHOR_INSTITUTION)
243 + T(PUBLISHER)
244 + T(PUBLISHER_ADDRESS)
245 + T(PUBLISHER_INSTITUTION)
246 + T(PUBLISHER_SERIES)
247 + T(PUBLICATION_TYPE)
248 + T(PUBLICATION_YEAR)
249 + T(PUBLICATION_MONTH)
250 + T(PUBLICATION_DAY)
251 + T(PUBLICATION_DATE)
252 + T(BIBTEX_EPRINT)
253 + T(BIBTEX_ENTRY_TYPE)
254 + T(LANGUAGE)
255 + T(CREATION_TIME)
256 + T(URL)
257 +
258 + T(URI)
259 + T(ISRC)
260 + T(HASH_MD4)
261 + T(HASH_MD5)
262 + T(HASH_SHA0)
263 + T(HASH_SHA1)
264 + T(HASH_RMD160)
265 +
266 + T(GPS_LATITUDE_REF)
267 + T(GPS_LATITUDE)
268 + T(GPS_LONGITUDE_REF)
269 + T(GPS_LONGITUDE)
270 + T(LOCATION_CITY)
271 + T(LOCATION_SUBLOCATION)
272 + T(LOCATION_COUNTRY)
273 + T(LOCATION_COUNTRY_CODE)
274 +
275 + T(UNKNOWN)
276 + T(DESCRIPTION)
277 + T(COPYRIGHT)
278 + T(RIGHTS)
279 + T(KEYWORDS)
280 + T(ABSTRACT)
281 + T(SUMMARY)
282 + T(SUBJECT)
283 + T(CREATOR)
284 + T(FORMAT)
285 + T(FORMAT_VERSION)
286 +
287 + T(CREATED_BY_SOFTWARE)
288 + T(UNKNOWN_DATE)
289 + T(CREATION_DATE)
290 + T(MODIFICATION_DATE)
291 + T(LAST_PRINTED)
292 + T(LAST_SAVED_BY)
293 + T(TOTAL_EDITING_TIME)
294 + T(EDITING_CYCLES)
295 + T(MODIFIED_BY_SOFTWARE)
296 + T(REVISION_HISTORY)
297 +
298 + T(EMBEDDED_FILE_SIZE)
299 + T(FINDER_FILE_TYPE)
300 + T(FINDER_FILE_CREATOR)
301 +
302 + T(PACKAGE_NAME)
303 + T(PACKAGE_VERSION)
304 + T(SECTION)
305 + T(UPLOAD_PRIORITY)
306 + T(PACKAGE_DEPENDENCY)
307 + T(PACKAGE_CONFLICTS)
308 + T(PACKAGE_REPLACES)
309 + T(PACKAGE_PROVIDES)
310 + T(PACKAGE_RECOMMENDS)
311 + T(PACKAGE_SUGGESTS)
312 + T(PACKAGE_MAINTAINER)
313 + T(PACKAGE_INSTALLED_SIZE)
314 + T(PACKAGE_SOURCE)
315 + T(PACKAGE_ESSENTIAL)
316 + T(TARGET_ARCHITECTURE)
317 + T(PACKAGE_PRE_DEPENDENCY)
318 + T(LICENSE)
319 + T(PACKAGE_DISTRIBUTION)
320 + T(BUILDHOST)
321 + T(VENDOR)
322 + T(TARGET_OS)
323 + T(SOFTWARE_VERSION)
324 + T(TARGET_PLATFORM)
325 + T(RESOURCE_TYPE)
326 + T(LIBRARY_SEARCH_PATH)
327 + T(LIBRARY_DEPENDENCY)
328 +
329 + T(CAMERA_MAKE)
330 + T(CAMERA_MODEL)
331 + T(EXPOSURE)
332 + T(APERTURE)
333 + T(EXPOSURE_BIAS)
334 + T(FLASH)
335 + T(FLASH_BIAS)
336 + T(FOCAL_LENGTH)
337 + T(FOCAL_LENGTH_35MM)
338 + T(ISO_SPEED)
339 + T(EXPOSURE_MODE)
340 + T(METERING_MODE)
341 + T(MACRO_MODE)
342 + T(IMAGE_QUALITY)
343 + T(WHITE_BALANCE)
344 + T(ORIENTATION)
345 + T(MAGNIFICATION)
346 +
347 + T(IMAGE_DIMENSIONS)
348 + T(PRODUCED_BY_SOFTWARE)
349 + T(THUMBNAIL)
350 + T(IMAGE_RESOLUTION)
351 + T(SOURCE)
352 +
353 + T(CHARACTER_SET)
354 + T(LINE_COUNT)
355 + T(PARAGRAPH_COUNT)
356 + T(WORD_COUNT)
357 + T(CHARACTER_COUNT)
358 + T(PAGE_ORIENTATION)
359 + T(PAPER_SIZE)
360 + T(TEMPLATE)
361 + T(COMPANY)
362 + T(MANAGER)
363 + T(REVISION_NUMBER)
364 +
365 + T(DURATION)
366 + T(ALBUM)
367 + T(ARTIST)
368 + T(GENRE)
369 + T(TRACK_NUMBER)
370 + T(DISC_NUMBER)
371 + T(PERFORMER)
372 + T(CONTACT_INFORMATION)
373 + T(SONG_VERSION)
374 + T(PICTURE)
375 + T(COVER_PICTURE)
376 + T(CONTRIBUTOR_PICTURE)
377 + T(EVENT_PICTURE)
378 + T(LOGO)
379 + T(BROADCAST_TELEVISION_SYSTEM)
380 + T(SOURCE_DEVICE)
381 + T(DISCLAIMER)
382 + T(WARNING)
383 + T(PAGE_ORDER)
384 + T(WRITER)
385 + T(PRODUCT_VERSION)
386 + T(CONTRIBUTOR_NAME)
387 + T(MOVIE_DIRECTOR)
388 + T(NETWORK_NAME)
389 + T(SHOW_NAME)
390 + T(CHAPTER_NAME)
391 + T(SONG_COUNT)
392 + T(STARTING_SONG)
393 + T(PLAY_COUNTER)
394 + T(CONDUCTOR)
395 + T(INTERPRETATION)
396 + T(COMPOSER)
397 + T(BEATS_PER_MINUTE)
398 + T(ENCODED_BY)
399 + T(ORIGINAL_TITLE)
400 + T(ORIGINAL_ARTIST)
401 + T(ORIGINAL_WRITER)
402 + T(ORIGINAL_RELEASE_YEAR)
403 + T(ORIGINAL_PERFORMER)
404 + T(LYRICS)
405 + T(POPULARITY_METER)
406 + T(LICENSEE)
407 + T(MUSICIAN_CREDITS_LIST)
408 + T(MOOD)
409 + T(SUBTITLE)
410 +
411 + T(GNUNET_DISPLAY_TYPE)
412 + T(GNUNET_FULL_DATA)
413 + T(RATING)
414 + T(ORGANIZATION)
415 + T(RIPPER)
416 + T(PRODUCER)
417 + T(GROUP)
418 + T(GNUNET_ORIGINAL_FILENAME)
419 + };
420 +#undef T
421 + size_t i;
422 +
423 + for (i = 0; i < sizeof(types) / sizeof(types[0]); ++i)
424 + if (!strcmp(types[i], tag.c_str()))
425 + return (EXTRACTOR_MetaType) i;
426
427 log_warning("Ignoring unknown libextractor tag: %s\n", tag.c_str());
428 - return EXTRACTOR_UNKNOWN;
429 + return EXTRACTOR_METATYPE_UNKNOWN;
430 }
431
432 -static void addMetaField(metadata_fields_t field, EXTRACTOR_KeywordList *keywords, Ref<CdsItem> item, Ref<StringConverter> sc)
433 +struct field_state {
434 + Ref<CdsItem> item;
435 + Ref<StringConverter> sc;
436 + Ref<Array<StringBase> > aux;
437 +};
438 +
439 +static int addField(void *cls, const char *plugin_name, enum EXTRACTOR_MetaType type,
440 + enum EXTRACTOR_MetaFormat format, const char *data_mime_type,
441 + const char *data, size_t data_len)
442 {
443 - String value;
444 - const char *temp = NULL;
445 -
446 + metadata_fields_t field = M_MAX;
447 + resource_attributes_t attr = R_MAX;
448 +
449 + if (!data)
450 + return 0;
451 +
452 + log_debug("metadata %zu [%s] -> %s\n", (size_t)type, EXTRACTOR_metatype_to_string(type), data);
453 +
454 /// \todo check if UTF-8 conversion is needed, may already be in UTF-8
455 -
456 - switch (field)
457 +
458 + switch (type)
459 {
460 - case M_TITLE:
461 - temp = EXTRACTOR_extractLast(EXTRACTOR_TITLE, keywords);
462 + case EXTRACTOR_METATYPE_TITLE:
463 + field = M_TITLE;
464 break;
465 - case M_ARTIST:
466 - temp = EXTRACTOR_extractLast(EXTRACTOR_ARTIST, keywords);
467 + case EXTRACTOR_METATYPE_ARTIST:
468 + field = M_ARTIST;
469 break;
470 - case M_ALBUM:
471 - temp = EXTRACTOR_extractLast(EXTRACTOR_ALBUM, keywords);
472 + case EXTRACTOR_METATYPE_ALBUM:
473 + field = M_ALBUM;
474 break;
475 - case M_DATE:
476 - temp = EXTRACTOR_extractLast(EXTRACTOR_DATE, keywords);
477 + case EXTRACTOR_METATYPE_PUBLICATION_YEAR:
478 + field = M_DATE;
479 break;
480 - case M_GENRE:
481 - temp = EXTRACTOR_extractLast(EXTRACTOR_GENRE, keywords);
482 + case EXTRACTOR_METATYPE_GENRE:
483 + field = M_GENRE;
484 break;
485 - case M_DESCRIPTION:
486 - temp = EXTRACTOR_extractLast(EXTRACTOR_DESCRIPTION, keywords);
487 -
488 - if (temp == NULL)
489 - temp = EXTRACTOR_extractLast(EXTRACTOR_COMMENT, keywords);
490 + case EXTRACTOR_METATYPE_DESCRIPTION:
491 + field = M_DESCRIPTION;
492 + break;
493 + case EXTRACTOR_METATYPE_COMMENT:
494 + field = M_DESCRIPTION;
495 + break;
496 + case EXTRACTOR_METATYPE_IMAGE_DIMENSIONS:
497 + attr = R_RESOLUTION;
498 break;
499 - default:
500 - return;
501 }
502
503 - if (temp != NULL)
504 - value = temp;
505 + String value;
506 + struct field_state *field_state = (struct field_state *)cls;
507 + Ref<CdsItem> item = field_state->item;
508 + Ref<StringConverter> sc = field_state->sc;
509 + Ref<Array<StringBase> > aux = field_state->aux;
510 +
511 + if (field == M_MAX && attr == R_MAX && aux == nil)
512 + {
513 + log_debug("no match\n");
514 + return 0;
515 + }
516
517 + value = data;
518 value = trim_string(value);
519 -
520 - if (string_ok(value))
521 + if (!string_ok(value))
522 + return 0;
523 +
524 + if (field != M_MAX)
525 {
526 item->setMetadata(MT_KEYS[field].upnp, sc->convert(value));
527 -// log_debug("Setting metadata on item: %d, %s\n", field, sc->convert(value).c_str());
528 + log_debug("Setting metadata on item: %d, %s\n", field, sc->convert(value).c_str());
529 }
530 -}
531
532 -static void addResourceField(resource_attributes_t attr, EXTRACTOR_KeywordList *keywords, Ref<CdsItem> item, Ref<StringConverter> sc)
533 -{
534 - String value;
535 - const char *temp = NULL;
536 -
537 - switch (attr)
538 + if (attr != R_MAX)
539 {
540 - case R_RESOLUTION:
541 - temp = EXTRACTOR_extractLast(EXTRACTOR_SIZE, keywords);
542 - break;
543 -/* case R_SIZE:
544 - temp = EXTRACTOR_extractLast(EXTRACTOR_SIZE, keywords);
545 - break;
546 -*/
547 - default:
548 - return;
549 + item->getResource(0)->addAttribute(MetadataHandler::getResAttrName(attr), value);
550 + log_debug("Setting attribute on item: %d, %s\n", attr, value.c_str());
551 }
552
553 - if (temp != NULL)
554 - value = temp;
555 -
556 - if (string_ok(value))
557 + if (aux != nil)
558 {
559 - item->getResource(0)->addAttribute(MetadataHandler::getResAttrName(attr), value);
560 + String tmp;
561 + for (int j = 0; j < aux->size(); j++)
562 + {
563 + tmp = aux->get(j);
564 + if (string_ok(tmp))
565 + {
566 + if (type == getTagFromString(tmp))
567 + {
568 + value = sc->convert(value);
569 + item->setAuxData(tmp, value);
570 + log_debug(("Adding tag: %s with value %s\n", tmp.c_str(), value.c_str()));
571 + }
572 + }
573 + }
574 }
575 +
576 + return 0;
577 }
578
579
580
581 -Ref<RExp> ReAudioFormat;
582 -EXTRACTOR_ExtractorList *extractors = NULL;
583 -bool load_libraries_failed = false;
584 +static Ref<RExp> ReAudioFormat;
585 +static EXTRACTOR_PluginList *plugins = NULL;
586 +static bool load_libraries_failed = false;
587
588 void ExtractorHandler::fillMetadata(Ref<CdsItem> item)
589 {
590 if (load_libraries_failed)
591 return;
592 - Ref<Array<StringBase> > aux;
593 - Ref<StringConverter> sc = StringConverter::i2i();
594 -
595 - if (! extractors)
596 + if (! plugins)
597 {
598 - extractors = EXTRACTOR_loadDefaultLibraries();
599 - if (! extractors)
600 + plugins = EXTRACTOR_plugin_add_defaults(EXTRACTOR_OPTION_DEFAULT_POLICY);
601 + if (! plugins)
602 + {
603 load_libraries_failed = true;
604 + return;
605 + }
606 }
607 - EXTRACTOR_KeywordList *keywords = EXTRACTOR_getKeywords(extractors, item->getLocation().c_str());
608 -
609 - //EXTRACTOR_printKeywords(stdout, keywords);
610
611 - for (int i = 0; i < M_MAX; i++)
612 - addMetaField((metadata_fields_t)i, keywords, item, sc);
613 -
614 - for (int i = 0; i < R_MAX; i++)
615 - addResourceField((resource_attributes_t)i, keywords, item, sc);
616 + log_debug("processing %s\n", item->getLocation().c_str());
617
618 Ref<ConfigManager> cm = ConfigManager::getInstance();
619 - aux = cm->getStringArrayOption(CFG_IMPORT_LIBOPTS_EXTRACTOR_AUXDATA_TAGS_LIST);
620 - if (aux != nil)
621 - {
622 - String value;
623 - String tmp;
624 - const char *temp = NULL;
625 -
626 - for (int j = 0; j < aux->size(); j++)
627 - {
628 -
629 - tmp = aux->get(j);
630 - if (string_ok(tmp))
631 - {
632 - temp = EXTRACTOR_extractLast(getTagFromString(tmp), keywords);
633 - if (temp != NULL)
634 - {
635 - value = temp;
636 - if (string_ok(value))
637 - {
638 - value = sc->convert(value);
639 - item->setAuxData(tmp, value);
640 -// log_debug(("Adding tag: %s with value %s\n", tmp.c_str(), value.c_str()));
641 - }
642 - }
643 - }
644 - }
645 - }
646 + struct field_state field_state = {
647 + .item = item,
648 + .sc = StringConverter::i2i(),
649 + .aux = cm->getStringArrayOption(CFG_IMPORT_LIBOPTS_EXTRACTOR_AUXDATA_TAGS_LIST),
650 + };
651 + EXTRACTOR_extract(plugins, item->getLocation().c_str(), NULL, 0, addField, &field_state);
652
653 if (ReAudioFormat == nil)
654 {
655 @@ -379,35 +401,9 @@ void ExtractorHandler::fillMetadata(Ref<CdsItem> item)
656 ReAudioFormat->compile(_("([0-9]+)\\s+kbps,\\s*([0-9]+)\\s+hz,\\s*"
657 "(([0-9]+)h)?([0-9]+)m([0-9]+)\\s(\\S+)"), "i");
658 }
659 -
660 - /*
661 - temp = EXTRACTOR_extractLast(EXTRACTOR_FORMAT, keywords);
662 - log_debug("EXTRACTOR_FORMAT: %s\n", temp);
663 -
664 - if (temp)
665 - {
666 - Ref<Matcher> matcher = ReAudioFormat->match((char *)temp);
667 - if (matcher != nil)
668 - {
669 - log_debug(("BR:%s FR:%s H:%s M:%s S:%s TYPE:%s\n",
670 - matcher->group(1).c_str(),
671 - matcher->group(2).c_str(),
672 - matcher->group(4).c_str(),
673 - matcher->group(5).c_str(),
674 - matcher->group(6).c_str(),
675 - matcher->group(7).c_str()));
676 - }
677 - else
678 - {
679 - log_debug(("format pattern unmatched!"));
680 - }
681 - }
682 -
683 - */
684 - EXTRACTOR_freeKeywords(keywords);
685
686 // commented out for the sake of efficiency
687 - // EXTRACTOR_removeAll(extractors);
688 + // EXTRACTOR_plugin_remove_all(plugins);
689 }
690
691 Ref<IOHandler> ExtractorHandler::serveContent(Ref<CdsItem> item, int resNum, off_t *data_size)