mirror of
https://codeberg.org/grunfink/snac2.git
synced 2024-11-25 22:45:05 +00:00
Do hard links to objects in each user's public and private caches.
This commit is contained in:
parent
87d3ec2acc
commit
6c6b5a30c4
3 changed files with 39 additions and 3 deletions
17
data.c
17
data.c
|
@ -14,7 +14,7 @@
|
||||||
#include <sys/file.h>
|
#include <sys/file.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
|
||||||
double db_layout = 2.3;
|
double db_layout = 2.4;
|
||||||
|
|
||||||
|
|
||||||
int db_upgrade(d_char **error);
|
int db_upgrade(d_char **error);
|
||||||
|
@ -901,12 +901,25 @@ void timeline_object_add(snac *snac, const char *id, char *msg)
|
||||||
{
|
{
|
||||||
object_add(id, msg);
|
object_add(id, msg);
|
||||||
|
|
||||||
|
/* add to the private index */
|
||||||
xs *idx = xs_fmt("%s/private.idx", snac->basedir);
|
xs *idx = xs_fmt("%s/private.idx", snac->basedir);
|
||||||
index_add(idx, id);
|
index_add(idx, id);
|
||||||
|
|
||||||
|
/* build the name for the linked copy in the private cache */
|
||||||
|
xs *ofn = _object_fn(id);
|
||||||
|
xs *l = xs_split(ofn, "/");
|
||||||
|
xs *cfn = xs_fmt("%s/private/%s", snac->basedir, xs_list_get(l, -1));
|
||||||
|
|
||||||
|
link(ofn, cfn);
|
||||||
|
|
||||||
if (xs_startswith(id, snac->actor)) {
|
if (xs_startswith(id, snac->actor)) {
|
||||||
idx = xs_replace_i(idx, "private.", "public.");
|
/* add to the public index */
|
||||||
|
idx = xs_replace_i(idx, "private", "public");
|
||||||
index_add(idx, id);
|
index_add(idx, id);
|
||||||
|
|
||||||
|
/* add to the public cache */
|
||||||
|
cfn = xs_replace_i(cfn, "private", "public");
|
||||||
|
link(ofn, cfn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
22
upgrade.c
22
upgrade.c
|
@ -106,6 +106,28 @@ int db_upgrade(d_char **error)
|
||||||
|
|
||||||
nf = 2.3;
|
nf = 2.3;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
if (f < 2.4) {
|
||||||
|
xs *users = user_list();
|
||||||
|
char *p, *v;
|
||||||
|
|
||||||
|
p = users;
|
||||||
|
while (xs_list_iter(&p, &v)) {
|
||||||
|
snac snac;
|
||||||
|
|
||||||
|
if (user_open(&snac, v)) {
|
||||||
|
xs *dir = xs_fmt("%s/public", snac.basedir);
|
||||||
|
mkdir(dir, 0755);
|
||||||
|
|
||||||
|
dir = xs_replace_i(dir, "public", "private");
|
||||||
|
mkdir(dir, 0755);
|
||||||
|
|
||||||
|
user_free(&snac);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
nf = 2.4;
|
||||||
|
}
|
||||||
|
|
||||||
if (f < nf) {
|
if (f < nf) {
|
||||||
f = nf;
|
f = nf;
|
||||||
|
|
3
utils.c
3
utils.c
|
@ -238,7 +238,8 @@ int adduser(char *uid)
|
||||||
|
|
||||||
const char *dirs[] = {
|
const char *dirs[] = {
|
||||||
"followers", "following", "local", "muted", "hidden",
|
"followers", "following", "local", "muted", "hidden",
|
||||||
"queue", "static", "timeline", "history", NULL };
|
"public", "private", "queue", "history",
|
||||||
|
"static", "timeline", NULL };
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
for (n = 0; dirs[n]; n++) {
|
for (n = 0; dirs[n]; n++) {
|
||||||
|
|
Loading…
Reference in a new issue