mirror of
				https://github.com/superseriousbusiness/gotosocial
				synced 2025-06-05 21:59:39 +02:00 
			
		
		
		
	[bugfix] Be more lenient when parsing mastodown following.csv (#3311)
* [bugfix] Be more lenient when parsing mastodown following.csv * use follow.Notify
This commit is contained in:
		@@ -160,9 +160,9 @@ func (suite *ExportsTestSuite) TestExports() {
 | 
			
		||||
			token:       suite.testTokens["local_account_1"],
 | 
			
		||||
			user:        suite.testUsers["local_account_1"],
 | 
			
		||||
			account:     suite.testAccounts["local_account_1"],
 | 
			
		||||
			expect: `Account address,Show boosts
 | 
			
		||||
admin@localhost:8080,true
 | 
			
		||||
1happyturtle@localhost:8080,true
 | 
			
		||||
			expect: `Account address,Show boosts,Notify on new posts,Languages
 | 
			
		||||
admin@localhost:8080,true,false,
 | 
			
		||||
1happyturtle@localhost:8080,true,false,
 | 
			
		||||
`,
 | 
			
		||||
		},
 | 
			
		||||
		// Export Followers.
 | 
			
		||||
 
 | 
			
		||||
@@ -188,6 +188,10 @@ func importFollowingAsyncF(
 | 
			
		||||
				// Show reblogs on
 | 
			
		||||
				// the new follow.
 | 
			
		||||
				showReblogs = follow.ShowReblogs
 | 
			
		||||
 | 
			
		||||
				// Notify when new
 | 
			
		||||
				// follow posts.
 | 
			
		||||
				notify = follow.Notify
 | 
			
		||||
			)
 | 
			
		||||
 | 
			
		||||
			if overwrite {
 | 
			
		||||
@@ -218,6 +222,7 @@ func importFollowingAsyncF(
 | 
			
		||||
				&apimodel.AccountFollowRequest{
 | 
			
		||||
					ID:      targetAcct.ID,
 | 
			
		||||
					Reblogs: showReblogs,
 | 
			
		||||
					Notify:  notify,
 | 
			
		||||
				},
 | 
			
		||||
			); errWithCode != nil {
 | 
			
		||||
				log.Errorf(ctx, "could not follow account: %v", errWithCode.Unwrap())
 | 
			
		||||
 
 | 
			
		||||
@@ -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,
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user