-rw-r--r-- | library/global.cpp | 246 |
1 files changed, 114 insertions, 132 deletions
diff --git a/library/global.cpp b/library/global.cpp index 4aca08b..a627348 100644 --- a/library/global.cpp +++ b/library/global.cpp @@ -47,44 +47,24 @@ #include <qwindowsystem_qws.h> // for qwsServer #include <qdatetime.h> #include <qfile.h> -namespace { - // checks if the storage should be searched - bool checkStorage(const QString &path ){ // this is a small Config replacement cause config is too limited -zecke - QFile file(path ); - if(!file.open(IO_ReadOnly ) ) - return true; - - QByteArray array = file.readAll(); - QStringList list = QStringList::split('\n', QString( array ) ); - for(QStringList::Iterator it = list.begin(); it != list.end(); ++it ){ - if( (*it).startsWith("check = 0" ) ){ - return false; - }else if( (*it).startsWith("check = 1" ) ){ - return true; - } - } - return true; - } -} - //#include "quickexec_p.h" class Emitter : public QObject { Q_OBJECT public: Emitter( QWidget* receiver, const QString& document ) { - connect(this, SIGNAL(setDocument(const QString&)), - receiver, SLOT(setDocument(const QString&))); - emit setDocument(document); - disconnect(this, SIGNAL(setDocument(const QString&)), - receiver, SLOT(setDocument(const QString&))); + connect(this, SIGNAL(setDocument(const QString&)), + receiver, SLOT(setDocument(const QString&))); + emit setDocument(document); + disconnect(this, SIGNAL(setDocument(const QString&)), + receiver, SLOT(setDocument(const QString&))); } signals: void setDocument(const QString&); }; @@ -107,41 +87,41 @@ StartingAppList* StartingAppList::appl = 0; StartingAppList::StartingAppList( QObject *parent, const char* name ) :QObject( parent, name ) { #if QT_VERSION >= 232 && defined(QWS) connect( qwsServer, SIGNAL( newChannel(const QString&)), - this, SLOT( handleNewChannel(const QString&)) ); + this, SLOT( handleNewChannel(const QString&)) ); #endif dict.setAutoDelete( TRUE ); } void StartingAppList::add( const QString& name ) { #if QT_VERSION >= 232 && !defined(QT_NO_COP) if ( !appl ) - appl = new StartingAppList; + appl = new StartingAppList; QTime *t = new QTime; t->start(); appl->dict.insert( "QPE/Application/" + name, t ); #endif } bool StartingAppList::isStarting( const QString name ) { #if QT_VERSION >= 232 && !defined(QT_NO_COP) if ( appl ) { - QTime *t = appl->dict.find( "QPE/Application/" + name ); - if ( !t ) - return FALSE; - if ( t->elapsed() > 10000 ) { - // timeout in case of crash or something - appl->dict.remove( "QPE/Application/" + name ); - return FALSE; - } - return TRUE; + QTime *t = appl->dict.find( "QPE/Application/" + name ); + if ( !t ) + return FALSE; + if ( t->elapsed() > 10000 ) { + // timeout in case of crash or something + appl->dict.remove( "QPE/Application/" + name ); + return FALSE; + } + return TRUE; } #endif return FALSE; } void StartingAppList::handleNewChannel( const QString & name ) @@ -235,45 +215,45 @@ Global::Global() \sa addedDawg() */ const QDawg& Global::fixedDawg() { if ( !fixed_dawg ) { - if ( !docDirCreated ) - createDocDir(); - - fixed_dawg = new QDawg; - QString dawgfilename = dictDir() + "/dawg"; - QString words_lang; - QStringList langs = Global::languageList(); - for (QStringList::ConstIterator it = langs.begin(); it!=langs.end(); ++it) { - QString lang = *it; - words_lang = dictDir() + "/words." + lang; - QString dawgfilename_lang = dawgfilename + "." + lang; - if ( QFile::exists(dawgfilename_lang) || - QFile::exists(words_lang) ) { - dawgfilename = dawgfilename_lang; - break; - } - } - QFile dawgfile(dawgfilename); - - if ( !dawgfile.exists() ) { - QString fn = dictDir() + "/words"; - if ( QFile::exists(words_lang) ) - fn = words_lang; - QFile in(fn); - if ( in.open(IO_ReadOnly) ) { - fixed_dawg->createFromWords(&in); - dawgfile.open(IO_WriteOnly); - fixed_dawg->write(&dawgfile); - dawgfile.close(); - } - } else { - fixed_dawg->readFile(dawgfilename); - } + if ( !docDirCreated ) + createDocDir(); + + fixed_dawg = new QDawg; + QString dawgfilename = dictDir() + "/dawg"; + QString words_lang; + QStringList langs = Global::languageList(); + for (QStringList::ConstIterator it = langs.begin(); it!=langs.end(); ++it) { + QString lang = *it; + words_lang = dictDir() + "/words." + lang; + QString dawgfilename_lang = dawgfilename + "." + lang; + if ( QFile::exists(dawgfilename_lang) || + QFile::exists(words_lang) ) { + dawgfilename = dawgfilename_lang; + break; + } + } + QFile dawgfile(dawgfilename); + + if ( !dawgfile.exists() ) { + QString fn = dictDir() + "/words"; + if ( QFile::exists(words_lang) ) + fn = words_lang; + QFile in(fn); + if ( in.open(IO_ReadOnly) ) { + fixed_dawg->createFromWords(&in); + dawgfile.open(IO_WriteOnly); + fixed_dawg->write(&dawgfile); + dawgfile.close(); + } + } else { + fixed_dawg->readFile(dawgfilename); + } } return *fixed_dawg; } /*! @@ -294,21 +274,21 @@ const QDawg& Global::addedDawg() \a name should not contain "/". */ const QDawg& Global::dawg(const QString& name) { createDocDir(); if ( !named_dawg ) - named_dawg = new QDict<QDawg>; + named_dawg = new QDict<QDawg>; QDawg* r = named_dawg->find(name); if ( !r ) { - r = new QDawg; - named_dawg->insert(name,r); - QString dawgfilename = applicationFileName("Dictionary", name ) + ".dawg"; - QFile dawgfile(dawgfilename); - if ( dawgfile.open(IO_ReadOnly) ) - r->readFile(dawgfilename); + r = new QDawg; + named_dawg->insert(name,r); + QString dawgfilename = applicationFileName("Dictionary", name ) + ".dawg"; + QFile dawgfile(dawgfilename); + if ( dawgfile.open(IO_ReadOnly) ) + r->readFile(dawgfilename); } return *r; } /*! \overload @@ -337,14 +317,14 @@ void Global::addWords(const QString& dictname, const QStringList& wordlist) QStringList all = d.allWords() + wordlist; d.createFromWords(all); QString dawgfilename = applicationFileName("Dictionary", dictname) + ".dawg"; QFile dawgfile(dawgfilename); if ( dawgfile.open(IO_WriteOnly) ) { - d.write(&dawgfile); - dawgfile.close(); + d.write(&dawgfile); + dawgfile.close(); } // #### Re-read the dawg here if we use mmap(). // #### Signal other processes to re-read. } @@ -360,30 +340,30 @@ void Global::addWords(const QString& dictname, const QStringList& wordlist) QString Global::applicationFileName(const QString& appname, const QString& filename) { QDir d; QString r = getenv("HOME"); r += "/Applications/"; if ( !QFile::exists( r ) ) - if ( d.mkdir(r) == false ) - return QString::null; + if ( d.mkdir(r) == false ) + return QString::null; r += appname; if ( !QFile::exists( r ) ) - if ( d.mkdir(r) == false ) - return QString::null; + if ( d.mkdir(r) == false ) + return QString::null; r += "/"; r += filename; return r; } /*! \internal */ void Global::createDocDir() { if ( !docDirCreated ) { - docDirCreated = TRUE; - mkdir( QPEApplication::documentDir().latin1(), 0755 ); + docDirCreated = TRUE; + mkdir( QPEApplication::documentDir().latin1(), 0755 ); } } /*! Displays a status \a message to the user. This usually appears @@ -467,17 +447,17 @@ void Global::hideInputMethod() /*! \internal */ bool Global::isBuiltinCommand( const QString &name ) { if(!builtin) - return FALSE; // yes, it can happen + return FALSE; // yes, it can happen for (int i = 0; builtin[i].file; i++) { - if ( builtin[i].file == name ) { - return TRUE; - } + if ( builtin[i].file == name ) { + return TRUE; + } } return FALSE; } Global::Command* Global::builtin=0; QGuardedPtr<QWidget> *Global::running=0; @@ -491,20 +471,20 @@ QGuardedPtr<QWidget> *Global::running=0; /*! \internal */ void Global::setBuiltinCommands( Command* list ) { if ( running ) - delete [] running; + delete [] running; builtin = list; int count = 0; if (!builtin) - return; + return; while ( builtin[count].file ) - count++; + count++; running = new QGuardedPtr<QWidget> [ count ]; } /*! \internal @@ -517,18 +497,18 @@ void Global::setDocument( QWidget* receiver, const QString& document ) /*! \internal */ bool Global::terminateBuiltin( const QString& n ) { if (!builtin) - return FALSE; + return FALSE; for (int i = 0; builtin[i].file; i++) { - if ( builtin[i].file == n ) { - delete running[i]; - return TRUE; - } + if ( builtin[i].file == n ) { + delete running[i]; + return TRUE; + } } return FALSE; } /*! \internal @@ -537,13 +517,13 @@ void Global::terminate( const AppLnk* app ) { //if ( terminateBuiltin(app->exec()) ) return; // maybe? haven't tried this #ifndef QT_NO_COP QCString channel = "QPE/Application/" + app->exec().utf8(); if ( QCopChannel::isRegistered(channel) ) { - QCopEnvelope e(channel, "quit()"); + QCopEnvelope e(channel, "quit()"); } #endif } /*! Low-level function to run command \a c. @@ -559,46 +539,46 @@ void Global::invoke(const QString &c) #if !defined(QT_NO_COP) QString ap=list[0]; // see if the application is already running // XXX should lock file /tmp/qcop-msg-ap if ( QCopChannel::isRegistered( ("QPE/Application/" + ap).latin1() ) ) { - // If the channel is already register, the app is already running, so show it. - { QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "raise()" ); } + // If the channel is already register, the app is already running, so show it. + { QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "raise()" ); } - //QCopEnvelope e("QPE/System", "notBusy(QString)" ); - //e << ap; - return; + //QCopEnvelope e("QPE/System", "notBusy(QString)" ); + //e << ap; + return; } // XXX should unlock file /tmp/qcop-msg-ap //see if it is being started if ( StartingAppList::isStarting( ap ) ) { // FIXME take it out for now, since it leads to a much to short showing of wait if // some entry is clicked. // Real cause is that ::execute is called twice for document tab. But it would need some larger changes // to fix that, and with future syncs with qtopia 1.6 it will change anyway big time since somebody there // had the idea that an apploader belongs to the launcher ... - //QCopEnvelope e("QPE/System", "notBusy(QString)" ); - //e << ap; - return; + //QCopEnvelope e("QPE/System", "notBusy(QString)" ); + //e << ap; + return; } #endif #ifdef QT_NO_QWS_MULTIPROCESS QMessageBox::warning( 0, "Error", "Could not find the application " + c, "Ok", 0, 0, 0, 1 ); #else QStrList slist; unsigned int j; for ( j = 0; j < list.count(); j++ ) - slist.append( list[j].utf8() ); + slist.append( list[j].utf8() ); const char **args = new (const char *)[slist.count() + 1]; for ( j = 0; j < slist.count(); j++ ) - args[j] = slist.at(j); + args[j] = slist.at(j); args[j] = NULL; #if !defined(QT_NO_COP) // an attempt to show a wait... // more logic should be used, but this will be fine for the moment... QCopEnvelope ( "QPE/System", "busy()" ); @@ -609,14 +589,14 @@ void Global::invoke(const QString &c) QString libexe = qpeDir()+"/binlib/lib"+args[0] + ".dylib"; #else QString libexe = qpeDir()+"/binlib/lib"+args[0] + ".so"; #endif qDebug("libfile = %s", libexe.latin1() ); if ( QFile::exists( libexe ) ) { - qDebug("calling quickexec %s", libexe.latin1() ); - quickexecv( libexe.utf8().data(), (const char **)args ); + qDebug("calling quickexec %s", libexe.latin1() ); + quickexecv( libexe.utf8().data(), (const char **)args ); } else #endif { bool success = false; int pfd [2]; if ( ::pipe ( pfd ) < 0 ) @@ -680,13 +660,13 @@ void Global::invoke(const QString &c) Note that a better approach might be to send a QCop message to the application's QPE/Application/\e{appname} channel. */ void Global::execute( const QString &c, const QString& document ) { - // ask the server to do the work + // ask the server to do the work #if !defined(QT_NO_COP) if ( document.isNull() ) { QCopEnvelope e( "QPE/System", "execute(QString)" ); e << c; } else { QCopEnvelope e( "QPE/System", "execute(QString,QString)" ); @@ -703,18 +683,18 @@ void Global::execute( const QString &c, const QString& document ) \sa stringQuote() */ QString Global::shellQuote(const QString& s) { QString r="\""; for (int i=0; i<(int)s.length(); i++) { - char c = s[i].latin1(); - switch (c) { - case '\\': case '"': case '$': - r+="\\"; - } - r += s[i]; + char c = s[i].latin1(); + switch (c) { + case '\\': case '"': case '$': + r+="\\"; + } + r += s[i]; } r += "\""; return r; } /*! @@ -724,18 +704,18 @@ QString Global::shellQuote(const QString& s) \sa shellQuote() */ QString Global::stringQuote(const QString& s) { QString r="\""; for (int i=0; i<(int)s.length(); i++) { - char c = s[i].latin1(); - switch (c) { - case '\\': case '"': - r+="\\"; - } - r += s[i]; + char c = s[i].latin1(); + switch (c) { + case '\\': case '"': + r+="\\"; + } + r += s[i]; } r += "\""; return r; } /*! @@ -766,15 +746,17 @@ void Global::findDocuments(DocLnkSet* folder, const QString &mimefilter) const QList<FileSystem> &fs = storage.fileSystems(); QListIterator<FileSystem> it ( fs ); for ( ; it.current(); ++it ) { if ( (*it)->isRemovable() ) { // let's find out if we should search on it // this is a candidate look at the cf and see if we should search on it QString path = (*it)->path(); - if( !checkStorage((*it)->path() + "/.opiestorage.cf" ) ) - continue; Config conf((*it)->path() + "/.opiestorage.cf", Config::File ); + conf.setGroup("main"); + if (!conf.readBoolEntry("check",true)) { + continue; + } conf.setGroup("subdirs"); if (conf.readBoolEntry("wholemedia",true)) { DocLnkSet ide( path,mimefilter); folder->appendFrom(ide); } else { QStringList subDirs = conf.readListEntry("subdirs",':'); @@ -784,42 +766,42 @@ void Global::findDocuments(DocLnkSet* folder, const QString &mimefilter) for (unsigned c = 0; c < subDirs.count();++c) { DocLnkSet ide( path+"/"+subDirs[c], mimefilter ); folder->appendFrom(ide); } } } else if ( (*it)->disk() == "/dev/mtdblock6" || (*it)->disk() == "tmpfs" ) { - QString path = (*it)->path() + "/Documents"; - DocLnkSet ide( path, mimefilter ); - folder->appendFrom(ide); + QString path = (*it)->path() + "/Documents"; + DocLnkSet ide( path, mimefilter ); + folder->appendFrom(ide); } } } QStringList Global::languageList() { QString lang = getenv("LANG"); QStringList langs; langs.append(lang); int i = lang.find("."); if ( i > 0 ) - lang = lang.left( i ); + lang = lang.left( i ); i = lang.find( "_" ); if ( i > 0 ) - langs.append(lang.left(i)); + langs.append(lang.left(i)); return langs; } QStringList Global::helpPath() { QString qpeDir = QPEApplication::qpeDir(); QStringList path; QStringList langs = Global::languageList(); for (QStringList::ConstIterator it = langs.fromLast(); it!=langs.end(); --it) { - QString lang = *it; - if ( !lang.isEmpty() ) - path += qpeDir + "/help/" + lang + "/html"; + QString lang = *it; + if ( !lang.isEmpty() ) + path += qpeDir + "/help/" + lang + "/html"; } path += qpeDir + "/pics"; path += qpeDir + "/help/html"; /* we even put english into the en dir so try it as fallback as well for opie */ path += qpeDir + "/help/en/html"; path += qpeDir + "/docs"; |