Skip to content

Commit 36a43a4

Browse files
committed
fix: importar categorías desde backup de ThreadsVault Android
El backup de Android exporta la clave raíz como "categorias" (español). El normalizador solo aceptaba "categories" (inglés) y lanzaba error antes de iniciar la transacción, dejando los datos existentes sin modificar. Fix: rawCategories acepta root.categories || root.categorias || []. Posts siguen siendo obligatorios (sin ellos no hay qué importar). Si el array de categorías está vacío o ausente → fallback "General".
1 parent 8b28dc0 commit 36a43a4

1 file changed

Lines changed: 14 additions & 3 deletions

File tree

src/lib/storage/backup-normalizer.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,20 +89,31 @@ export function normalizeBackupPayload(raw: unknown): NormalizedBackup {
8989

9090
const root = raw as {
9191
categories?: unknown[]
92+
categorias?: unknown[] // compatibilidad ThreadsVault Android (clave en español)
9293
posts?: unknown[]
9394
exportedAt?: unknown
9495
exportedAtMillis?: unknown
9596
}
9697

97-
if (!Array.isArray(root.categories) || !Array.isArray(root.posts)) {
98-
throw new Error('Formato de backup inválido: faltan categorías o posts')
98+
// PBL: Android exporta la clave raíz como "categorias" (español).
99+
// Desktop usa "categories" (inglés). Aceptamos ambas para garantizar
100+
// compatibilidad cruzada. Si ninguna existe → array vacío → fallback "General".
101+
// Posts sí es obligatorio (sin ellos no hay nada que importar).
102+
const rawCategories: unknown[] = Array.isArray(root.categories)
103+
? root.categories
104+
: Array.isArray(root.categorias)
105+
? root.categorias
106+
: []
107+
108+
if (!Array.isArray(root.posts)) {
109+
throw new Error('Formato de backup inválido: faltan posts')
99110
}
100111

101112
const categories: Category[] = []
102113
const categoryNameToId = new Map<string, string>()
103114
const categoryIds = new Set<string>()
104115

105-
root.categories.forEach((entry, index) => {
116+
rawCategories.forEach((entry, index) => {
106117
const item = (entry ?? {}) as Record<string, unknown>
107118
const name = safeString(item.name ?? item.nombre ?? item.categoryName)
108119
if (!name) return

0 commit comments

Comments
 (0)