Skip to content

Commit

Permalink
feat: use UpdateNotifications service
Browse files Browse the repository at this point in the history
  • Loading branch information
matthiasn committed May 3, 2024
1 parent 59ded4b commit 9f4a40a
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 58 deletions.
21 changes: 12 additions & 9 deletions lib/blocs/journal/journal_page_cubit.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import 'package:lotti/database/database.dart';
import 'package:lotti/database/fts5_db.dart';
import 'package:lotti/database/settings_db.dart';
import 'package:lotti/get_it.dart';
import 'package:lotti/services/db_notification.dart';
import 'package:lotti/utils/platform.dart';
import 'package:rxdart/rxdart.dart';
import 'package:visibility_detector/visibility_detector.dart';
Expand Down Expand Up @@ -101,14 +102,12 @@ class JournalPageCubit extends Cubit<JournalPageState> {
}
});
} else {
_db
.watchJournalCount()
_updateNotifications.updateStream
.throttleTime(
const Duration(seconds: 2),
leading: false,
trailing: true,
)
.where(makeDuplicateFilter())
const Duration(seconds: 1),
leading: false,
trailing: true,
)
.listen((_) {
if (_isVisible) {
refreshQuery();
Expand All @@ -121,6 +120,7 @@ class JournalPageCubit extends Cubit<JournalPageState> {
static const selectedEntryTypesKey = 'SELECTED_ENTRY_TYPES';

final JournalDb _db = getIt<JournalDb>();
final UpdateNotifications _updateNotifications = getIt<UpdateNotifications>();
bool _isVisible = false;
static const _pageSize = 50;
Set<String> _selectedEntryTypes = entryTypes.toSet();
Expand Down Expand Up @@ -308,15 +308,18 @@ class JournalPageCubit extends Cubit<JournalPageState> {
.first;

final isLastPage = newItems.length < _pageSize;

if (isLastPage) {
state.pagingController.appendLastPage(newItems);
} else {
final nextPageKey = pageKey + newItems.length;
state.pagingController.appendPage(newItems, nextPageKey);
}
final finished = DateTime.now();
final duration = finished.difference(start);
debugPrint('_fetchPage $showTasks duration $duration');
final duration = finished.difference(start).inMicroseconds / 1000;
debugPrint(
'_fetchPage ${showTasks ? 'TASK' : 'JOURNAL'} duration $duration ms',
);
} catch (error) {
state.pagingController.error = error;
}
Expand Down
33 changes: 4 additions & 29 deletions lib/database/database.dart
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
import 'dart:async';
import 'dart:convert';
import 'dart:io';

import 'package:collection/collection.dart';
import 'package:drift/drift.dart';
import 'package:drift/native.dart';
import 'package:enum_to_string/enum_to_string.dart';
import 'package:flutter/foundation.dart';
import 'package:lotti/classes/entity_definitions.dart';
Expand All @@ -15,13 +13,10 @@ import 'package:lotti/database/common.dart';
import 'package:lotti/database/conversions.dart';
import 'package:lotti/database/logging_db.dart';
import 'package:lotti/get_it.dart';
import 'package:lotti/services/db_notification.dart';
import 'package:lotti/sync/vector_clock.dart';
import 'package:lotti/utils/file_utils.dart';
import 'package:lotti/widgets/journal/entry_tools.dart';
import 'package:path/path.dart' as p;
import 'package:path_provider/path_provider.dart';
import 'package:sqlite3/sqlite3.dart';
import 'package:sqlite3_flutter_libs/sqlite3_flutter_libs.dart';

part 'database.g.dart';

Expand All @@ -40,35 +35,14 @@ class JournalDb extends _$JournalDb {
this.inMemoryDatabase = false,
String? overriddenFilename,
}) : super(
_openConnection(
openDbConnection(
overriddenFilename ?? journalDbFileName,
inMemoryDatabase: inMemoryDatabase,
),
);

static LazyDatabase _openConnection(
String fileName, {
bool inMemoryDatabase = false,
}) {
return LazyDatabase(() async {
if (inMemoryDatabase) {
return NativeDatabase.memory();
}

final dbFolder = await getApplicationDocumentsDirectory();
final file = File(p.join(dbFolder.path, fileName));

if (Platform.isAndroid) {
await applyWorkaroundToOpenSqlite3OnOldAndroidVersions();
}

sqlite3.tempDirectory = (await getTemporaryDirectory()).path;

return NativeDatabase.createInBackground(file);
});
}

bool inMemoryDatabase = false;
final UpdateNotifications _updateNotifications = getIt<UpdateNotifications>();

@override
int get schemaVersion => 19;
Expand Down Expand Up @@ -749,6 +723,7 @@ class JournalDb extends _$JournalDb {
dashboard: upsertDashboardDefinition,
categoryDefinition: upsertCategoryDefinition,
);
_updateNotifications.notifyUpdate(DatabaseType.journal);
return linesAffected;
}
}
5 changes: 2 additions & 3 deletions lib/get_it.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import 'package:lotti/logic/ai/ai_logic.dart';
import 'package:lotti/logic/health_import.dart';
import 'package:lotti/logic/persistence_logic.dart';
import 'package:lotti/services/asr_service.dart';
import 'package:lotti/services/db_notification.dart';
import 'package:lotti/services/editor_state_service.dart';
import 'package:lotti/services/entities_cache_service.dart';
import 'package:lotti/services/link_service.dart';
Expand All @@ -29,10 +30,8 @@ Future<void> registerSingletons() async {
getIt
..registerSingleton<Fts5Db>(Fts5Db())
..registerSingleton<LoggingDb>(LoggingDb())
..registerSingleton<UpdateNotifications>(UpdateNotifications())
..registerSingleton<JournalDb>(JournalDb())
// ..registerSingleton<DatabaseUpdateNotifications>(
// DatabaseUpdateNotifications(),
// )
..registerSingleton<EditorDb>(EditorDb())
..registerSingleton<TagsService>(TagsService())
..registerSingleton<EntitiesCacheService>(EntitiesCacheService())
Expand Down
31 changes: 15 additions & 16 deletions lib/services/db_notification.dart
Original file line number Diff line number Diff line change
@@ -1,21 +1,20 @@
import 'package:flutter/foundation.dart';
import 'package:lotti/database/database.dart';
import 'package:lotti/get_it.dart';
import 'dart:async';

class DatabaseUpdateNotifications {
DatabaseUpdateNotifications() {
listen();
}
enum DatabaseType {
journal,
setting,
sync,
logging,
}

class UpdateNotifications {
UpdateNotifications();

final _updateStreamController = StreamController<DatabaseType>.broadcast();

final JournalDb _journalDb = getIt<JournalDb>();
Stream<DatabaseType> get updateStream => _updateStreamController.stream;

void listen() {
_journalDb.countJournalEntries().watch().listen((event) async {
final start = DateTime.now();
final count = await _journalDb.countJournalEntries().getSingle();
final end = DateTime.now();
final duration = end.difference(start).inMicroseconds / 1000;
debugPrint('DatabaseUpdateNotifications $count - $duration ms');
});
void notifyUpdate(DatabaseType databaseType) {
_updateStreamController.add(databaseType);
}
}
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: lotti
description: Achieve your goals and keep your data private with Lotti.
publish_to: 'none'
version: 0.9.459+2496
version: 0.9.459+2497

msix_config:
display_name: LottiApp
Expand Down

0 comments on commit 9f4a40a

Please sign in to comment.