Skip to content
API Documentation
BastionGuard™
ResourceHelper.vala
Go to the documentation of this file.
1using GLib;
2using Gee;
3
4public class ResourceHelper : GLib.Object {
5
6 public static string resource_prefix() {
7 return "/org/bastionguard/backup";
8 }
9
10 public static string resource_uri(string rel) {
11 return "resource://" + resource_prefix() + "/" + rel;
12 }
13
14 public static bool resource_exists(string rel) {
15 try {
16 var file = File.new_for_uri(resource_uri(rel));
17 return file.query_exists();
18 } catch (Error e) {
19 return false;
20 }
21 }
22
23 public static Gee.ArrayList<string> base_dirs() {
24 var dirs = new Gee.ArrayList<string>();
25
26 string? env = Environment.get_variable("BASTIONGUARD_DATA");
27 if (env != null && env.length > 0) dirs.add(env);
28
29 dirs.add("/usr/share/bastionguard-backup");
30 dirs.add("/usr/local/share/bastionguard-backup");
31 dirs.add("/usr/share/BastionGuard/data");
32 dirs.add("/usr/local/share/BastionGuard/data");
33
34 string user_data = Environment.get_user_data_dir();
35 dirs.add(GLib.Path.build_filename(user_data, "bastionguard-backup"));
36 dirs.add(GLib.Path.build_filename(user_data, "BastionGuard", "data"));
37
38 string cwd = Environment.get_current_dir();
39 dirs.add(GLib.Path.build_filename(cwd, "files"));
40 dirs.add(GLib.Path.build_filename(cwd, "icons"));
41 dirs.add(GLib.Path.build_filename(cwd, "src", "share", "bastionguard-backup"));
42 dirs.add(GLib.Path.build_filename(cwd, "src", "share", "bastionguard-backup", "images"));
43 dirs.add(GLib.Path.build_filename(cwd, "src", "share", "pixmaps"));
44 dirs.add(GLib.Path.build_filename(cwd, "src", "share", "icons"));
45 dirs.add(GLib.Path.build_filename(cwd, "src", "share"));
46 dirs.add(GLib.Path.build_filename(cwd, "share"));
47 return dirs;
48 }
49
50 public static string? resolve_file(string rel) {
51 foreach (var search_root in base_dirs()) {
52 var p = GLib.Path.build_filename(search_root, rel);
53 if (FileUtils.test(p, FileTest.EXISTS)) return p;
54 }
55 return null;
56 }
57
58 public static string? resolve_css(string name) {
59 string[] candidates = {
60 name,
61 GLib.Path.build_filename("css", name),
62 GLib.Path.build_filename("data", name)
63 };
64 foreach (var rel in candidates) {
65 var p = resolve_file(rel);
66 if (p != null) return p;
67 }
68 return null;
69 }
70
71 public static string? resolve_icon_file(string icon_name) {
72 string[] exts = { ".png", ".svg", ".jpg", ".gif" };
73 string[] rels = {
74 GLib.Path.build_filename("images", icon_name),
75 GLib.Path.build_filename("pixmaps", icon_name),
76 GLib.Path.build_filename("icons", icon_name),
77 icon_name
78 };
79 foreach (var rel0 in rels) {
80 if (rel0.has_suffix(".png") || rel0.has_suffix(".svg") || rel0.has_suffix(".jpg") || rel0.has_suffix(".gif")) {
81 var p = resolve_file(rel0);
82 if (p != null) return p;
83 } else {
84 foreach (var ext in exts) {
85 var p = resolve_file(rel0 + ext);
86 if (p != null) return p;
87 }
88 }
89 }
90
91 string[] abs = {
92 GLib.Path.build_filename("/usr/share/bastionguard-backup/images", icon_name + ".png"),
93 GLib.Path.build_filename("/usr/share/bastionguard-backup/images", icon_name + ".svg"),
94 GLib.Path.build_filename("/usr/local/share/bastionguard-backup/images", icon_name + ".png"),
95 GLib.Path.build_filename("/usr/local/share/bastionguard-backup/images", icon_name + ".svg"),
96 GLib.Path.build_filename("/usr/share/pixmaps", icon_name + ".png"),
97 GLib.Path.build_filename("/usr/local/share/pixmaps", icon_name + ".png"),
98 GLib.Path.build_filename("/usr/share/icons/hicolor/128x128/apps", icon_name + ".png"),
99 GLib.Path.build_filename("/usr/share/icons/hicolor/96x96/apps", icon_name + ".png"),
100 GLib.Path.build_filename("/usr/share/icons/hicolor/64x64/apps", icon_name + ".png"),
101 GLib.Path.build_filename("/usr/share/icons/hicolor/48x48/apps", icon_name + ".png"),
102 GLib.Path.build_filename("/usr/share/icons/hicolor/32x32/apps", icon_name + ".png"),
103 GLib.Path.build_filename("/usr/share/icons/hicolor/24x24/apps", icon_name + ".png"),
104 GLib.Path.build_filename("/usr/share/icons/hicolor/22x22/apps", icon_name + ".png"),
105 GLib.Path.build_filename("/usr/share/icons/hicolor/16x16/apps", icon_name + ".png"),
106 GLib.Path.build_filename("/usr/local/share/icons/hicolor/128x128/apps", icon_name + ".png")
107 };
108 foreach (var p in abs) if (FileUtils.test(p, FileTest.EXISTS)) return p;
109 return null;
110 }
111}
static bool resource_exists(string rel)
static Gee.ArrayList< string > base_dirs()
static ? string resolve_icon_file(string icon_name)
static ? string resolve_css(string name)
static ? string resolve_file(string rel)
static string resource_prefix()
static string resource_uri(string rel)