From f1d8383c733f9b1112427c6bf7260039550f8386 Mon Sep 17 00:00:00 2001 From: James Smith Date: Wed, 17 Jun 2026 17:47:49 +0100 Subject: [PATCH 1/2] Add Octoprint API print host --- app/services/print/octoprint_service.rb | 59 +++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 app/services/print/octoprint_service.rb diff --git a/app/services/print/octoprint_service.rb b/app/services/print/octoprint_service.rb new file mode 100644 index 000000000..a0d78a1a4 --- /dev/null +++ b/app/services/print/octoprint_service.rb @@ -0,0 +1,59 @@ +require "faraday" +require "faraday/multipart" + +class Print::OctoprintService + # i18n-tasks-use t("print_hosts.protocols.octoprint") + PROTOCOL = "octoprint".freeze + + INPUT_TYPES = [Mime[:gcode]].freeze + + def initialize(print_host:) + @print_host = print_host + end + + def ok? + response = connection.get(info_uri, {}, headers) + response.success? + rescue => ex + Rails.logger.warn(ex.message) + false + end + + def upload(file:, start_print: true) + raise ArgumentError unless file.mime_type.to_sym == :gcode + connection.post(upload_uri, payload(file: file, start_print: start_print), headers) + end + + private + + def connection + Faraday.new do + it.request :multipart + end + end + + def payload(file:, start_print: true) + { + print: start_print ? "true" : "false", + file: Faraday::Multipart::FilePart.new( + file.attachment.open, + file.mime_type.to_s, + file.filename + ) + } + end + + def info_uri + "#{@print_host.endpoint}/api/server" + end + + def upload_uri + "#{@print_host.endpoint}/api/files/local" + end + + def headers + { + "X-Api-Key" => @print_host.credentials + }.compact_blank + end +end From 3b8eb7ba5b17517395c113dc23c891e90c8c9b7d Mon Sep 17 00:00:00 2001 From: James Smith Date: Wed, 17 Jun 2026 17:57:05 +0100 Subject: [PATCH 2/2] Add translation string for Octoprint name --- config/locales/cs.yml | 1 + config/locales/de.yml | 1 + config/locales/en.yml | 1 + config/locales/es.yml | 1 + config/locales/fr.yml | 1 + config/locales/ja.yml | 1 + config/locales/nl.yml | 1 + config/locales/pl.yml | 1 + config/locales/pt.yml | 1 + config/locales/ru.yml | 1 + config/locales/zh-CN.yml | 1 + 11 files changed, 11 insertions(+) diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 45712dcd7..0da389c49 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -1001,6 +1001,7 @@ cs: sent: protocols: moonraker: + octoprint: update: success: renderer: diff --git a/config/locales/de.yml b/config/locales/de.yml index 22a85d015..fd70d10e4 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1005,6 +1005,7 @@ de: sent: protocols: moonraker: + octoprint: update: success: renderer: diff --git a/config/locales/en.yml b/config/locales/en.yml index 3cb3a9e5f..f0021334b 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1001,6 +1001,7 @@ en: sent: File sent to printer protocols: moonraker: Moonraker / Klipper + octoprint: Octoprint update: success: Printer created successfully renderer: diff --git a/config/locales/es.yml b/config/locales/es.yml index 5fa45e9e3..88ce5281b 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -1001,6 +1001,7 @@ es: sent: protocols: moonraker: + octoprint: update: success: renderer: diff --git a/config/locales/fr.yml b/config/locales/fr.yml index a7b4299e4..84a7781dc 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -1003,6 +1003,7 @@ fr: sent: protocols: moonraker: + octoprint: update: success: renderer: diff --git a/config/locales/ja.yml b/config/locales/ja.yml index b3b9c9822..97822b600 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -1001,6 +1001,7 @@ ja: sent: protocols: moonraker: + octoprint: update: success: renderer: diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 43c1691a5..8f3c5e13b 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -1001,6 +1001,7 @@ nl: sent: protocols: moonraker: + octoprint: update: success: renderer: diff --git a/config/locales/pl.yml b/config/locales/pl.yml index e7896c830..7bda1cc86 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -1001,6 +1001,7 @@ pl: sent: protocols: moonraker: + octoprint: update: success: renderer: diff --git a/config/locales/pt.yml b/config/locales/pt.yml index f8f187f51..57d11412b 100644 --- a/config/locales/pt.yml +++ b/config/locales/pt.yml @@ -1001,6 +1001,7 @@ pt: sent: protocols: moonraker: + octoprint: update: success: renderer: diff --git a/config/locales/ru.yml b/config/locales/ru.yml index e6168c3f7..89fefa357 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -1001,6 +1001,7 @@ ru: sent: protocols: moonraker: + octoprint: update: success: renderer: diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index dd08e9ff7..63c5b76fa 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -1001,6 +1001,7 @@ zh-CN: sent: protocols: moonraker: + octoprint: update: success: renderer: