mirror of
https://codeberg.org/grunfink/snac2.git
synced 2024-12-01 16:53:36 +00:00
Added a notification index.
This commit is contained in:
parent
3f2c2a9e7e
commit
85bf3472b7
1 changed files with 66 additions and 23 deletions
89
data.c
89
data.c
|
@ -2045,13 +2045,33 @@ void notify_add(snac *snac, const char *type, const char *utype,
|
||||||
xs_json_dump(noti, 4, f);
|
xs_json_dump(noti, 4, f);
|
||||||
fclose(f);
|
fclose(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* add it to the index if it already exists */
|
||||||
|
xs *idx = xs_fmt("%s/notify.idx", snac->basedir);
|
||||||
|
|
||||||
|
if (mtime(idx) != 0.0) {
|
||||||
|
pthread_mutex_lock(&data_mutex);
|
||||||
|
|
||||||
|
if ((f = fopen(idx, "a")) != NULL) {
|
||||||
|
fprintf(f, "%-32s\n", ntid);
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
|
||||||
|
pthread_mutex_unlock(&data_mutex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
xs_dict *notify_get(snac *snac, const char *id)
|
xs_dict *notify_get(snac *snac, const char *id)
|
||||||
/* gets a notification */
|
/* gets a notification */
|
||||||
{
|
{
|
||||||
xs *fn = xs_fmt("%s/notify/%s.json", snac->basedir, id);
|
/* base file */
|
||||||
|
xs *fn = xs_fmt("%s/notify/%s", snac->basedir, id);
|
||||||
|
|
||||||
|
/* strip spaces and add extension */
|
||||||
|
fn = xs_strip_i(fn);
|
||||||
|
fn = xs_str_cat(fn, ".json");
|
||||||
|
|
||||||
FILE *f;
|
FILE *f;
|
||||||
xs_dict *out = NULL;
|
xs_dict *out = NULL;
|
||||||
|
|
||||||
|
@ -2064,19 +2084,53 @@ xs_dict *notify_get(snac *snac, const char *id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
xs_list *notify_list(snac *snac)
|
||||||
|
/* returns a list of notification ids */
|
||||||
|
{
|
||||||
|
xs *idx = xs_fmt("%s/notify.idx", snac->basedir);
|
||||||
|
|
||||||
|
if (mtime(idx) == 0.0) {
|
||||||
|
/* create the index from scratch */
|
||||||
|
FILE *f;
|
||||||
|
|
||||||
|
pthread_mutex_lock(&data_mutex);
|
||||||
|
|
||||||
|
if ((f = fopen(idx, "w")) != NULL) {
|
||||||
|
xs *spec = xs_fmt("%s/notify/" "*.json", snac->basedir);
|
||||||
|
xs *lst = xs_glob(spec, 1, 0);
|
||||||
|
xs_list *p = lst;
|
||||||
|
char *v;
|
||||||
|
|
||||||
|
while (xs_list_iter(&p, &v)) {
|
||||||
|
char *p = strrchr(v, '.');
|
||||||
|
if (p) {
|
||||||
|
*p = '\0';
|
||||||
|
fprintf(f, "%-32s\n", v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
|
||||||
|
pthread_mutex_unlock(&data_mutex);
|
||||||
|
}
|
||||||
|
|
||||||
|
return index_list_desc(idx, 0, 64);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int notify_new_num(snac *snac)
|
int notify_new_num(snac *snac)
|
||||||
/* counts the number of new notifications */
|
/* counts the number of new notifications */
|
||||||
{
|
{
|
||||||
xs *t = notify_check_time(snac, 0);
|
xs *t = notify_check_time(snac, 0);
|
||||||
xs *spec = xs_fmt("%s/notify/" "*.json", snac->basedir);
|
xs *lst = notify_list(snac);
|
||||||
xs *lst = xs_glob(spec, 1, 1);
|
|
||||||
int cnt = 0;
|
int cnt = 0;
|
||||||
|
|
||||||
xs_list *p = lst;
|
xs_list *p = lst;
|
||||||
xs_str *v;
|
xs_str *v;
|
||||||
|
|
||||||
while (xs_list_iter(&p, &v)) {
|
while (xs_list_iter(&p, &v)) {
|
||||||
xs *id = xs_replace(v, ".json", "");
|
xs *id = xs_strip_i(xs_dup(v));
|
||||||
|
|
||||||
/* old? count no more */
|
/* old? count no more */
|
||||||
if (strcmp(id, t) < 0)
|
if (strcmp(id, t) < 0)
|
||||||
|
@ -2089,25 +2143,6 @@ int notify_new_num(snac *snac)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
xs_list *notify_list(snac *snac)
|
|
||||||
/* returns a list of notification ids, optionally only the new ones */
|
|
||||||
{
|
|
||||||
xs *spec = xs_fmt("%s/notify/" "*.json", snac->basedir);
|
|
||||||
xs *lst = xs_glob(spec, 1, 1);
|
|
||||||
xs_list *out = xs_list_new();
|
|
||||||
xs_list *p = lst;
|
|
||||||
xs_str *v;
|
|
||||||
|
|
||||||
while (xs_list_iter(&p, &v)) {
|
|
||||||
xs *id = xs_replace(v, ".json", "");
|
|
||||||
|
|
||||||
out = xs_list_append(out, id);
|
|
||||||
}
|
|
||||||
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void notify_clear(snac *snac)
|
void notify_clear(snac *snac)
|
||||||
/* clears all notifications */
|
/* clears all notifications */
|
||||||
{
|
{
|
||||||
|
@ -2118,6 +2153,14 @@ void notify_clear(snac *snac)
|
||||||
|
|
||||||
while (xs_list_iter(&p, &v))
|
while (xs_list_iter(&p, &v))
|
||||||
unlink(v);
|
unlink(v);
|
||||||
|
|
||||||
|
xs *idx = xs_fmt("%s/notify.idx", snac->basedir);
|
||||||
|
|
||||||
|
if (mtime(idx) != 0.0) {
|
||||||
|
pthread_mutex_lock(&data_mutex);
|
||||||
|
truncate(idx, 0);
|
||||||
|
pthread_mutex_unlock(&data_mutex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue