(folder, sourceId = '')
| 467 | window.__FR_CAPS_INFLIGHT = _capsInflight; |
| 468 | |
| 469 | async function getFolderCapabilities(folder, sourceId = '') { |
| 470 | if (!folder) return null; |
| 471 | |
| 472 | if (_capsCache.has(folder)) { |
| 473 | return _capsCache.get(folder); |
| 474 | } |
| 475 | if (_capsInflight.has(folder)) { |
| 476 | return _capsInflight.get(folder); |
| 477 | } |
| 478 | |
| 479 | const p = (async () => { |
| 480 | try { |
| 481 | const activeSourceId = sourceId || getActiveSourceId(); |
| 482 | const sourceParam = activeSourceId ? `&sourceId=${encodeURIComponent(activeSourceId)}` : ''; |
| 483 | const res = await fetch(`/api/folder/capabilities.php?folder=${encodeURIComponent(folder)}${sourceParam}`, { credentials: 'include' }); |
| 484 | if (!res.ok) return null; |
| 485 | const caps = await res.json(); |
| 486 | _capsCache.set(folder, caps || null); |
| 487 | return caps || null; |
| 488 | } catch (e) { |
| 489 | _capsCache.set(folder, null); |
| 490 | return null; |
| 491 | } finally { |
| 492 | _capsInflight.delete(folder); |
| 493 | } |
| 494 | })(); |
| 495 | |
| 496 | _capsInflight.set(folder, p); |
| 497 | return p; |
| 498 | } |
| 499 | async function applyFolderCapabilities(folder) { |
| 500 | try { |
| 501 | const caps = await getFolderCapabilities(folder); |
no test coverage detected