Skip to content

Commit

Permalink
fix jpg conversion (#92)
Browse files Browse the repository at this point in the history
  • Loading branch information
uberswe authored Feb 14, 2025
1 parent 7c6799a commit 58fced6
Show file tree
Hide file tree
Showing 4 changed files with 97 additions and 139 deletions.
4 changes: 3 additions & 1 deletion internal/migrate/comments.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ func migrateComments(app *pocketbase.PocketBase, gormdb *gorm.DB, oldUserIDs map
record.Set("author_email", s.CommentAuthorEmail)
record.Set("author_ip", s.CommentAuthorIP)
record.Set("published", s.CommentDateGmt)
record.Set("created", s.CommentDateGmt)
record.Set("content", s.CommentContent)
record.Set("karma", s.CommentKarma)
record.Set("approved", s.CommentApproved)
Expand All @@ -76,7 +77,8 @@ func migrateComments(app *pocketbase.PocketBase, gormdb *gorm.DB, oldUserIDs map
record.Set("old_schematic_id", s.CommentPostID)

if err = app.Save(record); err != nil {
panic(err)
log.Printf("ERROR for %d - %d: %v\n", s.CommentID, s.CommentParent, err)
continue
}
}

Expand Down
1 change: 1 addition & 0 deletions internal/migrate/ratings.go
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ func migrateRatings(app *pocketbase.PocketBase, gormdb *gorm.DB, oldUserIDs map[
newUserId := oldUserIDs[vm.OldUserId]
newSchematicId := oldSchematicIDs[vm.OldPostId]
record := core.NewRecord(schematicRatingsCollection)
record.Set("created", vm.Date)
record.Set("rated_at", vm.Date)
record.Set("old_id", vm.OldID)
record.Set("old_schematic_id", vm.OldPostId)
Expand Down
121 changes: 47 additions & 74 deletions internal/migrate/schematics.go
Original file line number Diff line number Diff line change
Expand Up @@ -155,16 +155,8 @@ func migrateSchematics(app *pocketbase.PocketBase, gormdb *gorm.DB, userOldId ma
record.Set("to_ping", s.ToPing)
record.Set("type", s.PostType)
record.Set("updated", s.PostModifiedGmt)
record.Set("parent", s.PostParent)

filesToUpload := make(map[string][]*filesystem.File, 0)

err = app.Save(record)
if err != nil {
log.Printf("ERROR for %s - %d: %v\n", s.PostName, s.ID, err)
continue
}
record, err = convertToJpg(app, record, filesToUpload)
record, err = convertToJpg(app, record)

if err != nil {
app.Logger().Error(
Expand All @@ -188,75 +180,56 @@ func migrateSchematics(app *pocketbase.PocketBase, gormdb *gorm.DB, userOldId ma
return oldSchematicIDs
}

func convertToJpg(app *pocketbase.PocketBase, record *core.Record, files map[string][]*filesystem.File) (*core.Record, error) {
var galleryFilenames []string
fs, err := app.NewFilesystem()
func convertToJpg(app *pocketbase.PocketBase, record *core.Record) (*core.Record, error) {
var err error
unsavedFiles := record.GetUnsavedFiles("featured_image")
record, err = convertInLoop("featured_image", unsavedFiles, record)
if err != nil {
return record, err
}
unsavedFiles = record.GetUnsavedFiles("gallery")
record, err = convertInLoop("gallery", unsavedFiles, record)
if err != nil {
return record, err
}

for fieldKey := range files {
for i, file := range files[fieldKey] {
path := record.BaseFilesPath() + "/" + file.Name
return record, nil
}

if err := fs.UploadFile(file, path); err != nil {
return record, err
}
func convertInLoop(key string, unsavedFiles []*filesystem.File, record *core.Record) (*core.Record, error) {
var convertedFiles []*filesystem.File
for _, f := range unsavedFiles {
rsc, err := f.Reader.Open()
if err != nil {
return record, err
}
decode, err := imgconv.Decode(rsc)
if err != nil {
return record, err
}

if fieldKey == "featured_image" || fieldKey == "gallery" {
r, err := fs.GetFile(path)
if err != nil {
return record, err
}

decode, err := imgconv.Decode(r)
if err != nil {
return record, err
}

var jpgBuffer bytes.Buffer
err = imgconv.Write(bufio.NewWriter(&jpgBuffer), decode, &imgconv.FormatOption{
Format: imgconv.JPEG,
EncodeOption: []imgconv.EncodeOption{
imgconv.Quality(80),
},
})

filename := strings.TrimSuffix(file.Name, filepath.Ext(file.Name)) + ".jpg"
if err != nil {
return record, err
}

newFile, err := filesystem.NewFileFromBytes(jpgBuffer.Bytes(), filename)
if err != nil {
return record, err
}

err = r.Close()
if err != nil {
return record, err
}

if err := fs.Delete(path); err != nil {
return record, err
}

path = record.BaseFilesPath() + "/" + filename
if err := fs.UploadFile(newFile, path); err != nil {
return record, err
}
files[fieldKey][i].Name = filename

if fieldKey == "featured_image" {
record.Set("featured_image", filename)
} else {
galleryFilenames = append(galleryFilenames, filename)
}
}
var jpgBuffer bytes.Buffer
err = imgconv.Write(bufio.NewWriter(&jpgBuffer), decode, &imgconv.FormatOption{
Format: imgconv.JPEG,
EncodeOption: []imgconv.EncodeOption{
imgconv.Quality(80),
},
})

filename := strings.TrimSuffix(f.Name, filepath.Ext(f.Name)) + ".jpg"
if err != nil {
return record, err
}
}
record.Set("gallery", galleryFilenames)

newFile, err := filesystem.NewFileFromBytes(jpgBuffer.Bytes(), filename)
if err != nil {
return record, err
}

convertedFiles = append(convertedFiles, newFile)

}
record.Set(key, convertedFiles)
return record, nil
}

Expand Down Expand Up @@ -345,7 +318,7 @@ func processSchematicFile(m *model.QeyKryWEpostmetum, q *query.Query, record *co
log.Printf("ERROR for %s: %v\n", filename, err)
return
}
record.Set("schematic_file", fileFromPath.Name)
record.Set("schematic_file", fileFromPath)
}

func processSchematicTags(app *pocketbase.PocketBase, m *model.QeyKryWEpostmetum, q *query.Query, record *core.Record, schematicTagsCollection *core.Collection) {
Expand Down Expand Up @@ -435,7 +408,7 @@ func processCategories(app *pocketbase.PocketBase, m *model.QeyKryWEpostmetum, q
}

func processSchematicGallery(m *model.QeyKryWEpostmetum, q *query.Query, record *core.Record, form *forms.RecordUpsert) {
var galleryFilenames []string
var galleryFilenames []*filesystem.File
var postIDs []interface{}
var postInts []int
if m.MetaValue == "" {
Expand Down Expand Up @@ -491,7 +464,7 @@ func processSchematicGallery(m *model.QeyKryWEpostmetum, q *query.Query, record
if err != nil {
panic(err)
}
galleryFilenames = append(galleryFilenames, fileFromPath.Name)
galleryFilenames = append(galleryFilenames, fileFromPath)
}
record.Set("gallery", galleryFilenames)
}
Expand Down Expand Up @@ -538,5 +511,5 @@ func processSchematicFeaturedImage(m *model.QeyKryWEpostmetum, q *query.Query, r
if err != nil {
panic(err)
}
record.Set("featured_image", fileFromPath.Name)
record.Set("featured_image", fileFromPath)
}
110 changes: 46 additions & 64 deletions server/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -420,85 +420,67 @@ func validateAndPopulateSchematic(app *pocketbase.PocketBase, record *core.Recor
files["gallery"] = g
}

// convert to jpg in background
go convertToJpg(app, record, files)
record, err = convertToJpg(app, record)

if err != nil {
return err
}

// return nil if all is ok
return nil
}

func convertToJpg(app *pocketbase.PocketBase, record *core.Record, files map[string][]*filesystem.File) {
var galleryFilenames []string
fs, err := app.NewFilesystem()
func convertToJpg(app *pocketbase.PocketBase, record *core.Record) (*core.Record, error) {
var err error
unsavedFiles := record.GetUnsavedFiles("featured_image")
record, err = convertInLoop("featured_image", unsavedFiles, record)
if err != nil {
return
return record, err
}
unsavedFiles = record.GetUnsavedFiles("gallery")
record, err = convertInLoop("gallery", unsavedFiles, record)
if err != nil {
return record, err
}

for fieldKey := range files {
if fieldKey == "featured_image" || fieldKey == "gallery" {
for i, file := range files[fieldKey] {
path := record.BaseFilesPath() + "/" + file.Name

if err := fs.UploadFile(file, path); err != nil {
return
}

r, err := fs.GetFile(path)
if err != nil {
return
}

decode, err := imgconv.Decode(r)
if err != nil {
return
}

var jpgBuffer bytes.Buffer
err = imgconv.Write(bufio.NewWriter(&jpgBuffer), decode, &imgconv.FormatOption{
Format: imgconv.JPEG,
EncodeOption: []imgconv.EncodeOption{
imgconv.Quality(80),
},
})
return record, nil
}

filename := strings.TrimSuffix(file.Name, filepath.Ext(file.Name)) + ".jpg"
if err != nil {
return
}
func convertInLoop(key string, unsavedFiles []*filesystem.File, record *core.Record) (*core.Record, error) {
var convertedFiles []*filesystem.File
for _, f := range unsavedFiles {
rsc, err := f.Reader.Open()
if err != nil {
return record, err
}
decode, err := imgconv.Decode(rsc)
if err != nil {
return record, err
}

newFile, err := filesystem.NewFileFromBytes(jpgBuffer.Bytes(), filename)
if err != nil {
return
}
var jpgBuffer bytes.Buffer
err = imgconv.Write(bufio.NewWriter(&jpgBuffer), decode, &imgconv.FormatOption{
Format: imgconv.JPEG,
EncodeOption: []imgconv.EncodeOption{
imgconv.Quality(80),
},
})

err = r.Close()
if err != nil {
return
}
filename := strings.TrimSuffix(f.Name, filepath.Ext(f.Name)) + ".jpg"
if err != nil {
return record, err
}

if err := fs.Delete(path); err != nil {
return
}
newFile, err := filesystem.NewFileFromBytes(jpgBuffer.Bytes(), filename)
if err != nil {
return record, err
}

path = record.BaseFilesPath() + "/" + filename
if err := fs.UploadFile(newFile, path); err != nil {
return
}
files[fieldKey][i].Name = filename
convertedFiles = append(convertedFiles, newFile)

if fieldKey == "featured_image" {
record.Set("featured_image", filename)
} else {
galleryFilenames = append(galleryFilenames, filename)
}
}
}
}
record.Set("gallery", galleryFilenames)
err = app.Save(record)
if err != nil {
return
}
record.Set(key, convertedFiles)
return record, nil
}

func ToYoutubeEmbedUrl(url string) string {
Expand Down

0 comments on commit 58fced6

Please sign in to comment.