Merge branch 'master' of git@git.scilab.org:scilab
[scilab.git] / scilab / modules / atoms / macros / atomsRepositoryAdd.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 //
4 // This file must be used under the terms of the CeCILL.
5 // This source file is licensed as described in the file COPYING, which
6 // you should have received as part of this distribution.  The terms
7 // are also available at
8 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
9
10 // Add an URL to the list of repositories, and returns
11
12 function nbAdd = atomsRepositoryAdd(url,allusers)
13         
14         // Load Atoms Internals lib if it's not already loaded
15         // =========================================================================
16         if ~ exists("atomsinternalslib") then
17                 load("SCI/modules/atoms/macros/atoms_internals/lib");
18         end
19         
20         rhs                    = argn(2);
21         nbAdd                = 0;
22         repositories         = []; // Column vector that contain user repositories
23         currentRepositories  = atomsRepositoryList();
24         currentRepositories  = currentRepositories(:,1);
25         valid_url_pattern    = "/^((((H|h)(T|t)|(F|f))(T|t)(P|p)((S|s)?))\:\/\/)?(www.|[a-zA-Z0-9].)[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,6}(\:[0-9]{1,5})*(\/($|[a-zA-Z0-9\.\,\;\?\''\\\+&amp;%\$#\=~_\-]+))*$/";
26         
27         // Check number of input arguments
28         // =========================================================================
29         
30         if rhs < 1 | rhs > 2 then
31                 error(msprintf(gettext("%s: Wrong number of input argument: %d to %d expected.\n"),"atomsRepositoryAdd",1,2));
32         end
33         
34         // Check URLs specified as first input argument
35         // =========================================================================
36         
37         if type(url) <> 10 then
38                 error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsRepositoryAdd",1));
39         end
40         
41         for i=1:size(url,"*")
42                 if ~ regexp(url(i),valid_url_pattern,"o") == 1 then
43                         error(msprintf(gettext("%s: Wrong value for input argument #%d: This ("+url(i)+") is not a valid URL.\n"),"atomsRepositoryAdd",1));
44                 end
45         end
46         
47         // Apply changes for all users or just for me ?
48         // =========================================================================
49         
50         if rhs == 1 then
51                 // By default, add the repository for all users (if we have write access
52                 // of course !)
53                 if atomsAUWriteAccess() then
54                         allusers = %T; 
55                 else
56                         allusers = %F;
57                 end
58         
59         else
60                 // Just check if it's a boolean
61                 if type(allusers) <> 4 then
62                         error(msprintf(gettext("%s: Wrong type for input argument #%d: A boolean expected.\n"),"atomsRepositoryDel",2));
63                 end
64                 
65                 // Check if we have the write access
66                 if allusers & ~ atomsAUWriteAccess() then
67                         error(msprintf(gettext("%s: You haven''t write access on this directory : %s.\n"),"atomsRepositoryDel",2,pathconvert(SCI+"/.atoms")));
68                 end
69         end
70         
71         // Define the path of the file that will record the change according to
72         // the "allusers" value
73         // =========================================================================
74         
75         if allusers then
76                 atoms_directory = pathconvert(SCI+"/.atoms");
77         else
78                 atoms_directory = pathconvert(SCIHOME+"/atoms");
79         end
80         
81         // Does the atoms_directory exist, if not create it
82         // =========================================================================
83         
84         if ~ isdir(atoms_directory) then
85                 mkdir(atoms_directory);
86         end
87         
88         // Does the SCIHOME/atoms/repositories exist, if yes load it
89         // =========================================================================
90         
91         if fileinfo(atoms_directory+"repositories") <> [] then
92                 repositories = mgetl(atoms_directory+"repositories");
93         end
94         
95         // Loop on each URL specified as input argument
96         // =========================================================================
97         
98         for i=1:size(url,"*")
99                 // Add the URL only if it doesn't already exist
100                 if find( currentRepositories == url(i) ) == [] then
101                         repositories = [ repositories ; url(i) ];
102                         nbAdd = nbAdd + 1;
103                 end
104         end
105         
106         // Apply changes
107         // =========================================================================
108         
109         if nbAdd > 0 then
110                 
111                 mputl(repositories, atoms_directory+"repositories");
112                 
113                 // Force reload the different distant TOOLBOXES files
114                 atomsGetTOOLBOXES(%T);
115                 
116         end
117         
118 endfunction