commit 5572bd0

default  ·  2024-10-19 18:38:10 +0000 UTC
parent 49b2a1d
Some work in CSV importing.
2 files changed,  +118, -1
M main.c
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     }
+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 }