-
Notifications
You must be signed in to change notification settings - Fork 178
Expand file tree
/
Copy pathmodify.dart
More file actions
84 lines (75 loc) · 2.21 KB
/
modify.dart
File metadata and controls
84 lines (75 loc) · 2.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// ignore_for_file: depend_on_referenced_packages
import 'package:collection/collection.dart';
import 'package:taskwarrior/app/models/models.dart';
import 'package:taskwarrior/app/utils/taskfunctions/draft.dart';
class Modify {
Modify({
required Task Function(String) getTask,
required void Function(Task) mergeTask,
required String uuid,
}) : _getTask = getTask,
_mergeTask = mergeTask,
_uuid = uuid {
_draft = Draft(_getTask(_uuid));
}
final Task Function(String) _getTask;
final void Function(Task) _mergeTask;
final String _uuid;
late Draft _draft;
Task get draft => _draft.draft;
int get id => _draft.original.id!;
Task get original => _draft.original;
Map<dynamic, Map> get changes {
var result = <dynamic, Map>{};
var savedJson = _draft.original.toJson();
var draftJson = _draft.draft.toJson();
for (var entry in {
for (var key in [
'description',
'status',
'start',
'end',
'due',
'wait',
'until',
'priority',
'project',
'tags',
'annotations',
])
key: (value) {
if (value != null &&
['start', 'end', 'due', 'wait', 'until'].contains(key)) {
return DateTime.parse(value).toLocal();
} else if (key == 'annotations') {
return (value as List?)?.length ?? 0;
}
return value;
},
}.entries) {
var key = entry.key;
var savedValue = savedJson[key];
var draftValue = draftJson[key];
if (draftValue != savedValue &&
!(key == 'tags' &&
const ListEquality().equals(draftValue, savedValue)) &&
!(key == 'annotations' &&
const DeepCollectionEquality().equals(draftValue, savedValue))) {
result[key] = {
'old': entry.value(savedValue),
'new': entry.value(draftValue),
};
}
}
return result;
}
// ignore: avoid_annotating_with_dynamic
void set(String key, dynamic value) {
_draft.set(key, value);
}
void save({required DateTime Function() modified}) {
_draft.set('modified', modified());
_mergeTask(_draft.draft);
_draft = Draft(_getTask(_uuid));
}
}