From 743a03a8c25aba07f19eaa2436bbde2a30b5535b Mon Sep 17 00:00:00 2001
From: tamasmeszaros <meszaros.q@gmail.com>
Date: Thu, 23 Jan 2020 17:41:20 +0100
Subject: [PATCH 1/2] append full config to sla zipped ini

SPE-1081
---
 src/libslic3r/SLA/RasterWriter.cpp | 42 +++++++++++++++++++++++-------
 1 file changed, 33 insertions(+), 9 deletions(-)

diff --git a/src/libslic3r/SLA/RasterWriter.cpp b/src/libslic3r/SLA/RasterWriter.cpp
index 238120dda..79063d9a1 100644
--- a/src/libslic3r/SLA/RasterWriter.cpp
+++ b/src/libslic3r/SLA/RasterWriter.cpp
@@ -1,3 +1,5 @@
+#include <string_view>
+
 #include <libslic3r/SLA/RasterWriter.hpp>
 
 #include "libslic3r/PrintConfig.hpp"
@@ -89,19 +91,41 @@ std::string get_cfg_value(const DynamicPrintConfig &cfg, const std::string &key)
     return ret;    
 }
 
+void append_full_config(const DynamicPrintConfig &cfg, std::map<std::string, std::string> &keys)
+{
+    using namespace std::literals::string_view_literals;
+    
+    // Sorted list of config keys, which shall not be stored into the G-code. Initializer list.
+    static constexpr auto banned_keys = { 
+		"compatible_printers"sv,
+        "compatible_prints"sv,
+        "print_host"sv,
+        "printhost_apikey"sv,
+        "printhost_cafile"sv
+    };
+    
+    assert(std::is_sorted(banned_keys.begin(), banned_keys.end()));
+    auto is_banned = [](const std::string &key) {
+        return std::binary_search(banned_keys.begin(), banned_keys.end(), key);
+    };
+    for (const std::string &key : cfg.keys())
+        if (! is_banned(key) && ! cfg.option(key)->is_nil())
+            keys[key] = cfg.opt_serialize(key);
+}
+
 } // namespace
 
 void RasterWriter::set_config(const DynamicPrintConfig &cfg)
 {
-    m_config["layerHeight"]    = get_cfg_value(cfg, "layer_height");
-    m_config["expTime"]        = get_cfg_value(cfg, "exposure_time");
-    m_config["expTimeFirst"]   = get_cfg_value(cfg, "initial_exposure_time");
-    m_config["materialName"]   = get_cfg_value(cfg, "sla_material_settings_id");
-    m_config["printerModel"]   = get_cfg_value(cfg, "printer_model");
-    m_config["printerVariant"] = get_cfg_value(cfg, "printer_variant");
-    m_config["printerProfile"] = get_cfg_value(cfg, "printer_settings_id");
-    m_config["printProfile"]   = get_cfg_value(cfg, "sla_print_settings_id");
-
+//    m_config["layerHeight"]    = get_cfg_value(cfg, "layer_height");
+//    m_config["expTime"]        = get_cfg_value(cfg, "exposure_time");
+//    m_config["expTimeFirst"]   = get_cfg_value(cfg, "initial_exposure_time");
+//    m_config["materialName"]   = get_cfg_value(cfg, "sla_material_settings_id");
+//    m_config["printerModel"]   = get_cfg_value(cfg, "printer_model");
+//    m_config["printerVariant"] = get_cfg_value(cfg, "printer_variant");
+//    m_config["printerProfile"] = get_cfg_value(cfg, "printer_settings_id");
+//    m_config["printProfile"]   = get_cfg_value(cfg, "sla_print_settings_id");
+    append_full_config(cfg, m_config);
     m_config["fileCreationTimestamp"] = Utils::utc_timestamp();
     m_config["prusaSlicerVersion"]    = SLIC3R_BUILD_ID;
 }

From 848fe4750fb4bca13e7789a7210a41da96caca18 Mon Sep 17 00:00:00 2001
From: tamasmeszaros <meszaros.q@gmail.com>
Date: Fri, 24 Jan 2020 15:23:59 +0100
Subject: [PATCH 2/2] Add prusaslicer.ini to sl1 output zip

---
 src/libslic3r/SLA/RasterWriter.cpp | 40 ++++++++++++++++++------------
 src/libslic3r/SLA/RasterWriter.hpp |  4 ++-
 2 files changed, 27 insertions(+), 17 deletions(-)

diff --git a/src/libslic3r/SLA/RasterWriter.cpp b/src/libslic3r/SLA/RasterWriter.cpp
index 79063d9a1..13aef7d8a 100644
--- a/src/libslic3r/SLA/RasterWriter.cpp
+++ b/src/libslic3r/SLA/RasterWriter.cpp
@@ -14,14 +14,16 @@
 
 namespace Slic3r { namespace sla {
 
-std::string RasterWriter::createIniContent(const std::string& projectname) const 
+void RasterWriter::write_ini(const std::map<std::string, std::string> &m, std::string &ini)
+{
+    for (auto &param : m) ini += param.first + " = " + param.second + "\n";    
+}
+
+std::string RasterWriter::create_ini_content(const std::string& projectname) const 
 {
     std::string out("action = print\njobDir = ");
     out += projectname + "\n";
-    
-    for (auto &param : m_config)
-        out += param.first + " = " + param.second + "\n";    
-    
+    write_ini(m_config, out);
     return out;
 }
 
@@ -55,7 +57,12 @@ void RasterWriter::save(Zipper &zipper, const std::string &prjname)
 
         zipper.add_entry("config.ini");
 
-        zipper << createIniContent(project);
+        zipper << create_ini_content(project);
+        
+        zipper.add_entry("prusaslicer.ini");
+        std::string prusaslicer_ini;
+        write_ini(m_slicer_config, prusaslicer_ini);
+        zipper << prusaslicer_ini;
 
         for(unsigned i = 0; i < m_layers_rst.size(); i++)
         {
@@ -95,7 +102,7 @@ void append_full_config(const DynamicPrintConfig &cfg, std::map<std::string, std
 {
     using namespace std::literals::string_view_literals;
     
-    // Sorted list of config keys, which shall not be stored into the G-code. Initializer list.
+    // Sorted list of config keys, which shall not be stored into the ini.
     static constexpr auto banned_keys = { 
 		"compatible_printers"sv,
         "compatible_prints"sv,
@@ -108,6 +115,7 @@ void append_full_config(const DynamicPrintConfig &cfg, std::map<std::string, std
     auto is_banned = [](const std::string &key) {
         return std::binary_search(banned_keys.begin(), banned_keys.end(), key);
     };
+    
     for (const std::string &key : cfg.keys())
         if (! is_banned(key) && ! cfg.option(key)->is_nil())
             keys[key] = cfg.opt_serialize(key);
@@ -117,17 +125,17 @@ void append_full_config(const DynamicPrintConfig &cfg, std::map<std::string, std
 
 void RasterWriter::set_config(const DynamicPrintConfig &cfg)
 {
-//    m_config["layerHeight"]    = get_cfg_value(cfg, "layer_height");
-//    m_config["expTime"]        = get_cfg_value(cfg, "exposure_time");
-//    m_config["expTimeFirst"]   = get_cfg_value(cfg, "initial_exposure_time");
-//    m_config["materialName"]   = get_cfg_value(cfg, "sla_material_settings_id");
-//    m_config["printerModel"]   = get_cfg_value(cfg, "printer_model");
-//    m_config["printerVariant"] = get_cfg_value(cfg, "printer_variant");
-//    m_config["printerProfile"] = get_cfg_value(cfg, "printer_settings_id");
-//    m_config["printProfile"]   = get_cfg_value(cfg, "sla_print_settings_id");
-    append_full_config(cfg, m_config);
+    m_config["layerHeight"]    = get_cfg_value(cfg, "layer_height");
+    m_config["expTime"]        = get_cfg_value(cfg, "exposure_time");
+    m_config["expTimeFirst"]   = get_cfg_value(cfg, "initial_exposure_time");
+    m_config["materialName"]   = get_cfg_value(cfg, "sla_material_settings_id");
+    m_config["printerModel"]   = get_cfg_value(cfg, "printer_model");
+    m_config["printerVariant"] = get_cfg_value(cfg, "printer_variant");
+    m_config["printerProfile"] = get_cfg_value(cfg, "printer_settings_id");
+    m_config["printProfile"]   = get_cfg_value(cfg, "sla_print_settings_id");
     m_config["fileCreationTimestamp"] = Utils::utc_timestamp();
     m_config["prusaSlicerVersion"]    = SLIC3R_BUILD_ID;
+    append_full_config(cfg, m_slicer_config);
 }
 
 void RasterWriter::set_statistics(const PrintStatistics &stats)
diff --git a/src/libslic3r/SLA/RasterWriter.hpp b/src/libslic3r/SLA/RasterWriter.hpp
index a472e4452..75162893d 100644
--- a/src/libslic3r/SLA/RasterWriter.hpp
+++ b/src/libslic3r/SLA/RasterWriter.hpp
@@ -66,8 +66,10 @@ private:
     double             m_gamma;
 
     std::map<std::string, std::string> m_config;
+    std::map<std::string, std::string> m_slicer_config;
     
-    std::string createIniContent(const std::string& projectname) const;
+    static void write_ini(const std::map<std::string, std::string> &m, std::string &ini);
+    std::string create_ini_content(const std::string& projectname) const;
 
 public: