summaryrefslogtreecommitdiff
path: root/libopie2/opiedb/osqlbackendmanager.cpp
blob: bbfbf3d544d8d8cfecffaed04ee658590252c700 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112

#include "osqlbackendmanager.h"

/* OPIE */
#include <opie2/odebug.h>

/* QT */
#include <qdir.h>
#include <qmap.h>


/**
 * \todo FIXME CONFIG!!!
 */

namespace {
    class Config {
        typedef QMap<QString, QString> List;
    public:
        Config( const QString& fileName );
        /**
         * Quite simple layout in nature
         * BeginFile
         * Key = Value
         */
        bool load();
        QString value( const QString& key );
    private:
        List m_list;
        QString m_fileName;
    };
    Config::Config( const QString& fileName )
        : m_fileName( fileName ) {
    }

    bool Config::load() {
        if (!QFile::exists( m_fileName ) )
            return false;
        QFile file( m_fileName );
        if (!file.open(IO_ReadOnly ) )
            return false;
        QStringList list = QStringList::split( '\n', file.readAll() );
        QStringList::Iterator it;
        QString line;
        for (it =  list.begin(); it != list.end(); ++it ) {
            line = (*it).stripWhiteSpace();
            owarn << "Anonymous::Config:" + line << oendl;
            QStringList test = QStringList::split(' ', line );
            m_list.insert( test[0], test[2] );
        }
        return true;
    }
    QString Config::value( const QString& key ) {
        return m_list[key];
    }
};


using namespace Opie::DB;

OSQLBackEndManager::OSQLBackEndManager( const QStringList& path )
    :m_path( path )
{
}
OSQLBackEndManager::~OSQLBackEndManager() {
}
/**
 * scan dirs
 */
OSQLBackEnd::ValueList OSQLBackEndManager::scan() {
    OSQLBackEnd::ValueList list;
    if (!m_path.isEmpty() ) {
        QStringList::Iterator it;
        for ( it = m_path.begin(); it != m_path.end(); ++it ) {
            list += scanDir( (*it) );
        }
    }
    return list;
}
/**
 * scan a specified dir for *.osql
 */
OSQLBackEnd::ValueList OSQLBackEndManager::scanDir( const QString& dirName ) {
    OSQLBackEnd::ValueList list;
    QDir dir( dirName );
    if (dir.exists() ) {
        QStringList files = dir.entryList( "*.osql" );
        QStringList::Iterator it;
        for ( it = files.begin(); it != files.end(); ++it ) {
            list.append( file2backend( (*it) ) );
        }
    }
    return list;
}

/**
 * read a config file and convert it to a OSQLBackEnd
 */
OSQLBackEnd OSQLBackEndManager::file2backend( const QString& file ) {
    OSQLBackEnd end;
    owarn << "fileName: " + file << oendl;
    Config cfg( file );
    if (cfg.load() ) {
        end.setName( cfg.value( "Name") );
        end.setVendor( cfg.value("Vendor") );
        end.setLicense( cfg.value("License") );
        end.setLibrary( cfg.value("Library").local8Bit() );
        end.setDefault( cfg.value("Default").toInt() );
        end.setPreference( cfg.value("Preference").toInt() );
    }
    return end;
}