reapack

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

commit 060addc9b4f6d0279583bc5fccc9b36106a97e19
parent 4b631eec6da2938fab0aa8548bcc68db9a5c563b
Author: cfillion <cfillion@users.noreply.github.com>
Date:   Fri,  8 Apr 2016 15:39:39 -0400

reload the browser when importing/toggling/removing repositories

Diffstat:
Msrc/browser.cpp | 38+++++++++++++++++++++++++++++++++-----
Msrc/browser.hpp | 6++++--
Msrc/reapack.cpp | 48++++++++++++------------------------------------
Msrc/reapack.hpp | 2--
4 files changed, 49 insertions(+), 45 deletions(-)

diff --git a/src/browser.cpp b/src/browser.cpp @@ -17,6 +17,7 @@ #include "browser.hpp" +#include "config.hpp" #include "encoding.hpp" #include "errors.hpp" #include "index.hpp" @@ -43,9 +44,9 @@ enum Action { ACTION_RESET_ALL, }; -Browser::Browser(const vector<IndexPtr> &indexes, ReaPack *reapack) - : Dialog(IDD_BROWSER_DIALOG), m_indexes(indexes), m_reapack(reapack), - m_checkFilter(false), m_currentIndex(-1) +Browser::Browser(ReaPack *reapack) + : Dialog(IDD_BROWSER_DIALOG), m_reapack(reapack), + m_loaded(false), m_checkFilter(false), m_currentIndex(-1) { } @@ -87,7 +88,7 @@ void Browser::onInit() m_list->onActivate([=] { history(m_list->itemUnderMouse()); }); m_list->sortByColumn(1); - reload(); + refresh(); #ifdef LVSCW_AUTOSIZE_USEHEADER m_list->resizeColumn(m_list->columnCount() - 1, LVSCW_AUTOSIZE_USEHEADER); @@ -304,7 +305,34 @@ void Browser::checkFilter() } } -void Browser::reload() +void Browser::refresh() +{ + const vector<Remote> &remotes = m_reapack->config()->remotes()->getEnabled(); + + if(!m_loaded && remotes.empty()) { + m_loaded = true; + show(); + + MessageBox(handle(), AUTO_STR("No repository enabled!\r\n") + AUTO_STR("Enable or import repositories from ") + AUTO_STR("Extensions > ReaPack > Manage repositories."), + AUTO_STR("Browse packages"), MB_OK); + + return; + } + + m_reapack->fetchIndexes(remotes, [=] (const vector<IndexPtr> &indexes) { + m_indexes = indexes; + populate(); + + if(!m_loaded) { + m_loaded = true; + show(); + } + }); +} + +void Browser::populate() { try { Registry reg(Path::prefixRoot(Path::REGISTRY)); diff --git a/src/browser.hpp b/src/browser.hpp @@ -38,8 +38,8 @@ typedef std::shared_ptr<const Index> IndexPtr; class Browser : public Dialog { public: - Browser(const std::vector<IndexPtr> &, ReaPack *); - void reload(); + Browser(ReaPack *); + void refresh(); protected: void onInit() override; @@ -86,6 +86,7 @@ private: static Entry makeEntry(const Package *, const Registry::Entry &); + void populate(); bool match(const Entry &) const; void checkFilter(); void fillList(); @@ -111,6 +112,7 @@ private: std::vector<IndexPtr> m_indexes; ReaPack *m_reapack; + bool m_loaded; bool m_checkFilter; int m_currentIndex; diff --git a/src/reapack.cpp b/src/reapack.cpp @@ -64,8 +64,7 @@ static void CleanupTempFiles() ReaPack::ReaPack(REAPER_PLUGIN_HINSTANCE instance) : syncAction(), browseAction(),importAction(), configAction(), m_transaction(nullptr), m_progress(nullptr), m_browser(nullptr), - m_import(nullptr), m_manager(nullptr), m_loadingBrowser(false), - m_instance(instance) + m_import(nullptr), m_manager(nullptr), m_instance(instance) { m_mainWindow = GetMainHwnd(); m_useRootPath = new UseRootPath(GetResourcePath()); @@ -277,6 +276,9 @@ void ReaPack::import(const Remote &remote) if(m_manager) m_manager->refresh(); + if(m_browser) + m_browser->refresh(); + const string msg = remote.name() + " has been successfully imported into your repository list."; ShowMessageBox(msg.c_str(), Import::TITLE, MB_OK); @@ -344,38 +346,11 @@ void ReaPack::browsePackages() ); return; } - else if(m_loadingBrowser) - return; - - const vector<Remote> &remotes = m_config->remotes()->getEnabled(); - - if(remotes.empty()) { - ShowMessageBox("No repository enabled!\r\n" - "Enable or import repositories from Extensions > ReaPack > Manage repositories.", - "Browse packages", MB_OK); - - return; - } - m_loadingBrowser = true; - - fetchIndexes(remotes, [=] (const vector<IndexPtr> &indexes) { - m_loadingBrowser = false; - - if(indexes.empty()) { - ShowMessageBox( - "The package browser cannot be opened because no repositories were successfully loaded.", - "Browse packages", MB_OK); - - return; - } - - m_browser = Dialog::Create<Browser>(m_instance, m_mainWindow, indexes, this); - m_browser->show(); - m_browser->setCloseHandler([=] (INT_PTR) { - Dialog::Destroy(m_browser); - m_browser = nullptr; - }); + m_browser = Dialog::Create<Browser>(m_instance, m_mainWindow, this); + m_browser->setCloseHandler([=] (INT_PTR) { + Dialog::Destroy(m_browser); + m_browser = nullptr; }); } @@ -539,14 +514,15 @@ Transaction *ReaPack::createTransaction() ShowMessageBox("Nothing to do!", "ReaPack", 0); else Dialog::Show<Report>(m_instance, m_mainWindow, receipt); - - if(m_browser && m_transaction->taskCount() > 0) - m_browser->reload(); }); m_transaction->setCleanupHandler([=] { delete m_transaction; m_transaction = nullptr; + + // refresh only once all onFinish slots were ran + if(m_browser) + m_browser->refresh(); }); return m_transaction; diff --git a/src/reapack.hpp b/src/reapack.hpp @@ -100,8 +100,6 @@ private: Import *m_import; Manager *m_manager; - bool m_loadingBrowser; - REAPER_PLUGIN_HINSTANCE m_instance; HWND m_mainWindow; UseRootPath *m_useRootPath;