onCreated method

  1. @override
void onCreated()
override

Callback used to notify a node that it was created. This is called after a node is deserialized as well.

Implementation

@override
void onCreated() async {
  var rp = configs[r'$path'] as String?;

  rp ??= configs[r'$value_path'] as String?;

  if (configs[r'$publish'] == true) {
    isPublishOnly = true;
  }

  valuePath = rp!;
  group = _link[Path(path).parentPath] as WatchGroupNode?;

  var groupName = group?._watchName;

  _link.addNode('$path/lwv', <String, dynamic>{
    r'$name': 'Last Written Value',
    r'$type': 'dynamic',
  });

  _link.addNode('$path/startDate', <String, dynamic>{
    r'$name': 'Start Date',
    r'$type': 'string',
  });

  _link.addNode('$path/endDate', <String, dynamic>{
    r'$name': 'End Date',
    r'$type': 'string',
  });

  if (children['enabled'] == null) {
    _link.addNode('$path/enabled', <String, dynamic>{
      r'$name': 'Enabled',
      r'$type': 'bool',
      '?value': true,
      r'$writable': 'write',
    });
  }

  if (group?.db?.database == null) {
    await group?.db?.waitForDatabaseReady();
  }

  var summary = await group?.db?.database?.getSummary(groupName, valuePath!);

  if (summary?.first != null) {
    _link.updateValue('$path/startDate', summary?.first?.timestamp);
    isStartDateFilled = true;
  }

  if (summary?.last != null) {
    var update = ValueUpdate(
      summary?.last!.value,
      ts: summary?.last!.timestamp,
    );
    _link.updateValue('$path/lwv', update);
    updateValue(update);
  }

  timer = Scheduler.safeEvery(const Duration(seconds: 1), () async {
    await storeBuffer();
  });

  var ghn = GetHistoryNode('$path/getHistory');
  addChild('getHistory', ghn);
  (_link.provider as SimpleNodeProvider).setNode(ghn.path, ghn);
  updateList('getHistory');

  _link.addNode('$path/purge', <String, dynamic>{
    r'$name': 'Purge',
    r'$invokable': 'write',
    r'$params': [
      {'name': 'timeRange', 'type': 'string', 'editor': 'daterange'},
    ],
    r'$is': 'purgePath',
  });

  _link.addNode('$path/delete', <String, dynamic>{
    r'$name': 'Delete',
    r'$invokable': 'write',
    r'$is': 'delete',
  });

  _link.onValueChange('$path/enabled').listen((ValueUpdate update) {
    if (update.value == true) {
      sub();
    } else {
      if (valueSub != null) {
        valueSub?.cancel();
        valueSub = null;
      }
    }
  });

  if (_link.val('$path/enabled') == true) {
    sub();
  }

  group?.db?.database?.addWatchPathExtensions(this);
}