Class: JekyllImgFlow::BuildTimeProcessor

Inherits:
Object
  • Object
show all
Defined in:
lib/jekyll-imgflow/build_time_processor.rb

Overview

BuildTimeProcessor - processes images during Jekyll build Generates default image versions for all originals

Instance Method Summary collapse

Constructor Details

#initialize(site) ⇒ BuildTimeProcessor

Returns a new instance of BuildTimeProcessor.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/jekyll-imgflow/build_time_processor.rb', line 7

def initialize(site)
  @site = site
  @config = Config.new(site)
  @manifest = ManifestManager.new(site)
  @path_resolver = PathResolver.new(@config)
  @registry = ProviderRegistry.new(@config)

  # Initialize operation processor with current provider
  provider = @registry.current_provider
  @operation_processor = OperationProcessor.new(provider, @path_resolver, @manifest, @config) if provider

  # Initialize batch manager
  @batch_manager = BatchManager.new(@operation_processor)

  # Store all components in site for sharing with ImgFlow tag
  @filename_generator = JekyllImgFlow::FilenameGenerator.new

  @site.imgflow_components = {
    config: @config,
    manifest: @manifest,
    path_resolver: @path_resolver,
    filename_generator: @filename_generator,
    registry: @registry,
    provider: provider,
    operation_processor: @operation_processor,
    stats: @operation_processor&.stats,
    preset_manager: JekyllImgFlow::PresetManager.new(@site, @config)
  }
end

Instance Method Details

#process_changed_imagesObject

Process all changed images in originals folder



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/jekyll-imgflow/build_time_processor.rb', line 38

def process_changed_images
  return { completed: 0, failed: 0 } unless @operation_processor

  Jekyll.logger.info "🔄 BuildTimeProcessor: Processing changed images"

  # Get all original images
  original_paths = find_original_images
  Jekyll.logger.info "📸 Found #{original_paths.length} original images"

  originals_dir = File.join(@site.source, @config.originals)

  # Clean up manifest entries for deleted originals
  current_originals = original_paths.map { |path| path.sub("#{originals_dir}/", "") }
  @manifest.cleanup_deleted_originals(current_originals)
  @manifest.cleanup_obsolete_defaults(expected_default_operations)
  @manifest.reset_page_usage unless incremental_build?

  # Build tasks for each original image
  original_paths.reject { |path| AnimatedGifDetector.animated?(path) }.each do |path|
    original_name = path.sub("#{originals_dir}/", "")
    file_digest = @filename_generator.file_digest(path)

    # Check if needs processing (file changed or provider changed)
    if needs_processing?(original_name, path, file_digest)
      Jekyll.logger.info "🔧 Queuing default versions for: #{original_name}"

      # Build default tasks
      tasks = BatchManager.build_default_tasks(
        original_name, path, @config, @site, file_digest: file_digest
      )
      force_processing = source_digest_changed?(original_name, file_digest)
      tasks.each { |task| task[:force_processing] = force_processing }
      @batch_manager.add_tasks(tasks)
    else
      expected_default_operations.length.times { @operation_processor.stats.record_cache_hit }
      Jekyll.logger.debug "⏭️  Skipping #{original_name} - already up-to-date"
    end
  end

  # Process all queued tasks
  results = @batch_manager.process_all
  register_skipped_tasks(@batch_manager.completed)

  # Persist newly processed defaults; unchanged builds keep page-usage resets in memory
  # until post_write saves the final stable manifest.
  @manifest.save unless results[:completed].zero? && results[:failed].zero?

  Jekyll.logger.info "✅ BuildTimeProcessor complete: #{results[:completed]} completed, #{results[:failed]} failed"

  results
end