diff options
| author | 2022-02-12 18:27:58 +0000 | |
|---|---|---|
| committer | 2022-02-12 18:27:58 +0000 | |
| commit | 31935ee206107f077878d3cdb6a26b82436b6893 (patch) | |
| tree | 2d522bf98013dc5a4539133561b645fd7457eb06 /internal/federation/dereferencing/media.go | |
| parent | [chore] Add nightly mirror to Codeberg.org (#392) (diff) | |
| parent | Go mod tidy (diff) | |
| download | gotosocial-31935ee206107f077878d3cdb6a26b82436b6893.tar.xz | |
Merge pull request #361 from superseriousbusiness/media_refactorv0.2.0
Refactor media handler to allow async media resolution
Diffstat (limited to 'internal/federation/dereferencing/media.go')
| -rw-r--r-- | internal/federation/dereferencing/media.go | 55 | 
1 files changed, 55 insertions, 0 deletions
| diff --git a/internal/federation/dereferencing/media.go b/internal/federation/dereferencing/media.go new file mode 100644 index 000000000..0b19570f2 --- /dev/null +++ b/internal/federation/dereferencing/media.go @@ -0,0 +1,55 @@ +/* +   GoToSocial +   Copyright (C) 2021-2022 GoToSocial Authors admin@gotosocial.org + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU Affero General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU Affero General Public License for more details. + +   You should have received a copy of the GNU Affero General Public License +   along with this program.  If not, see <http://www.gnu.org/licenses/>. +*/ + +package dereferencing + +import ( +	"context" +	"fmt" +	"io" +	"net/url" + +	"github.com/superseriousbusiness/gotosocial/internal/media" +) + +func (d *deref) GetRemoteMedia(ctx context.Context, requestingUsername string, accountID string, remoteURL string, ai *media.AdditionalMediaInfo) (*media.ProcessingMedia, error) { +	if accountID == "" { +		return nil, fmt.Errorf("GetRemoteMedia: account ID was empty") +	} + +	t, err := d.transportController.NewTransportForUsername(ctx, requestingUsername) +	if err != nil { +		return nil, fmt.Errorf("GetRemoteMedia: error creating transport: %s", err) +	} + +	derefURI, err := url.Parse(remoteURL) +	if err != nil { +		return nil, fmt.Errorf("GetRemoteMedia: error parsing url: %s", err) +	} + +	dataFunc := func(innerCtx context.Context) (io.Reader, int, error) { +		return t.DereferenceMedia(innerCtx, derefURI) +	} + +	processingMedia, err := d.mediaManager.ProcessMedia(ctx, dataFunc, accountID, ai) +	if err != nil { +		return nil, fmt.Errorf("GetRemoteMedia: error processing attachment: %s", err) +	} + +	return processingMedia, nil +} | 
