public inbox for cygwin-apps-cvs@sourceware.org help / color / mirror / Atom feed
From: Jon TURNEY <jturney@sourceware.org> To: cygwin-apps-cvs@sourceware.org Subject: [setup - the official Cygwin setup program] branch master, updated. release_2.918-19-gdd645a18 Date: Fri, 24 Jun 2022 11:27:34 +0000 (GMT) [thread overview] Message-ID: <20220624112734.DB3E3385AE6D@sourceware.org> (raw) https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/setup.git;h=dd645a18ed1cca21a6554b3fb955a9b21040d6ea commit dd645a18ed1cca21a6554b3fb955a9b21040d6ea Author: Jon Turney <jon.turney@dronecode.org.uk> Date: Fri Jun 17 15:51:15 2022 +0100 De-clutter the mirror selection listbox Mirrors can now appear up to three times in this list (with ftp://, http:// and https:// protocols). We can't just stop announcing ftp:// and http:// sites in the mirror list, as that will lead to setup warning that those mirrors have been dropped and may be out of date. So instead: Process site list for an optional 4th semi-colon delimited string, to be used for flags. Recognize and store 'noshow' flag. Hide mirror URLs with this noshow flag from the mirror selection listbox, unless they have been already selected in a previous run. We will use this to hide ftp://, and http:// (where https: also exists) URLs. This assumes that: (i) all future mirrors will provide http:// service and (ii) nobody has a good reason for using ftp:// instead of http:// anymore. But those seem reasonable assumptions! Also: drop explicit copy constructor and assignment operator for site_list_type, which just do what the default would. Diff: --- site.cc | 125 +++++++++++++++++++++++++++++----------------------------------- site.h | 6 ++-- 2 files changed, 59 insertions(+), 72 deletions(-) diff --git a/site.cc b/site.cc index 33c06f01..91bf4723 100644 --- a/site.cc +++ b/site.cc @@ -141,13 +141,15 @@ site_list_type::site_list_type (const std::string &_url, const std::string &_servername, const std::string &_area, const std::string &_location, - bool _from_mirrors_lst) + bool _from_mirrors_lst, + bool _noshow = false) { url = _url; servername = _servername; area = _area; location = _location; from_mirrors_lst = _from_mirrors_lst; + noshow = _noshow; /* Canonicalize URL to ensure it ends with a '/' */ if (url.at(url.length()-1) != '/') @@ -179,30 +181,6 @@ site_list_type::site_list_type (const std::string &_url, key += url; } -site_list_type::site_list_type (site_list_type const &rhs) -{ - key = rhs.key; - url = rhs.url; - servername = rhs.servername; - area = rhs.area; - location = rhs.location; - from_mirrors_lst = rhs.from_mirrors_lst; - displayed_url = rhs.displayed_url; -} - -site_list_type & -site_list_type::operator= (site_list_type const &rhs) -{ - key = rhs.key; - url = rhs.url; - servername = rhs.servername; - area = rhs.area; - location = rhs.location; - from_mirrors_lst = rhs.from_mirrors_lst; - displayed_url = rhs.displayed_url; - return *this; -} - bool site_list_type::operator == (site_list_type const &rhs) const { @@ -285,35 +263,34 @@ load_site_list (SiteList& theSites, char *theString) strncmp(bol, "https://", 8) == 0 || strncmp(bol, "ftp://", 6) == 0 || strncmp(bol, "ftps://", 7) == 0) - { - char *semi = strchr (bol, ';'); - char *semi2 = NULL; - char *semi3 = NULL; - if (semi) - { - *semi = 0; - semi++; - semi2 = strchr (semi, ';'); - if (semi2) - { - *semi2 = 0; - semi2++; - semi3 = strchr (semi2, ';'); - if (semi3) - { - *semi3 = 0; - semi3++; - } - } - } + { + int i; + char *semi[4]; - /* Ignore malformed lines */ - if (!semi || !semi2 || !semi3) - continue; + /* split into up to 4 semicolon-delimited parts */ + for (i = 0; i < 4; i++) + semi[i] = 0; - site_list_type newsite (bol, semi, semi2, semi3, true); - site_list_insert (theSites, newsite); - } + char *p = bol; + for (i = 0; i < 4; i++) + { + semi[i] = strchr (p, ';'); + if (!semi[i]) + break; + + *semi[i] = 0; + p = ++semi[i]; + } + + /* Ignore malformed lines */ + if (!semi[0] || !semi[1] || !semi[2]) + continue; + + bool noshow = semi[3] && (strncmp(semi[3], "noshow", 6) == 0); + + site_list_type newsite (bol, semi[0], semi[1], semi[2], true, noshow); + site_list_insert (theSites, newsite); + } else { Log (LOG_BABBLE) << "Discarding line '" << bol << "' due to unknown protocol" << endLog; @@ -668,7 +645,7 @@ SitePage::CheckControlsAndDisableAccordingly () const void SitePage::PopulateListBox () { - int j; + std::vector <int> sel_indicies; HWND listbox = GetDlgItem (IDC_URL_LIST); // Populate the list box with the URLs. @@ -676,26 +653,36 @@ SitePage::PopulateListBox () for (SiteList::const_iterator i = all_site_list.begin (); i != all_site_list.end (); ++i) { - j = SendMessage (listbox, LB_ADDSTRING, 0, - (LPARAM) i->displayed_url.c_str()); - SendMessage (listbox, LB_SETITEMDATA, j, j); + // If selected, always show + SiteList::iterator f = find (site_list.begin(), site_list.end(), *i); + if (f == site_list.end()) + { + // Otherwise, hide redundant legacy URLs: + if (i->noshow) + continue; + } + + int j = SendMessage (listbox, LB_ADDSTRING, 0, + (LPARAM) i->displayed_url.c_str()); + // Set the ListBox item data to the index into all_site_list + SendMessage (listbox, LB_SETITEMDATA, j, (i - all_site_list.begin())); + + // For every selected item, remember the index + if (f != site_list.end()) + { + sel_indicies.push_back(j); + } } // Select the selected ones. - for (SiteList::const_iterator n = site_list.begin (); - n != site_list.end (); ++n) + for (std::vector <int>::const_iterator n = sel_indicies.begin (); + n != sel_indicies.end (); ++n) { - SiteList::iterator i = find (all_site_list.begin(), - all_site_list.end(), *n); - if (i != all_site_list.end()) - { - int index = i - all_site_list.begin(); - - // Highlight the selected item - SendMessage (listbox, LB_SELITEMRANGE, TRUE, (index << 16) | index); - // Make sure it's fully visible - SendMessage (listbox, LB_SETCARETINDEX, index, FALSE); - } + int index = *n; + // Highlight the selected item + SendMessage (listbox, LB_SELITEMRANGE, TRUE, (index << 16) | index); + // Make sure it's fully visible + SendMessage (listbox, LB_SETCARETINDEX, index, FALSE); } } diff --git a/site.h b/site.h index d16db8e6..69265f23 100644 --- a/site.h +++ b/site.h @@ -48,11 +48,9 @@ class site_list_type { public: site_list_type () : url (), displayed_url (), key () {}; - site_list_type (const site_list_type &); site_list_type (const std::string& , const std::string& , - const std::string& , const std::string&, bool); + const std::string& , const std::string&, bool, bool); ~site_list_type () {}; - site_list_type &operator= (const site_list_type &); std::string url; // provided by mirrors.lst but not used std::string servername; @@ -60,6 +58,8 @@ public: std::string location; // did this site come from mirrors.lst? bool from_mirrors_lst; + // marked as "noshow" + bool noshow; std::string displayed_url; // sort key std::string key;
reply other threads:[~2022-06-24 11:27 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20220624112734.DB3E3385AE6D@sourceware.org \ --to=jturney@sourceware.org \ --cc=cygwin-apps-cvs@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).