delete.go (1694B)
1 // GoToSocial 2 // Copyright (C) GoToSocial Authors admin@gotosocial.org 3 // SPDX-License-Identifier: AGPL-3.0-or-later 4 // 5 // This program is free software: you can redistribute it and/or modify 6 // it under the terms of the GNU Affero General Public License as published by 7 // the Free Software Foundation, either version 3 of the License, or 8 // (at your option) any later version. 9 // 10 // This program is distributed in the hope that it will be useful, 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 // GNU Affero General Public License for more details. 14 // 15 // You should have received a copy of the GNU Affero General Public License 16 // along with this program. If not, see <http://www.gnu.org/licenses/>. 17 18 package stream 19 20 import ( 21 "fmt" 22 "strings" 23 24 "github.com/superseriousbusiness/gotosocial/internal/stream" 25 ) 26 27 // Delete streams the delete of the given statusID to *ALL* open streams. 28 func (p *Processor) Delete(statusID string) error { 29 errs := []string{} 30 31 // get all account IDs with open streams 32 accountIDs := []string{} 33 p.streamMap.Range(func(k interface{}, _ interface{}) bool { 34 key, ok := k.(string) 35 if !ok { 36 panic("streamMap key was not a string (account id)") 37 } 38 39 accountIDs = append(accountIDs, key) 40 return true 41 }) 42 43 // stream the delete to every account 44 for _, accountID := range accountIDs { 45 if err := p.toAccount(statusID, stream.EventTypeDelete, stream.AllStatusTimelines, accountID); err != nil { 46 errs = append(errs, err.Error()) 47 } 48 } 49 50 if len(errs) != 0 { 51 return fmt.Errorf("one or more errors streaming status delete: %s", strings.Join(errs, ";")) 52 } 53 54 return nil 55 }