fix(offline): don't abort cache loop on a single fetch failure

A single null from queryFileContent silently exited cacheAllNotes,
leaving every later note uncached while the success toast still fired.
Skip the failing file, count failures, and surface them via errorMessage.
This commit is contained in:
Julien Calixte
2026-05-16 23:31:42 +02:00
parent fc4ed188d7
commit c5236b2587
2 changed files with 15 additions and 5 deletions

View File

@@ -13,6 +13,7 @@ export const useOfflineNotes = () => {
const totalOfNotes = computed(() => store.files.length) const totalOfNotes = computed(() => store.files.length)
const noteCompleted = ref(0) const noteCompleted = ref(0)
const failedNotes = ref(0)
const cacheAllNotes = async () => { const cacheAllNotes = async () => {
const isInitialized = store.user && store.repo && totalOfNotes.value > 0 const isInitialized = store.user && store.repo && totalOfNotes.value > 0
@@ -30,6 +31,7 @@ export const useOfflineNotes = () => {
const cachedNotesSet = new Set(cachedNotesFromSha.map((note) => note._id)) const cachedNotesSet = new Set(cachedNotesFromSha.map((note) => note._id))
noteCompleted.value = 0 noteCompleted.value = 0
failedNotes.value = 0
for (const file of store.files) { for (const file of store.files) {
noteCompleted.value++ noteCompleted.value++
@@ -50,7 +52,8 @@ export const useOfflineNotes = () => {
) )
if (!contentFile) { if (!contentFile) {
return null failedNotes.value++
continue
} }
saveCacheNote(contentFile) saveCacheNote(contentFile)
@@ -64,6 +67,7 @@ export const useOfflineNotes = () => {
cacheAllNotes: execute, cacheAllNotes: execute,
isLoading, isLoading,
totalOfNotes, totalOfNotes,
noteCompleted noteCompleted,
failedNotes
} }
} }

View File

@@ -1,14 +1,20 @@
<script setup lang="ts"> <script setup lang="ts">
import { useOfflineNotes } from "@/hooks/useOfflineNotes.hook" import { useOfflineNotes } from "@/hooks/useOfflineNotes.hook"
import { confirmMessage } from "@/utils/notif" import { confirmMessage, errorMessage } from "@/utils/notif"
const { cacheAllNotes, isLoading, totalOfNotes, noteCompleted } = const { cacheAllNotes, isLoading, totalOfNotes, noteCompleted, failedNotes } =
useOfflineNotes() useOfflineNotes()
const confirmBeforeCachingAllNotes = async () => { const confirmBeforeCachingAllNotes = async () => {
confirm("Do you want to cache all notes?") confirm("Do you want to cache all notes?")
await cacheAllNotes() await cacheAllNotes()
confirmMessage("✅ All notes have been locally saved") if (failedNotes.value > 0) {
errorMessage(
`${failedNotes.value} of ${totalOfNotes.value} note(s) could not be cached — try again`
)
} else {
confirmMessage("✅ All notes have been locally saved")
}
} }
</script> </script>