ef30c6d467bf71dba757b9822d60b935ee7de8f0
[scilab.git] / scilab / modules / atoms / macros / atomsGetConfig.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2009 - DIGITEO - Pierre MARECHAL <pierre.marechal@scilab.org>
3 // Copyright (C) 2021 - DIGITEO - Allan CORNET
4 //
5 // Copyright (C) 2012 - 2016 - Scilab Enterprises
6 //
7 // This file is hereby licensed under the terms of the GNU GPL v2.0,
8 // pursuant to article 5.3.4 of the CeCILL v.2.1.
9 // This file was originally licensed under the terms of the CeCILL v2.1,
10 // and continues to be available under such terms.
11 // For more information, see the COPYING file which you should have received
12 // along with this program.
13 //
14 // Get the configuration of the atoms system
15 //
16 function result = atomsGetConfig(field)
17
18     rhs = argn(2);
19
20     // Check number of input arguments
21     // =========================================================================
22     if rhs > 1 then
23         error(msprintf(gettext("%s: Wrong number of input argument: %d to %d expected.\n"), "atomsGetConfig", 0, 1));
24     end
25
26     // Check input parameters type
27     // =========================================================================
28     if (rhs > 0) & (type(field) <> 10) then
29         error(msprintf(gettext("%s: Wrong type for input argument #%d: string expected.\n"), "atomsGetConfig", 1));
30     end
31
32     // Check input parameters dimensions
33     // =========================================================================
34     if (rhs > 0) & (size(field, "*") <> 1) then
35         error(msprintf(gettext("%s: Wrong size for input argument #%d: string expected.\n"), "atomsGetConfig", 1));
36     end
37
38
39     if rhs <> 0 then
40         supported_field = ["useProxy", "proxyHost", "proxyPort", ..
41         "proxyUser", "proxyPassword", "offline", ..
42         "autoload", "autoloadAddAfterInstall", ..
43         "verbose", "downloadTool", "downloadTimeout", "updateTime"];
44
45         if ~or(convstr(supported_field) == convstr(field)) then
46             error(msprintf(gettext("%s: Wrong value for input argument #%d.\n"),"atomsGetConfig", 1));
47         end
48     end
49
50     pref_attrs = ["useProxy", "proxyHost", "proxyPort", "proxyUser", "proxyPassword";
51     "enabled", "host", "port", "user", "password"];
52
53     // Load Atoms Internals lib if it's not already loaded
54     // =========================================================================
55     if ~ exists("atomsinternalslib") then
56         load("SCI/modules/atoms/macros/atoms_internals/lib");
57     end
58
59     // Define the default value of the result according to the number of input
60     // arguments
61     // =========================================================================
62
63     if rhs == 0 then
64         result = struct();
65     else
66         i = find(pref_attrs(1, :) == field);
67         if ~isempty(i) then
68             result = getPreferencesValue("//web/body/proxy", pref_attrs(2, i));
69             if result == "true" then
70                 result = "True";
71             elseif result == "false" then
72                 result = "False";
73             end
74             return;
75         end
76
77         result = "";
78     end
79
80     // Define the path of the file that will record the change
81     // =========================================================================
82     atoms_directory = atomsPath("system", "user");
83
84     // Does the SCIHOME/atoms/config exist, if yes load it
85     // =========================================================================
86
87     if fileinfo(atoms_directory + "config") <> [] then
88         config_lines = mgetl(atoms_directory + "config");
89     else
90         if (rhs == 0)
91             values = getPreferencesValue("//web/body/proxy", pref_attrs(2, :));
92             for i = 1:size(pref_attrs, "c")
93                 if ~isempty(values(i)) then
94                     if values(i) == "true" then
95                         values(i) = "True";
96                     elseif values(i) == "false" then
97                         values(i) = "False";
98                     end
99                     result(pref_attrs(1, i)) = values(i);
100                 end
101             end
102         end
103         return;
104     end
105
106     // Loop on each URL specified as input argument
107     // =========================================================================
108
109     for i=1:size(config_lines, "*")
110         if isempty( stripblanks(config_lines(i))) then
111             continue;
112         end
113
114         if regexp(config_lines(i),"/^[a-zA-Z0-9]*\s=\s/","o") == 1 then
115             // process field
116             current_field_length  = regexp(config_lines(i),"/\s=\s/","o")
117             current_field     = part(config_lines(i),1:current_field_length-1);
118             current_value     = part(config_lines(i),current_field_length+3:length(config_lines(i)));
119
120             if (rhs == 1) & (current_field == field) then
121                 result = current_value;
122                 return;
123             elseif(rhs == 0)
124                 result(current_field) = current_value;
125             end
126         else
127             error(msprintf(gettext("%s: The config file (''%s'') is not well formatted at line %d\n"),"atomsGetConfig",atoms_directory+"config",i));
128         end
129     end
130
131     if (rhs == 0)
132         values = getPreferencesValue("//web/body/proxy", pref_attrs(2, :));
133         for i = 1:size(pref_attrs, "c")
134             if ~isempty(values(i)) then
135                 if values(i) == "true" then
136                     values(i) = "True";
137                 elseif values(i) == "false" then
138                     values(i) = "False";
139                 end
140                 result(pref_attrs(1, i)) = values(i);
141             end
142         end
143     end
144
145 endfunction