mirror of
https://github.com/immich-app/immich.git
synced 2026-07-06 20:47:00 -07:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3ee4a2936a |
@@ -363,6 +363,16 @@ final class _DriftPoolStreamQueries extends StreamQueryStore {
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> deleteSqliteDatabase({required String name}) async {
|
||||
final file = await _databaseFile(name);
|
||||
for (final path in [file.path, '${file.path}-wal', '${file.path}-shm']) {
|
||||
final sidecar = File(path);
|
||||
if (await sidecar.exists()) {
|
||||
await sidecar.delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Future<SqliteConnection> openSqliteConnection({required String name}) async {
|
||||
return _openImmichDatabase(await _databaseFile(name));
|
||||
}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:auto_route/auto_route.dart';
|
||||
import 'package:easy_localization/easy_localization.dart';
|
||||
@@ -12,6 +11,7 @@ import 'package:immich_mobile/domain/models/store.model.dart';
|
||||
import 'package:immich_mobile/entities/store.entity.dart';
|
||||
import 'package:immich_mobile/generated/codegen_loader.g.dart';
|
||||
import 'package:immich_mobile/generated/translations.g.dart';
|
||||
import 'package:immich_mobile/infrastructure/repositories/db.repository.dart';
|
||||
import 'package:immich_mobile/infrastructure/repositories/settings.repository.dart';
|
||||
import 'package:immich_mobile/providers/auth.provider.dart';
|
||||
import 'package:immich_mobile/providers/background_sync.provider.dart';
|
||||
@@ -25,8 +25,6 @@ import 'package:immich_mobile/theme/theme_data.dart';
|
||||
import 'package:immich_mobile/widgets/common/immich_logo.dart';
|
||||
import 'package:immich_mobile/widgets/common/immich_title_text.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:path/path.dart' as path;
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:url_launcher/url_launcher.dart' show launchUrl, LaunchMode;
|
||||
|
||||
class BootstrapErrorWidget extends StatelessWidget {
|
||||
@@ -132,13 +130,7 @@ class _BottomPanelState extends State<_BottomPanel> {
|
||||
}
|
||||
|
||||
try {
|
||||
final dir = await getApplicationDocumentsDirectory();
|
||||
for (final suffix in ['', '-wal', '-shm']) {
|
||||
final file = File(path.join(dir.path, 'immich.sqlite$suffix'));
|
||||
if (await file.exists()) {
|
||||
await file.delete();
|
||||
}
|
||||
}
|
||||
await deleteSqliteDatabase(name: 'immich');
|
||||
} catch (_) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -6,10 +6,12 @@ import 'package:immich_mobile/extensions/translate_extensions.dart';
|
||||
import 'package:immich_mobile/infrastructure/repositories/db.repository.dart';
|
||||
import 'package:immich_mobile/infrastructure/repositories/log.repository.dart';
|
||||
import 'package:immich_mobile/infrastructure/repositories/logger_db.repository.dart';
|
||||
import 'package:immich_mobile/infrastructure/repositories/settings.repository.dart';
|
||||
import 'package:immich_mobile/infrastructure/repositories/network.repository.dart';
|
||||
import 'package:immich_mobile/infrastructure/repositories/settings.repository.dart';
|
||||
import 'package:immich_mobile/infrastructure/repositories/store.repository.dart';
|
||||
import 'package:immich_mobile/utils/debug_print.dart';
|
||||
import 'package:photo_manager/photo_manager.dart';
|
||||
import 'package:sqlite3/common.dart';
|
||||
|
||||
void configureFileDownloaderNotifications() {
|
||||
FileDownloader().configureNotificationForGroup(
|
||||
@@ -46,7 +48,7 @@ abstract final class Bootstrap {
|
||||
await configureSqliteCache();
|
||||
final (db, updatePool) = await openSqliteConnectionWithUpdatePool(name: 'immich');
|
||||
final drift = Drift.sqlite(db, updatePool);
|
||||
final logDb = DriftLogger.sqlite(await openSqliteConnection(name: 'immich_logs'));
|
||||
final logDb = await _openLogDb();
|
||||
final DriftStoreRepository storeRepo = DriftStoreRepository(drift);
|
||||
|
||||
await StoreService.init(storeRepository: storeRepo, listenUpdates: listenStoreUpdates);
|
||||
@@ -65,3 +67,20 @@ abstract final class Bootstrap {
|
||||
return (drift, logDb);
|
||||
}
|
||||
}
|
||||
|
||||
Future<DriftLogger> _openLogDb() async {
|
||||
Future<DriftLogger> open() async => DriftLogger.sqlite(await openSqliteConnection(name: 'immich_logs'));
|
||||
|
||||
final logDb = await open();
|
||||
try {
|
||||
await logDb.customSelect('SELECT COUNT(*) FROM logger_messages').get();
|
||||
} on SqliteException catch (error) {
|
||||
if (error.resultCode == 11 || error.resultCode == 26) {
|
||||
dPrint(() => 'Logs database is unusable, recreating it');
|
||||
await logDb.close();
|
||||
await deleteSqliteDatabase(name: 'immich_logs');
|
||||
return open();
|
||||
}
|
||||
}
|
||||
return logDb;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user