summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--libopie2/opiecore/opluginloader.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/libopie2/opiecore/opluginloader.cpp b/libopie2/opiecore/opluginloader.cpp
index e7eddc2..1edf3a1 100644
--- a/libopie2/opiecore/opluginloader.cpp
+++ b/libopie2/opiecore/opluginloader.cpp
@@ -1,55 +1,56 @@
/*
* LGPLv2 or later
* zecke@handhelds.org
*/
#include "opluginloader.h"
#include "oconfig.h"
+#include "odebug.h"
#include <qpe/qpeapplication.h>
#include <qdir.h>
#include <qdict.h>
#include <qtl.h>
#include <qfile.h>
#include <stdlib.h>
namespace Opie {
namespace Core {
namespace Internal {
struct OPluginLibraryHolder {
static OPluginLibraryHolder *self();
QLibrary *ref( const QString& );
void deref( QLibrary* );
private:
OPluginLibraryHolder();
~OPluginLibraryHolder();
QDict<QLibrary> m_libs;
static OPluginLibraryHolder* m_self;
};
OPluginLibraryHolder* OPluginLibraryHolder::m_self = 0;
OPluginLibraryHolder* OPluginLibraryHolder::self() {
if ( !m_self )
m_self = new OPluginLibraryHolder;
return m_self;
}
OPluginLibraryHolder::OPluginLibraryHolder() {}
OPluginLibraryHolder::~OPluginLibraryHolder() {}
/*
* We do simple ref counting... We will add the QLibrary again
* and again to the dictionary and on deref we will pop and pop it
* until there are no more library and we will unload and delete the library
* luckily dlopen does some ref counting as well so we don't need
* to hack QPEApplication
*/
QLibrary* OPluginLibraryHolder::ref(const QString& str) {
QLibrary *lib = m_libs[str];
@@ -510,101 +511,102 @@ QString OGenericPluginLoader::unlibify( const QString& str ) {
#ifdef Q_OS_MACX
return st.left( st.findRev( ".dylib" ) );
#else
return st.left( st.findRev( ".so" ) );
#endif
}
/**
* @internal
*
* \brief method to return available plugins. Internal and for reeimplementations
*
*Return a List of Plugins for a dir and add positions and remove disabled.
* If a plugin is on the excluded list assign position -2
*
* @param dir The dir to look in
* @param sorted Should positions be read?
* @param disabled Remove excluded from the list
*/
OPluginItem::List OGenericPluginLoader::plugins( const QString& _dir, bool sorted, bool disabled )const {
#ifdef Q_OS_MACX
QDir dir( _dir, "lib*.dylib" );
#else
QDir dir( _dir, "lib*.so" );
#endif
OPluginItem::List lst;
/*
* get excluded list and then iterate over them
* Excluded list contains the name
* Position is a list with 'name.pos.name.pos.name.pos'
*
* For the look up we will create two QMap<QString,pos>
*/
QMap<QString, int> positionMap;
QMap<QString, int> excludedMap;
OConfig cfg( m_dir+"-odpplugins" );
cfg.setGroup( _dir );
QStringList excludes = cfg.readListEntry( "Excluded", ',' );
for ( QStringList::Iterator it = excludes.begin(); it != excludes.end(); ++it )
excludedMap.insert( *it, -2 );
- if ( m_isSorted ) {
+ if ( sorted ) {
QStringList pos = cfg.readListEntry( "Positions", '.' );
QStringList::Iterator it = pos.begin();
while ( it != pos.end() )
positionMap.insert( *it++, (*it++).toInt() );
+
}
QStringList list = dir.entryList();
for (QStringList::Iterator it = list.begin(); it != list.end(); ++it ) {
QString str = unlibify( *it );
OPluginItem item( str, _dir + "/" + *it );
bool ex = excludedMap.contains( str );
/*
* if disabled but we should show all mark it as disabled
* else continue because we don't want to add the item
* else if sorted we assign the right position
*/
if ( ex && !disabled)
item.setEnabled( false );
else if ( ex && disabled )
continue;
else if ( sorted )
item.setPosition( positionMap[str] );
lst.append( item );
}
return lst;
}
/**
* @internal generate a list of languages from $LANG
*/
QStringList OGenericPluginLoader::languageList() {
if ( m_languages.isEmpty() ) {
/*
* be_BY.CP1251 We will add, be_BY.CP1251,be_BY,be
* to our list of languages.
*/
QString str = ::getenv( "LANG" );
m_languages += str;
int pos = str.find( '.' );
if ( pos > 0 )
m_languages += str.left( pos );
int n_pos = str.find( '_' );
if ( pos > 0 && n_pos >= pos )
m_languages += str.left( n_pos );