|
33 | 33 | obj = JSON.parse(ev.data);
|
34 | 34 | }
|
35 | 35 | catch(e) {
|
36 |
| - console.log(ev.data); |
37 | 36 | return;
|
38 | 37 | }
|
39 | 38 |
|
|
48 | 47 | };
|
49 | 48 |
|
50 | 49 |
|
51 |
| - this.addUrl = function(real_url, pseudo_path, pseudo_name) { |
| 50 | + /* |
| 51 | + * Download a url and import the file into the virtual filesystem |
| 52 | + * |
| 53 | + * real_url: Url to download |
| 54 | + * pseudo_path: Destination path in the virtual fs |
| 55 | + if it ends with a slash, the original file name will appended |
| 56 | + mkdir: Boolean, create pseudo_path if it does not exist (default: false) |
| 57 | + * |
| 58 | + * returns a Promise |
| 59 | + */ |
| 60 | + this.addUrl = function(real_url, pseudo_path, mkdir) { |
| 61 | + mkdir = mkdir || false; |
| 62 | + |
| 63 | + var opt_filename = this._analysePath(real_url).filename; |
| 64 | + var dst = this._analysePath(pseudo_path, opt_filename); |
| 65 | + |
52 | 66 | var prom = new Promise();
|
53 | 67 | self.promises.push(prom);
|
54 |
| - self.worker.postMessage(JSON.stringify({ |
55 |
| - cmd: 'addUrl', |
56 |
| - id: (self.promises.length-1), |
57 |
| - real_url: real_url, |
58 |
| - pseudo_path: pseudo_path, |
59 |
| - pseudo_name: pseudo_name |
60 |
| - })); |
| 68 | + |
| 69 | + var payload = function() { |
| 70 | + self.worker.postMessage(JSON.stringify({ |
| 71 | + cmd: 'addUrl', |
| 72 | + id: (self.promises.length-1), |
| 73 | + real_url: real_url, |
| 74 | + pseudo_path: dst.path, |
| 75 | + pseudo_name: dst.filename |
| 76 | + })) |
| 77 | + }; |
| 78 | + |
| 79 | + if(mkdir) |
| 80 | + self.mkdir(dst.path).then(payload); |
| 81 | + else |
| 82 | + payload(); |
61 | 83 |
|
62 | 84 | return prom;
|
63 | 85 | },
|
64 | 86 |
|
65 | 87 |
|
66 |
| - self.mkdir = function(pseudo_path, pseudo_name) { |
| 88 | + self._analysePath = function(path_in, opt_filename) { |
| 89 | + var is_absolute = (path_in[0] === '/'); |
| 90 | + var is_path_only = (path_in[path_in.length-1] === '/'); |
| 91 | + |
| 92 | + var filename, path; |
| 93 | + if(is_path_only) { |
| 94 | + filename = opt_filename || ''; |
| 95 | + path = path_in; |
| 96 | + } |
| 97 | + else { |
| 98 | + var elements = path_in.split('/'); |
| 99 | + filename = elements[elements.length-1]; |
| 100 | + path = path_in.substr(0, path_in.length-filename.length); |
| 101 | + } |
| 102 | + return { |
| 103 | + filename: filename, |
| 104 | + path: path |
| 105 | + }; |
| 106 | + } |
| 107 | + |
| 108 | + |
| 109 | + self.mkdir = function(pseudo_path) { |
| 110 | + if(pseudo_path[pseudo_path.length-1] === '/') |
| 111 | + pseudo_path = pseudo_path.substr(0, pseudo_path.length-1); |
| 112 | + |
| 113 | + var dir = self._analysePath(pseudo_path); |
| 114 | + |
67 | 115 | var prom = new Promise();
|
68 | 116 | self.promises.push(prom);
|
69 | 117 | self.worker.postMessage(JSON.stringify({
|
70 | 118 | cmd: 'mkdir',
|
71 | 119 | id: (self.promises.length-1),
|
72 |
| - pseudo_path: pseudo_path, |
73 |
| - pseudo_name: pseudo_name |
| 120 | + pseudo_path: dir.path, |
| 121 | + pseudo_name: dir.filename |
74 | 122 | }));
|
75 | 123 |
|
76 | 124 | return prom;
|
77 | 125 | },
|
78 | 126 |
|
79 | 127 |
|
80 |
| - self.getFile = function(pseudo_path, pseudo_name) { |
| 128 | + self.getFile = function(pseudo_file) { |
| 129 | + var file = self._analysePath(pseudo_file); |
| 130 | + |
81 | 131 | var prom1 = new Promise();
|
82 | 132 | self.promises.push(prom1);
|
83 | 133 | self.worker.postMessage(JSON.stringify({
|
84 | 134 | cmd: 'getFile',
|
85 | 135 | id: (self.promises.length-1),
|
86 |
| - pseudo_path: pseudo_path, |
87 |
| - pseudo_name: pseudo_name |
| 136 | + pseudo_path: file.path, |
| 137 | + pseudo_name: file.filename |
88 | 138 | }));
|
89 | 139 |
|
90 | 140 | var prom2 = new Promise();
|
|
102 | 152 | }
|
103 | 153 |
|
104 | 154 | if(complete) {
|
105 |
| - prom2.fulfil(chunks.join(''), pseudo_path, pseudo_name); |
| 155 | + prom2.fulfil(chunks.join(''), file.path, file.filename); |
106 | 156 | }
|
107 | 157 | });
|
108 | 158 |
|
109 | 159 | return prom2;
|
110 | 160 | },
|
111 | 161 |
|
112 | 162 |
|
113 |
| - this.addData = function(contents, pseudo_path, pseudo_name) { |
| 163 | + this.addData = function(contents, pseudo_path) { |
| 164 | + var dst = self._analysePath(pseudo_path); |
| 165 | + |
114 | 166 | var prom = new Promise();
|
115 | 167 | self.promises.push(prom);
|
116 | 168 | self.worker.postMessage(JSON.stringify({
|
117 | 169 | cmd: 'addData',
|
118 | 170 | id: (self.promises.length-1),
|
119 | 171 | contents: contents,
|
120 |
| - pseudo_path: pseudo_path, |
121 |
| - pseudo_name: pseudo_name |
| 172 | + pseudo_path: dst.path, |
| 173 | + pseudo_name: dst.filename |
122 | 174 | }));
|
123 | 175 | return prom;
|
124 | 176 | },
|
|
0 commit comments