Skip to content

Commit

Permalink
Tweaks: load tweaks recursively from subdirectories (#355)
Browse files Browse the repository at this point in the history
TweaksList: sort tweak groups by name

Former-commit-id: f590902
  • Loading branch information
tkashkin committed Aug 3, 2020
1 parent c3872ef commit 6db1504
Show file tree
Hide file tree
Showing 10 changed files with 51 additions and 36 deletions.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
74 changes: 40 additions & 34 deletions src/data/tweaks/Tweak.vala
Original file line number Diff line number Diff line change
Expand Up @@ -239,58 +239,64 @@ namespace GameHub.Data.Tweaks
}
}

private static HashMap<string, Tweak>? tweaks = null;
private static HashMap<string, Tweak>? cached_tweaks = null;
public static HashMap<string, Tweak> load_tweaks(bool refresh=false)
{
if(tweaks != null && tweaks.size > 0 && !refresh)
if(cached_tweaks != null && cached_tweaks.size > 0 && !refresh)
{
return tweaks;
return cached_tweaks;
}

tweaks = new HashMap<string, Tweak>();
cached_tweaks = new HashMap<string, Tweak>();

foreach(var data_dir in FS.get_data_dirs("tweaks"))
{
if(GameHub.Application.log_verbose)
var dir_tweaks = load_tweaks_recursive(data_dir);
if(dir_tweaks != null && dir_tweaks.size > 0)
{
debug("[Tweak.load_tweaks] Directory: '%s'", data_dir.get_path());
foreach(var tweak in dir_tweaks)
{
cached_tweaks.set(tweak.id, tweak);
}
}
}

try
return cached_tweaks;
}

private static ArrayList<Tweak>? load_tweaks_recursive(File directory)
{
var tweaks = new ArrayList<Tweak>();
try
{
FileInfo? finfo = null;
var enumerator = directory.enumerate_children("standard::*", FileQueryInfoFlags.NOFOLLOW_SYMLINKS);
while((finfo = enumerator.next_file()) != null)
{
FileInfo? finfo = null;
var enumerator = data_dir.enumerate_children("standard::*", FileQueryInfoFlags.NOFOLLOW_SYMLINKS);
while((finfo = enumerator.next_file()) != null)
var fname = finfo.get_name();
var file = directory.get_child(fname);
if(finfo.get_file_type() == FileType.DIRECTORY)
{
var fname = finfo.get_name();
if(fname.down().has_suffix(".json"))
var subdir_tweaks = load_tweaks_recursive(file);
if(subdir_tweaks != null && subdir_tweaks.size > 0)
{
var file = data_dir.get_child(fname);
var loaded_tweaks = load_from_file(file);

if(GameHub.Application.log_verbose)
{
debug("[Tweak.load_tweaks] File: '%s'; %d tweak(s):", file.get_path(), loaded_tweaks.size);
}

foreach(var tweak in loaded_tweaks)
{
tweaks.set(tweak.id, tweak);

if(GameHub.Application.log_verbose)
{
debug("[Tweak.load_tweaks] %s", Json.to_string(new Json.Node(Json.NodeType.OBJECT).init_object(tweak.to_json()), false));
}
}
tweaks.add_all(subdir_tweaks);
}
}
else if(fname.down().has_suffix(".json"))
{
var file_tweaks = load_from_file(file);
if(file_tweaks != null && file_tweaks.size > 0)
{
tweaks.add_all(file_tweaks);
}
}
}
catch(Error e)
{
warning("[Tweak.load_tweaks] %s", e.message);
}
}

catch(Error e)
{
warning("[Tweak.load_tweaks_recursive] Error while loading tweaks from '%s': %s", directory.get_path(), e.message);
}
return tweaks;
}

Expand Down
13 changes: 11 additions & 2 deletions src/ui/widgets/tweaks/TweaksList.vala
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,18 @@ namespace GameHub.UI.Widgets.Tweaks

if(tweaks != null && tweaks.size > 0)
{
foreach(var group in tweaks.entries)
var tab_names = new ArrayList<string?>();
tab_names.add_all(tweaks.keys);
tab_names.sort((first, second) => {
if(first == null && second == null) return 0;
if(first != null && second == null) return -1;
if(first == null && second != null) return 1;
return first.collate(second);
});

foreach(var tab_name in tab_names)
{
var tab = new TweakGroupTab(game, compat_tool, group.key ?? _("Ungrouped"), group.value);
var tab = new TweakGroupTab(game, compat_tool, tab_name ?? _("Ungrouped"), tweaks[tab_name]);
append_page(tab, new Label(tab.group));
}
show_tabs = tweaks.size > 1;
Expand Down

0 comments on commit 6db1504

Please sign in to comment.