Skip to content

Commit 6d3b435

Browse files
committed
Nicer virtual fs path arguments
1 parent 2f52924 commit 6d3b435

File tree

1 file changed

+71
-19
lines changed

1 file changed

+71
-19
lines changed

interface.js

Lines changed: 71 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
obj = JSON.parse(ev.data);
3434
}
3535
catch(e) {
36-
console.log(ev.data);
3736
return;
3837
}
3938

@@ -48,43 +47,94 @@
4847
};
4948

5049

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+
5266
var prom = new Promise();
5367
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();
6183

6284
return prom;
6385
},
6486

6587

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+
67115
var prom = new Promise();
68116
self.promises.push(prom);
69117
self.worker.postMessage(JSON.stringify({
70118
cmd: 'mkdir',
71119
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
74122
}));
75123

76124
return prom;
77125
},
78126

79127

80-
self.getFile = function(pseudo_path, pseudo_name) {
128+
self.getFile = function(pseudo_file) {
129+
var file = self._analysePath(pseudo_file);
130+
81131
var prom1 = new Promise();
82132
self.promises.push(prom1);
83133
self.worker.postMessage(JSON.stringify({
84134
cmd: 'getFile',
85135
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
88138
}));
89139

90140
var prom2 = new Promise();
@@ -102,23 +152,25 @@
102152
}
103153

104154
if(complete) {
105-
prom2.fulfil(chunks.join(''), pseudo_path, pseudo_name);
155+
prom2.fulfil(chunks.join(''), file.path, file.filename);
106156
}
107157
});
108158

109159
return prom2;
110160
},
111161

112162

113-
this.addData = function(contents, pseudo_path, pseudo_name) {
163+
this.addData = function(contents, pseudo_path) {
164+
var dst = self._analysePath(pseudo_path);
165+
114166
var prom = new Promise();
115167
self.promises.push(prom);
116168
self.worker.postMessage(JSON.stringify({
117169
cmd: 'addData',
118170
id: (self.promises.length-1),
119171
contents: contents,
120-
pseudo_path: pseudo_path,
121-
pseudo_name: pseudo_name
172+
pseudo_path: dst.path,
173+
pseudo_name: dst.filename
122174
}));
123175
return prom;
124176
},

0 commit comments

Comments
 (0)