PrusaLink storage names in Upload dialog
This commit is contained in:
parent
a507504b22
commit
61b31bfbc3
6 changed files with 32 additions and 26 deletions
|
@ -6948,18 +6948,19 @@ void Plater::send_gcode()
|
||||||
upload_job.printhost->get_groups(groups);
|
upload_job.printhost->get_groups(groups);
|
||||||
}
|
}
|
||||||
// PrusaLink specific: Query the server for the list of file groups.
|
// PrusaLink specific: Query the server for the list of file groups.
|
||||||
wxArrayString storage;
|
wxArrayString storage_paths;
|
||||||
|
wxArrayString storage_names;
|
||||||
{
|
{
|
||||||
wxBusyCursor wait;
|
wxBusyCursor wait;
|
||||||
try {
|
try {
|
||||||
upload_job.printhost->get_storage(storage);
|
upload_job.printhost->get_storage(storage_paths, storage_names);
|
||||||
} catch (const Slic3r::IOError& ex) {
|
} catch (const Slic3r::IOError& ex) {
|
||||||
show_error(this, ex.what(), false);
|
show_error(this, ex.what(), false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PrintHostSendDialog dlg(default_output_file, upload_job.printhost->get_post_upload_actions(), groups, storage);
|
PrintHostSendDialog dlg(default_output_file, upload_job.printhost->get_post_upload_actions(), groups, storage_paths, storage_names);
|
||||||
if (dlg.ShowModal() == wxID_OK) {
|
if (dlg.ShowModal() == wxID_OK) {
|
||||||
upload_job.upload_data.upload_path = dlg.filename();
|
upload_job.upload_data.upload_path = dlg.filename();
|
||||||
upload_job.upload_data.post_action = dlg.post_action();
|
upload_job.upload_data.post_action = dlg.post_action();
|
||||||
|
|
|
@ -38,13 +38,14 @@ static const char *CONFIG_KEY_PATH = "printhost_path";
|
||||||
static const char *CONFIG_KEY_GROUP = "printhost_group";
|
static const char *CONFIG_KEY_GROUP = "printhost_group";
|
||||||
static const char* CONFIG_KEY_STORAGE = "printhost_storage";
|
static const char* CONFIG_KEY_STORAGE = "printhost_storage";
|
||||||
|
|
||||||
PrintHostSendDialog::PrintHostSendDialog(const fs::path &path, PrintHostPostUploadActions post_actions, const wxArrayString &groups, const wxArrayString& storage)
|
PrintHostSendDialog::PrintHostSendDialog(const fs::path &path, PrintHostPostUploadActions post_actions, const wxArrayString &groups, const wxArrayString& storage_paths, const wxArrayString& storage_names)
|
||||||
: MsgDialog(static_cast<wxWindow*>(wxGetApp().mainframe), _L("Send G-Code to printer host"), _L("Upload to Printer Host with the following filename:"), 0) // Set style = 0 to avoid default creation of the "OK" button.
|
: MsgDialog(static_cast<wxWindow*>(wxGetApp().mainframe), _L("Send G-Code to printer host"), _L("Upload to Printer Host with the following filename:"), 0) // Set style = 0 to avoid default creation of the "OK" button.
|
||||||
// All buttons will be added later in this constructor
|
// All buttons will be added later in this constructor
|
||||||
, txt_filename(new wxTextCtrl(this, wxID_ANY))
|
, txt_filename(new wxTextCtrl(this, wxID_ANY))
|
||||||
, combo_groups(!groups.IsEmpty() ? new wxComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, groups, wxCB_READONLY) : nullptr)
|
, combo_groups(!groups.IsEmpty() ? new wxComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, groups, wxCB_READONLY) : nullptr)
|
||||||
, combo_storage(storage.GetCount() > 1 ? new wxComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, storage, wxCB_READONLY) : nullptr)
|
, combo_storage(storage_names.GetCount() > 1 ? new wxComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, storage_names, wxCB_READONLY) : nullptr)
|
||||||
, post_upload_action(PrintHostPostUploadAction::None)
|
, post_upload_action(PrintHostPostUploadAction::None)
|
||||||
|
, m_paths(storage_paths)
|
||||||
{
|
{
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
txt_filename->OSXDisableAllSmartSubstitutions();
|
txt_filename->OSXDisableAllSmartSubstitutions();
|
||||||
|
@ -73,15 +74,15 @@ PrintHostSendDialog::PrintHostSendDialog(const fs::path &path, PrintHostPostUplo
|
||||||
auto* label_group = new wxStaticText(this, wxID_ANY, _L("Upload to storage:"));
|
auto* label_group = new wxStaticText(this, wxID_ANY, _L("Upload to storage:"));
|
||||||
content_sizer->Add(label_group);
|
content_sizer->Add(label_group);
|
||||||
content_sizer->Add(combo_storage, 0, wxBOTTOM, 2 * VERT_SPACING);
|
content_sizer->Add(combo_storage, 0, wxBOTTOM, 2 * VERT_SPACING);
|
||||||
combo_storage->SetValue(storage.front());
|
combo_storage->SetValue(storage_names.front());
|
||||||
wxString recent_storage = from_u8(app_config->get("recent", CONFIG_KEY_STORAGE));
|
wxString recent_storage = from_u8(app_config->get("recent", CONFIG_KEY_STORAGE));
|
||||||
if (!recent_storage.empty())
|
if (!recent_storage.empty())
|
||||||
combo_storage->SetValue(recent_storage);
|
combo_storage->SetValue(recent_storage);
|
||||||
} else if (storage.GetCount() == 1){
|
} else if (storage_names.GetCount() == 1){
|
||||||
// PrusaLink specific: Show which storage has been detected.
|
// PrusaLink specific: Show which storage has been detected.
|
||||||
auto* label_group = new wxStaticText(this, wxID_ANY, _L("Upload to storage: ") + storage.front());
|
auto* label_group = new wxStaticText(this, wxID_ANY, _L("Upload to storage: ") + storage_names.front());
|
||||||
content_sizer->Add(label_group);
|
content_sizer->Add(label_group);
|
||||||
m_preselected_storage = storage.front();
|
m_preselected_storage = storage_paths.front();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -196,7 +197,9 @@ std::string PrintHostSendDialog::storage() const
|
||||||
{
|
{
|
||||||
if (!combo_storage)
|
if (!combo_storage)
|
||||||
return GUI::format("%1%", m_preselected_storage);
|
return GUI::format("%1%", m_preselected_storage);
|
||||||
return boost::nowide::narrow(combo_storage->GetValue());
|
if (combo_storage->GetSelection() < 0 || combo_storage->GetSelection() >= m_paths.size())
|
||||||
|
return {};
|
||||||
|
return boost::nowide::narrow(m_paths[combo_storage->GetSelection()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PrintHostSendDialog::EndModal(int ret)
|
void PrintHostSendDialog::EndModal(int ret)
|
||||||
|
@ -226,8 +229,6 @@ void PrintHostSendDialog::EndModal(int ret)
|
||||||
MsgDialog::EndModal(ret);
|
MsgDialog::EndModal(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
wxDEFINE_EVENT(EVT_PRINTHOST_PROGRESS, PrintHostQueueDialog::Event);
|
wxDEFINE_EVENT(EVT_PRINTHOST_PROGRESS, PrintHostQueueDialog::Event);
|
||||||
wxDEFINE_EVENT(EVT_PRINTHOST_ERROR, PrintHostQueueDialog::Event);
|
wxDEFINE_EVENT(EVT_PRINTHOST_ERROR, PrintHostQueueDialog::Event);
|
||||||
wxDEFINE_EVENT(EVT_PRINTHOST_CANCEL, PrintHostQueueDialog::Event);
|
wxDEFINE_EVENT(EVT_PRINTHOST_CANCEL, PrintHostQueueDialog::Event);
|
||||||
|
|
|
@ -26,7 +26,7 @@ namespace GUI {
|
||||||
class PrintHostSendDialog : public GUI::MsgDialog
|
class PrintHostSendDialog : public GUI::MsgDialog
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PrintHostSendDialog(const boost::filesystem::path &path, PrintHostPostUploadActions post_actions, const wxArrayString& groups, const wxArrayString& storage);
|
PrintHostSendDialog(const boost::filesystem::path &path, PrintHostPostUploadActions post_actions, const wxArrayString& groups, const wxArrayString& storage_paths, const wxArrayString& storage_names);
|
||||||
boost::filesystem::path filename() const;
|
boost::filesystem::path filename() const;
|
||||||
PrintHostPostUploadAction post_action() const;
|
PrintHostPostUploadAction post_action() const;
|
||||||
std::string group() const;
|
std::string group() const;
|
||||||
|
@ -40,6 +40,7 @@ private:
|
||||||
PrintHostPostUploadAction post_upload_action;
|
PrintHostPostUploadAction post_upload_action;
|
||||||
wxString m_valid_suffix;
|
wxString m_valid_suffix;
|
||||||
wxString m_preselected_storage;
|
wxString m_preselected_storage;
|
||||||
|
wxArrayString m_paths;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -273,7 +273,6 @@ bool OctoPrint::test(wxString& msg) const
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
wxString OctoPrint::get_test_ok_msg () const
|
wxString OctoPrint::get_test_ok_msg () const
|
||||||
{
|
{
|
||||||
return _(L("Connection to OctoPrint works correctly."));
|
return _(L("Connection to OctoPrint works correctly."));
|
||||||
|
@ -685,7 +684,7 @@ bool PrusaLink::test(wxString& msg) const
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PrusaLink::get_storage(wxArrayString& output) const
|
bool PrusaLink::get_storage(wxArrayString& storage_path, wxArrayString& storage_name) const
|
||||||
{
|
{
|
||||||
const char* name = get_name();
|
const char* name = get_name();
|
||||||
|
|
||||||
|
@ -693,10 +692,11 @@ bool PrusaLink::get_storage(wxArrayString& output) const
|
||||||
auto url = make_url("api/v1/storage");
|
auto url = make_url("api/v1/storage");
|
||||||
wxString error_msg;
|
wxString error_msg;
|
||||||
|
|
||||||
struct StorageInfo{
|
struct StorageInfo {
|
||||||
|
wxString path;
|
||||||
wxString name;
|
wxString name;
|
||||||
bool read_only;
|
bool read_only = false;
|
||||||
long long free_space;
|
long long free_space = -1;
|
||||||
};
|
};
|
||||||
std::vector<StorageInfo> storage;
|
std::vector<StorageInfo> storage;
|
||||||
|
|
||||||
|
@ -731,6 +731,7 @@ bool PrusaLink::get_storage(wxArrayString& output) const
|
||||||
}
|
}
|
||||||
// each storage has own subtree of storage_list
|
// each storage has own subtree of storage_list
|
||||||
for (const auto& section : ptree.front().second) {
|
for (const auto& section : ptree.front().second) {
|
||||||
|
const auto name = section.second.get_optional<std::string>("name");
|
||||||
const auto path = section.second.get_optional<std::string>("path");
|
const auto path = section.second.get_optional<std::string>("path");
|
||||||
const auto space = section.second.get_optional<std::string>("free_space");
|
const auto space = section.second.get_optional<std::string>("free_space");
|
||||||
const auto read_only = section.second.get_optional<bool>("read_only");
|
const auto read_only = section.second.get_optional<bool>("read_only");
|
||||||
|
@ -738,7 +739,8 @@ bool PrusaLink::get_storage(wxArrayString& output) const
|
||||||
const auto available = section.second.get_optional<bool>("available");
|
const auto available = section.second.get_optional<bool>("available");
|
||||||
if (path && (!available || *available)) {
|
if (path && (!available || *available)) {
|
||||||
StorageInfo si;
|
StorageInfo si;
|
||||||
si.name = boost::nowide::widen(*path);
|
si.path = boost::nowide::widen(*path);
|
||||||
|
si.name = name ? boost::nowide::widen(*name) : wxString();
|
||||||
// If read_only is missing, assume it is NOT read only.
|
// If read_only is missing, assume it is NOT read only.
|
||||||
// si.read_only = read_only ? *read_only : false; // version without "ro"
|
// si.read_only = read_only ? *read_only : false; // version without "ro"
|
||||||
si.read_only = (read_only ? *read_only : (ro ? *ro : false));
|
si.read_only = (read_only ? *read_only : (ro ? *ro : false));
|
||||||
|
@ -759,16 +761,17 @@ bool PrusaLink::get_storage(wxArrayString& output) const
|
||||||
.perform_sync();
|
.perform_sync();
|
||||||
|
|
||||||
for (const auto& si : storage) {
|
for (const auto& si : storage) {
|
||||||
if (!si.read_only && si.free_space > 0)
|
if (!si.read_only && si.free_space > 0) {
|
||||||
output.push_back(si.name);
|
storage_path.push_back(si.path);
|
||||||
|
storage_name.push_back(si.name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (res && output.empty())
|
if (res && storage_path.empty()) {
|
||||||
{
|
|
||||||
if (!storage.empty()) { // otherwise error_msg is already filled
|
if (!storage.empty()) { // otherwise error_msg is already filled
|
||||||
error_msg = L"\n\n" + _L("Storages found:") + L" \n";
|
error_msg = L"\n\n" + _L("Storages found:") + L" \n";
|
||||||
for (const auto& si : storage) {
|
for (const auto& si : storage) {
|
||||||
error_msg += si.name + L" : " + (si.read_only ? _L("read only") : _L("no free space")) + L"\n";
|
error_msg += si.path + L" : " + (si.read_only ? _L("read only") : _L("no free space")) + L"\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
std::string message = GUI::format(_L("Upload has failed. There is no suitable storage found at %1%.%2%"), m_host, error_msg);
|
std::string message = GUI::format(_L("Upload has failed. There is no suitable storage found at %1%.%2%"), m_host, error_msg);
|
||||||
|
|
|
@ -94,7 +94,7 @@ public:
|
||||||
virtual PrintHostPostUploadActions get_post_upload_actions() const override { return PrintHostPostUploadAction::StartPrint; }
|
virtual PrintHostPostUploadActions get_post_upload_actions() const override { return PrintHostPostUploadAction::StartPrint; }
|
||||||
|
|
||||||
// gets possible storage to be uploaded to. This allows different printer to have different storage. F.e. local vs sdcard vs usb.
|
// gets possible storage to be uploaded to. This allows different printer to have different storage. F.e. local vs sdcard vs usb.
|
||||||
bool get_storage(wxArrayString& /* storage */) const override;
|
bool get_storage(wxArrayString& storage_path, wxArrayString& storage_name) const override;
|
||||||
protected:
|
protected:
|
||||||
bool test(wxString& curl_msg) const override;
|
bool test(wxString& curl_msg) const override;
|
||||||
bool validate_version_text(const boost::optional<std::string>& version_text) const override;
|
bool validate_version_text(const boost::optional<std::string>& version_text) const override;
|
||||||
|
|
|
@ -66,7 +66,7 @@ public:
|
||||||
virtual bool get_printers(wxArrayString & /* printers */) const { return false; }
|
virtual bool get_printers(wxArrayString & /* printers */) const { return false; }
|
||||||
// Support for PrusaLink uploading to different storage. Not supported by other print hosts.
|
// Support for PrusaLink uploading to different storage. Not supported by other print hosts.
|
||||||
// Returns false if not supported or fail.
|
// Returns false if not supported or fail.
|
||||||
virtual bool get_storage(wxArrayString& /* storage */) const { return false; }
|
virtual bool get_storage(wxArrayString& /*storage_path*/, wxArrayString& /*storage_name*/) const { return false; }
|
||||||
|
|
||||||
static PrintHost* get_print_host(DynamicPrintConfig *config);
|
static PrintHost* get_print_host(DynamicPrintConfig *config);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue