public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] gentoo-x86 commit in net-misc/mediatomb/files: mediatomb-0.12.1-libextractor.patch
@ 2012-10-02  6:35 Mike Frysinger (vapier)
  0 siblings, 0 replies; only message in thread
From: Mike Frysinger (vapier) @ 2012-10-02  6:35 UTC (permalink / raw
  To: gentoo-commits

vapier      12/10/02 06:35:33

  Added:                mediatomb-0.12.1-libextractor.patch
  Log:
  Port to libextractor-0.6.x by me #435394 by BT.
  
  (Portage version: 2.2.0_alpha131/cvs/Linux x86_64)

Revision  Changes    Path
1.1                  net-misc/mediatomb/files/mediatomb-0.12.1-libextractor.patch

file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/net-misc/mediatomb/files/mediatomb-0.12.1-libextractor.patch?rev=1.1&view=markup
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

Index: mediatomb-0.12.1-libextractor.patch
===================================================================
http://bugs.gentoo.org/435394

port to libextractor-0.6.x

patch by Mike Frysinger <vapier@gentoo.org>

--- a/configure.ac
+++ b/configure.ac
@@ -1631,7 +1631,7 @@ MT_CHECK_OPTIONAL_PACKAGE([lastfmlib], [disable],
 ######## extractor
 
 if test "x$LIBEXTRACTOR_OPTION_ENABLED" = xyes; then
-    MT_CHECK_PACKAGE([libextractor], [extractor], [extractor], [EXTRACTOR_getKeywords])
+    MT_CHECK_PACKAGE([libextractor], [extractor], [extractor], [EXTRACTOR_extract])
 fi
 
 if test "x$LIBEXTRACTOR_STATUS" = xyes; then
--- a/src/metadata/extractor_handler.cc
+++ b/src/metadata/extractor_handler.cc
@@ -55,322 +55,344 @@ ExtractorHandler::ExtractorHandler() : MetadataHandler()
 {
 }
 
-static EXTRACTOR_KeywordType getTagFromString(String tag)
+static EXTRACTOR_MetaType getTagFromString(String tag)
 {
-    if (tag == "EXTRACTOR_UNKNOWN")
-        return EXTRACTOR_UNKNOWN;
-    if (tag == "EXTRACTOR_FILENAME")
-        return EXTRACTOR_FILENAME;
-    if (tag == "EXTRACTOR_MIMETYPE")
-        return EXTRACTOR_MIMETYPE;
-    if (tag == "EXTRACTOR_TITLE")
-        return EXTRACTOR_TITLE;
-    if (tag == "EXTRACTOR_AUTHOR")
-        return EXTRACTOR_AUTHOR;
-    if (tag == "EXTRACTOR_ARTIST")
-        return EXTRACTOR_ARTIST;
-    if (tag == "EXTRACTOR_DESCRIPTION")
-        return EXTRACTOR_DESCRIPTION;
-    if (tag == "EXTRACTOR_COMMENT")
-        return EXTRACTOR_COMMENT;
-    if (tag == "EXTRACTOR_DATE")
-        return EXTRACTOR_DATE;
-    if (tag == "EXTRACTOR_PUBLISHER")
-        return EXTRACTOR_PUBLISHER;
-    if (tag == "EXTRACTOR_LANGUAGE")
-        return EXTRACTOR_LANGUAGE;
-    if (tag == "EXTRACTOR_ALBUM")
-        return EXTRACTOR_ALBUM;
-    if (tag == "EXTRACTOR_GENRE")
-        return EXTRACTOR_GENRE;
-    if (tag == "EXTRACTOR_LOCATION")
-        return EXTRACTOR_LOCATION;
-    if (tag == "EXTRACTOR_VERSIONNUMBER")
-        return EXTRACTOR_VERSIONNUMBER;
-    if (tag == "EXTRACTOR_ORGANIZATION")
-        return EXTRACTOR_ORGANIZATION;
-    if (tag == "EXTRACTOR_COPYRIGHT")
-        return EXTRACTOR_COPYRIGHT;
-    if (tag == "EXTRACTOR_SUBJECT")
-        return EXTRACTOR_SUBJECT;
-    if (tag == "EXTRACTOR_KEYWORDS")
-        return EXTRACTOR_KEYWORDS;
-    if (tag == "EXTRACTOR_CONTRIBUTOR")
-        return EXTRACTOR_CONTRIBUTOR;
-    if (tag == "EXTRACTOR_RESOURCE_TYPE")
-        return EXTRACTOR_RESOURCE_TYPE;
-    if (tag == "EXTRACTOR_FORMAT")
-        return EXTRACTOR_FORMAT;
-    if (tag == "EXTRACTOR_RESOURCE_IDENTIFIER")
-        return EXTRACTOR_RESOURCE_IDENTIFIER;
-    if (tag == "EXTRACTOR_SOURCE")
-        return EXTRACTOR_SOURCE;
-    if (tag == "EXTRACTOR_RELATION")
-        return EXTRACTOR_RELATION;
-    if (tag == "EXTRACTOR_COVERAGE")
-        return EXTRACTOR_COVERAGE;
-    if (tag == "EXTRACTOR_SOFTWARE")
-        return EXTRACTOR_SOFTWARE;
-    if (tag == "EXTRACTOR_DISCLAIMER")
-        return EXTRACTOR_DISCLAIMER;
-    if (tag == "EXTRACTOR_WARNING")
-        return EXTRACTOR_WARNING;
-    if (tag == "EXTRACTOR_TRANSLATED")
-        return EXTRACTOR_TRANSLATED;
-    if (tag == "EXTRACTOR_CREATION_DATE")
-        return EXTRACTOR_CREATION_DATE;
-    if (tag == "EXTRACTOR_MODIFICATION_DATE")
-        return EXTRACTOR_MODIFICATION_DATE;
-    if (tag == "EXTRACTOR_CREATOR")
-        return EXTRACTOR_CREATOR;
-    if (tag == "EXTRACTOR_PRODUCER")
-        return EXTRACTOR_PRODUCER;
-    if (tag == "EXTRACTOR_PAGE_COUNT")
-        return EXTRACTOR_PAGE_COUNT;
-    if (tag == "EXTRACTOR_PAGE_ORIENTATION")
-        return EXTRACTOR_PAGE_ORIENTATION;
-    if (tag == "EXTRACTOR_PAPER_SIZE")
-        return EXTRACTOR_PAPER_SIZE;
-    if (tag == "EXTRACTOR_USED_FONTS")
-        return EXTRACTOR_USED_FONTS;
-    if (tag == "EXTRACTOR_PAGE_ORDER")
-        return EXTRACTOR_PAGE_ORDER;
-    if (tag == "EXTRACTOR_CREATED_FOR")
-        return EXTRACTOR_CREATED_FOR;
-    if (tag == "EXTRACTOR_MAGNIFICATION")
-        return EXTRACTOR_MAGNIFICATION;
-    if (tag == "EXTRACTOR_RELEASE")
-        return EXTRACTOR_RELEASE;
-    if (tag == "EXTRACTOR_GROUP")
-        return EXTRACTOR_GROUP;
-    if (tag == "EXTRACTOR_SIZE")
-        return EXTRACTOR_SIZE;
-    if (tag == "EXTRACTOR_SUMMARY")
-        return EXTRACTOR_SUMMARY;
-    if (tag == "EXTRACTOR_PACKAGER")
-        return EXTRACTOR_PACKAGER;
-    if (tag == "EXTRACTOR_VENDOR")
-        return EXTRACTOR_VENDOR;
-    if (tag == "EXTRACTOR_LICENSE")
-        return EXTRACTOR_LICENSE;
-    if (tag == "EXTRACTOR_DISTRIBUTION")
-        return EXTRACTOR_DISTRIBUTION;
-    if (tag == "EXTRACTOR_BUILDHOST")
-        return EXTRACTOR_BUILDHOST;
-    if (tag == "EXTRACTOR_OS")
-        return EXTRACTOR_OS;
-    if (tag == "EXTRACTOR_DEPENDENCY")
-        return EXTRACTOR_DEPENDENCY;
-    if (tag == "EXTRACTOR_HASH_MD4")
-        return EXTRACTOR_HASH_MD4;
-    if (tag == "EXTRACTOR_HASH_MD5")
-        return EXTRACTOR_HASH_MD5;
-    if (tag == "EXTRACTOR_HASH_SHA0")
-        return EXTRACTOR_HASH_SHA0;
-    if (tag == "EXTRACTOR_HASH_SHA1")
-        return EXTRACTOR_HASH_SHA1;
-    if (tag == "EXTRACTOR_HASH_RMD160")
-        return EXTRACTOR_HASH_RMD160;
-    if (tag == "EXTRACTOR_RESOLUTION")
-        return EXTRACTOR_RESOLUTION;
-    if (tag == "EXTRACTOR_CATEGORY")
-        return EXTRACTOR_CATEGORY;
-    if (tag == "EXTRACTOR_BOOKTITLE")
-        return EXTRACTOR_BOOKTITLE;
-    if (tag == "EXTRACTOR_PRIORITY")
-        return EXTRACTOR_PRIORITY;
-    if (tag == "EXTRACTOR_CONFLICTS")
-        return EXTRACTOR_CONFLICTS;
-    if (tag == "EXTRACTOR_REPLACES")
-        return EXTRACTOR_REPLACES;
-    if (tag == "EXTRACTOR_PROVIDES")
-        return EXTRACTOR_PROVIDES;
-    if (tag == "EXTRACTOR_CONDUCTOR")
-        return EXTRACTOR_CONDUCTOR;
-    if (tag == "EXTRACTOR_INTERPRET")
-        return EXTRACTOR_INTERPRET;
-    if (tag == "EXTRACTOR_OWNER")
-        return EXTRACTOR_OWNER;
-    if (tag == "EXTRACTOR_LYRICS")
-        return EXTRACTOR_LYRICS;
-    if (tag == "EXTRACTOR_MEDIA_TYPE")
-        return EXTRACTOR_MEDIA_TYPE;
-    if (tag == "EXTRACTOR_CONTACT")
-        return EXTRACTOR_CONTACT;
-    if (tag == "EXTRACTOR_THUMBNAIL_DATA")
-        return EXTRACTOR_THUMBNAIL_DATA;
-
-#ifdef EXTRACTOR_GE_0_5_2
-    if (tag == "EXTRACTOR_PUBLICATION_DATE")
-        return EXTRACTOR_PUBLICATION_DATE;
-    if (tag == "EXTRACTOR_CAMERA_MAKE")
-        return EXTRACTOR_CAMERA_MAKE;
-    if (tag == "EXTRACTOR_CAMERA_MODEL")
-        return EXTRACTOR_CAMERA_MODEL;
-    if (tag == "EXTRACTOR_EXPOSURE")
-        return EXTRACTOR_EXPOSURE;
-    if (tag == "EXTRACTOR_APERTURE")
-        return EXTRACTOR_APERTURE;
-    if (tag == "EXTRACTOR_EXPOSURE_BIAS")
-        return EXTRACTOR_EXPOSURE_BIAS;
-    if (tag == "EXTRACTOR_FLASH")
-        return EXTRACTOR_FLASH;
-    if (tag == "EXTRACTOR_FLASH_BIAS")
-        return EXTRACTOR_FLASH_BIAS;
-    if (tag == "EXTRACTOR_FOCAL_LENGTH")
-        return EXTRACTOR_FOCAL_LENGTH;
-    if (tag == "EXTRACTOR_FOCAL_LENGTH_35MM")
-        return EXTRACTOR_FOCAL_LENGTH_35MM;
-    if (tag == "EXTRACTOR_ISO_SPEED")
-        return EXTRACTOR_ISO_SPEED;
-    if (tag == "EXTRACTOR_EXPOSURE_MODE")
-        return EXTRACTOR_EXPOSURE_MODE;
-    if (tag == "EXTRACTOR_METERING_MODE")
-        return EXTRACTOR_METERING_MODE;
-    if (tag == "EXTRACTOR_MACRO_MODE")
-        return EXTRACTOR_MACRO_MODE;
-    if (tag == "EXTRACTOR_IMAGE_QUALITY")
-        return EXTRACTOR_IMAGE_QUALITY;
-    if (tag == "EXTRACTOR_WHITE_BALANCE")
-        return EXTRACTOR_WHITE_BALANCE;
-    if (tag == "EXTRACTOR_ORIENTATION")
-        return EXTRACTOR_ORIENTATION;
-#endif // EXTRACTOR_GE_0_5_2
+#define T(x) [EXTRACTOR_METATYPE_##x] = "EXTRACTOR_METATYPE_"#x,
+    /* XXX: should convert to EXTRACTOR_metatype_to_string() somehow */
+    const char *types[] =
+    {
+        T(RESERVED)
+        T(MIMETYPE)
+        T(FILENAME)
+        T(COMMENT)
+
+        T(TITLE)
+        T(BOOK_TITLE)
+        T(BOOK_EDITION)
+        T(BOOK_CHAPTER_NUMBER)
+        T(JOURNAL_NAME)
+        T(JOURNAL_VOLUME)
+        T(JOURNAL_NUMBER)
+        T(PAGE_COUNT)
+        T(PAGE_RANGE)
+        T(AUTHOR_NAME)
+        T(AUTHOR_EMAIL)
+        T(AUTHOR_INSTITUTION)
+        T(PUBLISHER)
+        T(PUBLISHER_ADDRESS)
+        T(PUBLISHER_INSTITUTION)
+        T(PUBLISHER_SERIES)
+        T(PUBLICATION_TYPE)
+        T(PUBLICATION_YEAR)
+        T(PUBLICATION_MONTH)
+        T(PUBLICATION_DAY)
+        T(PUBLICATION_DATE)
+        T(BIBTEX_EPRINT)
+        T(BIBTEX_ENTRY_TYPE)
+        T(LANGUAGE)
+        T(CREATION_TIME)
+        T(URL)
+
+        T(URI)
+        T(ISRC)
+        T(HASH_MD4)
+        T(HASH_MD5)
+        T(HASH_SHA0)
+        T(HASH_SHA1)
+        T(HASH_RMD160)
+
+        T(GPS_LATITUDE_REF)
+        T(GPS_LATITUDE)
+        T(GPS_LONGITUDE_REF)
+        T(GPS_LONGITUDE)
+        T(LOCATION_CITY)
+        T(LOCATION_SUBLOCATION)
+        T(LOCATION_COUNTRY)
+        T(LOCATION_COUNTRY_CODE)
+
+        T(UNKNOWN)
+        T(DESCRIPTION)
+        T(COPYRIGHT)
+        T(RIGHTS)
+        T(KEYWORDS)
+        T(ABSTRACT)
+        T(SUMMARY)
+        T(SUBJECT)
+        T(CREATOR)
+        T(FORMAT)
+        T(FORMAT_VERSION)
+
+        T(CREATED_BY_SOFTWARE)
+        T(UNKNOWN_DATE)
+        T(CREATION_DATE)
+        T(MODIFICATION_DATE)
+        T(LAST_PRINTED)
+        T(LAST_SAVED_BY)
+        T(TOTAL_EDITING_TIME)
+        T(EDITING_CYCLES)
+        T(MODIFIED_BY_SOFTWARE)
+        T(REVISION_HISTORY)
+
+        T(EMBEDDED_FILE_SIZE)
+        T(FINDER_FILE_TYPE)
+        T(FINDER_FILE_CREATOR)
+
+        T(PACKAGE_NAME)
+        T(PACKAGE_VERSION)
+        T(SECTION)
+        T(UPLOAD_PRIORITY)
+        T(PACKAGE_DEPENDENCY)
+        T(PACKAGE_CONFLICTS)
+        T(PACKAGE_REPLACES)
+        T(PACKAGE_PROVIDES)
+        T(PACKAGE_RECOMMENDS)
+        T(PACKAGE_SUGGESTS)
+        T(PACKAGE_MAINTAINER)
+        T(PACKAGE_INSTALLED_SIZE)
+        T(PACKAGE_SOURCE)
+        T(PACKAGE_ESSENTIAL)
+        T(TARGET_ARCHITECTURE)
+        T(PACKAGE_PRE_DEPENDENCY)
+        T(LICENSE)
+        T(PACKAGE_DISTRIBUTION)
+        T(BUILDHOST)
+        T(VENDOR)
+        T(TARGET_OS)
+        T(SOFTWARE_VERSION)
+        T(TARGET_PLATFORM)
+        T(RESOURCE_TYPE)
+        T(LIBRARY_SEARCH_PATH)
+        T(LIBRARY_DEPENDENCY)
+
+        T(CAMERA_MAKE)
+        T(CAMERA_MODEL)
+        T(EXPOSURE)
+        T(APERTURE)
+        T(EXPOSURE_BIAS)
+        T(FLASH)
+        T(FLASH_BIAS)
+        T(FOCAL_LENGTH)
+        T(FOCAL_LENGTH_35MM)
+        T(ISO_SPEED)
+        T(EXPOSURE_MODE)
+        T(METERING_MODE)
+        T(MACRO_MODE)
+        T(IMAGE_QUALITY)
+        T(WHITE_BALANCE)
+        T(ORIENTATION)
+        T(MAGNIFICATION)
+
+        T(IMAGE_DIMENSIONS)
+        T(PRODUCED_BY_SOFTWARE)
+        T(THUMBNAIL)
+        T(IMAGE_RESOLUTION)
+        T(SOURCE)
+
+        T(CHARACTER_SET)
+        T(LINE_COUNT)
+        T(PARAGRAPH_COUNT)
+        T(WORD_COUNT)
+        T(CHARACTER_COUNT)
+        T(PAGE_ORIENTATION)
+        T(PAPER_SIZE)
+        T(TEMPLATE)
+        T(COMPANY)
+        T(MANAGER)
+        T(REVISION_NUMBER)
+
+        T(DURATION)
+        T(ALBUM)
+        T(ARTIST)
+        T(GENRE)
+        T(TRACK_NUMBER)
+        T(DISC_NUMBER)
+        T(PERFORMER)
+        T(CONTACT_INFORMATION)
+        T(SONG_VERSION)
+        T(PICTURE)
+        T(COVER_PICTURE)
+        T(CONTRIBUTOR_PICTURE)
+        T(EVENT_PICTURE)
+        T(LOGO)
+        T(BROADCAST_TELEVISION_SYSTEM)
+        T(SOURCE_DEVICE)
+        T(DISCLAIMER)
+        T(WARNING)
+        T(PAGE_ORDER)
+        T(WRITER)
+        T(PRODUCT_VERSION)
+        T(CONTRIBUTOR_NAME)
+        T(MOVIE_DIRECTOR)
+        T(NETWORK_NAME)
+        T(SHOW_NAME)
+        T(CHAPTER_NAME)
+        T(SONG_COUNT)
+        T(STARTING_SONG)
+        T(PLAY_COUNTER)
+        T(CONDUCTOR)
+        T(INTERPRETATION)
+        T(COMPOSER)
+        T(BEATS_PER_MINUTE)
+        T(ENCODED_BY)
+        T(ORIGINAL_TITLE)
+        T(ORIGINAL_ARTIST)
+        T(ORIGINAL_WRITER)
+        T(ORIGINAL_RELEASE_YEAR)
+        T(ORIGINAL_PERFORMER)
+        T(LYRICS)
+        T(POPULARITY_METER)
+        T(LICENSEE)
+        T(MUSICIAN_CREDITS_LIST)
+        T(MOOD)
+        T(SUBTITLE)
+
+        T(GNUNET_DISPLAY_TYPE)
+        T(GNUNET_FULL_DATA)
+        T(RATING)
+        T(ORGANIZATION)
+        T(RIPPER)
+        T(PRODUCER)
+        T(GROUP)
+        T(GNUNET_ORIGINAL_FILENAME)
+    };
+#undef T
+    size_t i;
+
+    for (i = 0; i < sizeof(types) / sizeof(types[0]); ++i)
+        if (!strcmp(types[i], tag.c_str()))
+            return (EXTRACTOR_MetaType) i;
 
     log_warning("Ignoring unknown libextractor tag: %s\n", tag.c_str());
-    return EXTRACTOR_UNKNOWN;
+    return EXTRACTOR_METATYPE_UNKNOWN;
 }
 
-static void addMetaField(metadata_fields_t field, EXTRACTOR_KeywordList *keywords, Ref<CdsItem> item, Ref<StringConverter> sc)
+struct field_state {
+    Ref<CdsItem> item;
+    Ref<StringConverter> sc;
+    Ref<Array<StringBase> > aux;
+};
+
+static int addField(void *cls, const char *plugin_name, enum EXTRACTOR_MetaType type,
+                    enum EXTRACTOR_MetaFormat format, const char *data_mime_type,
+                    const char *data, size_t data_len)
 {
-    String value;
-    const char *temp = NULL;
- 
+    metadata_fields_t field = M_MAX;
+    resource_attributes_t attr = R_MAX;
+
+    if (!data)
+        return 0;
+
+    log_debug("metadata %zu [%s] -> %s\n", (size_t)type, EXTRACTOR_metatype_to_string(type), data);
+
     /// \todo check if UTF-8 conversion is needed, may already be in UTF-8
-    
-    switch (field)
+
+    switch (type)
     {
-        case M_TITLE:
-            temp = EXTRACTOR_extractLast(EXTRACTOR_TITLE, keywords);
+        case EXTRACTOR_METATYPE_TITLE:
+            field = M_TITLE;
             break;
-        case M_ARTIST:
-            temp = EXTRACTOR_extractLast(EXTRACTOR_ARTIST, keywords);
+        case EXTRACTOR_METATYPE_ARTIST:
+            field = M_ARTIST;
             break;
-        case M_ALBUM:
-            temp = EXTRACTOR_extractLast(EXTRACTOR_ALBUM, keywords);
+        case EXTRACTOR_METATYPE_ALBUM:
+            field = M_ALBUM;
             break;
-        case M_DATE:
-            temp = EXTRACTOR_extractLast(EXTRACTOR_DATE, keywords);
+        case EXTRACTOR_METATYPE_PUBLICATION_YEAR:
+            field = M_DATE;
             break;
-        case M_GENRE:
-            temp = EXTRACTOR_extractLast(EXTRACTOR_GENRE, keywords);
+        case EXTRACTOR_METATYPE_GENRE:
+            field = M_GENRE;
             break;
-        case M_DESCRIPTION:
-            temp = EXTRACTOR_extractLast(EXTRACTOR_DESCRIPTION, keywords);
-
-            if (temp == NULL)
-                temp = EXTRACTOR_extractLast(EXTRACTOR_COMMENT, keywords);
+        case EXTRACTOR_METATYPE_DESCRIPTION:
+            field = M_DESCRIPTION;
+            break;
+        case EXTRACTOR_METATYPE_COMMENT:
+            field = M_DESCRIPTION;
+            break;
+        case EXTRACTOR_METATYPE_IMAGE_DIMENSIONS:
+            attr = R_RESOLUTION;
             break;
-        default:
-            return;
     }
 
-    if (temp != NULL)
-        value = temp;
+    String value;
+    struct field_state *field_state = (struct field_state *)cls;
+    Ref<CdsItem> item = field_state->item;
+    Ref<StringConverter> sc = field_state->sc;
+    Ref<Array<StringBase> > aux = field_state->aux;
+
+    if (field == M_MAX && attr == R_MAX && aux == nil)
+    {
+        log_debug("no match\n");
+        return 0;
+    }
 
+    value = data;
     value = trim_string(value);
-    
-    if (string_ok(value))
+    if (!string_ok(value))
+        return 0;
+
+    if (field != M_MAX)
     {
         item->setMetadata(MT_KEYS[field].upnp, sc->convert(value));
-//        log_debug("Setting metadata on item: %d, %s\n", field, sc->convert(value).c_str());
+        log_debug("Setting metadata on item: %d, %s\n", field, sc->convert(value).c_str());
     }
-}
 
-static void addResourceField(resource_attributes_t attr, EXTRACTOR_KeywordList *keywords, Ref<CdsItem> item, Ref<StringConverter> sc)
-{
-    String value;
-    const char *temp = NULL;
-    
-    switch (attr)
+    if (attr != R_MAX)
     {
-        case R_RESOLUTION:
-            temp = EXTRACTOR_extractLast(EXTRACTOR_SIZE, keywords);
-            break;
-/*        case R_SIZE:
-            temp = EXTRACTOR_extractLast(EXTRACTOR_SIZE, keywords);
-            break;
-*/
-        default:
-            return;
+        item->getResource(0)->addAttribute(MetadataHandler::getResAttrName(attr), value);
+        log_debug("Setting attribute on item: %d, %s\n", attr, value.c_str());
     }
 
-    if (temp != NULL)
-        value = temp;
-
-    if (string_ok(value))
+    if (aux != nil)
     {
-          item->getResource(0)->addAttribute(MetadataHandler::getResAttrName(attr), value);
+        String tmp;
+        for (int j = 0; j < aux->size(); j++)
+        {
+            tmp = aux->get(j);
+            if (string_ok(tmp))
+            {
+                if (type == getTagFromString(tmp))
+                {
+                    value = sc->convert(value);
+                    item->setAuxData(tmp, value);
+                    log_debug(("Adding tag: %s with value %s\n", tmp.c_str(), value.c_str()));
+                }
+            }
+        }
     }
+
+    return 0;
 }
 
 
 
-Ref<RExp> ReAudioFormat;
-EXTRACTOR_ExtractorList *extractors = NULL;
-bool load_libraries_failed = false;
+static Ref<RExp> ReAudioFormat;
+static EXTRACTOR_PluginList *plugins = NULL;
+static bool load_libraries_failed = false;
 
 void ExtractorHandler::fillMetadata(Ref<CdsItem> item)
 {
     if (load_libraries_failed)
         return;
-    Ref<Array<StringBase> > aux;
-    Ref<StringConverter> sc = StringConverter::i2i();
-        
-    if (! extractors)
+    if (! plugins)
     {
-        extractors = EXTRACTOR_loadDefaultLibraries();
-        if (! extractors)
+        plugins = EXTRACTOR_plugin_add_defaults(EXTRACTOR_OPTION_DEFAULT_POLICY);
+        if (! plugins)
+        {
             load_libraries_failed = true;
+            return;
+        }
     }
-    EXTRACTOR_KeywordList *keywords = EXTRACTOR_getKeywords(extractors, item->getLocation().c_str());
-
-    //EXTRACTOR_printKeywords(stdout, keywords);
 
-    for (int i = 0; i < M_MAX; i++)
-        addMetaField((metadata_fields_t)i, keywords, item, sc);
-    
-    for (int i = 0; i < R_MAX; i++)
-        addResourceField((resource_attributes_t)i, keywords, item, sc);
+    log_debug("processing %s\n", item->getLocation().c_str());
 
     Ref<ConfigManager> cm = ConfigManager::getInstance();
-    aux = cm->getStringArrayOption(CFG_IMPORT_LIBOPTS_EXTRACTOR_AUXDATA_TAGS_LIST);
-    if (aux != nil)
-    {
-        String value;
-        String tmp;
-        const char *temp = NULL;
-        
-        for (int j = 0; j < aux->size(); j++)
-        {
-
-            tmp = aux->get(j);
-            if (string_ok(tmp))
-            {
-                temp = EXTRACTOR_extractLast(getTagFromString(tmp), keywords);
-                if (temp != NULL)
-                {
-                    value = temp; 
-                    if (string_ok(value))
-                    {
-                        value = sc->convert(value);
-                        item->setAuxData(tmp, value);
-//                      log_debug(("Adding tag: %s with value %s\n", tmp.c_str(), value.c_str()));
-                    }
-                }
-            }
-        }
-    }
+    struct field_state field_state = {
+        .item = item,
+        .sc = StringConverter::i2i(),
+        .aux = cm->getStringArrayOption(CFG_IMPORT_LIBOPTS_EXTRACTOR_AUXDATA_TAGS_LIST),
+    };
+    EXTRACTOR_extract(plugins, item->getLocation().c_str(), NULL, 0, addField, &field_state);
 
     if (ReAudioFormat == nil)
     {
@@ -379,35 +401,9 @@ void ExtractorHandler::fillMetadata(Ref<CdsItem> item)
         ReAudioFormat->compile(_("([0-9]+)\\s+kbps,\\s*([0-9]+)\\s+hz,\\s*"
                                  "(([0-9]+)h)?([0-9]+)m([0-9]+)\\s(\\S+)"), "i");
     }
-   
-    /*
-    temp = EXTRACTOR_extractLast(EXTRACTOR_FORMAT, keywords);
-    log_debug("EXTRACTOR_FORMAT: %s\n", temp);
-
-    if (temp)
-    {
-        Ref<Matcher> matcher = ReAudioFormat->match((char *)temp);
-        if (matcher != nil)
-        {
-            log_debug(("BR:%s FR:%s H:%s M:%s S:%s TYPE:%s\n",
-                       matcher->group(1).c_str(),
-                       matcher->group(2).c_str(),
-                       matcher->group(4).c_str(),
-                       matcher->group(5).c_str(),
-                       matcher->group(6).c_str(),
-                       matcher->group(7).c_str()));
-        }
-        else
-        {
-            log_debug(("format pattern unmatched!"));
-        }
-    }
-
-    */
-    EXTRACTOR_freeKeywords(keywords);
 
     // commented out for the sake of efficiency
-    // EXTRACTOR_removeAll(extractors);
+    // EXTRACTOR_plugin_remove_all(plugins);
 }
 
 Ref<IOHandler> ExtractorHandler::serveContent(Ref<CdsItem> item, int resNum, off_t *data_size)





^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2012-10-02  6:36 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-10-02  6:35 [gentoo-commits] gentoo-x86 commit in net-misc/mediatomb/files: mediatomb-0.12.1-libextractor.patch Mike Frysinger (vapier)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox