diff options
author | 2024-09-16 20:39:15 +0200 | |
---|---|---|
committer | 2024-09-16 20:39:15 +0200 | |
commit | d4d6631435f3a5870fecc870ffe5be84d980ab4c (patch) | |
tree | 514a282415d62f5665f417af6334f53f09e72668 /internal/typeutils | |
parent | [performance] cache more database calls, reduce required database calls overa... (diff) | |
download | gotosocial-d4d6631435f3a5870fecc870ffe5be84d980ab4c.tar.xz |
[bugfix] Be more lenient when parsing mastodown following.csv (#3311)
* [bugfix] Be more lenient when parsing mastodown following.csv
* use follow.Notify
Diffstat (limited to 'internal/typeutils')
-rw-r--r-- | internal/typeutils/csv.go | 57 |
1 files changed, 50 insertions, 7 deletions
diff --git a/internal/typeutils/csv.go b/internal/typeutils/csv.go index b1e35ef1a..ae080a63f 100644 --- a/internal/typeutils/csv.go +++ b/internal/typeutils/csv.go @@ -90,6 +90,8 @@ func (c *Converter) FollowingToCSV( records[0] = []string{ "Account address", "Show boosts", + "Notify on new posts", + "Languages", } // We need to know our own domain for this. @@ -130,6 +132,10 @@ func (c *Converter) FollowingToCSV( follow.TargetAccount.Username + "@" + domain, // Show boosts: eg., true strconv.FormatBool(*follow.ShowReblogs), + // Notify on new posts, eg., true + strconv.FormatBool(*follow.Notify), + // Languages: compat only, leave blank. + "", }) } @@ -387,12 +393,20 @@ func (c *Converter) CSVToFollowing( ) for _, record := range records { - if len(record) != 2 { + recordLen := len(record) + + // Older versions of this Masto CSV + // schema may not include "Show boosts", + // "Notify on new posts", or "Languages", + // so be lenient here in what we accept. + if recordLen == 0 || + recordLen > 4 { // Badly formatted, // skip this one. continue } + // "Account address" namestring := record[0] if namestring == "" { // Badly formatted, @@ -400,6 +414,12 @@ func (c *Converter) CSVToFollowing( continue } + if namestring == "Account address" { + // CSV header row, + // skip this one. + continue + } + // Prepend with "@" // if not included. if namestring[0] != '@' { @@ -419,20 +439,43 @@ func (c *Converter) CSVToFollowing( domain = "" } - showReblogs, err := strconv.ParseBool(record[1]) - if err != nil { - // Badly formatted, - // skip this one. - continue + // "Show boosts" + var showReblogs *bool + if recordLen > 1 { + b, err := strconv.ParseBool(record[1]) + if err != nil { + // Badly formatted, + // skip this one. + continue + } + showReblogs = &b } + // "Notify on new posts" + var notify *bool + if recordLen > 2 { + b, err := strconv.ParseBool(record[2]) + if err != nil { + // Badly formatted, + // skip this one. + continue + } + notify = &b + } + + // TODO: "Languages" + // + // Ignore this for now as we + // don't do anything with it. + // Looks good, whack it in the slice. follows = append(follows, >smodel.Follow{ TargetAccount: >smodel.Account{ Username: username, Domain: domain, }, - ShowReblogs: &showReblogs, + ShowReblogs: showReblogs, + Notify: notify, }) } |