~mvo/click/lp1245826-multiple-hookfiles

« back to all changes in this revision

Viewing changes to lib/click/hooks.vala

  • Committer: Michael Vogt
  • Date: 2014-09-23 06:18:47 UTC
  • Revision ID: michael.vogt@ubuntu.com-20140923061847-6nydfndruye3vuny
refactor duplicated code into get_relative_paths_for_hookname()

Show diffs side-by-side

added added

removed removed

Lines of Context:
959
959
                        var manifest_hooks = read_manifest_hooks
960
960
                                (db, unpacked.package, unpacked.version);
961
961
                        foreach (var app_name in manifest_hooks.get_members ()) {
962
 
                                var hooks = manifest_hooks.get_object_member
963
 
                                        (app_name);
964
 
                                if (hooks.has_member (hook_name)) {
965
 
                                        var node = hooks.get_member(hook_name);
966
 
                                        var value_type = node.get_value_type();
967
 
                                        string[] all_paths = {};
968
 
                                        if (value_type.name() == "gchararray")
969
 
                                                all_paths += node.get_string();
970
 
                                        else {
971
 
                                                var array = node.get_array ();
972
 
                                                foreach(var elm in array.get_elements ()) {
973
 
                                                        all_paths += elm.get_string ();
974
 
                                                }
975
 
                                        }
976
 
                                        foreach (var relative_path in all_paths)
 
962
                                foreach (var relative_path in get_relative_paths_for_hookname(manifest_hooks, app_name, hook_name))
977
963
                                        {
978
964
                                                ret.prepend (new RelevantApp
979
965
                                                                         (unpacked.package,
981
967
                                                                          unpacked.user_name,
982
968
                                                                          relative_path));
983
969
                                        }
984
 
                                }
985
970
                        }
986
971
                }
987
972
                ret.reverse ();
1076
1061
        }
1077
1062
}
1078
1063
 
 
1064
private List<string>
 
1065
get_relative_paths_for_hookname(Json.Object manifest, string app_name, string hook_name) throws Error
 
1066
{
 
1067
        var ret = new List<string> ();
 
1068
        var hooks = manifest.get_object_member (app_name);
 
1069
        if (!hooks.has_member (hook_name))
 
1070
                return ret;
 
1071
 
 
1072
        var node = hooks.get_member(hook_name);
 
1073
        var value_type = node.get_value_type();
 
1074
        // support both single string and list for hook targets in manifest
 
1075
        if (value_type.name() == "gchararray")
 
1076
                ret.append (node.get_string());
 
1077
        else {
 
1078
                var array = node.get_array ();
 
1079
                foreach(var elm in array.get_elements ()) {
 
1080
                        ret.append (elm.get_string ());
 
1081
                }
 
1082
        }
 
1083
        return ret;
 
1084
}
 
1085
 
1079
1086
private Gee.TreeSet<AppHook>
1080
1087
get_app_hooks (Json.Object manifest)
1081
1088
{
1083
1090
        foreach (var app_name in manifest.get_members ()) {
1084
1091
                var hooks = manifest.get_object_member (app_name);
1085
1092
                foreach (var hook_name in hooks.get_members ())
1086
 
                {
1087
 
                        var node = hooks.get_member(hook_name);
1088
 
                        var value_type = node.get_value_type();
1089
 
                        string[] all_paths = {};
1090
 
                        if (value_type.name() == "gchararray")
1091
 
                                all_paths += node.get_string();
1092
 
                        else {
1093
 
                                var array = node.get_array ();
1094
 
                                foreach(var elm in array.get_elements ()) {
1095
 
                                        all_paths += elm.get_string ();
1096
 
                                }
1097
 
                        }
1098
 
                        foreach (var relative_path in all_paths)
 
1093
                        foreach (var relative_path in get_relative_paths_for_hookname(manifest, app_name, hook_name))
1099
1094
                                items.add (new AppHook (app_name, hook_name, relative_path));
1100
 
                }
1101
1095
        }
1102
1096
        return items;
1103
1097
}
1148
1142
                var hook_names = app_hooks.get_members ();
1149
1143
                hook_names.sort (strcmp);
1150
1144
                foreach (var hook_name in hook_names) {
1151
 
                        var node = app_hooks.get_member(hook_name);
1152
 
                        var value_type = node.get_value_type();
1153
 
                        string[] all_paths = {};
1154
 
                        if (value_type.name() == "gchararray")
1155
 
                                all_paths += node.get_string();
1156
 
                        else {
1157
 
                                var array = node.get_array ();
1158
 
                                foreach(var elm in array.get_elements ()) {
1159
 
                                        all_paths += elm.get_string ();
1160
 
                                }
1161
 
                        }
1162
 
                        foreach (var relative_path in all_paths) {
 
1145
                        foreach (var relative_path in get_relative_paths_for_hookname (new_manifest, app_name, hook_name)) {
1163
1146
                          foreach (var hook in Hook.open_all (db, hook_name)) {
1164
1147
                                if (hook.is_user_level != (user_name != null))
1165
1148
                                        continue;