mirror of
https://github.com/manyfold3d/manyfold.git
synced 2026-10-23 04:02:19 -05:00
Extract thumbnails from FreeCAD files to display as previews
This commit is contained in:
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
|
||||
@@ -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
|
||||
|
||||
Reference in new issue
Block a user