commit 5572bd0
default
·
2024-10-19 18:38:10 +0000 UTC
parent 49b2a1d
Some work in CSV importing.
M
main.c
+5,
-0
1@@ -274,6 +274,11 @@ int main(int argc, char *argv[])
2 return 0;
3 }
4
5+ if (strcmp(cmd, "import_csv") == 0) { /** **/
6+ import_csv(&snac);
7+ return 0;
8+ }
9+
10 if (strcmp(cmd, "migrate") == 0) { /** **/
11 return migrate_account(&snac);
12 }
M
utils.c
+113,
-1
1@@ -673,5 +673,117 @@ void export_csv(snac *user)
2 void import_csv(snac *user)
3 /* import CSV files from Mastodon */
4 {
5- (void)user;
6+ FILE *f;
7+ const char *fn;
8+
9+ fn = "blocked_accounts.csv";
10+ if ((f = fopen(fn, "r")) != NULL) {
11+ snac_log(user, xs_fmt("Importing from %s...", fn));
12+
13+ while (!feof(f)) {
14+ xs *l = xs_strip_i(xs_readline(f));
15+
16+ if (*l) {
17+ xs *url = NULL;
18+ xs *uid = NULL;
19+
20+ if (valid_status(webfinger_request(l, &url, &uid))) {
21+ if (is_muted(user, url))
22+ snac_log(user, xs_fmt("Actor %s already MUTEd", url));
23+ else {
24+ mute(user, url);
25+ snac_log(user, xs_fmt("MUTEd actor %s", url));
26+ }
27+ }
28+ else
29+ snac_log(user, xs_fmt("Webfinger error for account %s", l));
30+ }
31+ }
32+
33+ fclose(f);
34+ }
35+ else
36+ snac_log(user, xs_fmt("Cannot open file %s", fn));
37+
38+ fn = "following_accounts.csv";
39+ if ((f = fopen(fn, "r")) != NULL) {
40+ snac_log(user, xs_fmt("Importing from %s...", fn));
41+
42+ while (!feof(f)) {
43+ xs *l = xs_strip_i(xs_readline(f));
44+
45+ if (*l) {
46+ xs *l2 = xs_split(l, ",");
47+ const char *acct = xs_list_get(l2, 0);
48+ const char *show = xs_list_get(l2, 1);
49+
50+ if (acct) {
51+ /* not a valid account? skip (probably the CSV header) */
52+ if (strchr(acct, '@') == NULL)
53+ continue;
54+
55+ xs *msg = msg_follow(user, acct);
56+
57+ if (msg == NULL) {
58+ snac_log(user, xs_fmt("Cannot follow %s -- server down?", acct));
59+ continue;
60+ }
61+
62+ const char *actor = xs_dict_get(msg, "object");
63+
64+ if (following_check(user, actor))
65+ snac_log(user, xs_fmt("Actor %s already followed", actor));
66+ else {
67+ following_add(user, actor, msg);
68+
69+ enqueue_output_by_actor(user, msg, actor, 0);
70+
71+ snac_log(user, xs_fmt("Following %s", actor));
72+ }
73+
74+ if (show && strcmp(show, "false") == 0) {
75+ limit(user, actor);
76+ snac_log(user, xs_fmt("Limiting boosts from actor %s", actor));
77+ }
78+ }
79+ }
80+ }
81+
82+ fclose(f);
83+ }
84+ else
85+ snac_log(user, xs_fmt("Cannot open file %s", fn));
86+
87+ fn = "lists.csv";
88+ if ((f = fopen(fn, "r")) != NULL) {
89+ snac_log(user, xs_fmt("Importing from %s...", fn));
90+
91+ while (!feof(f)) {
92+ xs *l = xs_strip_i(xs_readline(f));
93+
94+ if (*l) {
95+ }
96+ }
97+
98+ fclose(f);
99+ }
100+ else
101+ snac_log(user, xs_fmt("Cannot open file %s", fn));
102+
103+ fn = "bookmarks.csv";
104+ if ((f = fopen(fn, "r")) != NULL) {
105+ snac_log(user, xs_fmt("Importing from %s...", fn));
106+
107+ while (!feof(f)) {
108+ xs *l = xs_strip_i(xs_readline(f));
109+
110+ if (*l) {
111+ }
112+ }
113+
114+ fclose(f);
115+ }
116+ else
117+ snac_log(user, xs_fmt("Cannot open file %s", fn));
118+
119 }