Skip to content

Commit

Permalink
feat: persist task status and entry types filter
Browse files Browse the repository at this point in the history
  • Loading branch information
matthiasn committed May 2, 2024
1 parent 5133acc commit 3edc43a
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 10 deletions.
57 changes: 50 additions & 7 deletions lib/blocs/journal/journal_page_cubit.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import 'dart:async';
import 'dart:convert';

import 'package:bloc/bloc.dart';
import 'package:collection/collection.dart';
Expand All @@ -9,6 +10,7 @@ import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart';
import 'package:lotti/blocs/journal/journal_page_state.dart';
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/utils/platform.dart';
import 'package:rxdart/rxdart.dart';
Expand Down Expand Up @@ -48,6 +50,26 @@ class JournalPageCubit extends Cubit<JournalPageState> {
emitState();
});

getIt<SettingsDb>().itemByKey(selectedTaskStatusesKey).then((value) {
if (value == null) {
return;
}
final json = jsonDecode(value) as List<dynamic>;
_selectedTaskStatuses = List<String>.from(json).toSet();
emitState();
refreshQuery();
});

getIt<SettingsDb>().itemByKey(selectedEntryTypesKey).then((value) {
if (value == null) {
return;
}
final json = jsonDecode(value) as List<dynamic>;
_selectedEntryTypes = List<String>.from(json).toSet();
emitState();
refreshQuery();
});

state.pagingController.addPageRequestListener(_fetchPage);

if (isDesktop) {
Expand Down Expand Up @@ -95,6 +117,9 @@ class JournalPageCubit extends Cubit<JournalPageState> {
}
}

static const selectedTaskStatusesKey = 'SELECTED_TASK_STATUSES';
static const selectedEntryTypesKey = 'SELECTED_ENTRY_TYPES';

final JournalDb _db = getIt<JournalDb>();
bool _isVisible = false;
static const _pageSize = 50;
Expand Down Expand Up @@ -150,7 +175,7 @@ class JournalPageCubit extends Cubit<JournalPageState> {
_selectedTaskStatuses = _selectedTaskStatuses.union({status});
}

refreshQuery();
persistTaskStatuses();
}

void toggleTaskAsListView() {
Expand All @@ -165,37 +190,55 @@ class JournalPageCubit extends Cubit<JournalPageState> {
_selectedEntryTypes = _selectedEntryTypes.union({entryType});
}

refreshQuery();
persistEntryTypes();
}

void selectSingleEntryType(String entryType) {
_selectedEntryTypes = {entryType};
refreshQuery();
persistEntryTypes();
}

void selectAllEntryTypes() {
_selectedEntryTypes = entryTypes.toSet();
refreshQuery();
persistEntryTypes();
}

void clearSelectedEntryTypes() {
_selectedEntryTypes = {};
refreshQuery();
persistEntryTypes();
}

void selectSingleTaskStatus(String taskStatus) {
_selectedTaskStatuses = {taskStatus};
refreshQuery();
persistTaskStatuses();
}

void selectAllTaskStatuses() {
_selectedTaskStatuses = state.taskStatuses.toSet();
refreshQuery();
persistTaskStatuses();
}

void clearSelectedTaskStatuses() {
_selectedTaskStatuses = {};
persistTaskStatuses();
}

Future<void> persistTaskStatuses() async {
refreshQuery();

await getIt<SettingsDb>().saveSettingsItem(
selectedTaskStatusesKey,
jsonEncode(_selectedTaskStatuses.toList()),
);
}

Future<void> persistEntryTypes() async {
refreshQuery();

await getIt<SettingsDb>().saveSettingsItem(
selectedEntryTypesKey,
jsonEncode(_selectedEntryTypes.toList()),
);
}

Future<void> _fts5Search() async {
Expand Down
4 changes: 2 additions & 2 deletions pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2480,10 +2480,10 @@ packages:
dependency: "direct main"
description:
name: sqflite
sha256: "5ce2e1a15e822c3b4bfb5400455775e421da7098eed8adc8f26298ada7c9308c"
sha256: a43e5a27235518c03ca238e7b4732cf35eabe863a369ceba6cbefa537a66f16d
url: "https://pub.dev"
source: hosted
version: "2.3.3"
version: "2.3.3+1"
sqflite_common:
dependency: transitive
description:
Expand Down
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.457+2492
version: 0.9.458+2493

msix_config:
display_name: LottiApp
Expand Down
6 changes: 6 additions & 0 deletions test/pages/journal/infinite_journal_page_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import 'package:lotti/classes/journal_entities.dart';
import 'package:lotti/classes/tag_type_definitions.dart';
import 'package:lotti/database/database.dart';
import 'package:lotti/database/logging_db.dart';
import 'package:lotti/database/settings_db.dart';
import 'package:lotti/get_it.dart';
import 'package:lotti/logic/persistence_logic.dart';
import 'package:lotti/pages/journal/infinite_journal_page.dart';
Expand All @@ -35,6 +36,7 @@ void main() {
TestWidgetsFlutterBinding.ensureInitialized();

var mockJournalDb = MockJournalDb();
final mockSettingsDb = MockSettingsDb();
var mockPersistenceLogic = MockPersistenceLogic();
final mockEntitiesCacheService = MockEntitiesCacheService();

Expand Down Expand Up @@ -89,12 +91,16 @@ void main() {
when(mockJournalDb.watchCountImportFlagEntries)
.thenAnswer((_) => Stream<int>.fromIterable([42]));

when(() => mockSettingsDb.itemByKey(any()))
.thenAnswer((_) => Future(() => null));

when(mockJournalDb.watchInProgressTasksCount)
.thenAnswer((_) => Stream<int>.fromIterable([42]));

getIt
..registerSingleton<Directory>(await getApplicationDocumentsDirectory())
..registerSingleton<LoggingDb>(MockLoggingDb())
..registerSingleton<SettingsDb>(mockSettingsDb)
..registerSingleton<AsrService>(MockAsrService())
..registerSingleton<TagsService>(mockTagsService)
..registerSingleton<TimeService>(mockTimeService)
Expand Down

0 comments on commit 3edc43a

Please sign in to comment.