Store limited history of contact resources

This commit is contained in:
fiaxh 2021-03-31 21:33:35 +02:00
parent c5ab4fed87
commit b63a20f918

View file

@ -40,6 +40,9 @@ public class EntityInfo : StreamInteractionModule, Object {
entity_caps_hashes[account.bare_jid.domain_jid] = hash;
});
stream_interactor.module_manager.initialize_account_modules.connect(initialize_modules);
remove_old_entities();
Timeout.add_seconds(60 * 60, () => { remove_old_entities(); return true; });
}
public async Gee.Set<Identity>? get_identities(Account account, Jid jid) {
@ -94,26 +97,30 @@ public class EntityInfo : StreamInteractionModule, Object {
}
private void on_received_available_presence(Account account, Presence.Stanza presence) {
bool is_gc = stream_interactor.get_module(MucManager.IDENTITY).is_groupchat(presence.from.bare_jid, account);
bool is_gc = stream_interactor.get_module(MucManager.IDENTITY).might_be_groupchat(presence.from.bare_jid, account);
if (is_gc) return;
string? caps_hash = EntityCapabilities.get_caps_hash(presence);
if (caps_hash == null) return;
/* TODO check might_be_groupchat before storing
db.entity.upsert()
.value(db.entity.account_id, account.id, true)
.value(db.entity.jid_id, db.get_jid_id(presence.from), true)
.value(db.entity.resource, presence.from.resourcepart, true)
.value(db.entity.last_seen, (long)(new DateTime.now_local()).to_unix())
.value(db.entity.caps_hash, caps_hash)
.perform();*/
.value(db.entity.account_id, account.id, true)
.value(db.entity.jid_id, db.get_jid_id(presence.from), true)
.value(db.entity.resource, presence.from.resourcepart, true)
.value(db.entity.last_seen, (long)(new DateTime.now_local()).to_unix())
.value(db.entity.caps_hash, caps_hash)
.perform();
if (caps_hash != null) {
entity_caps_hashes[presence.from] = caps_hash;
}
}
private void remove_old_entities() {
long timestamp = (long)(new DateTime.now_local().add_days(-14)).to_unix();
db.entity.delete().with(db.entity.last_seen, "<", timestamp).perform();
}
private void store_features(string entity, Gee.List<string> features) {
if (entity_features.has_key(entity)) return;