1/*
2    Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)
3
4    This library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Library General Public
6    License as published by the Free Software Foundation; either
7    version 2 of the License, or (at your option) any later version.
8
9    This library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Library General Public License for more details.
13
14    You should have received a copy of the GNU Library General Public License
15    along with this library; see the file COPYING.LIB.  If not, write to
16    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17    Boston, MA 02110-1301, USA.
18*/
19#include "config.h"
20#include "PluginDatabase.h"
21
22#include <QFileInfo>
23#include <f32file.h>
24
25static const char QTPLUGIN_FILTER[] = "*.qtplugin";
26static const char QT_PLUGIN_FOLDER[] = ":\\resource\\qt\\plugins\\npqtplugins\\";
27
28namespace WebCore {
29
30Vector<String> PluginDatabase::defaultPluginDirectories()
31{
32    Vector<String> directories;
33    //find the installation drive
34    TDriveList drivelist;
35    TChar driveLetter;
36    RFs fsSession;
37
38    if (fsSession.Connect() == KErrNone && fsSession.DriveList(drivelist) == KErrNone) {
39        for (TInt driveNumber = EDriveA; driveNumber <= EDriveZ; driveNumber++) {
40            if (drivelist[driveNumber] && fsSession.DriveToChar(driveNumber, driveLetter) == KErrNone) {
41                QString driveStringValue(QChar((uint)driveLetter.GetUpperCase()));
42                QString stubDirPath;
43                stubDirPath.append(driveStringValue);
44                stubDirPath.append(QT_PLUGIN_FOLDER);
45                if (QFileInfo(stubDirPath).exists())
46                    directories.append(stubDirPath);
47            }
48        }
49    }
50
51    fsSession.Close();
52    return directories;
53}
54
55bool PluginDatabase::isPreferredPluginDirectory(const String& path)
56{
57    return true;
58}
59
60void PluginDatabase::getPluginPathsInDirectories(HashSet<String>& paths) const
61{
62    // FIXME: This should be a case insensitive set.
63    HashSet<String> uniqueFilenames;
64
65    String fileNameFilter(QTPLUGIN_FILTER);
66
67    Vector<String>::const_iterator dirsEnd = m_pluginDirectories.end();
68    for (Vector<String>::const_iterator dIt = m_pluginDirectories.begin(); dIt != dirsEnd; ++dIt) {
69        Vector<String> pluginPaths = listDirectory(*dIt, fileNameFilter);
70        Vector<String>::const_iterator pluginsEnd = pluginPaths.end();
71        for (Vector<String>::const_iterator pIt = pluginPaths.begin(); pIt != pluginsEnd; ++pIt) {
72            if (!fileExists(*pIt))
73                continue;
74            paths.add(*pIt);
75        }
76    }
77}
78
79}
80