aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/coreSQLiteStudio/services
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@ubuntu.com>2016-06-13 18:42:57 -0400
committerLibravatarUnit 193 <unit193@ubuntu.com>2016-06-13 18:42:57 -0400
commit65d5f68cc6dc81799c5a5d90400a2c1f0dd02547 (patch)
tree6f245ba901b87ef42fed69965aea22f5eea6b590 /SQLiteStudio3/coreSQLiteStudio/services
parentaeb6bad01630d325a4e768e798a7a6d44e18fdaf (diff)
parent5d9314f134ddd3dc4c853e398ac90ba247fb2e4f (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')
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/dbmanager.h6
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/impl/dbmanagerimpl.cpp42
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/impl/dbmanagerimpl.h7
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/impl/pluginmanagerimpl.cpp15
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/impl/pluginmanagerimpl.h8
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;