mirror of
https://codeberg.org/grunfink/snac2.git
synced 2024-12-28 10:03:36 +00:00
In user_persist(), only publish the actor to the world if a relevant field has changed.
This way, changing user preferences does not trigger an automatic send storm.
This commit is contained in:
parent
c88d7e72f0
commit
36c3030231
1 changed files with 26 additions and 0 deletions
26
data.c
26
data.c
|
@ -336,6 +336,32 @@ int user_persist(snac *snac, int publish)
|
|||
xs *bfn = xs_fmt("%s.bak", fn);
|
||||
FILE *f;
|
||||
|
||||
if (publish) {
|
||||
/* check if any of the relevant fields have really changed */
|
||||
if ((f = fopen(fn, "r")) != NULL) {
|
||||
xs *old = xs_json_load(f);
|
||||
fclose(f);
|
||||
|
||||
if (old != NULL) {
|
||||
int nw = 0;
|
||||
const char *fields[] = { "header", "avatar", "name", "bio", "metadata", NULL };
|
||||
|
||||
for (int n = 0; fields[n]; n++) {
|
||||
const char *of = xs_dict_get(old, fields[n]);
|
||||
const char *nf = xs_dict_get(snac->config, fields[n]);
|
||||
|
||||
if (xs_type(of) != XSTYPE_STRING || xs_type(nf) != XSTYPE_STRING || strcmp(of, nf)) {
|
||||
nw = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!nw)
|
||||
publish = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rename(fn, bfn);
|
||||
|
||||
if ((f = fopen(fn, "w")) != NULL) {
|
||||
|
|
Loading…
Reference in a new issue