59 lines
1.4 KiB
Ruby
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 |