Merge branch 'dk_connect_filename'

This commit is contained in:
Lukas Matena 2025-02-17 15:43:14 +01:00
commit b9703147ad
7 changed files with 55 additions and 25 deletions

View File

@ -200,15 +200,16 @@ void BulkExportDialog::Item::update_valid_bmp()
m_valid_bmp->SetBitmap(*get_bmp_bundle(get_bmp_name(m_status))); m_valid_bmp->SetBitmap(*get_bmp_bundle(get_bmp_name(m_status)));
} }
BulkExportDialog::BulkExportDialog(const std::vector<std::pair<int, std::optional<fs::path>>> &paths): BulkExportDialog::BulkExportDialog(const std::vector<std::pair<int, std::optional<fs::path>>> &paths, const wxString& title):
DPIDialog( DPIDialog(
nullptr, nullptr,
wxID_ANY, wxID_ANY,
_L("Export beds"), title,
wxDefaultPosition, wxDefaultPosition,
wxSize(45 * wxGetApp().em_unit(), 5 * wxGetApp().em_unit()), wxSize(45 * wxGetApp().em_unit(), 5 * wxGetApp().em_unit()),
wxDEFAULT_DIALOG_STYLE | wxICON_WARNING wxDEFAULT_DIALOG_STYLE | wxICON_WARNING
) )
, m_title(title)
{ {
this->SetFont(wxGetApp().normal_font()); this->SetFont(wxGetApp().normal_font());
@ -254,7 +255,7 @@ void BulkExportDialog::accept()
if (has_warnings()) { if (has_warnings()) {
MessageDialog dialog(nullptr, MessageDialog dialog(nullptr,
_L("Some of the selected files already exist. Do you want to replace them?"), _L("Some of the selected files already exist. Do you want to replace them?"),
_L("Export beds"), wxYES_NO | wxICON_QUESTION); m_title, wxYES_NO | wxICON_QUESTION);
if (dialog.ShowModal() == wxID_NO) if (dialog.ShowModal() == wxID_NO)
return; return;
} }

View File

@ -79,10 +79,10 @@ private:
// This must be a unique ptr, because Item does not have copy nor move constructors. // This must be a unique ptr, because Item does not have copy nor move constructors.
std::vector<std::unique_ptr<Item>> m_items; std::vector<std::unique_ptr<Item>> m_items;
wxFlexGridSizer*m_sizer{nullptr}; wxFlexGridSizer*m_sizer{nullptr};
wxString m_title;
public: public:
BulkExportDialog(const std::vector<std::pair<int, std::optional<boost::filesystem::path>>> &paths); BulkExportDialog(const std::vector<std::pair<int, std::optional<boost::filesystem::path>>> &paths, const wxString& title);
std::vector<std::pair<int, std::optional<boost::filesystem::path>>> get_paths() const; std::vector<std::pair<int, std::optional<boost::filesystem::path>>> get_paths() const;
bool has_warnings() const; bool has_warnings() const;

View File

@ -5948,7 +5948,7 @@ void Plater::export_all_gcodes(bool prefer_removable) {
paths.emplace_back(print_index, output_file); paths.emplace_back(print_index, output_file);
} }
BulkExportDialog dialog{paths}; BulkExportDialog dialog{paths, _L("Export beds")};
if (dialog.ShowModal() != wxID_OK) { if (dialog.ShowModal() != wxID_OK) {
return; return;
} }
@ -6481,11 +6481,12 @@ void Plater::printables_to_connect_gcode(const std::string& url)
} }
std::optional<PrintHostJob> Plater::get_connect_print_host_job() { std::optional<PrintHostJob> Plater::get_connect_print_host_job(bool multiple_beds)
{
assert(p->user_account->is_logged()); assert(p->user_account->is_logged());
std::string dialog_msg; std::string dialog_msg;
{ {
PrinterPickWebViewDialog dialog(this, dialog_msg); PrinterPickWebViewDialog dialog(this, dialog_msg, multiple_beds);
if (dialog.ShowModal() != wxID_OK) { if (dialog.ShowModal() != wxID_OK) {
return std::nullopt; return std::nullopt;
} }
@ -6538,13 +6539,13 @@ std::optional<PrintHostJob> Plater::get_connect_print_host_job() {
void Plater::connect_gcode() void Plater::connect_gcode()
{ {
if (auto upload_job{get_connect_print_host_job()}) { if (auto upload_job{get_connect_print_host_job(false)}) {
p->export_gcode(fs::path(), false, std::move(*upload_job)); p->export_gcode(fs::path(), false, std::move(*upload_job));
} }
} }
void Plater::connect_gcode_all() { void Plater::connect_gcode_all() {
auto optional_upload_job{get_connect_print_host_job()}; auto optional_upload_job{get_connect_print_host_job(true)};
if (!optional_upload_job) { if (!optional_upload_job) {
return; return;
} }
@ -6556,6 +6557,7 @@ void Plater::connect_gcode_all() {
if (print_host_ptr == nullptr) { if (print_host_ptr == nullptr) {
throw std::runtime_error{"Sending to connect requires PrusaConnectNew host."}; throw std::runtime_error{"Sending to connect requires PrusaConnectNew host."};
} }
const PrusaConnectNew connect{*print_host_ptr}; const PrusaConnectNew connect{*print_host_ptr};
std::vector<std::pair< int, std::optional<fs::path> >> paths; std::vector<std::pair< int, std::optional<fs::path> >> paths;
@ -6566,16 +6568,35 @@ void Plater::connect_gcode_all() {
paths.emplace_back(print_index, std::nullopt); paths.emplace_back(print_index, std::nullopt);
continue; continue;
} }
// Prevously, filename from Connect FE was taken and used for each gcode file.
// Now naming is same as in gcode export.
fs::path default_filename{upload_job_template.upload_data.upload_path};
this->with_mocked_fff_background_process(
*print,
this->p->gcode_results[print_index],
print_index,
[&](){
const auto optional_file{this->get_default_output_file()};
if (!optional_file) {
return;
}
if (print_index != s_multiple_beds.get_number_of_beds() - 1 || default_filename.empty()) {
const fs::path &default_file{*optional_file};
default_filename = default_file.filename();
}
}
);
const fs::path filename{upload_job_template.upload_data.upload_path}; const fs::path filename_fixed{
paths.emplace_back(print_index, fs::path{ default_filename.stem().string()
filename.stem().string() + "_bed"
+ "_bed" + std::to_string(print_index + 1) + std::to_string(print_index + 1)
+ filename.extension().string() + default_filename.extension().string()
}); };
paths.emplace_back(print_index, filename_fixed);
} }
BulkExportDialog dialog{paths}; BulkExportDialog dialog{paths, _L("Send all to Connect")};
if (dialog.ShowModal() != wxID_OK) { if (dialog.ShowModal() != wxID_OK) {
return; return;
} }

View File

@ -249,7 +249,7 @@ public:
void send_gcode_inner(DynamicPrintConfig* physical_printer_config); void send_gcode_inner(DynamicPrintConfig* physical_printer_config);
void eject_drive(); void eject_drive();
std::optional<PrintHostJob> get_connect_print_host_job(); std::optional<PrintHostJob> get_connect_print_host_job(bool multiple_beds);
void connect_gcode(); void connect_gcode();
void connect_gcode_all(); void connect_gcode_all();
void printables_to_connect_gcode(const std::string& url); void printables_to_connect_gcode(const std::string& url);

View File

@ -452,13 +452,14 @@ void WebViewDialog::EndModal(int retCode)
wxDialog::EndModal(retCode); wxDialog::EndModal(retCode);
} }
PrinterPickWebViewDialog::PrinterPickWebViewDialog(wxWindow* parent, std::string& ret_val) PrinterPickWebViewDialog::PrinterPickWebViewDialog(wxWindow* parent, std::string& ret_val, bool multiple_beds)
: WebViewDialog(parent : WebViewDialog(parent
, GUI::from_u8(Utils::ServiceConfig::instance().connect_select_printer_url()) , GUI::from_u8(Utils::ServiceConfig::instance().connect_select_printer_url())
, _L("Choose a printer") , _L("Choose a printer")
, wxSize(parent->GetClientSize().x / 4 * 3, parent->GetClientSize().y/ 4 * 3) , wxSize(parent->GetClientSize().x / 4 * 3, parent->GetClientSize().y/ 4 * 3)
,{"_prusaSlicer"} ,{"_prusaSlicer"}
, "connect_loading") , "connect_loading")
, m_multiple_beds(multiple_beds)
, m_ret_val(ret_val) , m_ret_val(ret_val)
{ {
@ -580,7 +581,9 @@ void PrinterPickWebViewDialog::request_compatible_printers_FFF() {
const std::string uuid = wxGetApp().plater()->get_user_account()->get_current_printer_uuid_from_connect(printer_model_serialized); const std::string uuid = wxGetApp().plater()->get_user_account()->get_current_printer_uuid_from_connect(printer_model_serialized);
const std::string filename = wxGetApp().plater()->get_upload_filename(); const std::string filename = wxGetApp().plater()->get_upload_filename();
//filament_abrasive
const std::string multiple_beds_value = m_multiple_beds ? "true" : "false";
std::string request = GUI::format( std::string request = GUI::format(
"{" "{"
"\"printerUuid\": \"%4%\", " "\"printerUuid\": \"%4%\", "
@ -589,9 +592,10 @@ void PrinterPickWebViewDialog::request_compatible_printers_FFF() {
"\"material\": %1%, " "\"material\": %1%, "
"\"filename\": \"%5%\", " "\"filename\": \"%5%\", "
"\"filament_abrasive\": %6%," "\"filament_abrasive\": %6%,"
"\"high_flow\": %7%" "\"high_flow\": %7%,"
"\"multiple_beds\": %8%"
"}" "}"
, filament_type_serialized, nozzle_diameter_serialized, printer_model_serialized, uuid, filename, filament_abrasive_serialized, nozzle_high_flow_serialized); , filament_type_serialized, nozzle_diameter_serialized, printer_model_serialized, uuid, filename, filament_abrasive_serialized, nozzle_high_flow_serialized, multiple_beds_value);
wxString script = GUI::format_wxstr("window._prusaConnect_v2.requestCompatiblePrinter(%1%)", request); wxString script = GUI::format_wxstr("window._prusaConnect_v2.requestCompatiblePrinter(%1%)", request);
run_script(script); run_script(script);
@ -609,13 +613,15 @@ void PrinterPickWebViewDialog::request_compatible_printers_SLA()
const std::string material_type_serialized = selected_material.config.option("material_type")->serialize(); const std::string material_type_serialized = selected_material.config.option("material_type")->serialize();
const std::string uuid = wxGetApp().plater()->get_user_account()->get_current_printer_uuid_from_connect(printer_model_serialized); const std::string uuid = wxGetApp().plater()->get_user_account()->get_current_printer_uuid_from_connect(printer_model_serialized);
const std::string filename = wxGetApp().plater()->get_upload_filename(); const std::string filename = wxGetApp().plater()->get_upload_filename();
const std::string multiple_beds_value = m_multiple_beds ? "true" : "false";
const std::string request = GUI::format( const std::string request = GUI::format(
"{" "{"
"\"printerUuid\": \"%3%\", " "\"printerUuid\": \"%3%\", "
"\"material\": \"%1%\", " "\"material\": \"%1%\", "
"\"printerModel\": \"%2%\", " "\"printerModel\": \"%2%\", "
"\"filename\": \"%4%\" " "\"filename\": \"%4%\", "
"}", material_type_serialized, printer_model_serialized, uuid, filename); "\"multiple_beds\": \"%5%\" "
"}", material_type_serialized, printer_model_serialized, uuid, filename, multiple_beds_value);
wxString script = GUI::format_wxstr("window._prusaConnect_v2.requestCompatiblePrinter(%1%)", request); wxString script = GUI::format_wxstr("window._prusaConnect_v2.requestCompatiblePrinter(%1%)", request);
run_script(script); run_script(script);

View File

@ -95,7 +95,7 @@ protected:
class PrinterPickWebViewDialog : public WebViewDialog, public ConnectRequestHandler class PrinterPickWebViewDialog : public WebViewDialog, public ConnectRequestHandler
{ {
public: public:
PrinterPickWebViewDialog(wxWindow* parent, std::string& ret_val); PrinterPickWebViewDialog(wxWindow* parent, std::string& ret_val, bool multiple_beds);
void on_show(wxShowEvent& evt) override; void on_show(wxShowEvent& evt) override;
void on_script_message(wxWebViewEvent& evt) override; void on_script_message(wxWebViewEvent& evt) override;
protected: protected:
@ -110,6 +110,7 @@ protected:
void on_connect_action_close_dialog(const std::string& message_data) override {assert(false);} void on_connect_action_close_dialog(const std::string& message_data) override {assert(false);}
private: private:
std::string& m_ret_val; std::string& m_ret_val;
bool m_multiple_beds;
}; };
class PrintablesConnectUploadDialog : public WebViewDialog, public ConnectRequestHandler class PrintablesConnectUploadDialog : public WebViewDialog, public ConnectRequestHandler

View File

@ -221,6 +221,7 @@ private:
void on_printables_event_slice_file(const std::string& message_data); void on_printables_event_slice_file(const std::string& message_data);
void on_printables_event_required_login(const std::string& message_data); void on_printables_event_required_login(const std::string& message_data);
void on_printables_event_open_url(const std::string& message_data); void on_printables_event_open_url(const std::string& message_data);
void on_dummy_event(const std::string& message_data) {}
void load_default_url() override; void load_default_url() override;
std::string get_url_lang_theme(const wxString& url) const; std::string get_url_lang_theme(const wxString& url) const;
void show_download_notification(const std::string& filename); void show_download_notification(const std::string& filename);