-
Notifications
You must be signed in to change notification settings - Fork 179
Expand file tree
/
Copy pathtask.dart
More file actions
105 lines (93 loc) · 2.53 KB
/
task.dart
File metadata and controls
105 lines (93 loc) · 2.53 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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
// ignore_for_file: depend_on_referenced_packages
import 'dart:convert';
import 'package:built_collection/built_collection.dart';
import 'package:built_value/built_value.dart';
import 'package:built_value/serializer.dart';
import 'package:taskwarrior/app/models/json/annotation.dart';
import 'package:taskwarrior/app/models/json/serializers.dart';
import 'package:taskwarrior/app/utils/taskfunctions/validate.dart';
part 'task.g.dart';
final coreAttributes = [
'id',
'status',
'uuid',
'entry',
'description',
'start',
'end',
'due',
'until',
'wait',
'modified',
'scheduled',
'recur',
'mask',
'imask',
'parent',
'project',
'priority',
'depends',
'tags',
'annotations',
'urgency',
];
abstract class Task implements Built<Task, TaskBuilder> {
factory Task([void Function(TaskBuilder) updates]) = _$Task;
Task._() {
validateTaskDescription(description);
if (project != null) {
validateTaskProject(project!);
}
if (tags != null) {
tags!.forEach(validateTaskTags);
}
}
static Task fromJson(Map json) {
var udas = Map.of(json)
..removeWhere((key, _) => coreAttributes.contains(key));
var result = Map.of(json)
..removeWhere((key, _) => !coreAttributes.contains(key))
..['depends'] = ((x) => (x is String) ? x.split(',') : x)(json['depends'])
..['imask'] = (json['imask'] as num?)?.toInt()
..['udas'] = (udas.isEmpty) ? null : jsonEncode(udas);
return serializers.deserializeWith(Task.serializer, result)!;
}
Map<String, dynamic> toJson() {
var result = serializers.serializeWith(Task.serializer, this)!
as Map<String, dynamic>;
if (result['depends'] != null) {
result['depends'] = (result['depends'] as List).join(',');
}
if (result['udas'] != null) {
var udas = Map<String, dynamic>.of(json.decode(result['udas']));
result
..remove('udas')
..addAll(udas);
}
return result;
}
int? get id;
String get status;
String get uuid;
DateTime get entry;
String get description;
DateTime? get start;
DateTime? get end;
DateTime? get due;
DateTime? get until;
DateTime? get wait;
DateTime? get modified;
DateTime? get scheduled;
String? get recur;
String? get mask;
int? get imask;
String? get parent;
String? get project;
String? get priority;
BuiltList<String>? get depends;
BuiltList<String>? get tags;
BuiltList<Annotation>? get annotations;
String? get udas;
double? get urgency;
static Serializer<Task> get serializer => _$taskSerializer;
}