+- (NSArray *) sections {
+ return record_ == nil ? (id) [NSNull null] : [record_ objectForKey:@"Sections"] ?: [NSArray array];
+}
+
+- (void) _addSection:(NSString *)section {
+ if (record_ == nil)
+ return;
+ else if (NSMutableArray *sections = [record_ objectForKey:@"Sections"]) {
+ if (![sections containsObject:section]) {
+ [sections addObject:section];
+ Changed_ = true;
+ }
+ } else {
+ [record_ setObject:[NSMutableArray arrayWithObject:section] forKey:@"Sections"];
+ Changed_ = true;
+ }
+}
+
+- (bool) addSection:(NSString *)section {
+ if (record_ == nil)
+ return false;
+
+ [self performSelectorOnMainThread:@selector(_addSection:) withObject:section waitUntilDone:NO];
+ return true;
+}
+
+- (void) _removeSection:(NSString *)section {
+ if (record_ == nil)
+ return;
+
+ if (NSMutableArray *sections = [record_ objectForKey:@"Sections"])
+ if ([sections containsObject:section]) {
+ [sections removeObject:section];
+ Changed_ = true;
+ }
+}
+
+- (bool) removeSection:(NSString *)section {
+ if (record_ == nil)
+ return false;
+
+ [self performSelectorOnMainThread:@selector(_removeSection:) withObject:section waitUntilDone:NO];
+ return true;
+}
+
+- (void) _remove {
+ [Sources_ removeObjectForKey:[self key]];
+ Changed_ = true;
+}
+
+- (bool) remove {
+ bool value(record_ != nil);
+ [self performSelectorOnMainThread:@selector(_remove) withObject:nil waitUntilDone:NO];
+ return value;
+}
+