From 6884f85e855ffd06a7ee8c3f107249d6babc9b4c Mon Sep 17 00:00:00 2001 From: Crustack Date: Sun, 25 Jan 2026 12:16:08 +0100 Subject: [PATCH] Fix note ids in imported notes with note links --- .../philkes/notallyx/data/dao/BaseNoteDao.kt | 8 ++- .../philkes/notallyx/data/dao/CommonDao.kt | 52 ++++++++++++++++++ .../notallyx/utils/backup/ImportExtensions.kt | 5 +- app/translations.xlsx | Bin 142101 -> 142098 bytes 4 files changed, 63 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/philkes/notallyx/data/dao/BaseNoteDao.kt b/app/src/main/java/com/philkes/notallyx/data/dao/BaseNoteDao.kt index 46677f76..53b1939b 100644 --- a/app/src/main/java/com/philkes/notallyx/data/dao/BaseNoteDao.kt +++ b/app/src/main/java/com/philkes/notallyx/data/dao/BaseNoteDao.kt @@ -34,7 +34,7 @@ interface BaseNoteDao { @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insert(baseNote: BaseNote): Long - @Insert suspend fun insert(baseNotes: List) + @Insert suspend fun insert(baseNotes: List): List @Update(entity = BaseNote::class) suspend fun update(labelsInBaseNotes: List) @@ -129,6 +129,12 @@ interface BaseNoteDao { @Query("UPDATE BaseNote SET reminders = :reminders WHERE id = :id") suspend fun updateReminders(id: Long, reminders: List) + @Query("UPDATE BaseNote SET spans = :spans WHERE id = :id") + suspend fun updateSpans( + id: Long, + spans: List, + ) + /** * Both id and position can be invalid. * diff --git a/app/src/main/java/com/philkes/notallyx/data/dao/CommonDao.kt b/app/src/main/java/com/philkes/notallyx/data/dao/CommonDao.kt index 1e2e217b..af3045e8 100644 --- a/app/src/main/java/com/philkes/notallyx/data/dao/CommonDao.kt +++ b/app/src/main/java/com/philkes/notallyx/data/dao/CommonDao.kt @@ -6,6 +6,10 @@ import com.philkes.notallyx.data.NotallyDatabase import com.philkes.notallyx.data.model.BaseNote import com.philkes.notallyx.data.model.Label import com.philkes.notallyx.data.model.LabelsInBaseNote +import com.philkes.notallyx.data.model.createNoteUrl +import com.philkes.notallyx.data.model.getNoteIdFromUrl +import com.philkes.notallyx.data.model.getNoteTypeFromUrl +import com.philkes.notallyx.data.model.isNoteUrl @Dao abstract class CommonDao(private val database: NotallyDatabase) { @@ -40,4 +44,52 @@ abstract class CommonDao(private val database: NotallyDatabase) { database.getBaseNoteDao().insert(baseNotes) database.getLabelDao().insert(labels) } + + /** + * Import backup with remapping of note links inside spans. Uses a single bulk insert to obtain + * new IDs, builds an oldId->newId mapping based on [originalIds] order, then rewrites any + * note:// links in spans to reference the newly created IDs. + */ + @Transaction + open suspend fun importBackup( + baseNotes: List, + originalIds: List, + labels: List