reapack

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

commit 407ca104f22eab873ccbae44225c1447564b93e8
parent f85f795ea99d883122578b8125d4c4dde9156d43
Author: cfillion <cfillion@users.noreply.github.com>
Date:   Mon, 27 Mar 2017 20:45:44 -0400

browser: do not load twice on opening (regression from 9de3174e1660c8774902d31bad7109b001066434)

Diffstat:
Msrc/browser.cpp | 22+++++++++++++++-------
Msrc/browser.hpp | 8+++++++-
Msrc/reapack.cpp | 14+++-----------
Msrc/reapack.hpp | 1-
4 files changed, 25 insertions(+), 20 deletions(-)

diff --git a/src/browser.cpp b/src/browser.cpp @@ -53,7 +53,7 @@ enum Timers { TIMER_FILTER = 1, TIMER_ABOUT }; Browser::Browser(ReaPack *reapack) : Dialog(IDD_BROWSER_DIALOG), m_reapack(reapack), - m_loading(false), m_currentIndex(-1) + m_loading(Idle), m_currentIndex(-1) { } @@ -148,7 +148,6 @@ void Browser::onInit() m_list->restoreState(data); updateDisplayLabel(); - refresh(); } void Browser::onClose() @@ -527,8 +526,14 @@ void Browser::refresh(const bool stale) { // Do nothing when called again when (or while) the index downloading // transaction finishes. populate() handles the next step of the loading process. - if(m_loading) + switch(m_loading) { + case Done: + m_loading = Idle; + case Loading: return; + case Idle: + break; + } const vector<Remote> &remotes = m_reapack->config()->remotes.getEnabled(); @@ -547,9 +552,14 @@ void Browser::refresh(const bool stale) } if(Transaction *tx = m_reapack->setupTransaction()) { - m_loading = true; + m_loading = Loading; + tx->fetchIndexes(remotes, stale); - tx->onFinish([=] { populate(tx->getIndexes(remotes)); }); + tx->onFinish([=] { + m_loading = Done; + populate(tx->getIndexes(remotes)); + }); + tx->runTasks(); } } @@ -563,8 +573,6 @@ void Browser::setFilter(const string &newFilter) void Browser::populate(const vector<IndexPtr> &indexes) { - m_loading = false; - try { Registry reg(Path::prefixRoot(Path::REGISTRY)); diff --git a/src/browser.hpp b/src/browser.hpp @@ -101,6 +101,12 @@ private: UninstalledView, }; + enum LoadState { + Idle, + Loading, + Done, + }; + Entry makeEntry(const Package *, const Registry::Entry &, const IndexPtr &) const; void onSelection(); @@ -141,7 +147,7 @@ private: void aboutPackage(int index, bool focus = true); ReaPack *m_reapack; - bool m_loading; + LoadState m_loading; int m_currentIndex; Filter m_filter; diff --git a/src/reapack.cpp b/src/reapack.cpp @@ -76,7 +76,7 @@ std::string ReaPack::resourcePath() ReaPack::ReaPack(REAPER_PLUGIN_HINSTANCE instance) : syncAction(), browseAction(), importAction(), configAction(), m_tx(nullptr), m_progress(nullptr), m_browser(nullptr), m_manager(nullptr), - m_about(nullptr), m_inhibitBrowser(false), m_instance(instance) + m_about(nullptr), m_instance(instance) { m_mainWindow = GetMainHwnd(); m_useRootPath = new UseRootPath(resourcePath()); @@ -279,6 +279,7 @@ Browser *ReaPack::browsePackages() } m_browser = Dialog::Create<Browser>(m_instance, m_mainWindow, this); + m_browser->refresh(); m_browser->setCloseHandler([=] (INT_PTR) { Dialog::Destroy(m_browser); m_browser = nullptr; @@ -359,17 +360,8 @@ void ReaPack::refreshManager() void ReaPack::refreshBrowser() { - if(!m_browser) - return; - - if(m_inhibitBrowser) - m_inhibitBrowser = false; - else { - // set prenvively in case the transaction finishes immediately (eg. nothing to dl) - m_inhibitBrowser = true; + if(m_browser) m_browser->refresh(); - m_inhibitBrowser = m_tx != nullptr; - } } void ReaPack::registerSelf() diff --git a/src/reapack.hpp b/src/reapack.hpp @@ -90,7 +90,6 @@ private: Manager *m_manager; About *m_about; - bool m_inhibitBrowser; REAPER_PLUGIN_HINSTANCE m_instance; HWND m_mainWindow; UseRootPath *m_useRootPath;