6 #include "subscription.h"
7 #include "stringbucket.h"
10 int subscription_add(const char *from, const char *to) {
12 struct stringbucket * sb;
14 snprintf(filename, 512, "%s/%s/subscriptions", DATA_PATH, from);
15 sb = stringbucket_open(filename);
16 stringbucket_add(sb, to);
17 stringbucket_close(sb);
19 snprintf(filename, 512, "%s/%s/subscribers", DATA_PATH, to);
20 sb = stringbucket_open(filename);
21 stringbucket_add(sb, from);
22 stringbucket_close(sb);
25 int subscription_remove(const char *from, const char *to) {
27 struct stringbucket * sb;
29 snprintf(filename, 512, "%s/%s/subscriptions", DATA_PATH, from);
30 sb = stringbucket_open(filename);
31 stringbucket_delete(sb, to);
32 stringbucket_close(sb);
34 snprintf(filename, 512, "%s/%s/subscribers", DATA_PATH, to);
35 sb = stringbucket_open(filename);
36 stringbucket_delete(sb, from);
37 stringbucket_close(sb);
40 void subscription_notify_add_item(char *to, void *stuff) {
43 snprintf(filename, 512, "%s/%s/subscription_feed", DATA_PATH, to);
44 int fd = open(filename, O_WRONLY | O_APPEND | O_CREAT);
45 write(fd, stuff, sizeof(struct subscription_record));
49 int subscription_notify(const char *author, uint64_t record) {
51 struct subscription_record r;
53 strncpy(r.author, author, 32);
56 snprintf(filename, 512, "%s/%s/subscribers", DATA_PATH, author);
57 struct stringbucket * sb = stringbucket_open(filename);
58 stringbucket_iterate(sb, subscription_notify_add_item, &r);
59 stringbucket_close(sb);