[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    branches/work/kde4/playground/libs/archivereader/src
From:       Jos van den Oever <jos () vandenoever ! info>
Date:       2006-05-14 12:45:21
Message-ID: 1147610721.387134.16184.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 540672 by vandenoever:

Add sha1 sum to file information that is stored in the index.

 M  +8 -0      luceneindexer/cluceneindexwriter.cpp  
 M  +2 -1      luceneindexer/cluceneindexwriter.h  
 M  +6 -0      streamindexer/digestthroughanalyzer.cpp  
 M  +2 -1      streamindexer/digestthroughanalyzer.h  
 M  +6 -1      streamindexer/indexwriter.h  
 M  +1 -3      streamindexer/streamindexer.cpp  
 M  +22 -4     streams/digestinputstream.cpp  
 M  +4 -0      streams/digestinputstream.h  


--- branches/work/kde4/playground/libs/archivereader/src/luceneindexer/cluceneindexwriter.cpp \
#540671:540672 @@ -76,8 +76,16 @@
 void
 CLuceneIndexWriter::addField(const Indexable* idx, const wstring &fieldname,
         const char* value) {
+    TCHAR tf[CL_MAX_DIR];
+    STRCPY_AtoT(tf, value, CL_MAX_DIR);
+    wstring v(tf);
+    addField(idx, fieldname, v);
 }
 
+void
+CLuceneIndexWriter::startIndexable(const Indexable* idx) {
+    addField(idx, L"path", idx->getName().c_str());
+}
 /*
     Close all left open indexwriters for this path.
 */
--- branches/work/kde4/playground/libs/archivereader/src/luceneindexer/cluceneindexwriter.h \
#540671:540672 @@ -27,13 +27,14 @@
 
     void addIndexWriter();
 protected:
+    void startIndexable(const jstreams::Indexable*);
+    void finishIndexable(const jstreams::Indexable*);
     void addStream(const jstreams::Indexable*, const std::wstring& fieldname,
         jstreams::StreamBase<wchar_t>* datastream);
     void addField(const jstreams::Indexable*, const std::wstring &fieldname,
         const char* value);
     void addField(const jstreams::Indexable*, const std::wstring &fieldname,
         const std::wstring &value);
-    void finishIndexable(const jstreams::Indexable*);
 public:
     CLuceneIndexWriter(const char* path);
     ~CLuceneIndexWriter();
--- branches/work/kde4/playground/libs/archivereader/src/streamindexer/digestthroughanalyzer.cpp \
#540671:540672 @@ -1,11 +1,13 @@
 #include "digestthroughanalyzer.h"
 #include "digestinputstream.h"
 #include "inputstream.h"
+#include "indexwriter.h"
 #include <openssl/sha.h>
 using namespace jstreams;
 
 DigestThroughAnalyzer::DigestThroughAnalyzer() {
     stream = 0;
+    indexable = 0;
 }
 DigestThroughAnalyzer::~DigestThroughAnalyzer() {
     if (stream) {
@@ -14,6 +16,9 @@
 }
 InputStream *
 DigestThroughAnalyzer::connectInputStream(InputStream *in) {
+    if (indexable && stream && stream->getStatus() == Eof) {
+        indexable->addField(L"sha1", stream->getDigestString().c_str());
+    }
     if (stream) {
         delete stream;
     }
@@ -22,4 +27,5 @@
 }
 void
 DigestThroughAnalyzer::setIndexable(jstreams::Indexable* idx) {
+    indexable = idx;
 }
--- branches/work/kde4/playground/libs/archivereader/src/streamindexer/digestthroughanalyzer.h \
#540671:540672 @@ -4,12 +4,13 @@
 #include "streamthroughanalyzer.h"
 
 namespace jstreams {
-	class DigestInputStream;
+    class DigestInputStream;
 }
 
 class DigestThroughAnalyzer : public jstreams::StreamThroughAnalyzer {
 private:
     jstreams::DigestInputStream *stream;
+    jstreams::Indexable* indexable;
 public:
     DigestThroughAnalyzer();
     ~DigestThroughAnalyzer();
--- branches/work/kde4/playground/libs/archivereader/src/streamindexer/indexwriter.h \
#540671:540672 @@ -23,6 +23,7 @@
 class IndexWriter {
 friend class Indexable;
 protected:
+    virtual void startIndexable(const Indexable*) = 0;
     virtual void addStream(const Indexable*, const std::wstring& fieldname,
         jstreams::StreamBase<wchar_t>* datastream) = 0;
     virtual void addField(const Indexable*, const std::wstring &fieldname,
@@ -37,8 +38,11 @@
 class Indexable {
 private:
     IndexWriter* writer;
+    const std::string& name;
 public:
-    Indexable(IndexWriter* w) :writer(w) {}
+    Indexable(const std::string& n, IndexWriter* w) :writer(w), name(n) {
+        w->startIndexable(this);
+    }
     ~Indexable() { writer->finishIndexable(this); }
     void addStream(const std::wstring& fieldname,
             jstreams::StreamBase<wchar_t>* datastream) {
@@ -52,6 +56,7 @@
             const std::wstring &value) {
         writer->addField(this, fieldname, value);
     }
+    const std::string& getName() const { return name; }
 };
 
 }
--- branches/work/kde4/playground/libs/archivereader/src/streamindexer/streamindexer.cpp \
#540671:540672 @@ -76,9 +76,7 @@
 char
 StreamIndexer::analyze(std::string &path, InputStream *input, uint depth) {
     printf("%s %lli\n", path.c_str(), input->getSize());
-    Indexable idx(writer);
-    idx.addField(L"path", path.c_str());
-    idx.addField(L"path", L"hmm");
+    Indexable idx(path, writer);
 
     // retrieve or construct the through analyzers and end analyzers
     std::vector<std::vector<StreamThroughAnalyzer*> >::iterator tIter;
--- branches/work/kde4/playground/libs/archivereader/src/streams/digestinputstream.cpp \
#540671:540672 @@ -1,4 +1,5 @@
 #include "digestinputstream.h"
+using namespace std;
 using namespace jstreams;
 
 DigestInputStream::DigestInputStream(StreamBase<char> *input) {
@@ -6,6 +7,7 @@
     size = input->getSize();
     status = Ok;
     ignoreBytes = 0;
+    finished = false;
     SHA1_Init(&sha1);
 }
 int32_t
@@ -73,10 +75,26 @@
 }
 void
 DigestInputStream::printDigest() {
-    SHA1_Final(digest, &sha1);
-    printf("The hash: ");
-    for (int i = 0; i < 20; i++) {
+    finishDigest();
+    printf("The hash %p: %s\n", this, getDigestString().c_str());
+/*    for (int i = 0; i < 20; i++) {
         printf("%02x ", digest[i]);
     }
-    printf("\n");
+    printf("\n");*/
 }
+void
+DigestInputStream::finishDigest() {
+    if (!finished) {
+        SHA1_Final(digest, &sha1);
+        finished = true;
+    }
+}
+string
+DigestInputStream::getDigestString() {
+    finishDigest();
+    char d[41];
+    for (int i = 0; i < 20; i++) {
+        sprintf(d+2*i, "%02x", digest[i]);
+    }
+    return d;
+}
--- branches/work/kde4/playground/libs/archivereader/src/streams/digestinputstream.h \
#540671:540672 @@ -6,10 +6,13 @@
 namespace jstreams {
 class DigestInputStream : public StreamBase<char> {
 private:
+    bool finished;
     int32_t ignoreBytes;
     SHA_CTX sha1;
     unsigned char digest[SHA_DIGEST_LENGTH];
     StreamBase<char> *input;
+
+    void finishDigest();
 public:
     DigestInputStream(StreamBase<char> *input);
     int32_t read(const char*& start, int32_t min, int32_t max);
@@ -17,6 +20,7 @@
     int64_t mark(int32_t readlimit);
     int64_t reset(int64_t);
     void printDigest();
+    std::string getDigestString();
 };
 }
 #endif


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic