X-Git-Url: http://git.bytex64.net/?a=blobdiff_plain;f=database%2Fsubscription.c;h=aac7acf9f000a71e2e8cacb9720b6316da91d8c5;hb=c38b2e192d8de8ef38389cc8071881464fff99bb;hp=d67d31f51ef6b2d30733e08e7e460e859c5b4473;hpb=ec8746b44dc85fd3e3b42835f779890684a9e90a;p=blerg.git diff --git a/database/subscription.c b/database/subscription.c index d67d31f..aac7acf 100644 --- a/database/subscription.c +++ b/database/subscription.c @@ -5,67 +5,76 @@ #include #include #include +#include #include #include #include #include "subscription.h" #include "stringbucket.h" +#include "util.h" #include "config.h" +#include "configuration.h" int subscription_add(const char *from, const char *to) { - char filename[512]; + char filename[FILENAME_MAX]; struct stringbucket * sb; - snprintf(filename, 512, "%s/%s/subscriptions", DATA_PATH, from); + snprintf(filename, FILENAME_MAX, "%s/%s/subscriptions", blergconf.data_path, from); sb = stringbucket_open(filename); stringbucket_add(sb, to); stringbucket_close(sb); - snprintf(filename, 512, "%s/%s/subscribers", DATA_PATH, to); + snprintf(filename, FILENAME_MAX, "%s/%s/subscribers", blergconf.data_path, to); sb = stringbucket_open(filename); stringbucket_add(sb, from); stringbucket_close(sb); + + return 1; } int subscription_remove(const char *from, const char *to) { - char filename[512]; + char filename[FILENAME_MAX]; struct stringbucket * sb; - snprintf(filename, 512, "%s/%s/subscriptions", DATA_PATH, from); + snprintf(filename, FILENAME_MAX, "%s/%s/subscriptions", blergconf.data_path, from); sb = stringbucket_open(filename); stringbucket_delete(sb, to); stringbucket_close(sb); - snprintf(filename, 512, "%s/%s/subscribers", DATA_PATH, to); + snprintf(filename, FILENAME_MAX, "%s/%s/subscribers", blergconf.data_path, to); sb = stringbucket_open(filename); stringbucket_delete(sb, from); stringbucket_close(sb); + + return 1; } void subscription_notify_add_item(char *to, void *stuff) { - char filename[512]; + char filename[FILENAME_MAX]; - snprintf(filename, 512, "%s/%s/subscription_feed", DATA_PATH, to); + snprintf(filename, FILENAME_MAX, "%s/%s/subscription_feed", blergconf.data_path, to); int fd = open(filename, O_WRONLY | O_APPEND | O_CREAT, 0600); write(fd, stuff, sizeof(struct blergref)); close(fd); } int subscription_notify(const char *author, uint64_t record) { - char filename[512]; + char filename[FILENAME_MAX]; struct blergref r; strncpy(r.author, author, 32); r.record = record; - snprintf(filename, 512, "%s/%s/subscribers", DATA_PATH, author); + snprintf(filename, FILENAME_MAX, "%s/%s/subscribers", blergconf.data_path, author); struct stringbucket * sb = stringbucket_open(filename); stringbucket_iterate(sb, subscription_notify_add_item, &r); stringbucket_close(sb); + + return 1; } struct blergref * subscription_list(const char *author, uint64_t offset, int *count, int direction) { - char filename[512]; + char filename[FILENAME_MAX]; struct stat st; struct blergref * slist; struct blergref * retlist; @@ -74,7 +83,7 @@ struct blergref * subscription_list(const char *author, uint64_t offset, int *co if (!valid_name(author)) return NULL; - snprintf(filename, 512, "%s/%s/subscription_feed", DATA_PATH, author); + snprintf(filename, FILENAME_MAX, "%s/%s/subscription_feed", blergconf.data_path, author); int feed_fd = open(filename, O_RDONLY); if (feed_fd == -1) { @@ -128,3 +137,32 @@ subscription_list_open_failed: *count = 0; return NULL; } + +int is_subscribed(const char *from, const char *to) { + char filename[FILENAME_MAX]; + struct stringbucket * sb; + int ret = 0; + + snprintf(filename, FILENAME_MAX, "%s/%s/subscriptions", blergconf.data_path, from); + sb = stringbucket_open(filename); + if (stringbucket_find(sb, to) != -1) + ret = 1; + stringbucket_close(sb); + + return ret; +} + +int subscription_count_items(const char *user) { + char filename[FILENAME_MAX]; + struct stat st; + + if (!valid_name(user)) + return -1; + + snprintf(filename, FILENAME_MAX, "%s/%s/subscription_feed", blergconf.data_path, user); + + if (access(filename, R_OK) != 0) + return 0; + stat(filename, &st); + return st.st_size / sizeof(struct blergref); +}