Files
zima-apps/Apps/ark-suac/ark-survival-ascended-linux-container-image/root/usr/share/asa-ctrl/mods/database.rb
T
2026-03-23 21:23:16 +01:00

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