Much base work started
This commit is contained in:
56
app/services/file_scanner_service.rb
Normal file
56
app/services/file_scanner_service.rb
Normal file
@@ -0,0 +1,56 @@
|
||||
class FileScannerService
|
||||
def initialize(storage_location)
|
||||
@storage_location = storage_location
|
||||
end
|
||||
|
||||
def scan
|
||||
return failure_result("Storage location not accessible") unless @storage_location.accessible?
|
||||
|
||||
video_files = find_video_files
|
||||
new_videos = process_files(video_files)
|
||||
|
||||
success_result(new_videos)
|
||||
rescue => e
|
||||
failure_result(e.message)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def find_video_files
|
||||
Dir.glob(File.join(@storage_location.path, "**", "*.{mp4,avi,mkv,mov,wmv,flv,webm,m4v}"))
|
||||
end
|
||||
|
||||
def process_files(file_paths)
|
||||
new_videos = []
|
||||
|
||||
file_paths.each do |file_path|
|
||||
filename = File.basename(file_path)
|
||||
|
||||
next if Video.exists?(filename: filename, storage_location: @storage_location)
|
||||
|
||||
video = Video.create!(
|
||||
filename: filename,
|
||||
storage_location: @storage_location,
|
||||
work: Work.find_or_create_by(title: extract_title(filename))
|
||||
)
|
||||
|
||||
new_videos << video
|
||||
VideoProcessorJob.perform_later(video.id)
|
||||
end
|
||||
|
||||
new_videos
|
||||
end
|
||||
|
||||
def extract_title(filename)
|
||||
# Simple title extraction - can be enhanced
|
||||
File.basename(filename, ".*").gsub(/[\[\(].*?[\]\)]/, "").strip
|
||||
end
|
||||
|
||||
def success_result(videos = [])
|
||||
{ success: true, videos: videos, message: "Found #{videos.length} new videos" }
|
||||
end
|
||||
|
||||
def failure_result(message)
|
||||
{ success: false, message: message }
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user