Skip to content

Commit

Permalink
feat: basic data-layer support for entry types, password-protection
Browse files Browse the repository at this point in the history
  • Loading branch information
ThatNerdSquared committed Aug 19, 2024
1 parent 6c98aa1 commit 42d2632
Show file tree
Hide file tree
Showing 6 changed files with 84 additions and 7 deletions.
2 changes: 1 addition & 1 deletion ios/Podfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Uncomment this line to define a global platform for your project
# platform :ios, '11.0'
platform :ios, '12.0'

# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
Expand Down
24 changes: 21 additions & 3 deletions ios/Podfile.lock
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
PODS:
- device_info_plus (0.0.1):
- Flutter
- DKImagePickerController/Core (4.3.4):
- DKImagePickerController/ImageDataManager
- DKImagePickerController/Resource
Expand Down Expand Up @@ -34,20 +36,27 @@ PODS:
- DKImagePickerController/PhotoGallery
- Flutter
- Flutter (1.0.0)
- irondash_engine_context (0.0.1):
- Flutter
- path_provider_foundation (0.0.1):
- Flutter
- FlutterMacOS
- SDWebImage (5.18.3):
- SDWebImage/Core (= 5.18.3)
- SDWebImage/Core (5.18.3)
- super_native_extensions (0.0.1):
- Flutter
- SwiftyGif (5.4.4)
- url_launcher_ios (0.0.1):
- Flutter

DEPENDENCIES:
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
- file_picker (from `.symlinks/plugins/file_picker/ios`)
- Flutter (from `Flutter`)
- irondash_engine_context (from `.symlinks/plugins/irondash_engine_context/ios`)
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
- super_native_extensions (from `.symlinks/plugins/super_native_extensions/ios`)
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)

SPEC REPOS:
Expand All @@ -58,25 +67,34 @@ SPEC REPOS:
- SwiftyGif

EXTERNAL SOURCES:
device_info_plus:
:path: ".symlinks/plugins/device_info_plus/ios"
file_picker:
:path: ".symlinks/plugins/file_picker/ios"
Flutter:
:path: Flutter
irondash_engine_context:
:path: ".symlinks/plugins/irondash_engine_context/ios"
path_provider_foundation:
:path: ".symlinks/plugins/path_provider_foundation/darwin"
super_native_extensions:
:path: ".symlinks/plugins/super_native_extensions/ios"
url_launcher_ios:
:path: ".symlinks/plugins/url_launcher_ios/ios"

SPEC CHECKSUMS:
device_info_plus: 97af1d7e84681a90d0693e63169a5d50e0839a0d
DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac
DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179
file_picker: ce3938a0df3cc1ef404671531facef740d03f920
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
irondash_engine_context: 3458bf979b90d616ffb8ae03a150bafe2e860cc9
path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943
SDWebImage: 96e0c18ef14010b7485210e92fac888587ebb958
super_native_extensions: 4916b3c627a9c7fffdc48a23a9eca0b1ac228fa7
SwiftyGif: 93a1cc87bf3a51916001cf8f3d63835fb64c819f
url_launcher_ios: bf5ce03e0e2088bad9cc378ea97fa0ed5b49673b

PODFILE CHECKSUM: 70d9d25280d0dd177a5f637cdb0f0b0b12c6a189
PODFILE CHECKSUM: 7be2f5f74864d463a8ad433546ed1de7e0f29aef

COCOAPODS: 1.14.3
COCOAPODS: 1.15.2
2 changes: 2 additions & 0 deletions lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import 'config.dart';
import 'model/current_ancestors.dart';
import 'model/entry_data.dart';
import 'model/entry_filter.dart';
import 'model/json_backend.dart';
import 'model/tag_data.dart';
import 'widgets/desktop_frame.dart';
import 'widgets/entry_list_view.dart';
Expand All @@ -16,6 +17,7 @@ import 'widgets/sidebar.dart';

const uuID = Uuid();
String platformAppSupportDir = '';
final String hashedPwd = JsonBackend().readHashedPwd();

final entryListProvider =
StateNotifierProvider<PeregrineEntryList, Map<String, PeregrineEntry>>(
Expand Down
20 changes: 20 additions & 0 deletions lib/model/entry_data.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,21 @@ import '../format_utils.dart';
import '../main.dart';
import 'json_backend.dart';

enum EntryType { standard, deprecated, archived }

extension ToEntryType on String {
EntryType toEntryType() {
return switch (this) {
'EntryType.standard' => EntryType.standard,
'EntryType.deprecated' => EntryType.deprecated,
'EntryType.archived' => EntryType.archived,
_ => throw ArgumentError(
'String $this could not be converted to EntryType!',
)
};
}
}

class PeregrineEntryList extends StateNotifier<Map<String, PeregrineEntry>> {
final Ref ref;

Expand Down Expand Up @@ -38,6 +53,7 @@ class PeregrineEntryList extends StateNotifier<Map<String, PeregrineEntry>> {
date: value.date,
input: value.input,
isEncrypted: value.isEncrypted,
entryType: value.entryType,
tags: value.tags,
mentionedContacts: value.mentionedContacts,
ancestors: value.ancestors,
Expand All @@ -53,6 +69,7 @@ class PeregrineEntryList extends StateNotifier<Map<String, PeregrineEntry>> {
date: DateTime.now(),
input: input,
isEncrypted: isAutoEncrypt,
entryType: EntryType.standard,
tags: findTags(input),
mentionedContacts: findContacts(input),
ancestors: ancestors,
Expand All @@ -67,6 +84,7 @@ class PeregrineEntry extends PretDataclass {
final DateTime date;
final String input;
final bool isEncrypted;
final EntryType entryType;
final List<String> tags;
final List<String> mentionedContacts;
final List<String> ancestors;
Expand All @@ -76,6 +94,7 @@ class PeregrineEntry extends PretDataclass {
required this.date,
required this.input,
required this.isEncrypted,
required this.entryType,
required this.tags,
required this.mentionedContacts,
required this.ancestors,
Expand All @@ -88,6 +107,7 @@ class PeregrineEntry extends PretDataclass {
'date': date.toIso8601String(),
'input': input,
'isEncrypted': isEncrypted,
'entryType': entryType.toString(),
'tags': tags,
'mentionedContacts': mentionedContacts,
'ancestors': ancestors,
Expand Down
31 changes: 30 additions & 1 deletion lib/model/json_backend.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,13 @@ class JsonBackend extends PretJsonManager {
@override
final dataFile = File(Config.logFilePath);
@override
String schemaVersion = '2.1.0';
String schemaVersion = '2.2.0';
@override
Map<String, List<String>> dropFields = {};
@override
Map get freshJson => <String, dynamic>{
'schema': schemaVersion,
'hashedPwd': '',
'tags': {},
'entries': {},
};
Expand All @@ -30,6 +31,7 @@ class JsonBackend extends PretJsonManager {
return switch (contentsMap['schema'] as String) {
'2.0.0' => _parseV2_0(contentsMap),
'2.1.0' => _parseV2_1(contentsMap),
'2.2.0' => _parseV2_2(contentsMap),
_ => throw UnimplementedError(
"Schema version ${contentsMap['schema']} invalid!")
};
Expand All @@ -54,13 +56,19 @@ class JsonBackend extends PretJsonManager {
return sortTags(tags);
}

String readHashedPwd() {
final contentsMap = pretLoadJson();
return contentsMap['hashedPwd'];
}

Map<String, PeregrineEntry> _parseV1(contentsMap) {
final data = Map<String, PeregrineEntry>.from({
for (final value in contentsMap)
uuID.v4(): PeregrineEntry(
date: DateTime.parse(value['date']),
input: value['input'],
isEncrypted: value['encrypted'] ?? false,
entryType: EntryType.standard,
tags: findTags(value['input']),
mentionedContacts: findContacts(value['input']),
ancestors: const [],
Expand All @@ -82,6 +90,7 @@ class JsonBackend extends PretJsonManager {
date: DateTime.parse(value['date']),
input: value['input'],
isEncrypted: value['isEncrypted'],
entryType: EntryType.standard,
tags: List<String>.from(value['tags']),
mentionedContacts: List<String>.from(value['mentionedContacts']),
ancestors: const [],
Expand All @@ -102,6 +111,26 @@ class JsonBackend extends PretJsonManager {
date: DateTime.parse(value['date']),
input: value['input'],
isEncrypted: value['isEncrypted'],
entryType: EntryType.standard,
tags: List<String>.from(value['tags']),
mentionedContacts: List<String>.from(value['mentionedContacts']),
ancestors: List<String>.from(value['ancestors']),
descendants: List<String>.from(value['descendants']),
),
),
));
}

Map<String, PeregrineEntry> _parseV2_2(contentsMap) {
final entriesMap = contentsMap['entries'];
return Map<String, PeregrineEntry>.from(entriesMap.map(
(key, value) => MapEntry(
key,
PeregrineEntry(
date: DateTime.parse(value['date']),
input: value['input'],
isEncrypted: value['isEncrypted'],
entryType: (value['entryType'] as String).toEntryType(),
tags: List<String>.from(value['tags']),
mentionedContacts: List<String>.from(value['mentionedContacts']),
ancestors: List<String>.from(value['ancestors']),
Expand Down
12 changes: 10 additions & 2 deletions lib/widgets/peregrine_app_bar.dart
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,16 @@ class PeregrineAppBar extends ConsumerWidget {
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(PretConfig.thinBorderRounding),
)),
onPressed: () =>
ref.read(isLocked.notifier).update((state) => !state),
onPressed: () {
if (hashedPwd.isEmpty) {
showModalBottomSheet(
context: context,
builder: (context) => const Column(
children: [Text('Set a password')],
));
}
ref.read(isLocked.notifier).update((state) => !state);
},
icon: Icon(
ref.watch(isLocked) ? Icons.lock : Icons.lock_open_rounded,
color: Theme.of(context).colorScheme.surface,
Expand Down

0 comments on commit 42d2632

Please sign in to comment.