Report missing jmdict entries on archive import #215

Open
opened 2026-06-01 20:59:34 +02:00 by oysteikt · 2 comments
Owner

Example of what could happen when resetting the database to a new copy of jadb with updated datasource for jmdict:

I/flutter (25896): Library list "favourites" already exists but is empty. Importing entries from file Directory: '/data/user/0/wtf.nani.mugiten.debug/code_cache/mugiten_data_IPELEG/library/favourites/'.
E/flutter (25896): [ERROR:flutter/runtime/dart_vm_initializer.cc(40)] Unhandled Exception: SqfliteFfiException(sqlite_error: 787, , SqliteException(787): while executing statement, FOREIGN KEY constraint failed, constraint failed (code 787)
E/flutter (25896):   Causing statement: INSERT OR IGNORE INTO Mugiten_LibraryListEntry (listName, jmdictEntryId, kanji, orderNum, lastModified) VALUES (?, ?, NULL, ?, ?), parameters: 情報学単語, 1232500, 7600, 1780340231765}) DatabaseException(SqliteException(787): while executing statement, FOREIGN KEY constraint failed, constraint failed (code 787)
E/flutter (25896):   Causing statement: INSERT OR IGNORE INTO Mugiten_LibraryListEntry (listName, jmdictEntryId, kanji, orderNum, lastModified) VALUES (?, ?, NULL, ?, ?), parameters: 情報学単語, 1232500, 7600, 1780340231765) sql 'INSERT OR IGNORE INTO Mugiten_LibraryListEntry (listName, jmdictEntryId, kanji, orderNum, lastModified) VALUES (?, ?, NULL, ?, ?)' args [情報学単語, 1232500, 7600, 1780340231765] {details: {database: {path: /data/user/0/wtf.nani.mugiten.debug/app_flutter/mugiten.sqlite, id: 3, readOnly: false, singleInstance: true}}}
E/flutter (25896): #0      responseToResultOrThrow (package:sqflite_common_ffi/src/method_call.dart:125:9)
E/flutter (25896): #1      SqfliteIsolate.handle (package:sqflite_common_ffi/src/isolate.dart:35:12)
E/flutter (25896): <asynchronous suspension>
E/flutter (25896): #2      _isolateHandle (package:sqflite_common_ffi/src/database_factory_ffi_io.dart:106:10)
E/flutter (25896): <asynchronous suspension>
E/flutter (25896): #3      ffiMethodCallhandleInIsolate (package:sqflite_common_ffi/src/database_factory_ffi_io.dart:59:18)
E/flutter (25896): <asynchronous suspension>
E/flutter (25896): #4      _SqfliteDatabaseFactoryImpl.invokeMethod (package:sqflite_common/src/mixin/factory.dart:22:8)
E/flutter (25896): <asynchronous suspension>
E/flutter (25896): #5      SqfliteDatabaseMixin.txnApplyBatch.<anonymous closure> (package:sqflite_common/src/database_mixin.dart:841:23)
E/flutter (25896): <asynchronous suspension>
E/flutter (25896): #6      SqfliteDatabaseMixin.txnSynchronized (package:sqflite_common/src/database_mixin.dart:555:16)
E/flutter (25896): <asynchronous suspension>
E/flutter (25896): #7      SqfliteDatabaseMixinExt._txnTransaction (package:sqflite_common/src/database_mixin.dart:389:16)
E/flutter (25896): <asynchronous suspension>
E/flutter (25896): #8      BasicLock.synchronized (package:synchronized/src/basic_lock.dart:38:16)
E/flutter (25896): <asynchronous suspension>
E/flutter (25896): #9      SqfliteDatabaseMixin.txnSynchronized (package:sqflite_common/src/database_mixin.dart:590:14)
E/flutter (25896): <asynchronous suspension>
E/flutter (25896): #10     LibraryListExt.libraryListInsertEntries (package:mugiten/models/library_list.dart:558:5)
E/flutter (25896): <asynchronous suspension>
E/flutter (25896): #11     importLibraryList (package:mugiten/services/archive/v2/library_lists.dart:271:20)
E/flutter (25896): <asynchronous suspension>
E/flutter (25896): #12     importLibraryLists (package:mugiten/services/archive/v2/library_lists.dart:229:5)
E/flutter (25896): <asynchronous suspension>
E/flutter (25896): #13     importData (package:mugiten/services/archive/v2/format.dart:340:3)
E/flutter (25896): <asynchronous suspension>
E/flutter (25896): #14     _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:183:3)
E/flutter (25896): <asynchronous suspension>
E/flutter (25896):
Example of what could happen when resetting the database to a new copy of jadb with updated datasource for jmdict: ``` I/flutter (25896): Library list "favourites" already exists but is empty. Importing entries from file Directory: '/data/user/0/wtf.nani.mugiten.debug/code_cache/mugiten_data_IPELEG/library/favourites/'. E/flutter (25896): [ERROR:flutter/runtime/dart_vm_initializer.cc(40)] Unhandled Exception: SqfliteFfiException(sqlite_error: 787, , SqliteException(787): while executing statement, FOREIGN KEY constraint failed, constraint failed (code 787) E/flutter (25896): Causing statement: INSERT OR IGNORE INTO Mugiten_LibraryListEntry (listName, jmdictEntryId, kanji, orderNum, lastModified) VALUES (?, ?, NULL, ?, ?), parameters: 情報学単語, 1232500, 7600, 1780340231765}) DatabaseException(SqliteException(787): while executing statement, FOREIGN KEY constraint failed, constraint failed (code 787) E/flutter (25896): Causing statement: INSERT OR IGNORE INTO Mugiten_LibraryListEntry (listName, jmdictEntryId, kanji, orderNum, lastModified) VALUES (?, ?, NULL, ?, ?), parameters: 情報学単語, 1232500, 7600, 1780340231765) sql 'INSERT OR IGNORE INTO Mugiten_LibraryListEntry (listName, jmdictEntryId, kanji, orderNum, lastModified) VALUES (?, ?, NULL, ?, ?)' args [情報学単語, 1232500, 7600, 1780340231765] {details: {database: {path: /data/user/0/wtf.nani.mugiten.debug/app_flutter/mugiten.sqlite, id: 3, readOnly: false, singleInstance: true}}} E/flutter (25896): #0 responseToResultOrThrow (package:sqflite_common_ffi/src/method_call.dart:125:9) E/flutter (25896): #1 SqfliteIsolate.handle (package:sqflite_common_ffi/src/isolate.dart:35:12) E/flutter (25896): <asynchronous suspension> E/flutter (25896): #2 _isolateHandle (package:sqflite_common_ffi/src/database_factory_ffi_io.dart:106:10) E/flutter (25896): <asynchronous suspension> E/flutter (25896): #3 ffiMethodCallhandleInIsolate (package:sqflite_common_ffi/src/database_factory_ffi_io.dart:59:18) E/flutter (25896): <asynchronous suspension> E/flutter (25896): #4 _SqfliteDatabaseFactoryImpl.invokeMethod (package:sqflite_common/src/mixin/factory.dart:22:8) E/flutter (25896): <asynchronous suspension> E/flutter (25896): #5 SqfliteDatabaseMixin.txnApplyBatch.<anonymous closure> (package:sqflite_common/src/database_mixin.dart:841:23) E/flutter (25896): <asynchronous suspension> E/flutter (25896): #6 SqfliteDatabaseMixin.txnSynchronized (package:sqflite_common/src/database_mixin.dart:555:16) E/flutter (25896): <asynchronous suspension> E/flutter (25896): #7 SqfliteDatabaseMixinExt._txnTransaction (package:sqflite_common/src/database_mixin.dart:389:16) E/flutter (25896): <asynchronous suspension> E/flutter (25896): #8 BasicLock.synchronized (package:synchronized/src/basic_lock.dart:38:16) E/flutter (25896): <asynchronous suspension> E/flutter (25896): #9 SqfliteDatabaseMixin.txnSynchronized (package:sqflite_common/src/database_mixin.dart:590:14) E/flutter (25896): <asynchronous suspension> E/flutter (25896): #10 LibraryListExt.libraryListInsertEntries (package:mugiten/models/library_list.dart:558:5) E/flutter (25896): <asynchronous suspension> E/flutter (25896): #11 importLibraryList (package:mugiten/services/archive/v2/library_lists.dart:271:20) E/flutter (25896): <asynchronous suspension> E/flutter (25896): #12 importLibraryLists (package:mugiten/services/archive/v2/library_lists.dart:229:5) E/flutter (25896): <asynchronous suspension> E/flutter (25896): #13 importData (package:mugiten/services/archive/v2/format.dart:340:3) E/flutter (25896): <asynchronous suspension> E/flutter (25896): #14 _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:183:3) E/flutter (25896): <asynchronous suspension> E/flutter (25896): ```
oysteikt added the crash reportsafety labels 2026-06-01 20:59:34 +02:00
oysteikt added this to the Kanban project 2026-06-01 21:00:48 +02:00
oysteikt moved this to Next Version in Kanban on 2026-06-01 21:00:57 +02:00
oysteikt changed title from Handle missing jmdict entries gracefully to Handle missing jmdict entries gracefully on import 2026-06-01 21:05:17 +02:00
oysteikt added the topic/archive label 2026-06-01 21:05:20 +02:00
Author
Owner

Just some extra info: this entry seems like it was 1232500, 挙げられる, "to be arrested, to be captured (e.g. data), to be caught"

But we need a general way of handling missing entries

Just some extra info: this entry seems like it was 1232500, 挙げられる, "to be arrested, to be captured (e.g. data), to be caught" But we need a general way of handling missing entries
Author
Owner

Handled by skipping them for now, but we should do more reporting

Handled by skipping them for now, but we should do more reporting
oysteikt changed title from Handle missing jmdict entries gracefully on import to Report missing jmdict entries on archive import 2026-06-08 04:17:02 +02:00
oysteikt added ui/ux and removed crash report labels 2026-06-08 04:17:21 +02:00
oysteikt moved this to High pri in Kanban on 2026-06-08 04:17:32 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mugiten/mugiten#215