Jelajahi Sumber

Ensure that DB inits occur only once

vishnukvmd 4 tahun lalu
induk
melakukan
2747810cb3

+ 5 - 5
lib/db/collections_db.dart

@@ -39,14 +39,14 @@ class CollectionsDB {
   CollectionsDB._privateConstructor();
   static final CollectionsDB instance = CollectionsDB._privateConstructor();
 
-  static Database _database;
+  static Future<Database> _dbFuture;
+
   Future<Database> get database async {
-    if (_database != null) return _database;
-    _database = await _initDatabase();
-    return _database;
+    _dbFuture ??= _initDatabase();
+    return _dbFuture;
   }
 
-  _initDatabase() async {
+  Future<Database> _initDatabase() async {
     Directory documentsDirectory = await getApplicationDocumentsDirectory();
     String path = join(documentsDirectory.path, _databaseName);
     return await openDatabaseWithMigration(path, dbConfig);

+ 0 - 2
lib/db/files_db.dart

@@ -61,11 +61,9 @@ class FilesDB {
   static final FilesDB instance = FilesDB._privateConstructor();
 
   // only have a single app-wide reference to the database
-  static Database _database;
   static Future<Database> _dbFuture;
 
   Future<Database> get database async {
-    if (_database != null) return _database;
     // lazily instantiate the db the first time it is accessed
     _dbFuture ??= _initDatabase();
     return _dbFuture;

+ 5 - 6
lib/db/memories_db.dart

@@ -2,9 +2,9 @@ import 'dart:async';
 import 'dart:io';
 
 import 'package:path/path.dart';
+import 'package:path_provider/path_provider.dart';
 import 'package:photos/models/memory.dart';
 import 'package:sqflite/sqflite.dart';
-import 'package:path_provider/path_provider.dart';
 
 class MemoriesDB {
   static final _databaseName = "ente.memories.db";
@@ -18,14 +18,13 @@ class MemoriesDB {
   MemoriesDB._privateConstructor();
   static final MemoriesDB instance = MemoriesDB._privateConstructor();
 
-  static Database _database;
+  static Future<Database> _dbFuture;
   Future<Database> get database async {
-    if (_database != null) return _database;
-    _database = await _initDatabase();
-    return _database;
+    _dbFuture ??= _initDatabase();
+    return _dbFuture;
   }
 
-  _initDatabase() async {
+  Future<Database> _initDatabase() async {
     Directory documentsDirectory = await getApplicationDocumentsDirectory();
     String path = join(documentsDirectory.path, _databaseName);
     return await openDatabase(

+ 5 - 5
lib/db/public_keys_db.dart

@@ -2,9 +2,9 @@ import 'dart:async';
 import 'dart:io';
 
 import 'package:path/path.dart';
+import 'package:path_provider/path_provider.dart';
 import 'package:photos/models/public_key.dart';
 import 'package:sqflite/sqflite.dart';
-import 'package:path_provider/path_provider.dart';
 
 class PublicKeysDB {
   static final _databaseName = "ente.public_keys.db";
@@ -18,11 +18,11 @@ class PublicKeysDB {
   PublicKeysDB._privateConstructor();
   static final PublicKeysDB instance = PublicKeysDB._privateConstructor();
 
-  static Database _database;
+  static Future<Database> _dbFuture;
+
   Future<Database> get database async {
-    if (_database != null) return _database;
-    _database = await _initDatabase();
-    return _database;
+    _dbFuture ??= _initDatabase();
+    return _dbFuture;
   }
 
   _initDatabase() async {

+ 5 - 6
lib/db/upload_locks_db.dart

@@ -2,8 +2,8 @@ import 'dart:async';
 import 'dart:io';
 
 import 'package:path/path.dart';
-import 'package:sqflite/sqflite.dart';
 import 'package:path_provider/path_provider.dart';
+import 'package:sqflite/sqflite.dart';
 
 class UploadLocksDB {
   static const _databaseName = "ente.upload_locks.db";
@@ -17,14 +17,13 @@ class UploadLocksDB {
   UploadLocksDB._privateConstructor();
   static final UploadLocksDB instance = UploadLocksDB._privateConstructor();
 
-  static Database _database;
+  static Future<Database> _dbFuture;
   Future<Database> get database async {
-    if (_database != null) return _database;
-    _database = await _initDatabase();
-    return _database;
+    _dbFuture ??= _initDatabase();
+    return _dbFuture;
   }
 
-  _initDatabase() async {
+  Future<Database> _initDatabase() async {
     Directory documentsDirectory = await getApplicationDocumentsDirectory();
     String path = join(documentsDirectory.path, _databaseName);
     return await openDatabase(