/* * Copyright (C) 2008-2012 Geometer Plus * * This program 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 2 of the License, or * (at your option) any later version. * * This program 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 this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ #include #include #include "Migration.h" #include "FB2MigrationReader.h" #include "OEBMigrationReader.h" #include "HtmlDCTagsReader.h" #include "BookInfo.h" #include "../options/FBCategoryKey.h" #include "../formats/oeb/OEBPlugin.h" #include "../formats/pdb/PdbPlugin.h" #include "../formats/pdb/PalmDocStream.h" Migration_0_8_16::Migration_0_8_16() : Migration("0.8.16") { } void Migration_0_8_16::doMigrationInternal() { PluginCollection &collection = PluginCollection::Instance(); std::vector optionGroups; ZLOption::listOptionGroups(optionGroups); for (std::vector::const_iterator it = optionGroups.begin(); it != optionGroups.end(); ++it) { if (isLikeToFileName(*it)) { ZLFile file(*it); if (collection.plugin(file, false) != 0) { BookInfo info(*it); ZLStringOption &languageOption = info.LanguageOption; const std::string &language = languageOption.value(); if (language == "") { languageOption.setValue(collection.DefaultLanguageOption.value()); } else if (language == "cz") { languageOption.setValue("cs"); } else if (language == "none") { languageOption.setValue(ZLLanguageUtil::OtherLanguageCode); } else if ((language == "chinese") || (language == "anycharacter")) { languageOption.setValue("zh"); } const std::string extension = file.extension(); if (extension == "fb2") { ZLBooleanOption seriesOption(FBCategoryKey::BOOKS, *it, "SequenceDefined", false); if (!seriesOption.value() || info.TagsOption.value().empty()) { FB2MigrationReader(info, !seriesOption.value()).doRead(ZLFile(*it)); } seriesOption.setValue(true); } else if ((extension == "opf") || (extension == "oebzip") || (extension == "epub")) { if (info.TagsOption.value().empty()) { OEBMigrationReader(info).doRead(OEBPlugin::opfFile(ZLFile(*it))); } } else if ((extension == "prc") || (extension == "pdb") || (extension == "mobi")) { const std::string fileType = PdbPlugin::fileType(file); if (info.TagsOption.value().empty() && ((fileType == "BOOKMOBI") || (fileType == "TEXtREAd"))) { shared_ptr stream = new PalmDocStream(file); if (!stream.isNull()) { HtmlDCTagsReader(info).readDocument(*stream); } } } } } } }