#ifndef lint static char rcsid[] = "@(#$Id: qtry.cpp,v 1.5 2005-11-24 07:16:16 dockes Exp $ (C) 2004 J.F.Dockes"; #endif // Tests with the query interface #include #include #include #include #include "conftree.h" #include "rclconfig.h" #include "rcldb.h" #include "transcode.h" #include "mimehandler.h" #include "pathut.h" #ifndef NO_NAMESPACES using namespace std; #endif /* NO_NAMESPACES */ #include "rcldb.h" static string thisprog; static string usage = " -d -e term [term] ..." " \n\n" ; static void Usage(void) { cerr << thisprog << ": usage:\n" << usage; exit(1); } static int op_flags; #define OPT_e 0x2 int main(int argc, char **argv) { string encoding = "ISO8859-1"; thisprog = argv[0]; argc--; argv++; while (argc > 0 && **argv == '-') { (*argv)++; if (!(**argv)) /* Cas du "adb - core" */ Usage(); while (**argv) switch (*(*argv)++) { case 'e': op_flags |= OPT_e; if (argc < 2) Usage(); encoding = *(++argv); argc--; goto b1; default: Usage(); break; } b1: argc--; argv++; } if (argc < 1) Usage(); RclConfig *rclconfig = new RclConfig; if (!rclconfig->ok()) cerr << "Config could not be built" << endl; string dbdir; if (rclconfig->getConfParam(string("dbdir"), dbdir) == 0) { cerr << "No database directory in configuration" << endl; exit(1); } dbdir = path_tildexpand(dbdir); Rcl::Db *rcldb = new Rcl::Db; if (!rcldb->open(dbdir, Rcl::Db::DbRO)) { fprintf(stderr, "Could not open database\n"); exit(1); } // TOBEDONE: query syntax. Yes it's mighty stupid to cat terms. string query; while (argc--) query += string(*argv++) + " " ; rcldb->setQuery(query); int i = 0; Rcl::Doc doc; for (i=0;;i++) { doc.erase(); if (!rcldb->getDoc(i, doc)) break; cout << "Url: " << doc.url << endl; cout << "Mimetype: " << doc.mimetype << endl; cout << "Mtime: " << doc.mtime << endl; cout << "Origcharset: " << doc.origcharset << endl; cout << "Title: " << doc.title << endl; cout << "Text: " << doc.text << endl; cout << "Keywords: " << doc.keywords << endl; cout << "Abstract: " << doc.abstract << endl; cout << endl; // Go to the file system to retrieve / convert the document text // for preview: // Look for appropriate handler MimeHandlerFunc fun = getMimeHandler(doc.mimetype, rclconfig->getMimeConf()); if (!fun) { cout << "No mime handler !" << endl; continue; } string fn = doc.url.substr(6, string::npos); cout << "Filename: " << fn << endl; Rcl::Doc fdoc; if (!fun(rclconfig, fn, doc.mimetype, fdoc)) { cout << "Failed to convert/preview document!" << endl; continue; } string outencoding = "iso8859-1"; string printable; transcode(fdoc.text, printable, "UTF-8", outencoding); cout << printable << endl; } delete rcldb; cerr << "Exiting" << endl; exit(0); }