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

Reply via email to