Module: ActiveEncode::EngineAdapters::FfmpegAdapter::Cleaner

Included in:
ActiveEncode::EngineAdapters::FfmpegAdapter
Defined in:
lib/active_encode/engine_adapters/ffmpeg_adapter/cleaner.rb

Instance Method Summary collapse

Instance Method Details

#build_file_list(directory, filename) ⇒ Object



33
34
35
36
37
38
# File 'lib/active_encode/engine_adapters/ffmpeg_adapter/cleaner.rb', line 33

def build_file_list(directory, filename)
  file_path = File.join(directory, "**", filename)
  # Some of the files generated by the ffmpeg encode seem to be hidden files.
  # This uses File::FNM_DOTMATCH to include them in the results.
  Dir.glob(file_path, File::FNM_DOTMATCH)
end

#file_check(path, older_than) ⇒ Object



40
41
42
# File 'lib/active_encode/engine_adapters/ffmpeg_adapter/cleaner.rb', line 40

def file_check(path, older_than)
  File.mtime(path) < DateTime.now - older_than && File.file?(path)
end

#remove_child_files(directories, older_than) ⇒ Object



60
61
62
63
64
65
66
67
# File 'lib/active_encode/engine_adapters/ffmpeg_adapter/cleaner.rb', line 60

def remove_child_files(directories, older_than)
  files_to_delete = []
  directories.each do |d|
    files = Dir.children(d).select { |ch| file_check(File.join(d, ch), older_than) }
    files_to_delete += files.collect { |f| File.join(d, f) }
  end
  FileUtils.rm(files_to_delete) unless files_to_delete.empty?
end

#remove_empty_directories(directories) ⇒ Object



53
54
55
56
57
58
# File 'lib/active_encode/engine_adapters/ffmpeg_adapter/cleaner.rb', line 53

def remove_empty_directories(directories)
  directories_to_delete = directories.select { |d| Dir.empty?(d) }
  non_empty_directories = directories - directories_to_delete
  directories_to_delete += non_empty_directories.select { |ned| Dir.children(ned) == ["outputs"] && directories_to_delete.include?(File.join(ned, "outputs")) }
  FileUtils.rmdir(directories_to_delete) unless directories_to_delete.empty?
end

#remove_files(files, older_than) ⇒ Object



44
45
46
47
48
49
50
51
# File 'lib/active_encode/engine_adapters/ffmpeg_adapter/cleaner.rb', line 44

def remove_files(files, older_than)
  files_to_delete = files.select { |f| file_check(f, older_than) }
  FileUtils.rm(files_to_delete) unless files_to_delete.empty?

  # Return a list of any directories that were included in the files list for further processing.
  # The files list can include directories such as "/tmp/.." which should not be included in directory list.
  files.select { |f| File.directory?(f) unless f.end_with?(".") }
end

#remove_old_files!(options = {}) ⇒ Object

This method is to clean up files leftover from the ffmpeg encode process. File names for the pass_through adapter are the same, so this will clean up pass_through encodes as well.



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/active_encode/engine_adapters/ffmpeg_adapter/cleaner.rb', line 9

def remove_old_files!(options = {})
  default_options = {
    older_than: 2.weeks,
    no_outputs: ['input_metadata', 'duration_input_metadata', 'error.log', 'exit_status.code', 'progress', 'completed', 'pid', 'output_metadata-*'],
    outputs: false,
    all: false
  }
  options.reverse_merge!(default_options)

  if options[:all]
    files = build_file_list(WORK_DIR, "*")
    directories = remove_files(files, options[:older_than])
    remove_empty_directories(directories)
  elsif options[:outputs]
    output_directories = build_file_list(WORK_DIR, "outputs")
    remove_child_files(output_directories, options[:older_than])
    remove_empty_directories(output_directories)
  else
    files = []
    options[:no_outputs].each { |fn| files += build_file_list(WORK_DIR, fn) }
    remove_files(files, options[:older_than])
  end
end