mirror of
https://github.com/kiwix/kiwix-tools.git
synced 2025-09-23 12:00:21 -04:00
started contentManager lib
This commit is contained in:
parent
370c79a28e
commit
8d192f634e
22
src/contentManager/Makefile
Normal file
22
src/contentManager/Makefile
Normal file
@ -0,0 +1,22 @@
|
||||
|
||||
all: contentTester
|
||||
|
||||
wrapperlib:
|
||||
g++ -shared -o libContentCManager.so ContentManagerWrapper.cpp contentManager.cpp ../common/kiwix/reader.cpp -I . -I ../zimAccessor/ -I ../common/ -I ../zimlib/include/ -L ../zimlib/src/.libs/ -lzim ../dependences/xz/src/liblzma/.libs/liblzma.a -I /usr/include/
|
||||
|
||||
contentTester:
|
||||
g++ contentManagerTester.cpp contentManager.cpp ../common/kiwix/library.cpp ../common/kiwix/manager.cpp ../common/kiwix/reader.cpp ../common/base64.cpp ../common/pathTools.cpp ../common/componentTools.cpp ../common/regexTools.cpp ../common/kiwix/library.h ../common/kiwix/manager.h ../common/kiwix/reader.h ../pugixml/pugixml.hpp ../common/base64.h ../common/pathTools.h ../common/componentTools.h ../common/regexTools.h -o contentTester -I ../common/ -I ../pugixml/ -I ../zimlib/include/ -I /usr/include/ -L ../zimlib/src/.libs/ -lzim ../pugixml/.libs/libpugixml.a ../dependences/xz/src/liblzma/.libs/liblzma.a
|
||||
|
||||
contentCTester:
|
||||
ln -fs ../zimAccessor/libZimCAccessor.so .
|
||||
gcc -o zimCTester zimCTester.c -I ../zimAccessor/ -L ../zimAccessor/ -lZimCAccessor
|
||||
|
||||
cleanc:
|
||||
find . -name 'contentCTester' -delete
|
||||
|
||||
cleancpp:
|
||||
find . -name 'contentTester' -delete
|
||||
|
||||
clean: cleanc cleancpp
|
||||
find . -name 'libContentCManager.so' -delete
|
||||
find . -name '*.o' -delete
|
364
src/contentManager/contentManager.cpp
Normal file
364
src/contentManager/contentManager.cpp
Normal file
@ -0,0 +1,364 @@
|
||||
/*
|
||||
* Copyright 2011 Emmanuel Engelhart <kelson@kiwix.org>
|
||||
* Copyright 2011 Renaud Gaudin <reg@kiwix.org>
|
||||
*
|
||||
* 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 3 of the License, or
|
||||
* 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 <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <iostream>
|
||||
#include <kiwix/manager.h>
|
||||
#include <pathTools.h>
|
||||
#include <componentTools.h>
|
||||
#include <regexTools.h>
|
||||
#include "contentManager.h"
|
||||
|
||||
ContentManager::ContentManager(int x) : manager() {}
|
||||
|
||||
bool ContentManager::OpenLibraryFromFile(string path, bool readOnly) {
|
||||
try {
|
||||
return this->manager.readFile(path, readOnly);
|
||||
} catch (exception &e) {
|
||||
cerr << e.what() << endl;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ContentManager::OpenLibraryFromText(string &xml, bool readOnly) {
|
||||
|
||||
bool returnValue = true;
|
||||
const char *cXml;
|
||||
cXml = xml.c_str();
|
||||
|
||||
try {
|
||||
return this->manager.readXml(cXml, readOnly);
|
||||
} catch (exception &e) {
|
||||
cerr << e.what() << endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ContentManager::WriteLibrary() {
|
||||
|
||||
try {
|
||||
return this->manager.writeFile(this->manager.writableLibraryPath);
|
||||
} catch (exception &e) {
|
||||
cerr << e.what() << endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ContentManager::WriteLibraryToFile(string &path) {
|
||||
|
||||
try {
|
||||
return this->manager.writeFile(path.c_str());
|
||||
} catch (exception &e) {
|
||||
cerr << e.what() << endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ContentManager::AddBookFromPath(string &path) {
|
||||
|
||||
try {
|
||||
return this->manager.addBookFromPath(path.c_str(), path);
|
||||
} catch (exception &e) {
|
||||
cerr << e.what() << endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/*bool ContentManager::RemoveBookById(const char* &id, bool *retVal) {
|
||||
*retVal = PR_FALSE;
|
||||
const char *cid;
|
||||
NS_CStringGetData(id, &cid);
|
||||
|
||||
try {
|
||||
if (this->manager.removeBookById(cid)) {
|
||||
*retVal = PR_TRUE;
|
||||
}
|
||||
} catch (exception &e) {
|
||||
cerr << e.what() << endl;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
bool ContentManager::SetCurrentBookId(const char* &id, bool *retVal) {
|
||||
*retVal = PR_FALSE;
|
||||
const char *cid;
|
||||
NS_CStringGetData(id, &cid);
|
||||
|
||||
try {
|
||||
if (this->manager.setCurrentBookId(cid)) {
|
||||
*retVal = PR_TRUE;
|
||||
}
|
||||
} catch (exception &e) {
|
||||
cerr << e.what() << endl;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
bool ContentManager::GetCurrentBookId(char* &id, bool *retVal) {
|
||||
*retVal = PR_FALSE;
|
||||
|
||||
try {
|
||||
string current = this->manager.getCurrentBookId();
|
||||
id = nsDependentCString(current.data(), current.size());
|
||||
*retVal = PR_TRUE;
|
||||
} catch (exception &e) {
|
||||
cerr << e.what() << endl;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
bool ContentManager::GetBookById(const char* &id,
|
||||
char* &path,
|
||||
char* &title,
|
||||
char* &indexPath,
|
||||
char* &indexType,
|
||||
char* &description,
|
||||
char* &articleCount,
|
||||
char* &mediaCount,
|
||||
char* &size,
|
||||
char* &creator,
|
||||
char* &date,
|
||||
char* &language,
|
||||
char* &favicon,
|
||||
char* &url, bool *retVal) {
|
||||
*retVal = PR_FALSE;
|
||||
const char *cid;
|
||||
NS_CStringGetData(id, &cid);
|
||||
|
||||
try {
|
||||
kiwix::Book book;
|
||||
|
||||
if (this->manager.getBookById(cid, book)) {
|
||||
path = nsDependentCString(book.pathAbsolute.data(), book.pathAbsolute.size());
|
||||
title = nsDependentCString(book.title.data(), book.title.size());
|
||||
indexPath = nsDependentCString(book.indexPathAbsolute.data(), book.indexPathAbsolute.size());
|
||||
articleCount = nsDependentCString(book.articleCount.data(), book.articleCount.size());
|
||||
mediaCount = nsDependentCString(book.mediaCount.data(), book.mediaCount.size());
|
||||
size = nsDependentCString(book.size.data(), book.size.size());
|
||||
creator = nsDependentCString(book.creator.data(), book.creator.size());
|
||||
date = nsDependentCString(book.date.data(), book.date.size());
|
||||
language = nsDependentCString(book.language.data(), book.language.size());
|
||||
url = nsDependentCString(book.url.data(), book.url.size());
|
||||
|
||||
string faviconUrl = "";
|
||||
if (!book.faviconMimeType.empty()) {
|
||||
faviconUrl = "url(data:" + book.faviconMimeType + ";base64," + book.favicon + ")";
|
||||
}
|
||||
favicon = nsDependentCString(faviconUrl.data(), faviconUrl.size());
|
||||
|
||||
string indexTypeString = "";
|
||||
if (book.indexType == kiwix::XAPIAN) {
|
||||
indexTypeString = "xapian";
|
||||
} else if (book.indexType == kiwix::CLUCENE) {
|
||||
indexTypeString = "clucene";
|
||||
}
|
||||
indexType = nsDependentCString(indexTypeString.data(), indexTypeString.size());
|
||||
|
||||
description = nsDependentCString(book.description.data(), book.description.size());
|
||||
|
||||
*retVal = PR_TRUE;
|
||||
}
|
||||
} catch (exception &e) {
|
||||
cerr << e.what() << endl;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
bool ContentManager::UpdateBookLastOpenDateById(const char* &id, bool *retVal) {
|
||||
*retVal = PR_FALSE;
|
||||
const char *cid;
|
||||
NS_CStringGetData(id, &cid);
|
||||
|
||||
try {
|
||||
if (this->manager.updateBookLastOpenDateById(cid)) {
|
||||
*retVal = PR_TRUE;
|
||||
}
|
||||
} catch (exception &e) {
|
||||
cerr << e.what() << endl;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
bool ContentManager::GetBookCount(const bool localBooks, const bool remoteBooks, PRUint32 *count, bool *retVal) {
|
||||
*retVal = PR_TRUE;
|
||||
*count = 0;
|
||||
|
||||
try {
|
||||
*count = this->manager.getBookCount(localBooks, remoteBooks);
|
||||
} catch (exception &e) {
|
||||
cerr << e.what() << endl;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
bool ContentManager::ListBooks(const char* &mode, const char* &sortBy, PRUint32 maxSize,
|
||||
const char* &language, const char* &publisher, const char* &search, bool *retVal) {
|
||||
*retVal = PR_FALSE;
|
||||
const char *cmode; NS_CStringGetData(mode, &cmode);
|
||||
const char *csortBy; NS_CStringGetData(sortBy, &csortBy);
|
||||
const char *clanguage; NS_CStringGetData(language, &clanguage);
|
||||
const char *cpublisher; NS_CStringGetData(publisher, &cpublisher);
|
||||
const char *csearch; NS_CStringGetData(search, &csearch);
|
||||
|
||||
try {
|
||||
|
||||
// Set the mode enum
|
||||
kiwix::supportedListMode listMode;
|
||||
if (std::string(cmode) == "lastOpen") {
|
||||
listMode = kiwix::LASTOPEN;
|
||||
} else if ( std::string(cmode) == "remote") {
|
||||
listMode = kiwix::REMOTE;
|
||||
} else {
|
||||
listMode = kiwix::LOCAL;
|
||||
}
|
||||
|
||||
// Set the sortBy enum
|
||||
kiwix::supportedListSortBy listSortBy;
|
||||
if (std::string(csortBy) == "publisher") {
|
||||
listSortBy = kiwix::PUBLISHER;
|
||||
} else if ( std::string(csortBy) == "date") {
|
||||
listSortBy = kiwix::DATE;
|
||||
} else if ( std::string(csortBy) == "size") {
|
||||
listSortBy = kiwix::SIZE;
|
||||
} else {
|
||||
listSortBy = kiwix::TITLE;
|
||||
}
|
||||
|
||||
if (this->manager.listBooks(listMode, listSortBy, maxSize, clanguage, cpublisher, csearch)) {
|
||||
*retVal = PR_TRUE;
|
||||
}
|
||||
} catch (exception &e) {
|
||||
cerr << e.what() << endl;
|
||||
}
|
||||
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
bool ContentManager::GetListNextBookId(char* &id, bool *retVal) {
|
||||
*retVal = PR_FALSE;
|
||||
|
||||
try {
|
||||
if (!this->manager.bookIdList.empty()) {
|
||||
string idString = *(this->manager.bookIdList.begin());
|
||||
id = nsDependentCString(idString.data(), idString.size());
|
||||
this->manager.bookIdList.erase(this->manager.bookIdList.begin());
|
||||
*retVal = PR_TRUE;
|
||||
}
|
||||
} catch (exception &e) {
|
||||
cerr << e.what() << endl;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
bool ContentManager::SetBookIndex(const char* &id, const string &path, const char* &indexType, bool *retVal) {
|
||||
*retVal = PR_FALSE;
|
||||
|
||||
const char *cid;
|
||||
NS_CStringGetData(id, &cid);
|
||||
const char *cindexType;
|
||||
NS_CStringGetData(indexType, &cindexType);
|
||||
const char *pathToSave = strdup(nsStringToUTF8(path));
|
||||
|
||||
try {
|
||||
kiwix::supportedIndexType iType;
|
||||
if (std::string(cindexType) == "clucene") {
|
||||
iType = kiwix::CLUCENE;
|
||||
} else {
|
||||
iType = kiwix::XAPIAN;
|
||||
}
|
||||
|
||||
if (this->manager.setBookIndex(cid, pathToSave, iType)) {
|
||||
*retVal = PR_TRUE;
|
||||
}
|
||||
} catch (exception &e) {
|
||||
cerr << e.what() << endl;
|
||||
}
|
||||
|
||||
free((void*)pathToSave);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
bool ContentManager::SetBookPath(const char* &id, const string &path, bool *retVal) {
|
||||
*retVal = PR_FALSE;
|
||||
|
||||
const char *cid;
|
||||
NS_CStringGetData(id, &cid);
|
||||
const char *pathToSave = strdup(nsStringToUTF8(path));
|
||||
|
||||
try {
|
||||
if (this->manager.setBookPath(cid, pathToSave)) {
|
||||
*retVal = PR_TRUE;
|
||||
}
|
||||
} catch (exception &e) {
|
||||
cerr << e.what() << endl;
|
||||
}
|
||||
|
||||
free((void*)pathToSave);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
bool ContentManager::GetBooksLanguages(char* &languages, bool *retVal) {
|
||||
*retVal = PR_TRUE;
|
||||
string languagesStr = "";
|
||||
|
||||
vector<string> booksLanguages = this->manager.getBooksLanguages();
|
||||
vector<string>::iterator itr;
|
||||
for ( itr = booksLanguages.begin(); itr != booksLanguages.end(); ++itr ) {
|
||||
languagesStr += *itr + ";";
|
||||
}
|
||||
|
||||
languages = nsDependentCString(languagesStr.data(), languagesStr.size());
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
bool ContentManager::GetBooksPublishers(char* &publishers, bool *retVal) {
|
||||
*retVal = PR_TRUE;
|
||||
string publishersStr = "";
|
||||
|
||||
vector<string> booksPublishers = this->manager.getBooksPublishers();
|
||||
vector<string>::iterator itr;
|
||||
for ( itr = booksPublishers.begin(); itr != booksPublishers.end(); ++itr ) {
|
||||
publishersStr += *itr + ";";
|
||||
}
|
||||
|
||||
publishers = nsDependentCString(publishersStr.data(), publishersStr.size());
|
||||
return NS_OK;
|
||||
}*/
|
||||
|
38
src/contentManager/contentManager.h
Normal file
38
src/contentManager/contentManager.h
Normal file
@ -0,0 +1,38 @@
|
||||
|
||||
#include <iostream>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <kiwix/manager.h>
|
||||
#include <pathTools.h>
|
||||
#include <componentTools.h>
|
||||
#include <regexTools.h>
|
||||
|
||||
class ContentManager
|
||||
{
|
||||
public:
|
||||
ContentManager(int);
|
||||
bool OpenLibraryFromFile(string, bool);
|
||||
bool OpenLibraryFromText(string&, bool);
|
||||
bool WriteLibrary();
|
||||
bool WriteLibraryToFile(string&);
|
||||
bool AddBookFromPath(string&);
|
||||
/*bool RemoveBookById(string);
|
||||
bool GetBookById(string, string, string,
|
||||
string, string, string,
|
||||
string, string, string,
|
||||
string, string, string,
|
||||
string, string);
|
||||
bool SetCurrentBookId(string);
|
||||
bool GetCurrentBookId(string);
|
||||
bool GetListNextBookId(string);
|
||||
bool SetBookIndex(string, string, string);
|
||||
bool SetBookPath(string, string);
|
||||
bool UpdateBookLastOpenDateById(string);
|
||||
bool ListBooks(string, string, unsigned int, string, string, string);
|
||||
bool GetBookCount(bool, bool, unsigned int);
|
||||
bool GetBooksLanguages(string);
|
||||
bool GetBooksPublishers(string);*/
|
||||
protected:
|
||||
kiwix::Manager manager;
|
||||
|
||||
};
|
74
src/contentManager/contentManagerTester.cpp
Normal file
74
src/contentManager/contentManagerTester.cpp
Normal file
@ -0,0 +1,74 @@
|
||||
/*
|
||||
* Copyright 2011 Renaud Gaudin <reg@kiwix.org>
|
||||
*
|
||||
* 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 3 of the License, or
|
||||
* 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 <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <kiwix/manager.h>
|
||||
#include <pathTools.h>
|
||||
#include <componentTools.h>
|
||||
#include <regexTools.h>
|
||||
#include "contentManager.h"
|
||||
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
ContentManager cont_man(0);
|
||||
ContentManager* cont = new ContentManager(0);
|
||||
|
||||
if (argc < 2) {
|
||||
cout << "Usage: " << argv[0] << " zimPath" << endl << endl;
|
||||
cout << "No ZIM file path provided." << endl;
|
||||
exit(0);
|
||||
}
|
||||
string zimPath = (string) argv[1];
|
||||
cout << "Kiwix Tester." << endl << "Loading " << zimPath << "..." << endl;
|
||||
|
||||
if (cont->OpenLibraryFromFile(zimPath, true))
|
||||
cout << "Successfully opened ZIM file." << endl;
|
||||
else
|
||||
cout << "Unable to open ZIM file." << endl;
|
||||
|
||||
string xmltext = "<library current='e04bcf41-eae8-b04b-b04b-da2d0c00f4220000'><book id='e04bcf41-eae8-b04b-b04b-da2d0c00f4220000' path='ubuntudoc_fr_01_2009.zim' indexPath='ubuntudoc_fr_01_2009.zim.idx' indexType='xapian'/></library>";
|
||||
if (cont->OpenLibraryFromText(xmltext, true))
|
||||
cout << "Successfully opened XML library." << endl;
|
||||
else
|
||||
cout << "Unable to open XML library." << endl;
|
||||
|
||||
if (cont->WriteLibrary())
|
||||
cout << "Successfully wrote library." << endl;
|
||||
else
|
||||
cout << "Unable to write library." << endl;
|
||||
|
||||
if (cont->AddBookFromPath(zimPath))
|
||||
cout << "Successfully added book " << zimPath << endl;
|
||||
else
|
||||
cout << "Unable to add book " << zimPath << endl;
|
||||
|
||||
string lpath = "/tmp/toto";
|
||||
if (cont->WriteLibraryToFile(lpath))
|
||||
cout << "Successfully wrote library to " << lpath << endl;
|
||||
else
|
||||
cout << "Unable to write library to " << lpath << endl;
|
||||
|
||||
cont->WriteLibraryToFile(lpath);
|
||||
|
||||
delete cont;
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user