diff options
| author | 2016-06-13 18:42:57 -0400 | |
|---|---|---|
| committer | 2016-06-13 18:42:57 -0400 | |
| commit | 65d5f68cc6dc81799c5a5d90400a2c1f0dd02547 (patch) | |
| tree | 6f245ba901b87ef42fed69965aea22f5eea6b590 /SQLiteStudio3/coreSQLiteStudio/services | |
| parent | aeb6bad01630d325a4e768e798a7a6d44e18fdaf (diff) | |
| parent | 5d9314f134ddd3dc4c853e398ac90ba247fb2e4f (diff) | |
Merge tag 'upstream/3.1.0'
Upstream version 3.1.0
# gpg: Signature made Mon 13 Jun 2016 06:42:54 PM EDT using RSA key ID EBE9BD91
# gpg: Good signature from "Unit 193 <unit193@gmail.com>"
# gpg: aka "Unit 193 <unit193@ninthfloor.org>"
# gpg: aka "Unit 193 <unit193@ubuntu.com>"
# gpg: aka "Unit 193 <unit193@ninthfloor.com>"
Diffstat (limited to 'SQLiteStudio3/coreSQLiteStudio/services')
5 files changed, 67 insertions, 11 deletions
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/dbmanager.h b/SQLiteStudio3/coreSQLiteStudio/services/dbmanager.h index 66bbf08..52746e4 100644 --- a/SQLiteStudio3/coreSQLiteStudio/services/dbmanager.h +++ b/SQLiteStudio3/coreSQLiteStudio/services/dbmanager.h @@ -131,7 +131,7 @@ class API_EXPORT DbManager : public QObject * * This method is fast, as it uses hash table lookup. */ - virtual Db* getByName(const QString& name, Qt::CaseSensitivity cs = Qt::CaseSensitive) = 0; + virtual Db* getByName(const QString& name, Qt::CaseSensitivity cs = Qt::CaseInsensitive) = 0; /** * @brief Gives database object by its file path. @@ -162,6 +162,10 @@ class API_EXPORT DbManager : public QObject */ virtual bool isTemporary(Db* db) = 0; + virtual DbPlugin* getPluginForDbFile(const QString& filePath) = 0; + virtual QString generateUniqueDbName(const QString& filePath) = 0; + virtual QString generateUniqueDbName(DbPlugin* plugin, const QString& filePath) = 0; + /** * @brief Generates database name. * @param filePath Database file path. diff --git a/SQLiteStudio3/coreSQLiteStudio/services/impl/dbmanagerimpl.cpp b/SQLiteStudio3/coreSQLiteStudio/services/impl/dbmanagerimpl.cpp index cbdc921..74f482f 100644 --- a/SQLiteStudio3/coreSQLiteStudio/services/impl/dbmanagerimpl.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/services/impl/dbmanagerimpl.cpp @@ -99,7 +99,7 @@ bool DbManagerImpl::updateDb(Db* db, const QString &name, const QString &path, c db->setPath(normalizedPath); db->setConnectionOptions(options); - bool result = false; + bool result = true; if (permanent) { if (CFG->isDbInConfig(oldName)) @@ -284,6 +284,44 @@ QString DbManagerImpl::quickAddDb(const QString& path, const QHash<QString, QVar return newName; } +DbPlugin* DbManagerImpl::getPluginForDbFile(const QString& filePath) +{ + QFileInfo file(filePath); + if (!file.exists() || file.isDir()) + return nullptr; + + QHash<QString,QVariant> options; + Db* probeDb = nullptr; + for (DbPlugin* plugin : dbPlugins) + { + probeDb = plugin->getInstance("", filePath, options); + if (probeDb) + { + delete probeDb; + probeDb = nullptr; + return plugin; + } + } + + return nullptr; +} + +QString DbManagerImpl::generateUniqueDbName(const QString& filePath) +{ + DbPlugin* plugin = getPluginForDbFile(filePath); + if (!plugin) + return QString(); + + return generateUniqueDbName(plugin, filePath); +} + +QString DbManagerImpl::generateUniqueDbName(DbPlugin* plugin, const QString& filePath) +{ + QString name = plugin->generateDbName(filePath); + name = generateUniqueName(name, getDbNames(), Qt::CaseInsensitive); + return name; +} + void DbManagerImpl::setInMemDbCreatorPlugin(DbPlugin* plugin) { inMemDbCreatorPlugin = plugin; @@ -543,6 +581,7 @@ void DbManagerImpl::aboutToUnload(Plugin* plugin, PluginType* type) InvalidDb* invalidDb = nullptr; DbPlugin* dbPlugin = dynamic_cast<DbPlugin*>(plugin); + dbPlugins.removeOne(dbPlugin); QList<Db*> toRemove; for (Db* db : dbList) { @@ -577,5 +616,6 @@ void DbManagerImpl::loaded(Plugin* plugin, PluginType* type) return; DbPlugin* dbPlugin = dynamic_cast<DbPlugin*>(plugin); + dbPlugins << dbPlugin; rescanInvalidDatabasesForPlugin(dbPlugin); } diff --git a/SQLiteStudio3/coreSQLiteStudio/services/impl/dbmanagerimpl.h b/SQLiteStudio3/coreSQLiteStudio/services/impl/dbmanagerimpl.h index 67a1335..2e3630a 100644 --- a/SQLiteStudio3/coreSQLiteStudio/services/impl/dbmanagerimpl.h +++ b/SQLiteStudio3/coreSQLiteStudio/services/impl/dbmanagerimpl.h @@ -40,11 +40,14 @@ class API_EXPORT DbManagerImpl : public DbManager QList<Db*> getValidDbList(); QList<Db*> getConnectedDbList(); QStringList getDbNames(); - Db* getByName(const QString& name, Qt::CaseSensitivity cs = Qt::CaseSensitive); + Db* getByName(const QString& name, Qt::CaseSensitivity cs = Qt::CaseInsensitive); Db* getByPath(const QString& path); Db* createInMemDb(); bool isTemporary(Db* db); QString quickAddDb(const QString &path, const QHash<QString, QVariant> &options); + DbPlugin* getPluginForDbFile(const QString& filePath); + QString generateUniqueDbName(const QString& filePath); + QString generateUniqueDbName(DbPlugin* plugin, const QString& filePath); /** * @brief Defines database plugin used for creating in-memory databases. @@ -138,6 +141,8 @@ class API_EXPORT DbManagerImpl : public DbManager */ DbPlugin* inMemDbCreatorPlugin = nullptr; + QList<DbPlugin*> dbPlugins; + private slots: /** * @brief Slot called when connected to db. diff --git a/SQLiteStudio3/coreSQLiteStudio/services/impl/pluginmanagerimpl.cpp b/SQLiteStudio3/coreSQLiteStudio/services/impl/pluginmanagerimpl.cpp index 017d260..9fe21de 100644 --- a/SQLiteStudio3/coreSQLiteStudio/services/impl/pluginmanagerimpl.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/services/impl/pluginmanagerimpl.cpp @@ -341,7 +341,7 @@ bool PluginManagerImpl::shouldAutoLoad(const QString& pluginName) { QStringList loadedPlugins = CFG_CORE.General.LoadedPlugins.get().split(",", QString::SkipEmptyParts); QStringList pair; - foreach (const QString& loadedPlugin, loadedPlugins) + for (const QString& loadedPlugin : loadedPlugins) { pair = loadedPlugin.split("="); if (pair.size() != 2) @@ -354,7 +354,7 @@ bool PluginManagerImpl::shouldAutoLoad(const QString& pluginName) return (bool)pair[1].toInt(); } - return true; + return pluginContainer[pluginName]->loadByDefault; } QStringList PluginManagerImpl::getAllPluginNames(PluginType* type) const @@ -626,6 +626,7 @@ bool PluginManagerImpl::readMetaData(PluginManagerImpl::PluginContainer* contain container->author = metaData["author"].toString(); container->description = metaData["description"].toString(); container->title = metaData["title"].toString(); + container->loadByDefault = metaData.contains("loadByDefault") ? metaData["loadByDefault"].toBool() : true; } else if (container->plugin) { @@ -635,6 +636,7 @@ bool PluginManagerImpl::readMetaData(PluginManagerImpl::PluginContainer* contain container->author = container->plugin->getAuthor(); container->description = container->plugin->getDescription(); container->title = container->plugin->getTitle(); + container->loadByDefault = true; } else { @@ -706,12 +708,9 @@ QHash<QString, QVariant> PluginManagerImpl::readMetaData(const QJsonObject& meta results["name"] = metaData.value("className").toString(); QJsonObject root = metaData.value("MetaData").toObject(); - results["type"] = root.value("type").toString(); - results["title"] = root.value("title").toString(); - results["description"] = root.value("description").toString(); - results["author"] = root.value("author").toString(); - results["version"] = root.value("version").toInt(); - results["ui"] = root.value("ui").toString(); + for (const QString& k : root.keys()) { + results[k] = root.value(k).toVariant(); + } return results; } diff --git a/SQLiteStudio3/coreSQLiteStudio/services/impl/pluginmanagerimpl.h b/SQLiteStudio3/coreSQLiteStudio/services/impl/pluginmanagerimpl.h index 6968cab..c9d56aa 100644 --- a/SQLiteStudio3/coreSQLiteStudio/services/impl/pluginmanagerimpl.h +++ b/SQLiteStudio3/coreSQLiteStudio/services/impl/pluginmanagerimpl.h @@ -140,6 +140,14 @@ class API_EXPORT PluginManagerImpl : public PluginManager bool builtIn = false; /** + * @brief Flag indicating that plugin should be loaded, unless user unloaded it manually. + * + * If this flag is set to false, then the plugin will not be loaded, even it was not manually unloaded. + * This flag can be defined in plugin's json file using property named 'loadByDefault'. + */ + bool loadByDefault = true; + + /** * @brief Names of plugnis that this plugin depends on. */ QList<PluginDependency> dependencies; |
