Atoms 0.2
[scilab.git] / scilab / modules / atoms / macros / atomsAddRepository.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 = atomsAddRepository(url,allusers)
13         
14         rhs                    = argn(2);
15         nbAdd                = 0;
16         repositories         = []; // Column vector that contain user repositories
17         currentRepositories  = atomsRepositories();
18         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;%\$#\=~_\-]+))*$/";
19         
20         // Check number of input arguments
21         // =========================================================================
22         
23         if rhs < 1 | rhs > 2 then
24                 error(msprintf(gettext("%s: Wrong number of input argument: %d to %d expected.\n"),"atomsAddRepository",1,2));
25         end
26         
27         // Check URLs specified as first input argument
28         // =========================================================================
29         
30         if type(url) <> 10 then
31                 error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"),"atomsAddRepository",1));
32         end
33         
34         for i=1:size(url,"*")
35                 if ~ regexp(url(i),valid_url_pattern,"o") == 1 then
36                         error(msprintf(gettext("%s: Wrong value for input argument #%d: This ("+url(i)+") is not a valid URL.\n"),"atomsAddRepository",1));
37                 end
38         end
39         
40         // Apply changes for all users or just for me ?
41         // =========================================================================
42         
43         if rhs == 1 then
44                 // By default, add the repository for all users (if we have write access
45                 // of course !)
46                 if atomsAUWriteAccess() then
47                         allusers = %T; 
48                 else
49                         allusers = %F;
50                 end
51         
52         else
53                 // Just check if it's a boolean
54                 if type(allusers) <> 4 then
55                         error(msprintf(gettext("%s: Wrong type for input argument #%d: A boolean expected.\n"),"atomsDelRepository",2));
56                 end
57                 
58                 // Check if we have the write access
59                 if allusers & ~ atomsAUWriteAccess() then
60                         error(msprintf(gettext("%s: You haven''t write access on this directory : %s.\n"),"atomsDelRepository",2,pathconvert(SCI+"/.atoms")));
61                 end
62         end
63         
64         // Define the path of the file that will record the change according to
65         // the "allusers" value
66         // =========================================================================
67         
68         if allusers then
69                 atoms_directory = pathconvert(SCI+"/.atoms");
70         else
71                 atoms_directory = pathconvert(SCIHOME+"/atoms");
72         end
73         
74         // Does the atoms_directory exist, if not create it
75         // =========================================================================
76         
77         if ~ isdir(atoms_directory) then
78                 mkdir(atoms_directory);
79         end
80         
81         // Does the SCIHOME/atoms/repositories exist, if yes load it
82         // =========================================================================
83         
84         if fileinfo(atoms_directory+"repositories") <> [] then
85                 repositories = mgetl(atoms_directory+"repositories");
86         end
87         
88         // Loop on each URL specified as input argument
89         // =========================================================================
90         
91         for i=1:size(url,"*")
92                 disp(currentRepositories);
93                 // Add the URL only if it doesn't already exist
94                 if find( currentRepositories == url(i) ) == [] then
95                         repositories = [ repositories ; url(i) ];
96                         nbAdd = nbAdd + 1;
97                 end
98         end
99         
100         // Apply changes
101         // =========================================================================
102         
103         if nbAdd > 0 then
104                 mputl(repositories, atoms_directory+"repositories");
105         end
106         
107 endfunction