2021-07-05 11:23:03 +00:00
package media
import (
2021-08-25 13:34:33 +00:00
"context"
2021-07-05 11:23:03 +00:00
"fmt"
"strings"
"github.com/superseriousbusiness/gotosocial/internal/db"
"github.com/superseriousbusiness/gotosocial/internal/gtserror"
)
2021-08-25 13:34:33 +00:00
func ( p * processor ) Delete ( ctx context . Context , mediaAttachmentID string ) gtserror . WithCode {
attachment , err := p . db . GetAttachmentByID ( ctx , mediaAttachmentID )
if err != nil {
2021-08-20 10:26:56 +00:00
if err == db . ErrNoEntries {
2021-07-05 11:23:03 +00:00
// attachment already gone
return nil
}
// actual error
return gtserror . NewErrorInternalError ( err )
}
errs := [ ] string { }
// delete the thumbnail from storage
2021-08-25 13:34:33 +00:00
if attachment . Thumbnail . Path != "" {
if err := p . storage . RemoveFileAt ( attachment . Thumbnail . Path ) ; err != nil {
errs = append ( errs , fmt . Sprintf ( "remove thumbnail at path %s: %s" , attachment . Thumbnail . Path , err ) )
2021-07-05 11:23:03 +00:00
}
}
// delete the file from storage
2021-08-25 13:34:33 +00:00
if attachment . File . Path != "" {
if err := p . storage . RemoveFileAt ( attachment . File . Path ) ; err != nil {
errs = append ( errs , fmt . Sprintf ( "remove file at path %s: %s" , attachment . File . Path , err ) )
2021-07-05 11:23:03 +00:00
}
}
// delete the attachment
2021-08-25 13:34:33 +00:00
if err := p . db . DeleteByID ( ctx , mediaAttachmentID , attachment ) ; err != nil {
2021-08-20 10:26:56 +00:00
if err != db . ErrNoEntries {
2021-07-05 11:23:03 +00:00
errs = append ( errs , fmt . Sprintf ( "remove attachment: %s" , err ) )
}
}
if len ( errs ) != 0 {
return gtserror . NewErrorInternalError ( fmt . Errorf ( "Delete: one or more errors removing attachment with id %s: %s" , mediaAttachmentID , strings . Join ( errs , "; " ) ) )
}
return nil
}