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 console = imports['console.js']; 
5
6 Roo = imports['Roo.js']; 
7 XN = imports.xnew;
8
9  
10 Builder = imports['Builder.js']
11
12
13 /**
14  * 
15  * /home/alan/.BuilderConfig/*
16  * 
17  * 
18  */
19
20 Builder.Provider.ProjectManager = new Roo.Observable({
21     
22     events : {
23         'changed' : true,
24     },
25     
26     
27     listeners : {
28         'changed' :  function() {
29             this.saveConfig();
30         }
31         
32    },
33     
34     
35     projects : [],
36     filename : false,
37     
38     loadConfig : function ()
39     {
40         // we can not do this async.... 
41         this.dirname = GLib.get_home_dir() + '/.Builder'; 
42         
43         var dir = Gio.file_new_for_path(this.dirname);
44         if (!dir.query_exists()) {
45             dir.make_directory();
46             return;
47         }
48         
49         
50         
51         this.projects = [];
52         var gdir = GLib.dir_open(this.dirname,0);
53         while (true) {
54         
55             var fn = GLib.dir_read_name(gdir);
56             if (!fn) {
57                 GLib.dir_close(gdir);
58                 return;
59             }
60             if (!fn.match(/.json$/)) {
61                 continue;
62             }
63             var file = Gio.file_new_for_path(this.dirname + '/' + fn);
64             Seed.print(this.dirname + '/' + fn);
65             var stream = file.read();
66             var dstream = new Gio.DataInputStream.c_new(stream);
67             Seed.print(dstream);
68             
69             str = dstream.read_until("");
70             if (!str || !str.length) {
71                 continue; // empty file.
72             }
73              
74             
75             var ar = JSON.parse(str); 
76             Seed.print(ar.xtype);
77             
78             // construct...
79           
80             this.projects.push( new Builder.Provider.Project[ar.xtype](ar));
81             
82             
83             
84             
85             
86              
87         }
88    
89         
90         
91         
92         
93         
94         
95         
96     },
97     
98     
99     saveConfig : function()
100     {
101         Roo.each(this.projects, function(p) {
102             
103             if (!p.fn) {
104                 // make the filename..
105                 var t = new GLib.TimeVal();
106                 GLib.get_current_time(t);
107                 var str = '' + t.tv_sec + ':' + t.tv_usec;
108                 Seed.print(str);
109                 p.fn = GLib.compute_checksum_for_string(GLib.ChecksumType.MD5, str, str.length);
110                 Seed.print(p.fn);
111
112             }
113             
114             
115             var file = Gio.file_new_for_path(this.dirname + '/' + p.fn + '.json');
116             
117             var stream = file.replace(null,false,0);
118             var  s =  p.toJSON();
119             stream.write(s, s.length);
120             stream.close();
121            
122            
123         }, this);
124         
125         
126         
127         
128     },
129     update : function(proj) {
130         
131         Seed.print(JSON.stringify(proj));
132         var found = false;
133         Roo.each(this.projects , function(p) {
134             if (proj == p) {
135                 found = true;
136                 return true;
137             }
138         });
139         if (found) {
140             this.fireEvent('changed', this);
141             return proj;
142             return;
143         }
144         var pr = new Builder.Provider.Project[proj.xtype](proj);
145         this.projects.push(pr );
146         this.fireEvent('changed', this);
147         return pr;
148         
149         
150     },
151     getByFn : function (fn) {
152         var  ret = false;
153         Roo.each(this.projects, function(p) {
154             if (p.fn == fn) {
155                 ret = p;
156                 return true;
157             }
158         });
159         return ret;
160         
161     }
162
163     
164     
165 });
166
167
168
169