You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdesdk/kbabel/kbabeldict/modules/dbsearchengine/dbscan.cpp

198 lines
4.4 KiB

/***************************************************************************
dbscan.cpp - Scan for po files to add in the DB
-------------------
begin : Fri Sep 8 2000
copyright : (C) 2000 by Andrea Rizzi
email : rizzi@kde.org
***************************************************************************/
/*
Translation search engine
Copyright 2000
Andrea Rizzi rizzi@kde.org
License GPL v 2.0
* *
* In addition, as a special exception, the copyright holders give *
* permission to link the code of this program with any edition of *
* the TQt library by Trolltech AS, Norway (or with modified versions *
* of TQt that use the same license as TQt), and distribute linked *
* combinations including the two. You must obey the GNU General *
* Public License in all respects for all of the code used other than *
* TQt. If you modify this file, you may extend this exception to *
* your version of the file, but you are not obligated to do so. If *
* you do not wish to do so, delete this exception statement from *
* your version. *
*/
#include "dbscan.h"
#include <tqdir.h>
#include <tqfile.h>
#include <kapplication.h>
#include <kurl.h>
#include <kdebug.h>
using namespace KBabel;
PoScanner::PoScanner(DataBaseManager *dbm,
TQObject *parent,const char *name):TQObject(parent,name)
{
dm=dbm;
removeOldCatalogTranslation=false; //Check if this flag do something.
count=0;
}
bool PoScanner::scanPattern(TQString pathName,TQString pattern,bool rec)
{
int tot;
//Only one progress bar!!
bool pb=false;
static bool called=false;
if (!called)
{ pb=true; count=0;}
called=true;
kdDebug(0) << TQString("cat: %1, %2").arg(pathName).arg(pattern) << endl;
if(pb)
{emit patternStarted();
emit patternProgress(0);
}
TQDir d(pathName,pattern);
d.setMatchAllDirs(true);
const TQFileInfoList* files = d.entryInfoList();
tot=files->count();
TQPtrListIterator<TQFileInfo> it(*files);
kdDebug(0) << tot << endl;
for ( int i=0; i<tot; i++ )
{
if ((*it)->isDir())
{
if(rec)
{
kdDebug(0) << d[i] << endl;
if(d[i]!="." && d[i]!="..")
scanPattern(pathName+"/"+d[i],pattern,true);
}
} else
{
kdDebug(0) << d[i] << endl;
scanFile(pathName+"/"+d[i]);
}
if(pb)
emit patternProgress(100*i/tot);
//printf( "%s\n", d[i] );
++it;
}
if(pb)
emit patternProgress(100);
if(pb)
emit patternFinished();
if(pb){called=false;count=0;}
return true;
}
bool PoScanner::scanFile(TQString fileName)
{
emit fileStarted();
InfoItem cinfo;
Catalog * catalog=new Catalog(this,"ScanPoCatalog");
TQString location=fileName.right(fileName.length()-fileName.findRev("/")-1);
connect(catalog,TQT_SIGNAL(signalProgress(int)),this,TQT_SIGNAL(fileLoading(int)));
emit filename(location);
emit fileProgress(0);
emit fileLoading(0);
KURL u(fileName);
ConversionStatus rr=catalog->openURL(u);
if(rr != OK && rr !=RECOVERED_PARSE_ERROR )
{
delete catalog;
return false;
}
emit fileLoading(100);
TQString author;
if(rr != HEADER_ERROR)
author=catalog->lastTranslator();
else author=TQString("unknown");
int catnum=dm->catalogRef(location,author,fileName);
uint i,tot;
tot=catalog->numberOfEntries();
//DataBaseItem dbit;
bool fuzzy;
bool untra;
//kdDebug(0) << TQString("Tot: %1").arg(tot) << endl;
for (i=0;i<tot;i++) //Skip header = ????
{
//Faster ?
if(i % 10==0)
{
emit fileProgress(100*i/tot);
emit added(count);
kapp->processEvents(100);
}
fuzzy=catalog->isFuzzy(i);
untra=catalog->isUntranslated(i);
if(!fuzzy && !untra)
{
int res;
TQString msgid,msgstr;
msgid=catalog->msgid(i,true).first();
kdWarning() << "Translation database does not support plural forms" << endl;
msgstr=catalog->msgstr(i).first();
res=dm->putNewTranslation(msgid,msgstr,catnum,false);
count+=res;
}
}
// kdDebug(0) << TQString("File finished") << endl;
emit fileProgress(0);
emit fileLoading(0);
emit fileFinished();
// dm->loadInfo(); // Sync the list of catalogs NOT NEEDED (?)
delete catalog;
//clear();
return true;
}
#include "dbscan.moc"