mirror of https://github.com/KLayout/klayout.git
Implemented package information cache in package manager
This commit is contained in:
parent
82a0ef7791
commit
579bee3b75
|
|
@ -857,6 +857,8 @@ SaltManagerDialog::salt_mine_about_to_change ()
|
|||
void
|
||||
SaltManagerDialog::refresh ()
|
||||
{
|
||||
m_salt_grain_cache.clear ();
|
||||
|
||||
if (! m_salt_mine_url.empty ()) {
|
||||
|
||||
tl::log << tl::to_string (tr ("Downloading package repository from %1").arg (tl::to_qstring (m_salt_mine_url)));
|
||||
|
|
@ -1227,10 +1229,12 @@ SaltManagerDialog::get_remote_grain_info (lay::SaltGrain *g, SaltGrainDetailsTex
|
|||
tl_assert (m_downloaded_grain.get () == 0);
|
||||
|
||||
m_downloaded_grain.reset (0);
|
||||
|
||||
if (m_downloaded_grain_reader.get ()) {
|
||||
// NOTE: don't delete the reader in the slot it triggered
|
||||
m_downloaded_grain_reader->close ();
|
||||
}
|
||||
m_downloaded_grain_reader.reset (0);
|
||||
|
||||
mp_downloaded_target = details;
|
||||
m_salt_mine_grain.reset (new lay::SaltGrain (*g));
|
||||
|
||||
|
|
@ -1262,21 +1266,31 @@ SaltManagerDialog::get_remote_grain_info (lay::SaltGrain *g, SaltGrainDetailsTex
|
|||
|
||||
std::string url = g->url ();
|
||||
|
||||
m_downloaded_grain.reset (new SaltGrain ());
|
||||
m_downloaded_grain->set_url (url);
|
||||
auto sg = m_salt_grain_cache.find (url);
|
||||
if (sg == m_salt_grain_cache.end ()) {
|
||||
|
||||
// NOTE: stream_from_url may modify the URL, hence we set it again
|
||||
ProcessEventCallback callback;
|
||||
m_downloaded_grain_reader.reset (SaltGrain::stream_from_url (url, 60.0, &callback));
|
||||
m_downloaded_grain->set_url (url);
|
||||
m_downloaded_grain.reset (new SaltGrain ());
|
||||
m_downloaded_grain->set_url (url);
|
||||
|
||||
// NOTE: stream_from_url may modify the URL, hence we set it again
|
||||
ProcessEventCallback callback;
|
||||
m_downloaded_grain_reader.reset (SaltGrain::stream_from_url (url, 60.0, &callback));
|
||||
m_downloaded_grain->set_url (url);
|
||||
|
||||
tl::InputHttpStream *http = dynamic_cast<tl::InputHttpStream *> (m_downloaded_grain_reader->base ());
|
||||
if (http) {
|
||||
// async reading on HTTP
|
||||
http->ready ().add (this, &SaltManagerDialog::data_ready);
|
||||
http->send ();
|
||||
} else {
|
||||
data_ready ();
|
||||
}
|
||||
|
||||
tl::InputHttpStream *http = dynamic_cast<tl::InputHttpStream *> (m_downloaded_grain_reader->base ());
|
||||
if (http) {
|
||||
// async reading on HTTP
|
||||
http->ready ().add (this, &SaltManagerDialog::data_ready);
|
||||
http->send ();
|
||||
} else {
|
||||
|
||||
m_downloaded_grain.reset (new SaltGrain (sg->second));
|
||||
data_ready ();
|
||||
|
||||
}
|
||||
|
||||
} catch (tl::Exception &ex) {
|
||||
|
|
@ -1295,14 +1309,21 @@ SaltManagerDialog::get_remote_grain_info (lay::SaltGrain *g, SaltGrainDetailsTex
|
|||
void
|
||||
SaltManagerDialog::data_ready ()
|
||||
{
|
||||
if (! m_salt_mine_grain.get () || ! m_downloaded_grain.get () || ! m_downloaded_grain_reader.get () || ! mp_downloaded_target) {
|
||||
if (! m_salt_mine_grain.get () || ! m_downloaded_grain.get () || ! mp_downloaded_target) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Load the grain file (save URL as it is overwritten by the grain.xml content)
|
||||
std::string url = m_downloaded_grain->url ();
|
||||
m_downloaded_grain->load (*m_downloaded_grain_reader);
|
||||
m_downloaded_grain->set_url (url);
|
||||
if (m_downloaded_grain_reader.get ()) {
|
||||
m_downloaded_grain->load (*m_downloaded_grain_reader);
|
||||
m_downloaded_grain->set_url (url);
|
||||
}
|
||||
|
||||
// commit to cache
|
||||
if (m_salt_grain_cache.find (url) == m_salt_grain_cache.end ()) {
|
||||
m_salt_grain_cache [url] = *m_downloaded_grain;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
|
|
|
|||
|
|
@ -190,6 +190,7 @@ private:
|
|||
std::unique_ptr<tl::InputStream> m_salt_mine_reader;
|
||||
tl::DeferredMethod<SaltManagerDialog> dm_mine_update_selected_changed;
|
||||
tl::DeferredMethod<SaltManagerDialog> dm_mine_new_selected_changed;
|
||||
std::map<std::string, lay::SaltGrain> m_salt_grain_cache;
|
||||
|
||||
SaltGrain *current_grain ();
|
||||
std::vector<lay::SaltGrain *> current_grains ();
|
||||
|
|
|
|||
Loading…
Reference in New Issue