diff --git a/src/metadata/Extractor.cpp b/src/metadata/Extractor.cpp deleted file mode 100644 index 4f2ecd73..00000000 --- a/src/metadata/Extractor.cpp +++ /dev/null @@ -1,226 +0,0 @@ -/* - * Copyright (C) 2013 Emeric Poupon - * - * This file is part of LMS. - * - * LMS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LMS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with LMS. If not, see . - */ - - -#include -#include -#include - -#include "Utils.hpp" - -#include "Extractor.hpp" - -namespace MetaData -{ - - -extern "C" { - -/** - * Type of a function that libextractor calls for each - * meta data item found. - * - * @param cls closure (user-defined) - * @param plugin_name name of the plugin that produced this value; - * special values can be used (i.e. '<zlib>' for zlib being - * used in the main libextractor library and yielding - * meta data). - * @param type libextractor-type describing the meta data - * @param format basic format information about data - * @param data_mime_type mime-type of data (not of the original file); - * can be NULL (if mime-type is not known) - * @param data actual meta-data found - * @param data_len number of bytes in data - * @return 0 to continue extracting, 1 to abort - */ - -int processMetaData(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) -{ - Items& items = *(reinterpret_cast(cls)); - - switch (type) { - case EXTRACTOR_METATYPE_ARTIST: - assert( std::string(data_mime_type) == "text/plain" ); - items.insert( std::make_pair(MetaData::Artist, std::string( data, data_len ? data_len - 1 : 0)) ); - break; - case EXTRACTOR_METATYPE_TITLE: - assert( std::string(data_mime_type) == "text/plain" ); - items.insert( std::make_pair(MetaData::Title, std::string( data, data_len ? data_len - 1 : 0)) ); - break; - case EXTRACTOR_METATYPE_ALBUM: - assert( std::string(data_mime_type) == "text/plain" ); - items.insert( std::make_pair(MetaData::Album, std::string( data, data_len ? data_len - 1 : 0)) ); - break; - case EXTRACTOR_METATYPE_GENRE: - assert( std::string(data_mime_type) == "text/plain" ); - { - std::list genres; - if (readList(std::string( data, data_len ? data_len - 1 : 0), ";-:/,", genres)) - items.insert( std::make_pair(MetaData::Genre, genres)); - } - break; -/* case EXTRACTOR_METATYPE_PICTURE: - std::cout << "picture spotted" << std::endl; - break;*/ - - case EXTRACTOR_METATYPE_COVER_PICTURE: - { - GenericData parsedData; - const unsigned char* dataStart = reinterpret_cast(data); - parsedData.mimeType = std::string(data_mime_type); - parsedData.data = std::vector( &dataStart[0], &dataStart[data_len]); - - items.insert( std::make_pair(MetaData::Cover, parsedData)); - } - break; - -/* case EXTRACTOR_METATYPE_EVENT_PICTURE: - std::cout << "Event picture spotted" << std::endl; - break;*/ - -/* case EXTRACTOR_METATYPE_CONTRIBUTOR_PICTURE: - std::cout << "Contrib picture spotted" << std::endl; - break;*/ - -/* case EXTRACTOR_METATYPE_SONG_COUNT: - // How many songs in the album - break;*/ - -/* case EXTRACTOR_METATYPE_AUDIO_CODEC: - assert( std::string(data_mime_type) == "text/plain" ); - std::cout << "Aduio codec: " << std::string( data, data_len ? data_len - 1 : 0) << std::endl; - break;*/ - case EXTRACTOR_METATYPE_PUBLICATION_YEAR: - assert( std::string(data_mime_type) == "text/plain" ); - std::cout << "publication year = " << std::string( data, data_len ? data_len - 1 : 0) << std::endl; - break; - - case EXTRACTOR_METATYPE_PUBLICATION_DATE: - assert( std::string(data_mime_type) == "text/plain" ); - std::cout << "publication date = " << std::string( data, data_len ? data_len - 1 : 0) << std::endl; - break; - - case EXTRACTOR_METATYPE_ORIGINAL_RELEASE_YEAR: - assert( std::string(data_mime_type) == "text/plain" ); - std::cout << "original release year = " << std::string( data, data_len ? data_len - 1 : 0) << std::endl; - break; - - case EXTRACTOR_METATYPE_CREATION_TIME: - assert( std::string(data_mime_type) == "text/plain" ); - { - boost::posix_time::ptime p; - if (readAs(std::string( data, data_len ? data_len - 1 : 0), p)) - items.insert( std::make_pair(MetaData::CreationTime, p)); - else if (readAsPosixTime(std::string( data, data_len ? data_len - 1 : 0), p)) - items.insert( std::make_pair(MetaData::CreationTime, p)); - } - break; - case EXTRACTOR_METATYPE_DURATION: - assert( std::string(data_mime_type) == "text/plain" ); - { - boost::posix_time::time_duration duration; - if (readAs( std::string( data, data_len ? data_len - 1 : 0), duration)) - items.insert( std::make_pair(MetaData::Duration, duration) ); - } - break; - case EXTRACTOR_METATYPE_TRACK_NUMBER: - assert( std::string(data_mime_type) == "text/plain" ); - { - std::size_t number(0); - if (readAs( std::string( data, data_len ? data_len - 1 : 0), number)) - items.insert( std::make_pair(MetaData::TrackNumber, number) ); - } - break; - case EXTRACTOR_METATYPE_DISC_NUMBER: - assert( std::string(data_mime_type) == "text/plain" ); - { - std::size_t number(0); - if (readAs( std::string( data, data_len ? data_len - 1 : 0), number)) - items.insert( std::make_pair(MetaData::DiscNumber, number) ); - } - break; - default: -/* if (std::string(data_mime_type) == "text/plain") - std::cout << "TYPE = " << type << ", data = '" << std::string(data, data_len ? data_len - 1 : 0) << "'" << std::endl; - else - std::cout << "TYPE = " << type << ", data_mime_type = '" << data_mime_type << "', data len = " << data_len << std::endl; - */ - break; - - } - return 0; -} - - -}; - - -Extractor::Extractor() -: _plugins( nullptr ) -{ -// _plugins = EXTRACTOR_plugin_add_config (nullptr, "mp3:ogg:flac:wav:gstreamer", EXTRACTOR_OPTION_DEFAULT_POLICY); -} - -Extractor::~Extractor() -{ -} - -void -Extractor::parse(const boost::filesystem::path& p, Items& items) -{ - if (boost::filesystem::is_regular(p)) { - _plugins = EXTRACTOR_plugin_add_defaults (EXTRACTOR_OPTION_DEFAULT_POLICY); - if (_plugins == nullptr) { - throw std::runtime_error("EXTRACTOR_plugin_add_config failed!"); - } - EXTRACTOR_extract (_plugins, p.string().c_str(), NULL, 0, &processMetaData, &items); - EXTRACTOR_plugin_remove_all (_plugins); - } -} - -bool -Extractor::parseCover(const boost::filesystem::path& p, GenericData& data) -{ - bool res = false; - Items items; - if (boost::filesystem::is_regular(p)) { - _plugins = EXTRACTOR_plugin_add_defaults (EXTRACTOR_OPTION_DEFAULT_POLICY); - if (_plugins == nullptr) { - throw std::runtime_error("EXTRACTOR_plugin_add_config failed!"); - } - EXTRACTOR_extract (_plugins, p.string().c_str(), NULL, 0, &processMetaData, &items); - EXTRACTOR_plugin_remove_all (_plugins); - - if (items.find(MetaData::Cover) != items.end()) { - data = boost::any_cast(items[MetaData::Cover]); - res = true; - } - } - - return res; -} - - -} // namespace MetaData diff --git a/src/metadata/Extractor.hpp b/src/metadata/Extractor.hpp deleted file mode 100644 index 88dd244f..00000000 --- a/src/metadata/Extractor.hpp +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2013 Emeric Poupon - * - * This file is part of LMS. - * - * LMS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * LMS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with LMS. If not, see . - */ - -#ifndef EXTRACTOR_HPP -#define EXTRACTOR_HPP - -#include - -#include "MetaData.hpp" - - -namespace MetaData -{ - -// Implements GNU libextractor library -class Extractor : public Parser -{ - public: - - Extractor(); - ~Extractor(); - - void parse(const boost::filesystem::path& p, Items& items); - - bool parseCover(const boost::filesystem::path& p, GenericData& data); - - private: - - struct EXTRACTOR_PluginList *_plugins; -}; - -} // namespace MetaData - -#endif -