Files
velour/app/services/storage_adapters/local_adapter.rb
Dan Milne 88a906064f
Some checks failed
CI / scan_ruby (push) Has been cancelled
CI / scan_js (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / test (push) Has been cancelled
CI / system-test (push) Has been cancelled
Much base work started
2025-10-31 14:36:14 +11:00

59 lines
1.4 KiB
Ruby

module StorageAdapters
class LocalAdapter < BaseAdapter
VIDEO_EXTENSIONS = %w[.mp4 .mkv .avi .mov .wmv .flv .webm .m4v].freeze
def scan
return [] unless readable?
pattern = if storage_location.scan_subdirectories
File.join(storage_location.path, "**", "*{#{VIDEO_EXTENSIONS.join(',')}}")
else
File.join(storage_location.path, "*{#{VIDEO_EXTENSIONS.join(',')}}")
end
Dir.glob(pattern, File::FNM_CASEFOLD).map do |full_path|
full_path.sub(storage_location.path + "/", "")
end
end
def stream_url(video)
full_path(video)
end
def exists?(file_path)
File.exist?(full_path_from_relative(file_path))
end
def readable?
return false unless storage_location.path.present?
File.directory?(storage_location.path) && File.readable?(storage_location.path)
end
def writable?
super && File.writable?(storage_location.path)
end
def write(source_path, dest_path)
dest_full_path = full_path_from_relative(dest_path)
FileUtils.mkdir_p(File.dirname(dest_full_path))
FileUtils.cp(source_path, dest_full_path)
dest_path
end
def download_to_temp(video)
# Already local, return path
full_path(video)
end
def full_path(video)
full_path_from_relative(video.file_path)
end
private
def full_path_from_relative(file_path)
File.join(storage_location.path, file_path)
end
end
end