class RomLoader::ArchiveExtractor
Public Class Methods
create_extract_dir(game_obj)
click to toggle source
# File lib/romloader/archive_extractor.rb, line 47 def self.create_extract_dir(game_obj) /(?<=\().+(?=\))/.match(game_obj.system.name) ? system_name = /(?<=\().+(?=\))/.match(game_obj.system.name)[0].downcase : system_name = game_obj.system.name.rstrip.gsub(/[[[:space:]]\/]/, "_").downcase dir_w_system = File.join(Dir.home,"videogame_roms",system_name) Dir.mkdir(dir_w_system) unless Dir.exist?(dir_w_system) dir_w_system end
delete_archive(dir)
click to toggle source
# File lib/romloader/archive_extractor.rb, line 58 def self.delete_archive(dir) File.delete(dir) end
extract(archive_dir,extract_dir,game_obj)
click to toggle source
Extracts zip or 7-zip rom files, manages the extracted dirs, then deletes archive files
# File lib/romloader/archive_extractor.rb, line 5 def self.extract(archive_dir,extract_dir,game_obj) file_or_dir_to_open = nil dir_game_name = game_obj.filename.split(game_obj.file_ext)[0] if game_obj.file_ext == ".zip" puts "Extracting #{game_obj.filename}" Zip::File.open(archive_dir) do |zip_archive| zip_archive.glob("*htm").each { |entry| zip_archive.remove(entry) } Dir.mkdir(File.join(extract_dir,dir_game_name)) if zip_archive.size > 1 && !Dir.exist?(File.join(extract_dir,dir_game_name)) zip_archive.each_entry do |rom| if Dir.exist?(File.join(extract_dir,dir_game_name)) rom.extract(File.join(extract_dir,dir_game_name,rom.name)) unless File.exist?(File.join(extract_dir,dir_game_name,rom.name)) else rom.extract(File.join(extract_dir,rom.name)) unless File.exist?(File.join(extract_dir,rom.name)) end zip_archive.size == 1 ? file_or_dir_to_open = File.join(extract_dir,"\"#{rom.name}\"") : file_or_dir_to_open = File.join(extract_dir,dir_game_name) end end elsif game_obj.file_ext == ".7z" puts "Extracting #{game_obj.filename}" File.open(archive_dir, "rb") do |seven_zip_archive| SevenZipRuby::Reader.open(seven_zip_archive) do |szr| if szr.entries.size > 2 Dir.mkdir(File.join(extract_dir,dir_game_name)) unless Dir.exist?(File.join(extract_dir,dir_game_name)) szr.extract_if(File.join(extract_dir,dir_game_name)) { |entry| !/\.htm/.match(entry.inspect) } file_or_dir_to_open = File.join(extract_dir,dir_game_name) else szr.extract_if(extract_dir) do |entry| game_name = /(?<=file, |dir, |anti, )[.[^\.]]+\..+(?=>)/.match(entry.inspect)[0] unless /\.htm/.match(entry.inspect) !/\.htm/.match(entry.inspect) end file_or_dir_to_open = File.join(extract_dir,"\"#{game_name}\"") end end end else puts "NOTE: No archive extraction. Only Zip and 7-Zip extraction is supported." file_or_dir_to_open = extract_dir end file_or_dir_to_open end
move_archive(src,dest)
click to toggle source
# File lib/romloader/archive_extractor.rb, line 54 def self.move_archive(src,dest) FileUtils.move src, dest end