PrusaSlicer-NonPlainar/src/slic3r/Utils/PrintHost.hpp

111 lines
2.6 KiB
C++
Raw Normal View History

#ifndef slic3r_PrintHost_hpp_
#define slic3r_PrintHost_hpp_
2018-08-21 09:10:32 +00:00
#include <memory>
#include <string>
#include <functional>
2018-12-12 13:15:08 +00:00
#include <boost/filesystem/path.hpp>
#include <wx/string.h>
#include "Http.hpp"
namespace Slic3r {
class DynamicPrintConfig;
2018-12-11 09:33:11 +00:00
struct PrintHostUpload
{
boost::filesystem::path source_path;
boost::filesystem::path upload_path;
bool start_print = false;
};
class PrintHost
{
public:
2018-12-11 09:33:11 +00:00
virtual ~PrintHost();
typedef Http::ProgressFn ProgressFn;
typedef std::function<void(wxString /* error */)> ErrorFn;
virtual const char* get_name() const = 0;
2018-12-11 09:33:11 +00:00
virtual bool test(wxString &curl_msg) const = 0;
virtual wxString get_test_ok_msg () const = 0;
virtual wxString get_test_failed_msg (wxString &msg) const = 0;
virtual bool upload(PrintHostUpload upload_data, ProgressFn prorgess_fn, ErrorFn error_fn) const = 0;
2018-12-11 09:33:11 +00:00
virtual bool has_auto_discovery() const = 0;
virtual bool can_test() const = 0;
virtual bool can_start_print() const = 0;
virtual std::string get_host() const = 0;
2018-12-11 09:33:11 +00:00
static PrintHost* get_print_host(DynamicPrintConfig *config);
protected:
virtual wxString format_error(const std::string &body, const std::string &error, unsigned status) const;
2018-12-11 09:33:11 +00:00
};
2018-08-21 09:10:32 +00:00
2018-12-11 09:33:11 +00:00
struct PrintHostJob
{
PrintHostUpload upload_data;
std::unique_ptr<PrintHost> printhost;
bool cancelled = false;
2018-12-11 09:33:11 +00:00
PrintHostJob() {}
2018-12-12 12:35:00 +00:00
PrintHostJob(const PrintHostJob&) = delete;
PrintHostJob(PrintHostJob &&other)
: upload_data(std::move(other.upload_data))
, printhost(std::move(other.printhost))
2018-12-20 12:36:49 +00:00
, cancelled(other.cancelled)
2018-12-12 12:35:00 +00:00
{}
2018-12-11 09:33:11 +00:00
PrintHostJob(DynamicPrintConfig *config)
: printhost(PrintHost::get_print_host(config))
{}
2018-12-12 12:35:00 +00:00
PrintHostJob& operator=(const PrintHostJob&) = delete;
PrintHostJob& operator=(PrintHostJob &&other)
{
upload_data = std::move(other.upload_data);
printhost = std::move(other.printhost);
2018-12-20 12:36:49 +00:00
cancelled = other.cancelled;
2018-12-12 12:35:00 +00:00
return *this;
}
2018-12-11 09:33:11 +00:00
bool empty() const { return !printhost; }
operator bool() const { return !!printhost; }
};
namespace GUI { class PrintHostQueueDialog; }
2018-12-11 09:33:11 +00:00
class PrintHostJobQueue
{
public:
PrintHostJobQueue(GUI::PrintHostQueueDialog *queue_dialog);
2018-12-11 09:33:11 +00:00
PrintHostJobQueue(const PrintHostJobQueue &) = delete;
PrintHostJobQueue(PrintHostJobQueue &&other) = delete;
~PrintHostJobQueue();
PrintHostJobQueue& operator=(const PrintHostJobQueue &) = delete;
PrintHostJobQueue& operator=(PrintHostJobQueue &&other) = delete;
void enqueue(PrintHostJob job);
void cancel(size_t id);
2018-12-11 09:33:11 +00:00
private:
struct priv;
std::shared_ptr<priv> p;
};
}
#endif