commit e7eade369c716f8e51744c091ba4c1f4e8d648cb
parent d756350abdb34f307b02d1730be724a57934fc31
Author: cfillion <cfillion@users.noreply.github.com>
Date: Sat, 16 Jan 2016 23:07:04 -0500
only keep the registry open when necessary (ie. during a transaction)
Diffstat:
9 files changed, 27 insertions(+), 24 deletions(-)
diff --git a/src/main.cpp b/src/main.cpp
@@ -62,13 +62,7 @@ extern "C" REAPER_PLUGIN_DLL_EXPORT int REAPER_PLUGIN_ENTRYPOINT(
if(REAPERAPI_LoadAPI(rec->GetFunc) > 0)
return 0;
- try {
- reapack.init(instance, rec);
- }
- catch(const reapack_error &e) {
- ShowMessageBox(e.what(), "ReaPack Initialization Failure", 0);
- return 0;
- }
+ reapack.init(instance, rec);
reapack.setupAction("REAPACK_SYNC", "ReaPack: Synchronize Packages",
&reapack.syncAction, bind(&ReaPack::synchronize, reapack));
diff --git a/src/reapack.cpp b/src/reapack.cpp
@@ -17,6 +17,7 @@
#include "reapack.hpp"
+#include "errors.hpp"
#include "config.hpp"
#include "manager.hpp"
#include "progress.hpp"
@@ -42,9 +43,6 @@ void ReaPack::init(REAPER_PLUGIN_HINSTANCE instance, reaper_plugin_info_t *rec)
m_config = new Config;
m_config->read(m_resourcePath + "reapack.ini");
- const Path registryPath = m_resourcePath + "ReaPack" + "registry.db";
- m_registry = new Registry(registryPath.join());
-
m_progress = Dialog::Create<Progress>(m_instance, m_mainWindow);
m_manager = Dialog::Create<Manager>(m_instance, m_mainWindow, this);
@@ -58,8 +56,6 @@ void ReaPack::cleanup()
m_config->write();
delete m_config;
- delete m_registry;
-
Dialog::Destroy(m_progress);
Dialog::Destroy(m_manager);
@@ -196,7 +192,13 @@ Transaction *ReaPack::createTransaction()
if(m_transaction)
return nullptr;
- m_transaction = new Transaction(m_registry, m_resourcePath);
+ try {
+ m_transaction = new Transaction(m_resourcePath);
+ }
+ catch(const reapack_error &e) {
+ ShowMessageBox(e.what(), "ReaPack – Fatal Error", 0);
+ return nullptr;
+ }
m_progress->setTransaction(m_transaction);
m_progress->show();
diff --git a/src/reapack.hpp b/src/reapack.hpp
@@ -30,7 +30,6 @@ typedef std::function<void()> ActionCallback;
class Config;
class Manager;
class Progress;
-class Registry;
class Transaction;
class ReaPack {
@@ -59,7 +58,6 @@ private:
std::map<int, ActionCallback> m_actions;
Config *m_config;
- Registry *m_registry;
Transaction *m_transaction;
Progress *m_progress;
Manager *m_manager;
diff --git a/src/registry.cpp b/src/registry.cpp
@@ -25,8 +25,8 @@
using namespace std;
-Registry::Registry(const std::string &filename)
- : m_db(filename)
+Registry::Registry(const Path &path)
+ : m_db(path.join())
{
m_db.query(
"PRAGMA foreign_keys = ON;"
diff --git a/src/registry.hpp b/src/registry.hpp
@@ -21,6 +21,7 @@
#include <cstdint>
#include <string>
+#include "path.hpp"
#include "sqlite.hpp"
class Package;
@@ -29,7 +30,7 @@ class Version;
class Registry {
public:
- Registry(const std::string &filename = ":memory:");
+ Registry(const Path &path = Path());
enum Status {
UpToDate,
diff --git a/src/sqlite.cpp b/src/sqlite.cpp
@@ -26,7 +26,12 @@ using namespace SQLite;
Database::Database(const string &filename)
{
- if(sqlite3_open(filename.c_str(), &m_db)) {
+ const char *file = ":memory:";
+
+ if(!filename.empty())
+ file = filename.c_str();
+
+ if(sqlite3_open(file, &m_db)) {
const auto &error = lastError();
sqlite3_close(m_db);
diff --git a/src/sqlite.hpp b/src/sqlite.hpp
@@ -32,7 +32,7 @@ namespace SQLite {
class Database {
public:
- Database(const std::string &filename = ":memory:");
+ Database(const std::string &filename = std::string());
~Database();
Statement *prepare(const char *sql);
diff --git a/src/transaction.cpp b/src/transaction.cpp
@@ -29,12 +29,13 @@
using namespace std;
-Transaction::Transaction(Registry *reg, const Path &root)
- : m_registry(reg), m_root(root), m_step(Unknown),
- m_isCancelled(false), m_hasConflicts(false)
+Transaction::Transaction(const Path &root)
+ : m_root(root), m_step(Unknown), m_isCancelled(false), m_hasConflicts(false)
{
m_dbPath = m_root + "ReaPack";
+ m_registry = new Registry(m_dbPath + "registry.db");
+
m_queue.onDone([=](void *) {
switch(m_step) {
case Synchronize:
@@ -56,6 +57,8 @@ Transaction::~Transaction()
for(RemoteIndex *ri : m_remoteIndexes)
delete ri;
+
+ delete m_registry;
}
void Transaction::synchronize(const Remote &remote)
diff --git a/src/transaction.hpp b/src/transaction.hpp
@@ -44,7 +44,7 @@ public:
typedef std::vector<const Error> ErrorList;
- Transaction(Registry *reg, const Path &root);
+ Transaction(const Path &root);
~Transaction();
void onFinish(const Callback &callback) { m_onFinish.connect(callback); }