2018-04-06 14:49:33 +00:00
|
|
|
#ifndef slic3r_GUI_ConfigIndex_
|
|
|
|
#define slic3r_GUI_ConfigIndex_
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
#include <vector>
|
|
|
|
|
2018-04-09 15:03:37 +00:00
|
|
|
#include <boost/filesystem.hpp>
|
|
|
|
|
2018-12-06 11:52:28 +00:00
|
|
|
#include "libslic3r/FileParserError.hpp"
|
2018-04-06 14:49:33 +00:00
|
|
|
#include "../Utils/Semver.hpp"
|
|
|
|
|
|
|
|
namespace Slic3r {
|
|
|
|
namespace GUI {
|
|
|
|
namespace Config {
|
|
|
|
|
|
|
|
// Configuration bundle version.
|
|
|
|
struct Version
|
|
|
|
{
|
|
|
|
// Version of this config.
|
|
|
|
Semver config_version = Semver::invalid();
|
|
|
|
// Minimum Slic3r version, for which this config is applicable.
|
|
|
|
Semver min_slic3r_version = Semver::zero();
|
|
|
|
// Maximum Slic3r version, for which this config is recommended.
|
|
|
|
// Slic3r should read older configuration and upgrade to a newer format,
|
|
|
|
// but likely there has been a better configuration published, using the new features.
|
|
|
|
Semver max_slic3r_version = Semver::inf();
|
|
|
|
// Single comment line.
|
|
|
|
std::string comment;
|
|
|
|
|
2018-04-13 14:15:30 +00:00
|
|
|
bool is_slic3r_supported(const Semver &slicer_version) const;
|
2018-04-06 14:49:33 +00:00
|
|
|
bool is_current_slic3r_supported() const;
|
|
|
|
};
|
|
|
|
|
|
|
|
// Index of vendor specific config bundle versions and Slic3r compatibilities.
|
|
|
|
// The index is being downloaded from the internet, also an initial version of the index
|
|
|
|
// is contained in the Slic3r installation.
|
|
|
|
//
|
|
|
|
// The index has a simple format:
|
|
|
|
//
|
|
|
|
// min_sic3r_version =
|
|
|
|
// max_slic3r_version =
|
|
|
|
// config_version "comment"
|
|
|
|
// config_version "comment"
|
|
|
|
// ...
|
|
|
|
// min_slic3r_version =
|
|
|
|
// max_slic3r_version =
|
|
|
|
// config_version comment
|
|
|
|
// config_version comment
|
|
|
|
// ...
|
|
|
|
//
|
|
|
|
// The min_slic3r_version, max_slic3r_version keys are applied to the config versions below,
|
|
|
|
// empty slic3r version means an open interval.
|
|
|
|
class Index
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
typedef std::vector<Version>::const_iterator const_iterator;
|
|
|
|
// Read a config index file in the simple format described in the Index class comment.
|
|
|
|
// Throws Slic3r::file_parser_error and the standard std file access exceptions.
|
2018-04-09 15:03:37 +00:00
|
|
|
size_t load(const boost::filesystem::path &path);
|
|
|
|
|
|
|
|
const std::string& vendor() const { return m_vendor; }
|
2018-04-13 12:49:33 +00:00
|
|
|
// Returns version of the index as the highest version of all the configs.
|
|
|
|
// If there is no config, Semver::zero() is returned.
|
|
|
|
Semver version() const;
|
2018-04-06 14:49:33 +00:00
|
|
|
|
|
|
|
const_iterator begin() const { return m_configs.begin(); }
|
|
|
|
const_iterator end() const { return m_configs.end(); }
|
2018-04-12 18:04:48 +00:00
|
|
|
const_iterator find(const Semver &ver) const;
|
2018-04-06 14:49:33 +00:00
|
|
|
const std::vector<Version>& configs() const { return m_configs; }
|
|
|
|
// Finds a recommended config to be installed for the current Slic3r version.
|
|
|
|
// Returns configs().end() if such version does not exist in the index. This shall never happen
|
|
|
|
// if the index is valid.
|
|
|
|
const_iterator recommended() const;
|
|
|
|
|
2018-04-09 15:03:37 +00:00
|
|
|
// Load all vendor specific indices.
|
|
|
|
// Throws Slic3r::file_parser_error and the standard std file access exceptions.
|
|
|
|
static std::vector<Index> load_db();
|
|
|
|
|
2018-04-06 14:49:33 +00:00
|
|
|
private:
|
2018-04-09 15:03:37 +00:00
|
|
|
std::string m_vendor;
|
2018-04-06 14:49:33 +00:00
|
|
|
std::vector<Version> m_configs;
|
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace Config
|
|
|
|
} // namespace GUI
|
|
|
|
} // namespace Slic3r
|
|
|
|
|
|
|
|
#endif /* slic3r_GUI_ConfigIndex_ */
|