Files
Super-Mario-Bros.-Remastere…/addons/mod_loader/internal/cache.gd
2025-09-26 20:32:42 +01:00

93 lines
2.7 KiB
GDScript

class_name _ModLoaderCache
extends RefCounted
# This Class provides methods for caching data.
static var CACHE_FILE_PATH = get_cache_path()
const LOG_NAME = "ModLoader:Cache"
static func get_cache_path() -> String:
var exe_dir = OS.get_executable_path().get_base_dir()
var portable_flag = exe_dir.path_join("portable.txt")
if FileAccess.file_exists(portable_flag):
return exe_dir.path_join("config/mod_loader_cache.json")
else:
return "user://mod_loader_cache.json"
# ModLoaderStore is passed as parameter so the cache data can be loaded on ModLoaderStore._init()
static func init_cache(_ModLoaderStore) -> void:
if not _ModLoaderFile.file_exists(CACHE_FILE_PATH):
_init_cache_file()
return
_load_file(_ModLoaderStore)
# Adds data to the cache
static func add_data(key: String, data: Dictionary) -> Dictionary:
if ModLoaderStore.cache.has(key):
ModLoaderLog.error("key: \"%s\" already exists in \"ModLoaderStore.cache\"" % key, LOG_NAME)
return {}
ModLoaderStore.cache[key] = data
return ModLoaderStore.cache[key]
# Get data from a specific key
static func get_data(key: String) -> Dictionary:
if not ModLoaderStore.cache.has(key):
ModLoaderLog.info("key: \"%s\" not found in \"ModLoaderStore.cache\"" % key, LOG_NAME)
return {}
return ModLoaderStore.cache[key]
# Get the entire cache dictionary
static func get_cache() -> Dictionary:
return ModLoaderStore.cache
static func has_key(key: String) -> bool:
return ModLoaderStore.cache.has(key)
# Updates or adds data to the cache
static func update_data(key: String, data: Dictionary) -> Dictionary:
# If the key exists
if has_key(key):
# Update the data
ModLoaderStore.cache[key].merge(data, true)
else:
ModLoaderLog.info("key: \"%s\" not found in \"ModLoaderStore.cache\" added as new data instead." % key, LOG_NAME, true)
# Else add new data
add_data(key, data)
return ModLoaderStore.cache[key]
# Remove data from the cache
static func remove_data(key: String) -> void:
if not ModLoaderStore.cache.has(key):
ModLoaderLog.error("key: \"%s\" not found in \"ModLoaderStore.cache\"" % key, LOG_NAME)
return
ModLoaderStore.cache.erase(key)
# Save the cache to the cache file
static func save_to_file() -> void:
_ModLoaderFile.save_dictionary_to_json_file(ModLoaderStore.cache, CACHE_FILE_PATH)
# Load the cache file data and store it in ModLoaderStore
# ModLoaderStore is passed as parameter so the cache data can be loaded on ModLoaderStore._init()
static func _load_file(_ModLoaderStore = ModLoaderStore) -> void:
_ModLoaderStore.cache = _ModLoaderFile.get_json_as_dict(CACHE_FILE_PATH)
# Create an empty cache file
static func _init_cache_file() -> void:
_ModLoaderFile.save_dictionary_to_json_file({}, CACHE_FILE_PATH)