(count)
| 232 | await window.renderFiles(filteredModels); |
| 233 | isFilteringInProgress = false; |
| 234 | return; |
| 235 | } |
| 236 | updateFilterIndicator(filteredModels.length); |
| 237 | await window.renderFiles(filteredModels); |
| 238 | isFilteringInProgress = false; |
| 239 | |
| 240 | (async () => { |
| 241 | try { |
| 242 | let acc = filteredModels.slice(); |
| 243 | let offset = acc.length; |
| 244 | while (true) { |
| 245 | const chunk = await getCombinedFilteredModels({ |
| 246 | limit: PROGRESSIVE_CHUNK, |
| 247 | offset |
| 248 | }); |
| 249 | if (searchGeneration !== myGeneration) return; |
| 250 | if (!chunk || chunk.length === 0) break; |
| 251 | acc = acc.concat(chunk); |
| 252 | offset += chunk.length; |
| 253 | updateFilterIndicator(acc.length); |
| 254 | await window.renderFiles(acc); |
| 255 | // Yield so layout, thumbnail decode, and input can run between large virtual-grid updates. |
| 256 | await new Promise((r) => { |
| 257 | if (typeof requestIdleCallback !== 'undefined') { |
| 258 | requestIdleCallback(() => r(), { timeout: 100 }); |
| 259 | } else { |
| 260 | setTimeout(r, 48); |
| 261 | } |
| 262 | }); |
| 263 | } |
| 264 | } catch (err) { |
| 265 | console.error("Progressive library load failed:", err); |
| 266 | } |
| 267 | })(); |
| 268 | return; |
| 269 | } |
| 270 | |
| 271 | filteredModels = await getCombinedFilteredModels(); |
| 272 | console.log(`Got ${filteredModels.length} filtered models, rendering...`, window.dateAddedFilter ? `(filtered by dateAdded)` : ''); |
| 273 | updateFilterIndicator(filteredModels.length); |
| 274 | await window.renderFiles(filteredModels); |
| 275 | // renderer.js sync can lose to rAF/layout; run again after paint (stale Model Details path/name) |
| 276 | if (typeof window.syncSelectionWithFilteredModels === 'function') { |
| 277 | window.syncSelectionWithFilteredModels(filteredModels); |
| 278 | requestAnimationFrame(() => { |
| 279 | if (typeof window.syncSelectionWithFilteredModels === 'function') { |
| 280 | window.syncSelectionWithFilteredModels(filteredModels); |
| 281 | } |
| 282 | }); |
| 283 | } |
| 284 | |
| 285 | } catch (error) { |
| 286 | console.error("Error performing combined search:", error); |
| 287 | } finally { |
| 288 | // Re-enable filter controls |
| 289 | toggleFilterControls(true); |
| 290 | |
| 291 | // Hide loading spinner |
no test coverage detected