File indexing completed on 2024-04-14 04:35:43

0001 /* This file is part of the KDE project
0002    Copyright (C) 2003-2015 Jarosław Staniek <staniek@kde.org>
0003 
0004    This library is free software; you can redistribute it and/or
0005    modify it under the terms of the GNU Library General Public
0006    License as published by the Free Software Foundation; either
0007    version 2 of the License, or (at your option) any later version.
0008 
0009    This library is distributed in the hope that it will be useful,
0010    but WITHOUT ANY WARRANTY; without even the implied warranty of
0011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0012    Library General Public License for more details.
0013 
0014    You should have received a copy of the GNU Library General Public License
0015    along with this library; see the file COPYING.LIB.  If not, write to
0016    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
0017  * Boston, MA 02110-1301, USA.
0018 */
0019 
0020 #ifndef KDB_DRIVER_MANAGER_P_H
0021 #define KDB_DRIVER_MANAGER_P_H
0022 
0023 #include <QMap>
0024 #include "config-kdb.h"
0025 #include "KDbResult.h"
0026 
0027 class KDbDriverMetaData;
0028 class KDbDriver;
0029 
0030 //! Internal class of the KDbDriverManager.
0031 class KDB_TESTING_EXPORT DriverManagerInternal : public QObject, public KDbResultable
0032 {
0033     Q_OBJECT
0034 public:
0035     /*! Used by self() */
0036     DriverManagerInternal();
0037 
0038     ~DriverManagerInternal() override;
0039 
0040     QStringList driverIds();
0041 
0042     /*! Tries to load a driver with identifier @a id.
0043       @return db driver, or @c nullptr on error (then error result is also set) */
0044     KDbDriver* driver(const QString& id);
0045 
0046     const KDbDriverMetaData* driverMetaData(const QString &id);
0047 
0048     QStringList driverIdsForMimeType(const QString& mimeType);
0049 
0050     QStringList possibleProblems() const;
0051 
0052     static DriverManagerInternal *self();
0053 
0054 #ifdef BUILD_TESTING
0055     //! If @c true, sets the driver manager to have no drivers so this case can be tested.
0056     //! Afects driverIds(), driver(), driverMetaData(), driverIdsForMimeType()
0057     bool forceEmpty = false;
0058 #else
0059     const bool forceEmpty = false;
0060 #endif
0061 
0062 protected Q_SLOTS:
0063     /*! Used to destroy all drivers on QApplication quit, so even if there are
0064      KDbDriverManager's static instances that are destroyed on program
0065      "static destruction", drivers are not kept after QApplication death.
0066     */
0067     void slotAppQuits();
0068 
0069 private:
0070     Q_DISABLE_COPY(DriverManagerInternal)
0071 
0072     bool lookupDrivers();
0073     void lookupDriversInternal();
0074     void clear();
0075 
0076     QMap<QString, KDbDriverMetaData*> m_metadata_by_mimetype;
0077     QMap<QString, KDbDriverMetaData*> m_driversMetaData; //!< used to store driver metadata
0078     QMap<QString, KDbDriver*> m_drivers; //!< for owning drivers
0079     QString m_pluginsDir;
0080     QStringList m_possibleProblems;
0081     bool m_lookupDriversNeeded;
0082 };
0083 
0084 #endif