mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-07-18 00:12:09 +00:00
Make the Latest and installed version labels dynamic
This commit is contained in:
@@ -219,9 +219,14 @@ void NetworkPluginDownloadDialog::setup_version_selector()
|
||||
label = wxString::FromUTF8("\xE2\x94\x94 ") + wxString::FromUTF8(ver.display_name);
|
||||
} else {
|
||||
label = wxString::FromUTF8(ver.display_name);
|
||||
if (ver.is_latest) {
|
||||
label += wxString(" ") + _L("(Latest)");
|
||||
}
|
||||
}
|
||||
// Same labeling as the Preferences selector: "(Latest)" = highest listed
|
||||
// version, "(installed)" = library already on disk; both can apply.
|
||||
if (ver.is_latest) {
|
||||
label += wxString(" ") + _L("(Latest)");
|
||||
}
|
||||
if (ver.is_installed) {
|
||||
label += wxString(" ") + _L("(installed)");
|
||||
}
|
||||
m_version_combo->Append(label);
|
||||
}
|
||||
|
||||
@@ -1270,10 +1270,12 @@ wxBoxSizer *PreferencesDialog::create_item_network_plugin_version(wxString title
|
||||
label = wxString::FromUTF8(ver.display_name);
|
||||
}
|
||||
|
||||
// "(Latest)" marks the highest listed version; "(installed)" marks versions
|
||||
// whose library is already on disk. One entry can carry both.
|
||||
if (ver.is_latest) {
|
||||
label += " " + _L("(Latest)");
|
||||
} else if (ver.is_discovered && ver.suffix.empty()) {
|
||||
// A same-series build found on disk (usually installed by the OTA update).
|
||||
}
|
||||
if (ver.is_installed) {
|
||||
label += " " + _L("(installed)");
|
||||
}
|
||||
m_network_version_combo->Append(label);
|
||||
|
||||
@@ -885,6 +885,24 @@ std::vector<NetworkLibraryVersionInfo> get_all_available_versions()
|
||||
NetworkLibraryVersionInfo::from_discovered(full, full, ""));
|
||||
}
|
||||
|
||||
// Final pass: record what is actually present on disk, and put the "(Latest)"
|
||||
// label on the truly highest full version in the list - an OTA-installed build
|
||||
// can be newer than the newest whitelisted entry. get_latest_network_version()
|
||||
// intentionally keeps returning the static whitelist default, which drives the
|
||||
// download and update-check decisions.
|
||||
size_t highest = result.size();
|
||||
for (size_t i = 0; i < result.size(); ++i) {
|
||||
auto& info = result[i];
|
||||
info.is_installed = info.is_discovered ||
|
||||
BBLNetworkPlugin::versioned_library_exists(info.version);
|
||||
info.is_latest = false;
|
||||
if (info.suffix.empty() &&
|
||||
(highest == result.size() || info.version > result[highest].version))
|
||||
highest = i;
|
||||
}
|
||||
if (highest < result.size())
|
||||
result[highest].is_latest = true;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -386,6 +386,8 @@ struct NetworkLibraryVersionInfo {
|
||||
bool is_latest;
|
||||
std::string warning;
|
||||
bool is_discovered;
|
||||
// Whether the versioned library file for this entry is present on disk.
|
||||
bool is_installed = false;
|
||||
|
||||
static NetworkLibraryVersionInfo from_static(const NetworkLibraryVersion& v) {
|
||||
return {
|
||||
|
||||
@@ -90,10 +90,21 @@ TEST_CASE_METHOD(PluginFolderFixture, "Same-series OTA plugin versions are surfa
|
||||
const auto& ota = versions[ota_pos];
|
||||
REQUIRE(ota.is_discovered);
|
||||
REQUIRE(ota.suffix.empty());
|
||||
REQUIRE_FALSE(ota.is_latest);
|
||||
|
||||
// The static whitelist entry keeps its "latest" role.
|
||||
REQUIRE(versions[latest_pos].is_latest);
|
||||
// "(Latest)" is dynamic: the OTA build is the highest listed version, so it takes
|
||||
// the label from the static whitelist entry - and it is also marked installed.
|
||||
REQUIRE(ota.is_latest);
|
||||
REQUIRE(ota.is_installed);
|
||||
REQUIRE_FALSE(versions[latest_pos].is_latest);
|
||||
REQUIRE_FALSE(versions[latest_pos].is_installed);
|
||||
|
||||
// A whitelisted version whose library exists on disk is marked installed.
|
||||
for (const auto& info : versions) {
|
||||
if (info.version == "02.03.00.62")
|
||||
REQUIRE(info.is_installed);
|
||||
}
|
||||
|
||||
// The static default used for download and update-check decisions is unchanged.
|
||||
REQUIRE(std::string(get_latest_network_version()) == "02.08.01.52");
|
||||
}
|
||||
|
||||
@@ -109,4 +120,13 @@ TEST_CASE_METHOD(PluginFolderFixture, "Legacy series never adopts discovered bui
|
||||
|
||||
REQUIRE(count_version(versions, legacy_sibling) == 0);
|
||||
REQUIRE(count_version(versions, legacy) == 1);
|
||||
|
||||
// With nothing else on disk, the highest whitelisted version holds "(Latest)"
|
||||
// even though its library is not installed.
|
||||
for (const auto& info : versions) {
|
||||
if (info.version == "02.08.01.52") {
|
||||
REQUIRE(info.is_latest);
|
||||
REQUIRE_FALSE(info.is_installed);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user