#ifndef slic3r_PrintHost_hpp_ #define slic3r_PrintHost_hpp_ #include #include #include #include #include #include "libslic3r/PrintConfig.hpp" #include "Http.hpp" namespace Slic3r { class DynamicPrintConfig; struct PrintHostUpload { boost::filesystem::path source_path; boost::filesystem::path upload_path; bool start_print = false; }; class PrintHost { public: virtual ~PrintHost(); typedef Http::ProgressFn ProgressFn; typedef std::function ErrorFn; 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; 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; static PrintHost* get_print_host(DynamicPrintConfig *config, Slic3r::PrinterTechnology pt_fallback = ptFFF); protected: virtual wxString format_error(const std::string &body, const std::string &error, unsigned status) const; }; struct PrintHostJob { PrintHostUpload upload_data; std::unique_ptr printhost; bool cancelled = false; PrintHostJob() {} PrintHostJob(const PrintHostJob&) = delete; PrintHostJob(PrintHostJob &&other) : upload_data(std::move(other.upload_data)) , printhost(std::move(other.printhost)) , cancelled(other.cancelled) {} PrintHostJob(DynamicPrintConfig *config) : printhost(PrintHost::get_print_host(config)) {} PrintHostJob& operator=(const PrintHostJob&) = delete; PrintHostJob& operator=(PrintHostJob &&other) { upload_data = std::move(other.upload_data); printhost = std::move(other.printhost); cancelled = other.cancelled; return *this; } bool empty() const { return !printhost; } operator bool() const { return !!printhost; } }; namespace GUI { class PrintHostQueueDialog; } class PrintHostJobQueue { public: PrintHostJobQueue(GUI::PrintHostQueueDialog *queue_dialog); 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); private: struct priv; std::shared_ptr p; }; } #endif