diff --git a/data.c b/data.c index f780de2..b6fdc7a 100644 --- a/data.c +++ b/data.c @@ -552,6 +552,20 @@ int object_del(const char *id) } +int object_del_if_unref(const char *id) +/* deletes an object if its n_links < 2 */ +{ + xs *fn = _object_fn(id); + int n_links; + int ret = 0; + + if (mtime_nl(fn, &n_links) > 0.0 && n_links < 2) + ret = object_del(id); + + return ret; +} + + d_char *object_children(const char *id) /* returns the list of an object's children */ { @@ -791,8 +805,8 @@ int timeline_del(snac *snac, char *id) object_user_cache_del(snac, id, "public"); object_user_cache_del(snac, id, "private"); - /* NOTE: this is a good place to count the # of links - of the object and object_del() it if it's < 2 */ + /* try to delete the object if it's not used elsewhere */ + object_del_if_unref(id); return ret; } diff --git a/snac.h b/snac.h index 288a79f..5abf2d1 100644 --- a/snac.h +++ b/snac.h @@ -60,6 +60,7 @@ d_char *index_list(const char *fn, int max); d_char *index_list_desc(const char *fn, int max); int object_del(const char *id); +int object_del_if_unref(const char *id); int follower_add(snac *snac, char *actor, char *msg); int follower_del(snac *snac, char *actor);