src/Resources.vala
[app.Builder.js] / src / Resources.vala
1 /**
2  * Resources
3  * 
4  * Idea is to manage resourse used by the app.
5  * 
6  * The original code downloaded all the resources before it renders the main window
7  * 
8  * This is a bit annoying as although they do change quite a bit, it's not on every page load
9  * 
10  * So the Resource fetching behaviour should be a button on the File view page
11  * That starts the refresh of the resources.
12  * 
13  * I'm not quite sure how we should flow this - if we do them all at once.. might be a bit of a server 
14  * overload... so sequentially may be best...
15 */
16
17 public class Resources : Object
18 {
19
20      var fetch_pos = 0;
21      public void fetchStart()
22      {
23           this.fetch_pos =0;
24          this.fetchNext();
25          
26      }
27      public void fetchNext()
28     {
29         var cur = this.fetch_pos;
30         this.fetch_pos++;
31         this.updateProgress(cur);
32         switch (cur) {
33                case 0: // html for rendering Bootstrap apps.
34                     this.fetchResourceFrom (
35                         "http://git.roojs.org/?p=app.Builder.js;a=blob_plain;f=resources/bootstrap.builder.html",
36                         "bootstrap.builder.html",
37                         (sess,msg) => {
38                                this.fetchNext();
39                     });
40                     break;
41               case 1:
42                      this.fetchResourceFrom (
43                         "http://git.roojs.org/?p=app.Builder.js;a=blob_plain;f=resources/roo.builder.html",
44                         "roo.builder.html",
45                         (sess,msg) => {
46                                this.fetchNext();
47                     });
48                     break;
49              case 2: // generic javascript
50                  this.fetchResourceFrom (
51                         "http://git.roojs.org/?p=app.Builder.js;a=blob_plain;f=resources/roo.builder.js",
52                         "roo.builder.js",
53                         (sess,msg) => {
54                                this.fetchNext();
55                     });
56                     break;
57
58             case 3: // Gir overrides - used to handle the fact we are not querying valadoc yet....and gir does
59                     // not map that well to vala...
60                     this.fetchResourceFrom (
61                         "http://git.roojs.org/?p=app.Builder.js;a=blob_plain;f=resources/Gir.overides",
62                         "Gir.overides",
63                         (sess,msg) => {
64                                 // See Palete.Gir
65                                this.fetchNext();
66                     });
67                     break;
68
69             case 3: // The main - what goes into what element structure..
70                     this.fetchResourceFrom (
71                         "http://git.roojs.org/?p=app.Builder.js;a=blob_plain;f=resources/GtkUsage.txt",
72                         "GtkUsage.txt",
73                         (sess,msg) => {
74                                 // See Palete.Gtk
75                                this.fetchNext();
76                     });
77                     break;
78             case 3: // The main - what goes into what element structure..
79                     this.fetchResourceFrom (
80                         "http://git.roojs.org/?p=app.Builder.js;a=blob_plain;f=resources/GtkUsage.txt",
81                         "GtkUsage.txt",
82                         (sess,msg) => {
83                                 // See Palete.Gtk
84                                this.fetchNext();
85                     });
86                     break;     
87         }
88
89     
90     
91     
92      string[] res = { 
93                                 "bootstrap.builder.html",
94                                 "roo.builder.html",
95                                 "roo.builder.js",
96                                 "Gir.overides",
97                                 "RooUsage.txt",
98                                 "GtkUsage.txt"
99                         };
100                         for (var i = 0; i < res.length; i++ ) { 
101                                 this.fetchResource(res[i], force);
102                         }
103                         
104                         this.fetchResourceFrom (
105                                 "http://git.roojs.org/?p=roojs1;a=blob_plain;f=docs/json/roodata.json",
106                                 "roodata.json",
107                                 force
108                         );
109                         
110
111                 }
112                 public void fetchResource(string res, bool force) {
113                         if (!force && FileUtils.test(configDirectory() + "/resources/" + res, FileTest.EXISTS)) {
114                                 return;
115                         }
116                         this.fetchResourceFrom(
117                                "http://git.roojs.org/?p=app.Builder.js;a=blob_plain;f=resources/" + res,
118                                res,
119                                force
120                        );
121                         
122
123
124     
125     public void fetchResourceFrom(string src, string target, Soup.SessionCallback? callback)
126     {
127                  
128                 // fetch...
129                 print("downloading %s \nto : %s\n", src,res);
130                 var session = new Soup.Session ();
131                 session.user_agent = "App Builder ";
132             var message = new Soup.Message ("GET",  src );
133         session.queue_message (message, (sess, mess) => {
134
135             FileUtils.set_contents(
136                Application.configDirectory() + "/resources/" + res,
137                  (string) message.response_body.data
138             );
139                 
140             callback(sess,mess);
141         });
142                      
143
144         }