MCPcopy Create free account
hub / github.com/violentmonkey/violentmonkey / list

Function list

src/background/sync/webdav.js:172–221  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

170 throw res;
171 },
172 list() {
173 const { serverUrl } = this.properties;
174 const mkdir = () =>
175 this.loadData({
176 method: 'MKCOL',
177 url: serverUrl,
178 });
179 const readdir = () =>
180 this.loadData({
181 method: 'PROPFIND',
182 url: serverUrl,
183 headers: {
184 depth: '1',
185 },
186 }).then((xml) => {
187 const doc = XNode.fromXML(xml);
188 const items = doc
189 .children()[0]
190 .map((node) => {
191 const prop = node.find('DAV:propstat').find('DAV:prop');
192 const type = prop.find('DAV:resourcetype').find('DAV:collection')
193 ? 'directory'
194 : 'file';
195 if (type === 'file') {
196 const displayNameNode = prop.find('DAV:displayname');
197 const displayName = decodeURIComponent(
198 displayNameNode
199 ? displayNameNode.text() // some servers also encode DAV:displayname
200 : node.find('DAV:href').text().split('/').pop(), // extracting file name
201 );
202 if (isScriptFile(displayName)) {
203 const size = prop.find('DAV:getcontentlength');
204 return normalize({
205 name: displayName,
206 size: size ? +size.text() : 0,
207 });
208 }
209 }
210 return null;
211 })
212 .filter(Boolean);
213 return items;
214 });
215 return readdir().catch((err) => {
216 if (err.status === 404) {
217 return mkdir().then(readdir);
218 }
219 throw err;
220 });
221 },
222 get(item) {
223 const name = getItemFilename(item);
224 const { serverUrl } = this.properties;

Callers

nothing calls this directly

Calls 2

readdirFunction · 0.85
mkdirFunction · 0.85

Tested by

no test coverage detected