gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

update.go (2793B)


      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 media
     19 
     20 import (
     21 	"context"
     22 	"errors"
     23 	"fmt"
     24 
     25 	apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model"
     26 	"github.com/superseriousbusiness/gotosocial/internal/db"
     27 	"github.com/superseriousbusiness/gotosocial/internal/gtserror"
     28 	"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
     29 	"github.com/superseriousbusiness/gotosocial/internal/text"
     30 )
     31 
     32 // Update updates a media attachment with the given id, using the provided form parameters.
     33 func (p *Processor) Update(ctx context.Context, account *gtsmodel.Account, mediaAttachmentID string, form *apimodel.AttachmentUpdateRequest) (*apimodel.Attachment, gtserror.WithCode) {
     34 	attachment, err := p.state.DB.GetAttachmentByID(ctx, mediaAttachmentID)
     35 	if err != nil {
     36 		if err == db.ErrNoEntries {
     37 			// attachment doesn't exist
     38 			return nil, gtserror.NewErrorNotFound(errors.New("attachment doesn't exist in the db"))
     39 		}
     40 		return nil, gtserror.NewErrorNotFound(fmt.Errorf("db error getting attachment: %s", err))
     41 	}
     42 
     43 	if attachment.AccountID != account.ID {
     44 		return nil, gtserror.NewErrorNotFound(errors.New("attachment not owned by requesting account"))
     45 	}
     46 
     47 	var updatingColumns []string
     48 
     49 	if form.Description != nil {
     50 		attachment.Description = text.SanitizePlaintext(*form.Description)
     51 		updatingColumns = append(updatingColumns, "description")
     52 	}
     53 
     54 	if form.Focus != nil {
     55 		focusx, focusy, err := parseFocus(*form.Focus)
     56 		if err != nil {
     57 			return nil, gtserror.NewErrorBadRequest(err)
     58 		}
     59 		attachment.FileMeta.Focus.X = focusx
     60 		attachment.FileMeta.Focus.Y = focusy
     61 		updatingColumns = append(updatingColumns, "focus_x", "focus_y")
     62 	}
     63 
     64 	if err := p.state.DB.UpdateAttachment(ctx, attachment, updatingColumns...); err != nil {
     65 		return nil, gtserror.NewErrorInternalError(fmt.Errorf("database error updating media: %s", err))
     66 	}
     67 
     68 	a, err := p.tc.AttachmentToAPIAttachment(ctx, attachment)
     69 	if err != nil {
     70 		return nil, gtserror.NewErrorNotFound(fmt.Errorf("error converting attachment: %s", err))
     71 	}
     72 
     73 	return &a, nil
     74 }