add method

bool add(
  1. ModeratorEntry m
)

Implementation

bool add(ModeratorEntry m) {
  if (m.bodyFucked) {
    return false;
  }
  if (m.shortLinkBytes.isEmpty && !m.isPending) {
    return false;
  }

  final int hint = m.keyHint;
  bool updated = false;
  if (_data[m.keyHint] != null) {
    /*print(_data[m.keyHint]!.keyHint);
    print(m.bl);
    print(m.cleanedBody);
    if (_children[m.bl] != null) {
      print(_children[m.bl]);
    }*/
    if (m.hint != _data[m.keyHint]!.hint) {
      _data[m.keyHint] = m;
      updated = true;
    }
    /*if (m.perceivedTimestamp > 1 &&
        _data[m.keyHint]!.perceivedTimestamp < m.perceivedTimestamp) {
      _data[m.keyHint]!.perceivedTimestamp = m.perceivedTimestamp;
      updated = true;
    }*/
    if (_data[m.keyHint]!.likes > m.likes) {
      _data[m.keyHint]!.likes = m.likes;
      updated = true;
    }
    if (_data[m.keyHint]!.shares > m.shares) {
      _data[m.keyHint]!.shares = m.shares;
      updated = true;
    }
    if (_data[m.keyHint]!.views > m.views) {
      _data[m.keyHint]!.views = m.views;
      updated = true;
    }
    /*if (m.nick.isNotEmpty && _data[m.keyHint]!.nick != m.nick) {
      _data[m.keyHint]!.nick = m.nick;
      updated = true;
    }
    if (m.avatar.isNotEmpty && _data[m.keyHint]!.avatar != m.avatar) {
      _data[m.keyHint]!.avatar = m.avatar;
      updated = true;
    }*/

    //_data[m.keyHint] = m;
    return updated;
  }
  if (m.flags.attachements) {
    //filter out bs attachemtn
    if (m.attachmentLinkAsXXint == 0) return false;
    _attachments.add(m.attachmentLinkAsXXint);
  }
  final cdup = m.contentDupHash;
  //if (_contentDups.contains(cdup)) return false;
  _contentDups.add(cdup);
  //perceived timestamp is minutes according to moderator
  //subtract from local to know
  //max  val 15840, 11 days
  if (!m.flags.locallyPatched &&
      !m.perceivedTimestamp.isNegative &&
      m.perceivedTimestamp < 15840) {
    final perceivedTimestamp = DateTime.now().millisecondsSinceEpoch -
        (m.perceivedTimestamp * 60000);
    //patch and save
    m.perceivedTimestamp = perceivedTimestamp;
    m.flags.locallyPatched = true;
  } else {
    //dont fuck with patched timestamp!!!

  }
  if (m.flags.moderate) _mine.add(m.keyHint);
  if (m.flags.moderate && m.flags.isPost && !m.isPending) {
    //its mine
    //15840 11 days max.
    if (m.perceivedTimestamp > _latestMineTime) {
      _latestMineTime = m.perceivedTimestamp;
      _latestMineIdx = m.keyHint;
    }
  }
  if (m.flags.attachements) {
    //past attachements have borked size
    attachmentsWeightInBytes += m.attachmentWeightInBytes;
  }

  _tagsChecked = false; //reindex tags
  _sigilsChecked = false;

  if (_children[m.keyHint] == null) {
    _children[m.keyHint] = [];
  }

  if (m.bl != 0) {
    if (_children[m.bl] == null) {
      _children[m.bl] = [];
    }
    _children[m.bl]!.add(m.keyHint);
  }
  if (m.flags.isGroup && !m.flags.isGroupMember) {
    _groups.add(m.keyHint);
    _children[m.keyHint] = [];

    _groupChildren[m.keyHint] = [];
  } else {
    if (m.flags.isPost) {
      _threads.add(m.keyHint);
    }
  }
  if (m.flags.isPost) {
    _posts.add(m.keyHint);
  }
  if (m.flags.isReply) {
    _replies.add(m.keyHint);
    if (m.bl != 0) {
      if (_children[m.bl] != null) {
        _children[m.bl]!.add(m.keyHint);
      } else {
        print('missing bl parent?');
      }
      if (_parentReplies[m.bl] == null) {
        _parentReplies[m.bl] = [];
      }
      _parentReplies[m.bl]!.add(m.keyHint);
    } else {
      print('dead reply backlink');
    }
  }

  _data[m.keyHint] = m;

  final mapEntries = _data.entries.toList()
    ..sort((a, b) =>
        a.value.perceivedTimestamp.compareTo(b.value.perceivedTimestamp));

  _data
    ..clear()
    ..addEntries(mapEntries.reversed);

  return true;
}