67 lines
1.8 KiB
Ruby
67 lines
1.8 KiB
Ruby
module AsaCtrl
|
|
module Mods
|
|
MOD_DATABASE_PATH = '/home/gameserver/server-files/mods.json'
|
|
|
|
class Database
|
|
@@singleton_reference = nil
|
|
|
|
def initialize(database_path)
|
|
@database_path = database_path
|
|
|
|
ensure_database_presence!
|
|
load_database
|
|
end
|
|
|
|
def self.get_instance
|
|
return @@singleton_reference if @@singleton_reference
|
|
@@singleton_reference = Database.new(MOD_DATABASE_PATH)
|
|
end
|
|
|
|
def enable_mod!(mod_id)
|
|
@database.each do |record|
|
|
if record['mod_id'].to_i == mod_id.to_i
|
|
raise AsaCtrl::Errors::ModAlreadyEnabledError if record['enabled']
|
|
|
|
record['enabled'] = true
|
|
write_database!
|
|
|
|
return
|
|
end
|
|
end
|
|
|
|
add_new_record!(mod_id, 'unknown', true, false)
|
|
end
|
|
|
|
def add_new_record!(mod_id, name, enabled, scanned)
|
|
@database << {
|
|
mod_id: mod_id.to_i,
|
|
name: name,
|
|
enabled: enabled,
|
|
scanned: scanned
|
|
}
|
|
|
|
write_database!
|
|
end
|
|
|
|
def write_database!
|
|
File.write(@database_path, JSON.pretty_generate(@database))
|
|
end
|
|
|
|
def ensure_database_presence!
|
|
return if File.exist?(@database_path)
|
|
|
|
@database = []
|
|
write_database!
|
|
end
|
|
|
|
def load_database
|
|
@database = JSON.parse(File.read(@database_path))
|
|
rescue JSON::ParserError
|
|
# we do not want to delete the file for the user, as they might want to save its content first
|
|
AsaCtrl::Cli.exit_with_error!("mods.json file is corrupted and cannot be parsed, please delete this file " \
|
|
"manually. It can be found in the server files root directory.", AsaCtrl::ExitCodes::CORRUPTED_MODS_DATABASE)
|
|
end
|
|
end
|
|
end
|
|
end
|