Builder/Provider/ProjectManager.js
[app.Builder.js] / Builder / Provider / ProjectManager.js
1 //<Script type="text/javascript">
2 Gio = imports.gi.Gio;
3 GLib = imports.gi.GLib;
4
5
6 console = imports.console;
7 XObject = imports.XObject.XObject;
8  
9 Observable = imports.Observable.Observable;
10 File = imports['../../File.js'].File;
11 /**
12  * 
13  * /home/alan/.BuilderConfig/*
14  * 
15  * 
16  */
17
18 ProjectManager =  new Observable({
19     
20     events : {
21         'changed' : true,
22     },
23     
24     
25     listeners : {
26         'changed' :  function() {
27             this.saveConfig();
28         }
29         
30     },
31     
32     palete : { }, 
33     projects : [],
34     filename : false,
35     
36     loadConfig : function ()
37     {
38         // we can not do this async.... 
39         this.dirname = GLib.get_home_dir() + '/.Builder'; 
40         
41         var dir = Gio.file_new_for_path(this.dirname);
42         if (!dir.query_exists()) {
43             dir.make_directory();
44             return;
45         }
46       
47         this.projects = [];
48         var files = File.list(this.dirname);
49         for (var i =0 ; i < files.length;i++) {
50             var fn = files[i];
51              
52             if (!fn.match(/.json$/)) {
53                 continue;
54             }
55             var str = File.read(this.dirname + '/' + fn);
56             if (!str || !str.length) {
57                 continue; // empty file.
58             }
59              
60             
61             var ar = JSON.parse(str); 
62             Seed.print(ar.xtype);
63             
64             // construct...
65             var cls = imports.Builder.Provider.Project[ar.xtype][ar.xtype];
66             this.projects.push( new cls(ar));
67             
68             
69             
70             
71             
72              
73         }
74    
75         this.projects.sort(function(a,b) {
76             if (a.getName() == b.getName()) {
77                 return 0;
78             }
79             return a.getName() > b.getName() ? 1 : -1;
80             
81             
82         });
83    
84         
85        
86         
87         
88         
89         
90         
91         
92     },
93     
94     
95     saveConfig : function()
96     {
97         var _this = this;
98         this.projects.forEach( function(p) {
99             
100             if (!p.fn) {
101                 // make the filename..
102                 var t = new GLib.TimeVal();
103                 GLib.get_current_time(t);
104                 var str = '' + t.tv_sec + ':' + t.tv_usec;
105                 Seed.print(str);
106                 p.fn = GLib.compute_checksum_for_string(GLib.ChecksumType.MD5, str, str.length);
107                 Seed.print(p.fn);
108
109             }
110             
111             
112             var file = Gio.file_new_for_path(_this.dirname + '/' + p.fn + '.json');
113             
114             var stream = file.replace(null,false,0);
115             //console.dump(p);
116             var  s =  p.toJSON();
117             stream.write(s, s.length);
118             stream.close();
119            
120            
121         });
122         
123         
124         
125         
126     },
127     update : function(proj) {
128         
129         Seed.print(JSON.stringify(proj));
130         var found = false;
131         this.projects.forEach( function(p) {
132             if (proj == p) {
133                 found = true;
134                 return true;
135             }
136         });
137         if (found) {
138             this.fireEvent('changed', this);
139             return proj;
140             return;
141         }
142         var cls = imports.Builder.Provider.Project[proj.xtype][proj.xtype];
143         var pr = new cls(proj);
144         this.projects.push(pr );
145         this.fireEvent('changed', this);
146         return pr;
147         
148         
149     },
150     
151     deleteProject : function (fn)
152     {
153         var newplist = [];
154         var _this = this;
155         this.projects.forEach(function(p) {
156             if (p.fn != fn) {
157                 newplist.push(p);
158                 return;
159             }
160             var file = _this.dirname + '/' + p.fn + '.json';
161             if (File.exists(file)) {
162                 File.remove(file);
163             }
164             
165         });
166         this.projects = newplist;
167         this.fireEvent('changed', this);
168     },
169     
170     
171     getByFn : function (fn) {
172         var  ret = false;
173         this.projects.forEach(function(p) {
174             if (p.fn == fn) {
175                 ret = p;
176                 return true;
177             }
178         });
179         return ret;
180         
181     },
182     getPalete: function(type) {
183         if (typeof(ProjectManager.palete[type]) != 'undefined') {
184             print ("ALREADY GOT " + type);
185             return ProjectManager.palete[type];
186         }
187         var cls = imports.Builder.Provider.Palete[type][type];
188         
189         ProjectManager.palete[type] =  new cls();
190         print (typeof(ProjectManager.palete[type]));
191         return ProjectManager.palete[type];
192     }
193
194     
195     
196 });
197
198
199
200