First git-enabled package manager dialog

This commit is contained in:
Matthias Koefferlein 2023-10-31 22:05:29 +01:00
parent 9b969c25be
commit 82a0ef7791
3 changed files with 74 additions and 9 deletions

View File

@ -299,7 +299,9 @@ SaltManagerDialog::SaltManagerDialog (QWidget *parent, lay::Salt *salt, const st
: QDialog (parent),
m_salt_mine_url (salt_mine_url),
dm_update_models (this, &SaltManagerDialog::update_models), m_current_tab (-1),
mp_downloaded_target (0)
mp_downloaded_target (0),
dm_mine_update_selected_changed (this, &SaltManagerDialog::do_mine_update_selected_changed),
dm_mine_new_selected_changed (this, &SaltManagerDialog::do_mine_new_selected_changed)
{
Ui::SaltManagerDialog::setupUi (this);
mp_properties_dialog = new lay::SaltGrainPropertiesDialog (this);
@ -1104,8 +1106,12 @@ SaltManagerDialog::current_grains ()
void
SaltManagerDialog::mine_update_selected_changed ()
{
BEGIN_PROTECTED
dm_mine_update_selected_changed ();
}
void
SaltManagerDialog::do_mine_update_selected_changed ()
{
SaltModel *model = dynamic_cast <SaltModel *> (salt_mine_view_update->model ());
tl_assert (model != 0);
@ -1118,15 +1124,17 @@ BEGIN_PROTECTED
details_update_frame->setEnabled (g != 0);
get_remote_grain_info (g, details_update_text);
END_PROTECTED
}
void
SaltManagerDialog::mine_new_selected_changed ()
{
BEGIN_PROTECTED
dm_mine_new_selected_changed ();
}
void
SaltManagerDialog::do_mine_new_selected_changed ()
{
SaltModel *model = dynamic_cast <SaltModel *> (salt_mine_view_new->model ());
tl_assert (model != 0);
@ -1139,8 +1147,6 @@ BEGIN_PROTECTED
details_new_frame->setEnabled (g != 0);
get_remote_grain_info (g, details_new_text);
END_PROTECTED
}
namespace
@ -1159,6 +1165,55 @@ public:
}
};
class FetchGrainInfoProgressAdaptor
: public tl::ProgressAdaptor
{
public:
FetchGrainInfoProgressAdaptor (SaltGrainDetailsTextWidget *details, const std::string &name, const QString &html)
: mp_details (details), m_name (name), m_html (html)
{
mp_details->setHtml (m_html.arg (QString ()));
m_counter = 0;
}
virtual void yield (tl::Progress *progress)
{
QCoreApplication::processEvents (QEventLoop::ExcludeUserInputEvents | QEventLoop::WaitForMoreEvents, 100);
++m_counter;
std::string all_dots = "..........";
m_counter = m_counter % all_dots.size ();
std::string dots = std::string (all_dots, 0, m_counter);
mp_details->setHtml (m_html.arg (tl::to_qstring (tl::sprintf (tl::to_string (tr ("Downloading %.0f%% %s")), progress->value (), dots))));
}
virtual void trigger (tl::Progress * /*progress*/)
{
// .. nothing yet ..
}
void error ()
{
mp_details->setHtml (m_html.arg (QString ()));
}
void success ()
{
mp_details->setHtml (m_html.arg (QString ()));
}
bool is_aborted () const
{
return false;
}
private:
lay::SaltGrainDetailsTextWidget *mp_details;
std::string m_name;
QString m_html;
unsigned int m_counter;
};
}
void
@ -1169,6 +1224,8 @@ SaltManagerDialog::get_remote_grain_info (lay::SaltGrain *g, SaltGrainDetailsTex
return;
}
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
@ -1192,13 +1249,16 @@ SaltManagerDialog::get_remote_grain_info (lay::SaltGrain *g, SaltGrainDetailsTex
"<font color=\"#c0c0c0\">"
"<h2>Fetching Package Definition ...</h2>"
"<p><b>URL</b>: %1</p>"
"<p>%2</p>"
"</font>"
"</body>"
"</html>"
)
.arg (tl::to_qstring (g->url ()));
details->setHtml (html);
details->setHtml (html.arg (QString ()));
FetchGrainInfoProgressAdaptor pa (details, g->name (), html);
std::string url = g->url ();
@ -1263,6 +1323,7 @@ SaltManagerDialog::data_ready ()
m_salt_mine_grain.reset (0);
} catch (tl::Exception &ex) {
m_downloaded_grain.reset (0);
show_error (ex);
}
}

View File

@ -188,6 +188,8 @@ private:
std::unique_ptr<lay::SaltGrain> m_downloaded_grain, m_salt_mine_grain;
SaltGrainDetailsTextWidget *mp_downloaded_target;
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;
SaltGrain *current_grain ();
std::vector<lay::SaltGrain *> current_grains ();
@ -199,6 +201,8 @@ private:
void show_error (tl::Exception &ex);
void salt_mine_download_started ();
void salt_mine_download_finished ();
void do_mine_update_selected_changed ();
void do_mine_new_selected_changed ();
};
}

View File

@ -270,7 +270,7 @@ GitObject::read (const std::string &org_url, const std::string &org_filter, cons
}
}
// @@@ use callback, timeout?
// TODO: use callback, timeout?
tl::RelativeProgress progress (tl::to_string (tr ("Download progress")), 10000, 1 /*yield always*/);
// build checkout options