Merge branch 'SoftFever' into feature/wall_order

This commit is contained in:
SoftFever 2022-11-30 21:36:23 +08:00
commit 6ddf2e8c08
18 changed files with 233 additions and 52 deletions

31
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View file

@ -0,0 +1,31 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**3mf File for This Bug**
If it is related to slicing, please append the 3mf file. It could be extremely helpful to solve the issue.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. iOS, Windows]
- Version [e.g. 22]

10
.github/ISSUE_TEMPLATE/custom.md vendored Normal file
View file

@ -0,0 +1,10 @@
---
name: Custom issue template
about: For generic ideas such as enhancement of a feature, some questions, and etc.
title: ''
labels: ''
assignees: ''
---

View file

@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: feature
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

View file

@ -26,7 +26,7 @@
<br/> <br/>
<div> <div>
<input id="ChoosePrivacy" type="checkbox" checked onClick="SendPrivacySelect()" onChange="SendPrivacySelect()" /> <input id="ChoosePrivacy" type="checkbox" onClick="SendPrivacySelect()" onChange="SendPrivacySelect()" />
<span class="trans" tid="t7">Allow sending anonymous data</span> <span class="trans" tid="t7">Allow sending anonymous data</span>
</div> </div>
</div> </div>

View file

@ -26,7 +26,7 @@
<br/> <br/>
<div> <div>
<input id="ChoosePrivacy" type="checkbox" checked onClick="SendPrivacySelect()" onChange="SendPrivacySelect()" /> <input id="ChoosePrivacy" type="checkbox" onClick="SendPrivacySelect()" onChange="SendPrivacySelect()" />
<span class="trans" tid="t7">Allow sending anonymous data</span> <span class="trans" tid="t7">Allow sending anonymous data</span>
</div> </div>
</div> </div>

View file

@ -2092,40 +2092,45 @@ static bool custom_gcode_sets_temperature(const std::string &gcode, const int mc
// Do not process this piece of G-code by the time estimator, it already knows the values through another sources. // Do not process this piece of G-code by the time estimator, it already knows the values through another sources.
void GCode::print_machine_envelope(GCodeOutputStream &file, Print &print) void GCode::print_machine_envelope(GCodeOutputStream &file, Print &print)
{ {
if (print.config().gcode_flavor.value == gcfMarlinLegacy || print.config().gcode_flavor.value == gcfMarlinFirmware) { const auto flavor = print.config().gcode_flavor.value;
if (flavor == gcfMarlinLegacy || flavor == gcfMarlinFirmware) {
int factor = flavor == gcfRepRapFirmware ? 60 : 1; // RRF M203 and M566 are in mm/min
file.write_format("M201 X%d Y%d Z%d E%d\n", file.write_format("M201 X%d Y%d Z%d E%d\n",
int(print.config().machine_max_acceleration_x.values.front() + 0.5), int(print.config().machine_max_acceleration_x.values.front() + 0.5),
int(print.config().machine_max_acceleration_y.values.front() + 0.5), int(print.config().machine_max_acceleration_y.values.front() + 0.5),
int(print.config().machine_max_acceleration_z.values.front() + 0.5), int(print.config().machine_max_acceleration_z.values.front() + 0.5),
int(print.config().machine_max_acceleration_e.values.front() + 0.5)); int(print.config().machine_max_acceleration_e.values.front() + 0.5));
file.write_format("M203 X%d Y%d Z%d E%d\n", file.write_format("M203 X%d Y%d Z%d E%d\n",
int(print.config().machine_max_speed_x.values.front() + 0.5), int(print.config().machine_max_speed_x.values.front() * factor + 0.5),
int(print.config().machine_max_speed_y.values.front() + 0.5), int(print.config().machine_max_speed_y.values.front() * factor + 0.5),
int(print.config().machine_max_speed_z.values.front() + 0.5), int(print.config().machine_max_speed_z.values.front() * factor + 0.5),
int(print.config().machine_max_speed_e.values.front() + 0.5)); int(print.config().machine_max_speed_e.values.front() * factor + 0.5));
// Now M204 - acceleration. This one is quite hairy thanks to how Marlin guys care about // Now M204 - acceleration. This one is quite hairy thanks to how Marlin guys care about
// Legacy Marlin should export travel acceleration the same as printing acceleration. // Legacy Marlin should export travel acceleration the same as printing acceleration.
// MarlinFirmware has the two separated. // MarlinFirmware has the two separated.
int travel_acc = print.config().gcode_flavor == gcfMarlinLegacy int travel_acc = flavor == gcfMarlinLegacy
? int(print.config().machine_max_acceleration_extruding.values.front() + 0.5) ? int(print.config().machine_max_acceleration_extruding.values.front() + 0.5)
: int(print.config().machine_max_acceleration_travel.values.front() + 0.5); : int(print.config().machine_max_acceleration_travel.values.front() + 0.5);
file.write_format("M204 P%d R%d T%d\n", if (flavor == gcfRepRapFirmware)
int(print.config().machine_max_acceleration_extruding.values.front() + 0.5), file.write_format("M204 P%d T%d ; sets acceleration (P, T), mm/sec^2\n",
int(print.config().machine_max_acceleration_retracting.values.front() + 0.5), int(print.config().machine_max_acceleration_extruding.values.front() + 0.5),
travel_acc); travel_acc);
else
file.write_format("M204 P%d R%d T%d\n",
int(print.config().machine_max_acceleration_extruding.values.front() + 0.5),
int(print.config().machine_max_acceleration_retracting.values.front() + 0.5),
travel_acc);
assert(is_decimal_separator_point()); assert(is_decimal_separator_point());
file.write_format("M205 X%.2lf Y%.2lf Z%.2lf E%.2lf\n", file.write_format(flavor == gcfRepRapFirmware
print.config().machine_max_jerk_x.values.front(), ? "M566 X%.2lf Y%.2lf Z%.2lf E%.2lf ; sets the jerk limits, mm/min\n"
print.config().machine_max_jerk_y.values.front(), : "M205 X%.2lf Y%.2lf Z%.2lf E%.2lf ; sets the jerk limits, mm/sec\n",
print.config().machine_max_jerk_z.values.front(), print.config().machine_max_jerk_x.values.front() * factor,
print.config().machine_max_jerk_e.values.front()); print.config().machine_max_jerk_y.values.front() * factor,
//BBS: don't support M205 Sx Tx print.config().machine_max_jerk_z.values.front() * factor,
//file.write_format("M205 S%d T%d\n", print.config().machine_max_jerk_e.values.front() * factor);
// int(print.config().machine_min_extruding_rate.values.front() + 0.5),
// int(print.config().machine_min_travel_rate.values.front() + 0.5));
} }
} }

View file

@ -911,12 +911,17 @@ void GCodeProcessor::apply_config(const PrintConfig& config)
m_result.filament_vitrification_temperature[i] = static_cast<float>(config.temperature_vitrification.get_at(i)); m_result.filament_vitrification_temperature[i] = static_cast<float>(config.temperature_vitrification.get_at(i));
} }
if (m_flavor == gcfMarlinLegacy || m_flavor == gcfMarlinFirmware || m_flavor == gcfKlipper) { if (m_flavor == gcfMarlinLegacy || m_flavor == gcfMarlinFirmware || m_flavor == gcfKlipper || m_flavor == gcfRepRapFirmware) {
m_time_processor.machine_limits = reinterpret_cast<const MachineEnvelopeConfig&>(config); m_time_processor.machine_limits = reinterpret_cast<const MachineEnvelopeConfig&>(config);
if (m_flavor == gcfMarlinLegacy) { if (m_flavor == gcfMarlinLegacy) {
// Legacy Marlin does not have separate travel acceleration, it uses the 'extruding' value instead. // Legacy Marlin does not have separate travel acceleration, it uses the 'extruding' value instead.
m_time_processor.machine_limits.machine_max_acceleration_travel = m_time_processor.machine_limits.machine_max_acceleration_extruding; m_time_processor.machine_limits.machine_max_acceleration_travel = m_time_processor.machine_limits.machine_max_acceleration_extruding;
} }
if (m_flavor == gcfRepRapFirmware) {
// RRF does not support setting min feedrates. Set them to zero.
m_time_processor.machine_limits.machine_min_travel_rate.values.assign(m_time_processor.machine_limits.machine_min_travel_rate.size(), 0.);
m_time_processor.machine_limits.machine_min_extruding_rate.values.assign(m_time_processor.machine_limits.machine_min_extruding_rate.size(), 0.);
}
} }
// Filament load / unload times are not specific to a firmware flavor. Let anybody use it if they find it useful. // Filament load / unload times are not specific to a firmware flavor. Let anybody use it if they find it useful.

View file

@ -99,8 +99,13 @@ public:
} }
WipeTowerWriter& disable_linear_advance() { WipeTowerWriter& disable_linear_advance() {
m_gcode += (m_gcode_flavor == gcfKlipper ? (std::string("SET_PRESSURE_ADVANCE ADVANCE=0\n")) if(m_gcode_flavor == gcfKlipper)
: std::string("M900 K0\n")); m_gcode += "SET_PRESSURE_ADVANCE ADVANCE=0\n";
else if(m_gcode_flavor == gcfRepRapFirmware)
m_gcode += std::string("M572 D") + std::to_string(m_current_tool) + " S0\n";
else
m_gcode += "M900 K0\n";
return *this; return *this;
} }

View file

@ -22,9 +22,12 @@ void GCodeWriter::apply_print_config(const PrintConfig &print_config)
{ {
this->config.apply(print_config, true); this->config.apply(print_config, true);
m_single_extruder_multi_material = print_config.single_extruder_multi_material.value; m_single_extruder_multi_material = print_config.single_extruder_multi_material.value;
bool is_marlin = print_config.gcode_flavor.value == gcfMarlinLegacy || print_config.gcode_flavor.value == gcfMarlinFirmware || print_config.gcode_flavor.value == gcfKlipper; bool use_mach_limits = print_config.gcode_flavor.value == gcfMarlinLegacy ||
m_max_acceleration = std::lrint(is_marlin ? print_config.machine_max_acceleration_extruding.values.front() : 0); print_config.gcode_flavor.value == gcfMarlinFirmware ||
m_max_jerk = std::lrint(is_marlin ? std::min(print_config.machine_max_jerk_x.values.front(), print_config.machine_max_jerk_y.values.front()) : 0); print_config.gcode_flavor.value == gcfKlipper ||
print_config.gcode_flavor.value == gcfRepRapFirmware;
m_max_acceleration = std::lrint(use_mach_limits ? print_config.machine_max_acceleration_extruding.values.front() : 0);
m_max_jerk = std::lrint(use_mach_limits ? std::min(print_config.machine_max_jerk_x.values.front(), print_config.machine_max_jerk_y.values.front()) : 0);
} }
void GCodeWriter::set_extruders(std::vector<unsigned int> extruder_ids) void GCodeWriter::set_extruders(std::vector<unsigned int> extruder_ids)

View file

@ -1570,7 +1570,7 @@ void PrintConfigDef::init_fff_params()
def->enum_keys_map = &ConfigOptionEnum<GCodeFlavor>::get_enum_values(); def->enum_keys_map = &ConfigOptionEnum<GCodeFlavor>::get_enum_values();
def->enum_values.push_back("marlin"); def->enum_values.push_back("marlin");
def->enum_values.push_back("klipper"); def->enum_values.push_back("klipper");
//def->enum_values.push_back("reprapfirmware"); def->enum_values.push_back("reprapfirmware");
//def->enum_values.push_back("repetier"); //def->enum_values.push_back("repetier");
//def->enum_values.push_back("teacup"); //def->enum_values.push_back("teacup");
//def->enum_values.push_back("makerware"); //def->enum_values.push_back("makerware");
@ -1581,8 +1581,9 @@ void PrintConfigDef::init_fff_params()
//def->enum_values.push_back("smoothie"); //def->enum_values.push_back("smoothie");
//def->enum_values.push_back("no-extrusion"); //def->enum_values.push_back("no-extrusion");
def->enum_labels.push_back("Marlin(legacy)"); def->enum_labels.push_back("Marlin(legacy)");
def->enum_labels.push_back(L("Klipper"));
def->enum_labels.push_back("RepRapFirmware");
//def->enum_labels.push_back("RepRap/Sprinter"); //def->enum_labels.push_back("RepRap/Sprinter");
//def->enum_labels.push_back("RepRapFirmware");
//def->enum_labels.push_back("Repetier"); //def->enum_labels.push_back("Repetier");
//def->enum_labels.push_back("Teacup"); //def->enum_labels.push_back("Teacup");
//def->enum_labels.push_back("MakerWare (MakerBot)"); //def->enum_labels.push_back("MakerWare (MakerBot)");
@ -1592,7 +1593,6 @@ void PrintConfigDef::init_fff_params()
//def->enum_labels.push_back("Machinekit"); //def->enum_labels.push_back("Machinekit");
//def->enum_labels.push_back("Smoothie"); //def->enum_labels.push_back("Smoothie");
//def->enum_labels.push_back(L("No extrusion")); //def->enum_labels.push_back(L("No extrusion"));
def->enum_labels.push_back(L("Klipper"));
def->mode = comAdvanced; def->mode = comAdvanced;
def->readonly = false; def->readonly = false;
def->set_default_value(new ConfigOptionEnum<GCodeFlavor>(gcfMarlinLegacy)); def->set_default_value(new ConfigOptionEnum<GCodeFlavor>(gcfMarlinLegacy));

View file

@ -32,7 +32,7 @@
namespace Slic3r { namespace Slic3r {
enum GCodeFlavor : unsigned char { enum GCodeFlavor : unsigned char {
gcfMarlinLegacy, gcfKlipper, gcfRepRapSprinter, gcfRepRapFirmware, gcfRepetier, gcfTeacup, gcfMakerWare, gcfMarlinFirmware, gcfSailfish, gcfMach3, gcfMachinekit, gcfMarlinLegacy, gcfKlipper, gcfRepRapFirmware, gcfRepRapSprinter, gcfRepetier, gcfTeacup, gcfMakerWare, gcfMarlinFirmware, gcfSailfish, gcfMach3, gcfMachinekit,
gcfSmoothie, gcfNoExtrusion gcfSmoothie, gcfNoExtrusion
}; };

View file

@ -1097,10 +1097,11 @@ void GUI_App::post_init()
std::string http_url = get_http_url(app_config->get_country_code()); std::string http_url = get_http_url(app_config->get_country_code());
std::string language = GUI::into_u8(current_language_code()); std::string language = GUI::into_u8(current_language_code());
this->preset_updater->sync(http_url, language, preset_bundle); std::string network_ver = Slic3r::NetworkAgent::get_version();
this->preset_updater->sync(http_url, language, network_ver, preset_bundle);
//BBS: check new version //BBS: check new version
this->check_new_version(); //this->check_new_version();
}); });
} }
@ -2225,6 +2226,7 @@ bool GUI_App::on_init_inner()
Bind(EVT_USER_LOGIN, &GUI_App::on_user_login, this); Bind(EVT_USER_LOGIN, &GUI_App::on_user_login, this);
copy_network_if_available();
on_init_network(); on_init_network();
//BBS if load user preset failed //BBS if load user preset failed
@ -2386,6 +2388,59 @@ bool GUI_App::on_init_inner()
return true; return true;
} }
void GUI_App::copy_network_if_available()
{
std::string network_library, player_library, network_library_dst, player_library_dst;
std::string data_dir_str = data_dir();
boost::filesystem::path data_dir_path(data_dir_str);
auto plugin_folder = data_dir_path / "plugins";
auto cache_folder = data_dir_path / "ota";
#if defined(_MSC_VER) || defined(_WIN32)
network_library = cache_folder.string() + "/bambu_networking.dll";
player_library = cache_folder.string() + "/BambuSource.dll";
network_library_dst = plugin_folder.string() + "/bambu_networking.dll";
player_library_dst = plugin_folder.string() + "/BambuSource.dll";
#elif defined(__WXMAC__)
network_library = cache_folder.string() + "/libbambu_networking.dylib";
player_library = cache_folder.string() + "/libBambuSource.dylib";
network_library_dst = plugin_folder.string() + "/libbambu_networking.dylib";
player_library_dst = plugin_folder.string() + "/libBambuSource.dylib";
#else
network_library = cache_folder.string() + "/libbambu_networking.so";
player_library = cache_folder.string() + "/libBambuSource.so";
network_library_dst = plugin_folder.string() + "/libbambu_networking.so";
player_library_dst = plugin_folder.string() + "/libBambuSource.so";
#endif
BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< ": checking network_library " << network_library << ", player_library " << player_library;
std::string error_message;
if (boost::filesystem::exists(network_library)) {
CopyFileResult cfr = copy_file(network_library, network_library_dst, error_message, false);
if (cfr != CopyFileResult::SUCCESS) {
BOOST_LOG_TRIVIAL(error) << __FUNCTION__<< ": Copying failed(" << cfr << "): " << error_message;
return;
}
static constexpr const auto perms = fs::owner_read | fs::owner_write | fs::group_read | fs::others_read;
fs::permissions(network_library_dst, perms);
fs::remove(network_library);
BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< ": Copying network library from" << network_library << " to " << network_library_dst<<" successfully.";
}
if (boost::filesystem::exists(player_library)) {
CopyFileResult cfr = copy_file(player_library, player_library_dst, error_message, false);
if (cfr != CopyFileResult::SUCCESS) {
BOOST_LOG_TRIVIAL(error) << __FUNCTION__<< ": Copying failed(" << cfr << "): " << error_message;
return;
}
static constexpr const auto perms = fs::owner_read | fs::owner_write | fs::group_read | fs::others_read;
fs::permissions(player_library_dst, perms);
fs::remove(player_library);
BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< ": Copying player library from" << player_library << " to " << player_library_dst<<" successfully.";
}
}
bool GUI_App::on_init_network(bool try_backup) bool GUI_App::on_init_network(bool try_backup)
{ {
int load_agent_dll = Slic3r::NetworkAgent::initialize_network_module(); int load_agent_dll = Slic3r::NetworkAgent::initialize_network_module();

View file

@ -538,6 +538,7 @@ public:
private: private:
int updating_bambu_networking(); int updating_bambu_networking();
bool on_init_inner(); bool on_init_inner();
void copy_network_if_available();
bool on_init_network(bool try_backup = false); bool on_init_network(bool try_backup = false);
void init_networking_callbacks(); void init_networking_callbacks();
void init_app_config(); void init_app_config();

View file

@ -1889,6 +1889,7 @@ void TabPrint::build()
optgroup->append_single_option_line("tree_support_wall_count"); optgroup->append_single_option_line("tree_support_wall_count");
optgroup->append_single_option_line("tree_support_with_infill"); optgroup->append_single_option_line("tree_support_with_infill");
optgroup->append_single_option_line("support_top_z_distance", "support#top-z-distance"); optgroup->append_single_option_line("support_top_z_distance", "support#top-z-distance");
optgroup->append_single_option_line("support_bottom_z_distance", "support#bottom-z-distance");
optgroup->append_single_option_line("support_base_pattern", "support#base-pattern"); optgroup->append_single_option_line("support_base_pattern", "support#base-pattern");
optgroup->append_single_option_line("support_base_pattern_spacing", "support#base-pattern"); optgroup->append_single_option_line("support_base_pattern_spacing", "support#base-pattern");
//optgroup->append_single_option_line("support_angle"); //optgroup->append_single_option_line("support_angle");
@ -3449,8 +3450,8 @@ void TabPrinter::toggle_options()
// Disable silent mode for non-marlin firmwares. // Disable silent mode for non-marlin firmwares.
toggle_option("silent_mode", is_marlin_flavor); toggle_option("silent_mode", is_marlin_flavor);
//BBS: extruder clearance of BBL printer can't be edited. //BBS: extruder clearance of BBL printer can't be edited.
for (auto el : { "extruder_clearance_radius", "extruder_clearance_height_to_rod", "extruder_clearance_height_to_lid" }) //for (auto el : { "extruder_clearance_radius", "extruder_clearance_height_to_rod", "extruder_clearance_height_to_lid" })
toggle_option(el, !is_BBL_printer); // toggle_option(el, !is_BBL_printer);
// SoftFever: hide BBL specific settings // SoftFever: hide BBL specific settings
for (auto el : for (auto el :

View file

@ -230,9 +230,10 @@ struct PresetUpdater::priv
void prune_tmps() const; void prune_tmps() const;
void sync_version() const; void sync_version() const;
void parse_version_string(const std::string& body) const; void parse_version_string(const std::string& body) const;
void sync_resources(std::string http_url, std::map<std::string, Resource> &resources); void sync_resources(std::string http_url, std::map<std::string, Resource> &resources, bool check_patch = false, std::string current_version="");
void sync_config(std::string http_url, const VendorMap vendors); void sync_config(std::string http_url, const VendorMap vendors);
void sync_tooltip(std::string http_url, std::string language); void sync_tooltip(std::string http_url, std::string language);
void sync_plugins(std::string http_url, std::string plugin_version);
//BBS: refine preset update logic //BBS: refine preset update logic
bool install_bundles_rsrc(std::vector<std::string> bundles, bool snapshot) const; bool install_bundles_rsrc(std::vector<std::string> bundles, bool snapshot) const;
@ -349,6 +350,7 @@ bool PresetUpdater::priv::extract_file(const fs::path &source_path, const fs::pa
close_zip_reader(&archive); close_zip_reader(&archive);
return res; return res;
} }
BOOST_LOG_TRIVIAL(info) << "[BBL Updater]successfully extract file " << stat.m_file_index << " to "<<dest_file;
} }
catch (const std::exception& e) catch (const std::exception& e)
{ {
@ -479,11 +481,11 @@ void PresetUpdater::priv::parse_version_string(const std::string& body) const
//BBS: refine the Preset Updater logic //BBS: refine the Preset Updater logic
// Download vendor indices. Also download new bundles if an index indicates there's a new one available. // Download vendor indices. Also download new bundles if an index indicates there's a new one available.
// Both are saved in cache. // Both are saved in cache.
void PresetUpdater::priv::sync_resources(std::string http_url, std::map<std::string, Resource> &resources) void PresetUpdater::priv::sync_resources(std::string http_url, std::map<std::string, Resource> &resources, bool check_patch, std::string current_version_str)
{ {
std::map<std::string, Resource> resource_list; std::map<std::string, Resource> resource_list;
BOOST_LOG_TRIVIAL(info) << boost::format("[BBL Updater]: sync_resources get preferred setting version for app version %1%, url: %2%")%SLIC3R_APP_NAME%http_url; BOOST_LOG_TRIVIAL(info) << boost::format("[BBL Updater]: sync_resources get preferred setting version for app version %1%, url: %2%, current_version_str %3%, check_patch %4%")%SLIC3R_APP_NAME%http_url%current_version_str%check_patch;
std::string query_params = "?"; std::string query_params = "?";
bool first = true; bool first = true;
@ -545,7 +547,7 @@ void PresetUpdater::priv::sync_resources(std::string http_url, std::map<std::str
} catch (std::exception &e) { } catch (std::exception &e) {
BOOST_LOG_TRIVIAL(error) << (boost::format("[BBL Updater]: get version of settings failed, exception=%1% body=%2%") % e.what() % body).str(); BOOST_LOG_TRIVIAL(error) << (boost::format("[BBL Updater]: get version of settings failed, exception=%1% body=%2%") % e.what() % body).str();
} catch (...) { } catch (...) {
BOOST_LOG_TRIVIAL(error) << "[BBL Updater]: get version of settings failed,, body=" << body; BOOST_LOG_TRIVIAL(error) << "[BBL Updater]: get version of settings failed, body=" << body;
} }
}) })
.on_error([&](std::string body, std::string error, unsigned status) { .on_error([&](std::string body, std::string error, unsigned status) {
@ -566,8 +568,16 @@ void PresetUpdater::priv::sync_resources(std::string http_url, std::map<std::str
} }
Semver online_version = resource_update->second.version; Semver online_version = resource_update->second.version;
// Semver current_version = get_version_from_json(vendor_root_config.string()); // Semver current_version = get_version_from_json(vendor_root_config.string());
Semver current_version = resource.version; Semver current_version = current_version_str.empty()?resource.version:current_version_str;
bool version_match = ((online_version.maj() == current_version.maj()) && (online_version.min() == current_version.min())); bool version_match = ((online_version.maj() == current_version.maj()) && (online_version.min() == current_version.min()));
if (version_match && check_patch) {
int online_cc_patch = online_version.patch()/100;
int current_cc_patch = current_version.patch()/100;
if (online_cc_patch != current_cc_patch) {
version_match = false;
BOOST_LOG_TRIVIAL(warning) << boost::format("[BBL Updater]: online patch CC not match: online_cc_patch=%1%, current_cc_patch=%2%") % online_cc_patch % current_cc_patch;
}
}
if (version_match && (current_version < online_version)) { if (version_match && (current_version < online_version)) {
if (cancel) { return; } if (cancel) { return; }
@ -584,14 +594,20 @@ void PresetUpdater::priv::sync_resources(std::string http_url, std::map<std::str
// remove previous files before // remove previous files before
if (resource.sub_caches.empty()) { if (resource.sub_caches.empty()) {
if (fs::exists(cache_path)) fs::remove_all(cache_path); if (fs::exists(cache_path)) {
fs::remove_all(cache_path);
BOOST_LOG_TRIVIAL(info) << "[BBL Updater]remove cache path " << cache_path.string();
}
} else { } else {
for (auto sub : resource.sub_caches) { for (auto sub : resource.sub_caches) {
if (fs::exists(cache_path / sub)) fs::remove_all(cache_path / sub); if (fs::exists(cache_path / sub)) {
fs::remove_all(cache_path / sub);
BOOST_LOG_TRIVIAL(info) << "[BBL Updater]remove cache path " << (cache_path / sub).string();
}
} }
} }
// extract the file downloaded // extract the file downloaded
BOOST_LOG_TRIVIAL(info) << "[BBL Updater]start to unzip the downloaded file " << cache_file_path; BOOST_LOG_TRIVIAL(info) << "[BBL Updater]start to unzip the downloaded file " << cache_file_path << " to "<<cache_path;
fs::create_directories(cache_path); fs::create_directories(cache_path);
if (!extract_file(cache_file_path, cache_path)) { if (!extract_file(cache_file_path, cache_path)) {
BOOST_LOG_TRIVIAL(warning) << "[BBL Updater]extract resource " << resource_it.first << " failed, path: " << cache_file_path; BOOST_LOG_TRIVIAL(warning) << "[BBL Updater]extract resource " << resource_it.first << " failed, path: " << cache_file_path;
@ -611,6 +627,9 @@ void PresetUpdater::priv::sync_resources(std::string http_url, std::map<std::str
resource_it.second = resource_update->second; resource_it.second = resource_update->second;
} }
else {
BOOST_LOG_TRIVIAL(warning) << boost::format("[BBL Updater]: online version=%1%, current_version=%2%, no need to download") % online_version.to_string() % current_version.to_string();
}
} }
} }
@ -830,6 +849,28 @@ void PresetUpdater::priv::sync_tooltip(std::string http_url, std::string languag
} }
} }
void PresetUpdater::priv::sync_plugins(std::string http_url, std::string plugin_version)
{
if (plugin_version == "00.00.00.00") {
BOOST_LOG_TRIVIAL(info) << "non need to sync plugins for there is no plugins currently.";
return;
}
std::string curr_version = SLIC3R_VERSION;
std::string using_version = curr_version.substr(0, 9) + "00";
try {
std::map<std::string, Resource> resources
{
{"slicer/plugins/cloud", { using_version, "", "", cache_path.string(), {"plugins"}}}
};
sync_resources(http_url, resources, true, plugin_version);
}
catch (std::exception& e) {
BOOST_LOG_TRIVIAL(warning) << format("[BBL Updater] sync_plugins: %1%", e.what());
}
}
bool PresetUpdater::priv::install_bundles_rsrc(std::vector<std::string> bundles, bool snapshot) const bool PresetUpdater::priv::install_bundles_rsrc(std::vector<std::string> bundles, bool snapshot) const
{ {
Updates updates; Updates updates;
@ -1092,7 +1133,7 @@ PresetUpdater::~PresetUpdater()
//BBS: change directories by design //BBS: change directories by design
//BBS: refine the preset updater logic //BBS: refine the preset updater logic
void PresetUpdater::sync(std::string http_url, std::string language, PresetBundle *preset_bundle) void PresetUpdater::sync(std::string http_url, std::string language, std::string plugin_version, PresetBundle *preset_bundle)
{ {
//p->set_download_prefs(GUI::wxGetApp().app_config); //p->set_download_prefs(GUI::wxGetApp().app_config);
if (!p->enabled_version_check && !p->enabled_config_update) { return; } if (!p->enabled_version_check && !p->enabled_config_update) { return; }
@ -1102,7 +1143,7 @@ void PresetUpdater::sync(std::string http_url, std::string language, PresetBundl
// into the closure (but perhaps the compiler can elide this). // into the closure (but perhaps the compiler can elide this).
VendorMap vendors = preset_bundle->vendors; VendorMap vendors = preset_bundle->vendors;
p->thread = std::thread([this, vendors, http_url, language]() { p->thread = std::thread([this, vendors, http_url, language, plugin_version]() {
this->p->prune_tmps(); this->p->prune_tmps();
if (p->cancel) if (p->cancel)
return; return;
@ -1112,8 +1153,12 @@ void PresetUpdater::sync(std::string http_url, std::string language, PresetBundl
this->p->sync_config(http_url, std::move(vendors)); this->p->sync_config(http_url, std::move(vendors));
if (p->cancel) if (p->cancel)
return; return;
this->p->sync_tooltip(http_url, language); this->p->sync_plugins(http_url, plugin_version);
}); //if (p->cancel)
// return;
//remove the tooltip currently
//this->p->sync_tooltip(http_url, language);
});
} }
void PresetUpdater::slic3r_update_notify() void PresetUpdater::slic3r_update_notify()

View file

@ -26,7 +26,7 @@ public:
~PresetUpdater(); ~PresetUpdater();
// If either version check or config updating is enabled, get the appropriate data in the background and cache it. // If either version check or config updating is enabled, get the appropriate data in the background and cache it.
void sync(std::string http_url, std::string language, PresetBundle *preset_bundle); void sync(std::string http_url, std::string language, std::string plugin_version, PresetBundle *preset_bundle);
// If version check is enabled, check if chaced online slic3r version is newer, notify if so. // If version check is enabled, check if chaced online slic3r version is newer, notify if so.
void slic3r_update_notify(); void slic3r_update_notify();

View file

@ -36,7 +36,7 @@ namespace BBL {
#define BAMBU_NETWORK_LIBRARY "bambu_networking" #define BAMBU_NETWORK_LIBRARY "bambu_networking"
#define BAMBU_NETWORK_AGENT_NAME "bambu_network_agent" #define BAMBU_NETWORK_AGENT_NAME "bambu_network_agent"
#define BAMBU_NETWORK_AGENT_VERSION "01.03.00.02" #define BAMBU_NETWORK_AGENT_VERSION "01.03.01.02"
//iot preset type strings //iot preset type strings

View file

@ -10,5 +10,5 @@ endif()
if(NOT DEFINED BBL_INTERNAL_TESTING) if(NOT DEFINED BBL_INTERNAL_TESTING)
set(BBL_INTERNAL_TESTING "1") set(BBL_INTERNAL_TESTING "1")
endif() endif()
set(SLIC3R_VERSION "01.03.00.25") set(SLIC3R_VERSION "01.03.01.01")
set(SoftFever_VERSION "1.3.3") set(SoftFever_VERSION "1.3.3.2")