reapack

Package manager for REAPER
Log | Files | Refs | Submodules | README | LICENSE

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:
Msrc/main.cpp | 8+-------
Msrc/reapack.cpp | 14++++++++------
Msrc/reapack.hpp | 2--
Msrc/registry.cpp | 4++--
Msrc/registry.hpp | 3++-
Msrc/sqlite.cpp | 7++++++-
Msrc/sqlite.hpp | 2+-
Msrc/transaction.cpp | 9++++++---
Msrc/transaction.hpp | 2+-
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); }