mirror of
https://github.com/Eggbertx/gochan.git
synced 2025-08-14 16:26:23 -07:00
Don't insert upload in AttachEmbed, since it gets inserted later
This commit is contained in:
parent
309c8cede9
commit
2facfe68fc
3 changed files with 23 additions and 16 deletions
|
@ -631,6 +631,11 @@ type PostConfig struct {
|
||||||
AllowDiceRerolls bool
|
AllowDiceRerolls bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// HasEmbedMatchers returns true if the board has embed handlers configured
|
||||||
|
func (pc *PostConfig) HasEmbedMatchers() bool {
|
||||||
|
return len(pc.EmbedMatchers) > 0
|
||||||
|
}
|
||||||
|
|
||||||
// GetEmbedVideoID returns the site ID, and video ID for the given URL if it is compatible with any
|
// GetEmbedVideoID returns the site ID, and video ID for the given URL if it is compatible with any
|
||||||
// configured embed handlers. It returns an error if none are found
|
// configured embed handlers. It returns an error if none are found
|
||||||
func (pc *PostConfig) GetEmbedVideoID(url string) (string, string, error) {
|
func (pc *PostConfig) GetEmbedVideoID(url string) (string, string, error) {
|
||||||
|
|
|
@ -21,10 +21,10 @@ type EmbedVideo struct {
|
||||||
ThumbHeight int
|
ThumbHeight int
|
||||||
}
|
}
|
||||||
|
|
||||||
// AttachEmbed checks if the post contains an embedded media URL from the form (if applicable) and if it is valid.
|
// AttachEmbedFromRequest checks if the post contains an embedded media URL from the form (if applicable) and if it is valid.
|
||||||
// It returns true if the post contains an embedded media URL, an error if the URL is invalid or some other error occurred.
|
// It returns true if the post contains an embedded media URL, an error if the URL is invalid or some other error occurred.
|
||||||
// It attaches the embed as a pseudo-upload in the database if the URL is valid.
|
// It attaches the embed as a pseudo-upload in the database if the URL is valid.
|
||||||
func AttachEmbed(request *http.Request, post *gcsql.Post, boardCfg *config.BoardConfig, warnEv, errEv *zerolog.Event, requestOpts ...*gcsql.RequestOptions) (*gcsql.Upload, error) {
|
func AttachEmbedFromRequest(request *http.Request, boardCfg *config.BoardConfig, warnEv, errEv *zerolog.Event) (*gcsql.Upload, error) {
|
||||||
url := request.PostFormValue("embed")
|
url := request.PostFormValue("embed")
|
||||||
if url == "" {
|
if url == "" {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
|
@ -43,14 +43,8 @@ func AttachEmbed(request *http.Request, post *gcsql.Post, boardCfg *config.Board
|
||||||
upload := &gcsql.Upload{
|
upload := &gcsql.Upload{
|
||||||
Filename: "embed:" + handlerID,
|
Filename: "embed:" + handlerID,
|
||||||
OriginalFilename: videoID,
|
OriginalFilename: videoID,
|
||||||
PostID: post.ID,
|
|
||||||
ThumbnailWidth: boardCfg.ThumbWidth,
|
ThumbnailWidth: boardCfg.ThumbWidth,
|
||||||
ThumbnailHeight: boardCfg.ThumbHeight,
|
ThumbnailHeight: boardCfg.ThumbHeight,
|
||||||
}
|
}
|
||||||
if err = post.AddAttachment(upload, requestOpts...); err != nil {
|
|
||||||
errEv.Err(err).Caller().Msg("Failed to attach embed")
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return upload, nil
|
return upload, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,7 +94,7 @@ var (
|
||||||
ThumbnailURLTemplate: "https://vumbnail.com/{{.VideoID}}.jpg",
|
ThumbnailURLTemplate: "https://vumbnail.com/{{.VideoID}}.jpg",
|
||||||
},
|
},
|
||||||
"rawvideo": {
|
"rawvideo": {
|
||||||
URLRegex: `^https?://\S+\.\S+/\S+/(\S+\.(?:mp4|webm))`,
|
URLRegex: `^https?://\S+\.\S+/\S+/(\S+\.(?:mp4|webm))$`,
|
||||||
EmbedTemplate: `<video class="embed" controls><source src="{{.VideoID}}" type="video/mp4"></video>`,
|
EmbedTemplate: `<video class="embed" controls><source src="{{.VideoID}}" type="video/mp4"></video>`,
|
||||||
VideoIDSubmatchIndex: intPointer(0),
|
VideoIDSubmatchIndex: intPointer(0),
|
||||||
},
|
},
|
||||||
|
@ -151,7 +151,8 @@ func embedTestRunner(t *testing.T, tc *embedTestCase, boardCfg *config.BoardConf
|
||||||
t.FailNow()
|
t.FailNow()
|
||||||
}
|
}
|
||||||
|
|
||||||
embedUpload, err := AttachEmbed(generateEmbedRequest(tc.url), &gcsql.Post{ID: 1}, boardCfg, warnEv, errEv)
|
post := &gcsql.Post{ID: 1}
|
||||||
|
embedUpload, err := AttachEmbedFromRequest(generateEmbedRequest(tc.url), boardCfg, warnEv, errEv)
|
||||||
if tc.expectError {
|
if tc.expectError {
|
||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
return
|
return
|
||||||
|
@ -166,8 +167,10 @@ func embedTestRunner(t *testing.T, tc *embedTestCase, boardCfg *config.BoardConf
|
||||||
if !assert.NotNil(t, embedUpload) {
|
if !assert.NotNil(t, embedUpload) {
|
||||||
t.FailNow()
|
t.FailNow()
|
||||||
}
|
}
|
||||||
|
|
||||||
assert.Equal(t, tc.expectUpload.Filename, embedUpload.Filename)
|
assert.Equal(t, tc.expectUpload.Filename, embedUpload.Filename)
|
||||||
assert.Equal(t, tc.expectUpload.OriginalFilename, embedUpload.OriginalFilename)
|
assert.Equal(t, tc.expectUpload.OriginalFilename, embedUpload.OriginalFilename)
|
||||||
|
assert.NoError(t, post.AddAttachment(embedUpload))
|
||||||
assert.Equal(t, embedUpload.ID, 99)
|
assert.Equal(t, embedUpload.ID, 99)
|
||||||
assert.NoError(t, mock.ExpectationsWereMet())
|
assert.NoError(t, mock.ExpectationsWereMet())
|
||||||
}
|
}
|
||||||
|
@ -226,9 +229,12 @@ func TestOnlyAllowOneEmbed(t *testing.T) {
|
||||||
mock.ExpectPrepare(prepStr).
|
mock.ExpectPrepare(prepStr).
|
||||||
ExpectQuery().WithArgs(1).
|
ExpectQuery().WithArgs(1).
|
||||||
WillReturnRows(sqlmock.NewRows([]string{"filename", "dir"}).AddRow("file.png", "test"))
|
WillReturnRows(sqlmock.NewRows([]string{"filename", "dir"}).AddRow("file.png", "test"))
|
||||||
_, err = AttachEmbed(generateEmbedRequest("https://www.youtube.com/watch?v=123456"),
|
embed, err := AttachEmbedFromRequest(generateEmbedRequest("https://www.youtube.com/watch?v=123456"), boardCfg, warnEv, errEv)
|
||||||
&gcsql.Post{ID: 1}, boardCfg, warnEv, errEv)
|
if !assert.NoError(t, err) {
|
||||||
assert.ErrorIs(t, err, gcsql.ErrUploadAlreadyAttached)
|
t.FailNow()
|
||||||
|
}
|
||||||
|
post := &gcsql.Post{ID: 1}
|
||||||
|
assert.ErrorIs(t, post.AddAttachment(embed), gcsql.ErrUploadAlreadyAttached)
|
||||||
if !assert.NoError(t, mock.ExpectationsWereMet()) {
|
if !assert.NoError(t, mock.ExpectationsWereMet()) {
|
||||||
t.FailNow()
|
t.FailNow()
|
||||||
}
|
}
|
||||||
|
@ -237,8 +243,10 @@ func TestOnlyAllowOneEmbed(t *testing.T) {
|
||||||
mock.ExpectPrepare(prepStr).
|
mock.ExpectPrepare(prepStr).
|
||||||
ExpectQuery().WithArgs(1).
|
ExpectQuery().WithArgs(1).
|
||||||
WillReturnRows(sqlmock.NewRows([]string{"filename", "dir"}).AddRow("embed:youtube", "test"))
|
WillReturnRows(sqlmock.NewRows([]string{"filename", "dir"}).AddRow("embed:youtube", "test"))
|
||||||
_, err = AttachEmbed(generateEmbedRequest("https://www.youtube.com/watch?v=123456"),
|
embed, err = AttachEmbedFromRequest(generateEmbedRequest("https://www.youtube.com/watch?v=123456"), boardCfg, warnEv, errEv)
|
||||||
&gcsql.Post{ID: 1}, boardCfg, warnEv, errEv)
|
if !assert.NoError(t, err) {
|
||||||
assert.ErrorIs(t, err, gcsql.ErrEmbedAlreadyAttached)
|
t.FailNow()
|
||||||
|
}
|
||||||
|
assert.ErrorIs(t, post.AddAttachment(embed), gcsql.ErrEmbedAlreadyAttached)
|
||||||
assert.NoError(t, mock.ExpectationsWereMet())
|
assert.NoError(t, mock.ExpectationsWereMet())
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue