add method
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;
}