commit f54167a2ede7b9494a4bba2a006b7f0d47009892
parent ca13175b70c2f12dbff3e31d67de187b0c70f2f1
Author: cfillion <cfillion@users.noreply.github.com>
Date: Wed, 9 Mar 2016 23:50:11 -0500
unify enable/disable behaviors and refactoring
Diffstat:
5 files changed, 37 insertions(+), 45 deletions(-)
diff --git a/src/manager.cpp b/src/manager.cpp
@@ -102,9 +102,9 @@ void Manager::onContextMenu(HWND target, const int x, const int y)
Menu menu;
const UINT enableAction =
- menu.addAction(AUTO_STR("&Enable and synchronize"), ACTION_ENABLE);
+ menu.addAction(AUTO_STR("&Enable"), ACTION_ENABLE);
const UINT disableAction =
- menu.addAction(AUTO_STR("&Disable (keep files)"), ACTION_DISABLE);
+ menu.addAction(AUTO_STR("&Disable"), ACTION_DISABLE);
menu.addSeparator();
diff --git a/src/reapack.cpp b/src/reapack.cpp
@@ -151,54 +151,51 @@ void ReaPack::synchronizeAll()
t->runTasks();
}
-void ReaPack::enable(Remote remote)
+void ReaPack::setRemoteEnabled(const Remote &original, const bool enable)
{
- remote.setEnabled(true);
+ Remote remote(original);
+ remote.setEnabled(enable);
- if(!hitchhikeTransaction()) {
+ const auto apply = [=] {
m_config->remotes()->add(remote);
if(m_manager)
m_manager->refresh();
+ };
+ if(!hitchhikeTransaction()) {
+ apply();
return;
}
m_transaction->registerAll(remote);
- m_transaction->synchronize(remote, false);
m_transaction->onFinish([=] {
- if(m_transaction->isCancelled())
- return;
-
- m_config->remotes()->add(remote);
-
- if(m_manager)
- m_manager->refresh();
+ if(!m_transaction->isCancelled())
+ apply();
});
}
-void ReaPack::disable(Remote remote)
-{
- remote.setEnabled(false);
- m_config->remotes()->add(remote);
-
- if(!hitchhikeTransaction())
- return;
-
- m_transaction->unregisterAll(remote);
-}
-
void ReaPack::uninstall(const Remote &remote)
{
if(remote.isProtected())
return;
- if(!hitchhikeTransaction())
+ const auto apply = [=] {
+ m_config->remotes()->remove(remote);
+ };
+
+ if(!hitchhikeTransaction()) {
+ apply();
return;
+ }
m_transaction->uninstall(remote);
- m_config->remotes()->remove(remote);
+
+ m_transaction->onFinish([=] {
+ if(!m_transaction->isCancelled())
+ apply();
+ });
}
void ReaPack::importRemote()
@@ -248,10 +245,6 @@ void ReaPack::import(const Remote &remote)
}
else {
enable(existing);
-
- if(m_manager)
- m_manager->refresh();
-
m_config->write();
return;
@@ -297,8 +290,11 @@ void ReaPack::about(const Remote &remote, HWND parent)
loadIndex(remote, [=] (IndexPtr index) {
const auto ret = Dialog::Show<About>(m_instance, parent, index);
- if(ret == About::InstallResult)
+ if(ret == About::InstallResult) {
enable(remote);
+ if(m_transaction)
+ m_transaction->synchronize(remote);
+ }
}, parent);
}
diff --git a/src/reapack.hpp b/src/reapack.hpp
@@ -55,8 +55,9 @@ public:
bool execActions(int id, int);
void synchronizeAll();
- void enable(Remote);
- void disable(Remote);
+ void setRemoteEnabled(const Remote &, bool enable);
+ void enable(const Remote &r) { setRemoteEnabled(r, true); }
+ void disable(const Remote &r) { setRemoteEnabled(r, false); }
void uninstall(const Remote &);
void importRemote();
void import(const Remote &);
diff --git a/src/transaction.cpp b/src/transaction.cpp
@@ -207,17 +207,10 @@ void Transaction::registerAll(const Remote &remote)
const vector<Registry::Entry> &entries = m_registry->getEntries(remote.name());
for(const auto &entry : entries)
- registerInHost(true, entry);
-}
+ registerInHost(remote.isEnabled(), entry);
-void Transaction::unregisterAll(const Remote &remote)
-{
- const vector<Registry::Entry> &entries = m_registry->getEntries(remote.name());
-
- for(const auto &entry : entries)
- registerInHost(false, entry);
-
- inhibit(remote);
+ if(!remote.isEnabled())
+ inhibit(remote);
}
void Transaction::uninstall(const Remote &remote)
@@ -336,7 +329,7 @@ void Transaction::registerQueued()
const HostTicket ® = m_regQueue.front();
// don't register in host if the remote got disabled meanwhile
- if(reg.add && m_remotes.count(reg.entry.remote) == 0) {
+ if(reg.add && m_inhibited.count(reg.entry.remote) > 0) {
m_regQueue.pop();
return;
}
@@ -385,4 +378,6 @@ void Transaction::inhibit(const Remote &remote)
const auto it = m_remotes.find(remote.name());
if(it != m_remotes.end())
m_remotes.erase(it);
+
+ m_inhibited.insert(remote.name());
}
diff --git a/src/transaction.hpp b/src/transaction.hpp
@@ -60,7 +60,6 @@ public:
void install(const Version *);
void uninstall(const Remote &);
void registerAll(const Remote &);
- void unregisterAll(const Remote &);
void runTasks();
bool isCancelled() const { return m_isCancelled; }
@@ -96,6 +95,7 @@ private:
Receipt m_receipt;
std::multimap<std::string, IndexCallback> m_remotes;
+ std::unordered_set<std::string> m_inhibited;
std::unordered_set<IndexPtr> m_indexes;
std::vector<Task *> m_tasks;