Skip to content
This repository has been archived by the owner on Sep 23, 2024. It is now read-only.

Commit

Permalink
preset export small tweak
Browse files Browse the repository at this point in the history
  • Loading branch information
SoftFever committed Dec 30, 2023
1 parent 0d49816 commit fbea207
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 81 deletions.
3 changes: 2 additions & 1 deletion src/libslic3r/PresetBundle.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include "Utils.hpp"
#include "Model.hpp"
#include "format.hpp"
#include "libslic3r_version.h"

#include <algorithm>
#include <set>
Expand Down Expand Up @@ -767,7 +768,7 @@ bool PresetBundle::import_json_presets(PresetsConfigSubstitutions & s
std::string version_str = key_values[BBL_JSON_KEY_VERSION];
boost::optional<Semver> version = Semver::parse(version_str);
if (!version) return false;
Semver app_version = *(Semver::parse(SLIC3R_VERSION));
Semver app_version = *(Semver::parse(SoftFever_VERSION));
if (version->maj() != app_version.maj()) {
BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << " Preset incompatibla, not loading: " << name;
return false;
Expand Down
104 changes: 24 additions & 80 deletions src/slic3r/GUI/CreatePresetsDialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include "FileHelp.hpp"
#include "Tab.hpp"
#include "MainFrame.hpp"
#include "libslic3r_version.h"

#define NAME_OPTION_COMBOBOX_SIZE wxSize(FromDIP(200), FromDIP(24))
#define FILAMENT_PRESET_COMBOBOX_SIZE wxSize(FromDIP(300), FromDIP(24))
Expand Down Expand Up @@ -179,27 +180,28 @@ static bool delete_filament_preset_by_name(std::string delete_preset_name, std::
return true;
}

static std::string get_curr_time()
static std::string get_curr_time(const char* format = "%Y_%m_%d_%H_%M_%S")
{
std::chrono::system_clock::time_point now = std::chrono::system_clock::now();

std::time_t time = std::chrono::system_clock::to_time_t(now);

std::tm local_time = *std::localtime(&time);
std::ostringstream time_stream;
time_stream << std::put_time(&local_time, "%Y_%m_%d_%H_%M_%S");
time_stream << std::put_time(&local_time, format);

std::string current_time = time_stream.str();
return current_time;
}

static std::string get_curr_timestmp()
{
std::time_t currentTime = std::time(nullptr);
std::ostringstream oss;
oss << currentTime;
std::string timestampString = oss.str();
return timestampString;
return get_curr_time("%Y%m%d%H%M%S");
// std::time_t currentTime = std::time(nullptr);
// std::ostringstream oss;
// oss << currentTime;
// std::string timestampString = oss.str();
// return timestampString;
}

static void get_filament_compatible_printer(Preset* preset, vector<std::string>& printers)
Expand Down Expand Up @@ -3407,49 +3409,7 @@ std::string ExportConfigsDialog::initial_file_path(const wxString &path, const s
std::string export_path = into_u8(path);
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "initial file path and path is:" << export_path << " and sub path is: " << sub_file_path;
boost::filesystem::path printer_export_path = (boost::filesystem::path(export_path) / sub_file_path).make_preferred();
if (boost::filesystem::exists(printer_export_path)) {
MessageDialog dlg(this, wxString::Format(_L("The '%s' folder already exists in the current directory. Do you want to clear it and rebuild it.\nIf not, a time suffix will be "
"added, and you can modify the name after creation."), sub_file_path), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES_NO | wxYES_DEFAULT | wxCENTRE);
int res = dlg.ShowModal();
if (wxID_YES == res) {
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "Same path exists, delete and need to rebuild, and path is: " << printer_export_path.string();
try {
boost::filesystem::remove_all(printer_export_path);
} catch (...) {
MessageDialog dlg(this, _L(wxString::Format("The file: %s \nin the directory may have been opened by another program. \nPlease close it and try again.",
encode_path(printer_export_path.string().c_str()))),
wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"),
wxYES | wxYES_DEFAULT | wxCENTRE);
dlg.ShowModal();
return "initial_failed";
}
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "delete path";
boost::filesystem::create_directories(printer_export_path);
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "create path";
export_path = printer_export_path.string();
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "Same path exists, delete and rebuild, and path is: " << export_path;
} else if (wxID_NO == res) {
export_path = printer_export_path.string();
std::string export_path_with_time;
boost::filesystem::path *printer_export_path_with_time = nullptr;
do {
if (printer_export_path_with_time) {
delete printer_export_path_with_time;
printer_export_path_with_time = nullptr;
}
export_path_with_time = export_path + " " + get_curr_time();
printer_export_path_with_time = new boost::filesystem::path(export_path_with_time);
} while (boost::filesystem::exists(*printer_export_path_with_time));
export_path = export_path_with_time;
boost::filesystem::create_directories(*printer_export_path_with_time);
if (printer_export_path_with_time) {
delete printer_export_path_with_time;
printer_export_path_with_time = nullptr;
}
} else {
return "";
}
} else {
if (!boost::filesystem::exists(printer_export_path)) {
boost::filesystem::create_directories(printer_export_path);
export_path = printer_export_path.string();
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "Same path exists, delete and rebuild, and path is: " << export_path;
Expand Down Expand Up @@ -3707,7 +3667,7 @@ void ExportConfigsDialog::select_curr_radiobox(std::vector<std::pair<RadioBox *,

ExportConfigsDialog::ExportCase ExportConfigsDialog::archive_preset_bundle_to_file(const wxString &path)
{
std::string export_path = initial_file_path(path, "Printer config bundle");
std::string export_path = initial_file_path(path, "");
if (export_path.empty() || "initial_failed" == export_path) return ExportCase::EXPORT_CANCEL;
BOOST_LOG_TRIVIAL(info) << "Export printer preset bundle";

Expand All @@ -3717,19 +3677,11 @@ ExportConfigsDialog::ExportCase ExportConfigsDialog::archive_preset_bundle_to_fi
std::string printer_preset_name_ = printer_preset->name;

json bundle_structure;
NetworkAgent *agent = wxGetApp().getAgent();
std::string clock = get_curr_timestmp();
if (agent) {
bundle_structure["user_name"] = agent->get_user_name();
bundle_structure["user_id"] = agent->get_user_id();
bundle_structure["version"] = agent->get_version();
bundle_structure["bundle_id"] = agent->get_user_id() + "_" + printer_preset_name_ + "_" + clock;
} else {
bundle_structure["user_name"] = "";
bundle_structure["user_id"] = "";
bundle_structure["version"] = "";
bundle_structure["bundle_id"] = "offline_" + printer_preset_name_ + "_" + clock;
}
bundle_structure["user_name"] = "";
bundle_structure["user_id"] = "";
bundle_structure["version"] = SoftFever_VERSION;
bundle_structure["bundle_id"] = printer_preset_name_ + "_" + clock;
bundle_structure["bundle_type"] = "printer config bundle";
bundle_structure["printer_preset_name"] = printer_preset_name_;
json printer_config = json::array();
Expand All @@ -3743,15 +3695,15 @@ ExportConfigsDialog::ExportCase ExportConfigsDialog::archive_preset_bundle_to_fi
return ExportCase::INITIALIZE_FAIL;
}

boost::filesystem::path pronter_file_path = boost::filesystem::path(printer_preset->file);
std::string preset_path = pronter_file_path.make_preferred().string();
boost::filesystem::path printer_file_path = boost::filesystem::path(printer_preset->file);
std::string preset_path = printer_file_path.make_preferred().string();
if (preset_path.empty()) {
BOOST_LOG_TRIVIAL(info) << "Export printer preset: " << printer_preset->name << " skip because of the preset file path is empty.";
continue;
}

// Add a file to the ZIP file
std::string printer_config_file_name = "printer/" + pronter_file_path.filename().string();
std::string printer_config_file_name = "printer/" + printer_file_path.filename().string();
status = mz_zip_writer_add_file(&zip_archive, printer_config_file_name.c_str(), encode_path(preset_path.c_str()).c_str(), NULL, 0, MZ_DEFAULT_COMPRESSION);
//status = mz_zip_writer_add_mem(&zip_archive, ("printer/" + printer_preset->name + ".json").c_str(), json_contents, strlen(json_contents), MZ_DEFAULT_COMPRESSION);
if (MZ_FALSE == status) {
Expand Down Expand Up @@ -3831,7 +3783,7 @@ ExportConfigsDialog::ExportCase ExportConfigsDialog::archive_preset_bundle_to_fi

ExportConfigsDialog::ExportCase ExportConfigsDialog::archive_filament_bundle_to_file(const wxString &path)
{
std::string export_path = initial_file_path(path, "Filament bundle");
std::string export_path = initial_file_path(path, "");
if (export_path.empty() || "initial_failed" == export_path) return ExportCase::EXPORT_CANCEL;
BOOST_LOG_TRIVIAL(info) << "Export filament preset bundle";

Expand All @@ -3840,19 +3792,11 @@ ExportConfigsDialog::ExportCase ExportConfigsDialog::archive_filament_bundle_to_
std::string filament_name = checkbox_filament_name.second;

json bundle_structure;
NetworkAgent *agent = wxGetApp().getAgent();
std::string clock = get_curr_timestmp();
if (agent) {
bundle_structure["user_name"] = agent->get_user_name();
bundle_structure["user_id"] = agent->get_user_id();
bundle_structure["version"] = agent->get_version();
bundle_structure["bundle_id"] = agent->get_user_id() + "_" + filament_name + "_" + clock;
} else {
bundle_structure["user_name"] = "";
bundle_structure["user_id"] = "";
bundle_structure["version"] = "";
bundle_structure["bundle_id"] = "offline_" + filament_name + "_" + clock;
}
bundle_structure["user_name"] = "";
bundle_structure["user_id"] = "";
bundle_structure["version"] = SoftFever_VERSION;
bundle_structure["bundle_id"] = filament_name + "_" + clock;
bundle_structure["bundle_type"] = "filament config bundle";
bundle_structure["filament_name"] = filament_name;
std::unordered_map<std::string, json> vendor_structure;
Expand Down Expand Up @@ -4070,7 +4014,7 @@ wxBoxSizer *ExportConfigsDialog::create_button_item(wxWindow* parent)
return;
}

wxDirDialog dlg(this, _L("Choose a directory"), from_u8(wxGetApp().app_config->get_last_dir()), wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST);
wxDirDialog dlg(this, _L("Choose a directory"), "", wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST);
wxString path;
if (dlg.ShowModal() == wxID_OK) path = dlg.GetPath();
ExportCase export_case = ExportCase::EXPORT_CANCEL;
Expand Down

0 comments on commit fbea207

Please sign in to comment.