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
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         
48         
49         this.projects = [];
50         var gdir = GLib.dir_open(this.dirname,0);
51         while (true) {
52         
53             var fn = GLib.dir_read_name(gdir);
54             if (!fn) {
55                 GLib.dir_close(gdir);
56                 return;
57             }
58             if (!fn.match(/.json$/)) {
59                 continue;
60             }
61             var str = File.read(this.dirname + '/' + fn);
62             if (!str || !str.length) {
63                 continue; // empty file.
64             }
65              
66             
67             var ar = JSON.parse(str); 
68             Seed.print(ar.xtype);
69             
70             // construct...
71             var cls = imports.Builder.Provider.Project[ar.xtype][ar.xtype];
72             this.projects.push( new cls(ar));
73             
74             
75             
76             
77             
78              
79         }
80    
81         
82         
83         
84         
85         
86         
87         
88     },
89     
90     
91     saveConfig : function()
92     {
93         var _this = this;
94         this.projects.forEach( function(p) {
95             
96             if (!p.fn) {
97                 // make the filename..
98                 var t = new GLib.TimeVal();
99                 GLib.get_current_time(t);
100                 var str = '' + t.tv_sec + ':' + t.tv_usec;
101                 Seed.print(str);
102                 p.fn = GLib.compute_checksum_for_string(GLib.ChecksumType.MD5, str, str.length);
103                 Seed.print(p.fn);
104
105             }
106             
107             
108             var file = Gio.file_new_for_path(_this.dirname + '/' + p.fn + '.json');
109             
110             var stream = file.replace(null,false,0);
111             //console.dump(p);
112             var  s =  p.toJSON();
113             stream.write(s, s.length);
114             stream.close();
115            
116            
117         });
118         
119         
120         
121         
122     },
123     update : function(proj) {
124         
125         Seed.print(JSON.stringify(proj));
126         var found = false;
127         this.projects.forEach( function(p) {
128             if (proj == p) {
129                 found = true;
130                 return true;
131             }
132         });
133         if (found) {
134             this.fireEvent('changed', this);
135             return proj;
136             return;
137         }
138         var cls = imports.Builder.Provider.Project[proj.xtype][proj.xtype];
139         var pr = new cls(proj);
140         this.projects.push(pr );
141         this.fireEvent('changed', this);
142         return pr;
143         
144         
145     },
146     getByFn : function (fn) {
147         var  ret = false;
148         this.projects.forEach(function(p) {
149             if (p.fn == fn) {
150                 ret = p;
151                 return true;
152             }
153         });
154         return ret;
155         
156     },
157     getPalete: function(type) {
158         if (typeof(ProjectManager.palete[type]) != 'undefined') {
159             print ("ALREADY GOT " + type);
160             return ProjectManager.palete[type];
161         }
162         var cls = imports.Builder.Provider.Palete[type][type];
163         
164         ProjectManager.palete[type] =  new cls();
165         print (typeof(ProjectManager.palete[type]));
166         return ProjectManager.palete[type];
167     }
168
169     
170     
171 });
172
173
174
175