summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordefault <nobody@localhost>2022-09-26 07:13:39 +0200
committerdefault <nobody@localhost>2022-09-26 07:13:39 +0200
commitd1a2a7438dddc898b794a7a9b3b0961afc1a36e4 (patch)
tree09586a035fb76a7c1ddaa78e3573629ea3b1c5cf
parentb5be6a017220820f48e896531737d07122364621 (diff)
New metadata 'referrer', that contains an actor.
This field contains the actor that boosted an entry.
-rw-r--r--activitypub.c4
-rw-r--r--data.c36
-rw-r--r--snac.h2
3 files changed, 22 insertions, 20 deletions
diff --git a/activitypub.c b/activitypub.c
index 13d7d85..4b2947e 100644
--- a/activitypub.c
+++ b/activitypub.c
@@ -91,7 +91,7 @@ void timeline_request(snac *snac, char *id)
timeline_request(snac, in_reply_to);
/* finally store */
- timeline_add(snac, id, object, in_reply_to);
+ timeline_add(snac, id, object, in_reply_to, NULL);
}
}
}
@@ -282,7 +282,7 @@ void process_message(snac *snac, char *msg, char *req)
timeline_request(snac, in_reply_to);
- if (timeline_add(snac, id, msg, in_reply_to))
+ if (timeline_add(snac, id, msg, in_reply_to, NULL))
snac_log(snac, xs_fmt("new 'Note' %s %s", actor, id));
}
}
diff --git a/data.c b/data.c
index d823f88..f69ab03 100644
--- a/data.c
+++ b/data.c
@@ -526,7 +526,7 @@ void _timeline_write(snac *snac, char *id, char *msg, char *parent)
}
-int timeline_add(snac *snac, char *id, char *o_msg, char *parent)
+int timeline_add(snac *snac, char *id, char *o_msg, char *parent, char *referrer)
/* adds a message to the timeline */
{
xs *pfn = _timeline_find_fn(snac, id);
@@ -545,12 +545,16 @@ int timeline_add(snac *snac, char *id, char *o_msg, char *parent)
"\"liked_by\": [],"
"\"announced_by\": [],"
"\"version\": \"snac/2.x\","
+ "\"referrer\": null,"
"\"parent\": null"
"}");
if (!xs_is_null(parent))
md = xs_dict_set(md, "parent", parent);
+ if (!xs_is_null(referrer))
+ md = xs_dict_set(md, "parent", referrer);
+
msg = xs_dict_set(msg, "_snac", md);
_timeline_write(snac, id, msg, parent);
@@ -569,7 +573,6 @@ void timeline_admire(snac *snac, char *id, char *admirer, int like)
FILE *f;
if (ofn != NULL && (f = fopen(ofn, "r")) != NULL) {
- int changed = 0;
xs *j1 = xs_readall(f);
fclose(f);
@@ -583,27 +586,26 @@ void timeline_admire(snac *snac, char *id, char *admirer, int like)
list = xs_dup(xs_dict_get(meta, "announced_by"));
/* add the admirer if it's not already there */
- if (xs_list_in(list, admirer) == -1) {
+ if (xs_list_in(list, admirer) == -1)
list = xs_list_append(list, admirer);
- changed = 1;
- }
- if (changed) {
- /* re-store */
- if (like)
- meta = xs_dict_set(meta, "liked_by", list);
- else
- meta = xs_dict_set(meta, "announced_by", list);
+ /* set the admirer as the referrer */
+ meta = xs_dict_set(meta, "referrer", admirer);
+
+ /* re-store */
+ if (like)
+ meta = xs_dict_set(meta, "liked_by", list);
+ else
+ meta = xs_dict_set(meta, "announced_by", list);
- msg = xs_dict_set(msg, "_snac", meta);
+ msg = xs_dict_set(msg, "_snac", meta);
- unlink(ofn);
+ unlink(ofn);
- _timeline_write(snac, id, msg, xs_dict_get(meta, "parent"));
+ _timeline_write(snac, id, msg, xs_dict_get(meta, "parent"));
- snac_log(snac, xs_fmt("timeline_admire (%s) %s %s",
- like ? "Like" : "Announce", id, admirer));
- }
+ snac_log(snac, xs_fmt("timeline_admire (%s) %s %s",
+ like ? "Like" : "Announce", id, admirer));
}
}
diff --git a/snac.h b/snac.h
index 436e0f0..40fda20 100644
--- a/snac.h
+++ b/snac.h
@@ -56,7 +56,7 @@ d_char *timeline_find(snac *snac, char *id);
void timeline_del(snac *snac, char *id);
d_char *timeline_get(snac *snac, char *fn);
d_char *timeline_list(snac *snac);
-int timeline_add(snac *snac, char *id, char *msg, char *parent);
+int timeline_add(snac *snac, char *id, char *o_msg, char *parent, char *referrer);
void timeline_admire(snac *snac, char *id, char *admirer, int like);
int following_add(snac *snac, char *actor, char *msg);