Cscott has uploaded a new change for review. https://gerrit.wikimedia.org/r/295460
Change subject: Move zim::writer::ArticleSource::getData() to zim::writer::Article::getData(). ...................................................................... Move zim::writer::ArticleSource::getData() to zim::writer::Article::getData(). When building a ZIM file incrementally, it makes more sense to provide the data upfront as soon as you return the Article object from ArticleSource::getNextArticle. This is the way that the Category object already works. Change-Id: I78f2a69ae3931cc43a51cdab360468e13fcc54cb --- M zimlib/examples/createZimExample.cpp M zimlib/include/zim/writer/articlesource.h M zimlib/src/zimcreator.cpp M zimwriterfs/zimwriterfs.cpp 4 files changed, 23 insertions(+), 23 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/openzim refs/changes/60/295460/1 diff --git a/zimlib/examples/createZimExample.cpp b/zimlib/examples/createZimExample.cpp index 914000c..95b8d09 100644 --- a/zimlib/examples/createZimExample.cpp +++ b/zimlib/examples/createZimExample.cpp @@ -40,7 +40,7 @@ virtual std::string getMimeType() const; virtual std::string getRedirectAid() const; - zim::Blob data() + virtual zim::Blob getData() const { return zim::Blob(&_data[0], _data.size()); } }; @@ -96,7 +96,6 @@ explicit TestArticleSource(unsigned max = 16); virtual const zim::writer::Article* getNextArticle(); - virtual zim::Blob getData(const std::string& aid); }; TestArticleSource::TestArticleSource(unsigned max) @@ -119,14 +118,6 @@ unsigned n = _next++; return &_articles[n]; -} - -zim::Blob TestArticleSource::getData(const std::string& aid) -{ - unsigned n; - std::istringstream s(aid); - s >> n; - return _articles[n-1].data(); } int main(int argc, char* argv[]) diff --git a/zimlib/include/zim/writer/articlesource.h b/zimlib/include/zim/writer/articlesource.h index 1fda337..c0ceefc 100644 --- a/zimlib/include/zim/writer/articlesource.h +++ b/zimlib/include/zim/writer/articlesource.h @@ -45,6 +45,7 @@ virtual bool shouldCompress() const; virtual std::string getRedirectAid() const; virtual std::string getParameter() const; + virtual Blob getData() const = 0; // returns the next category id, to which the article is assigned to virtual std::string getNextCategory(); @@ -63,7 +64,6 @@ public: virtual void setFilename(const std::string& fname) { } virtual const Article* getNextArticle() = 0; - virtual Blob getData(const std::string& aid) = 0; virtual Uuid getUuid(); virtual std::string getMainPage(); virtual std::string getLayoutPage(); diff --git a/zimlib/src/zimcreator.cpp b/zimlib/src/zimcreator.cpp index ac2720b..7cf21c6 100644 --- a/zimlib/src/zimcreator.cpp +++ b/zimlib/src/zimcreator.cpp @@ -201,7 +201,7 @@ } // Add blob data to compressed or uncompressed cluster. - Blob blob = src.getData(dirent.getAid()); + Blob blob = article->getData(); if (blob.size() > 0) { isEmpty = false; diff --git a/zimwriterfs/zimwriterfs.cpp b/zimwriterfs/zimwriterfs.cpp index f110e29..bd77862 100644 --- a/zimwriterfs/zimwriterfs.cpp +++ b/zimwriterfs/zimwriterfs.cpp @@ -401,9 +401,12 @@ return retVal; } +class ArticleSource; + /* Article class */ class Article : public zim::writer::Article { protected: + ArticleSource *source; char ns; bool invalid; std::string aid; @@ -414,10 +417,8 @@ std::string data; public: - Article() { - invalid = false; - } - explicit Article(const std::string& id, const bool detectRedirects); + Article(ArticleSource *source_) : source(source_), invalid(false) { } + explicit Article(ArticleSource *source, const std::string& id, const bool detectRedirects); virtual std::string getAid() const; virtual char getNamespace() const; virtual std::string getUrl() const; @@ -427,11 +428,13 @@ virtual std::string getMimeType() const; virtual std::string getRedirectAid() const; virtual bool shouldCompress() const; + virtual zim::Blob getData() const; }; class MetadataArticle : public Article { public: - MetadataArticle(std::string &id) { + MetadataArticle(ArticleSource *source, std::string &id) : + Article(source) { if (id == "Favicon") { aid = "/-/" + id; mimeType="image/png"; @@ -449,7 +452,8 @@ class RedirectArticle : public Article { public: - RedirectArticle(const std::string &line) { + RedirectArticle(ArticleSource *source, const std::string &line) : + Article(source) { size_t start; size_t end; ns = line[0]; @@ -633,8 +637,7 @@ return computeRelativePath(baseUrl, newUrl); } -Article::Article(const std::string& path, const bool detectRedirects = true) { - invalid = false; +Article::Article(ArticleSource *source_, const std::string& path, const bool detectRedirects = true) : source(source_), invalid(false) { /* aid */ aid = path.substr(directoryPath.size()+1); @@ -794,14 +797,14 @@ if (!metadataQueue.empty()) { path = metadataQueue.front(); metadataQueue.pop(); - article = new MetadataArticle(path); + article = new MetadataArticle(this, path); } else if (!redirectsQueue.empty()) { std::string line = redirectsQueue.front(); redirectsQueue.pop(); - article = new RedirectArticle(line); + article = new RedirectArticle(this, line); } else if (popFromFilenameQueue(path)) { do { - article = new Article(path); + article = new Article(this, path); } while (article && article->isInvalid() && popFromFilenameQueue(path)); } else { article = NULL; @@ -824,6 +827,12 @@ return article; } +// XXX This code should be moved to the specific subclass of Article, +// but for now dispatch to the old implementation in ArticleSource. +zim::Blob Article::getData() const { + return source->getData(getAid()); +} + zim::Blob ArticleSource::getData(const std::string& aid) { if (isVerbose()) -- To view, visit https://gerrit.wikimedia.org/r/295460 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I78f2a69ae3931cc43a51cdab360468e13fcc54cb Gerrit-PatchSet: 1 Gerrit-Project: openzim Gerrit-Branch: master Gerrit-Owner: Cscott <canan...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits