Extract thumbnails from FreeCAD files to display as previews

This commit is contained in:
James Smith committed 2026-07-24 10:59:45 +01:00
1 parent 7db97bcd15
commit 3c2a96a4dc
3 files changed
+27

No files matched your search

@@ -0,0 +1,4 @@
class FileHandlers::FreecadThumbnailExtractor < FileHandlers::Base
ENVIRONMENTS = [:server].freeze
INPUT_TYPES = [Mime[:fcstd]].freeze
end
@@ -0,0 +1,19 @@
class FreecadThumbnailExtractorService
def initialize(file:)
@file = file
end
def call
thumbnail = nil
Archive::Reader.open_filename(@file.path) do |reader|
reader.each_entry do |entry|
next unless entry.pathname == "thumbnails/Thumbnail.png"
Dir.mktmpdir do |dir|
reader.extract(entry, Archive::EXTRACT_SECURE, destination: dir)
thumbnail = File.read(File.join(dir, "thumbnails/Thumbnail.png"))
end
end
end
thumbnail ? StringIO.new(thumbnail) : nil
end
end
+4
View File
@@ -133,6 +133,10 @@ class ApplicationUploader < Shrine
Shrine.with_file(original) do
{render: GcodeThumbnailExtractorService.new(file: it).call}.compact
end
elsif SiteSettings.generate_model_renders && FileHandlers::FreecadThumbnailExtractor.can_load?(context[:record].mime_type)
Shrine.with_file(original) do
{render: FreecadThumbnailExtractorService.new(file: it).call}.compact
end
elsif SiteSettings.generate_model_renders && FileHandlers::F3d.can_load?(context[:record].mime_type) && context[:record]&.is_3d_model?
Shrine.with_file(original) do
up = context[:record]&.up_direction