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:
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;