2 * Copyright (C) 2004-2008 Geometer Plus <contact@geometerplus.com>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21 #include <ZLInputStream.h>
22 #include <ZLOptions.h>
23 #include <ZLUnicodeUtil.h>
25 #include "PdbPlugin.h"
26 #include "../../description/BookDescriptionUtil.h"
27 #include "../../options/FBOptions.h"
29 PdbPlugin::~PdbPlugin() {
32 std::string
PdbPlugin::fileType(const ZLFile
&file
) const {
33 const std::string extension
= ZLUnicodeUtil::toLower(file
.extension());
34 if ((extension
!= "prc") && (extension
!= "pdb") && (extension
!= "mobi")) {
38 std::string fileName
= file
.path();
39 int index
= fileName
.find(':');
40 ZLFile baseFile
= (index
== -1) ? file
: ZLFile(fileName
.substr(0, index
));
41 bool upToDate
= BookDescriptionUtil::checkInfo(baseFile
);
43 ZLStringOption
palmTypeOption(FBCategoryKey::BOOKS
, file
.path(), "PalmType", "");
44 std::string palmType
= palmTypeOption
.value();
45 if ((palmType
.length() != 8) || !upToDate
) {
46 shared_ptr
<ZLInputStream
> stream
= file
.inputStream();
47 if (stream
.isNull() || !stream
->open()) {
50 stream
->seek(60, false);
54 palmType
= std::string(id
, 8);
56 BookDescriptionUtil::saveInfo(baseFile
);
58 palmTypeOption
.setValue(palmType
);