fix(migration): convert trello card descriptions from markdown to html
continuous-integration/drone/push Build is passing Details

This commit is contained in:
kolaente 2024-03-09 09:31:50 +01:00
parent 9ad7bc5932
commit e65c3ffe6b
Signed by: konrad
GPG Key ID: F40E70337AB24C9B
2 changed files with 20 additions and 3 deletions

View File

@ -17,6 +17,8 @@
package trello package trello
import ( import (
"bytes"
"code.vikunja.io/api/pkg/config" "code.vikunja.io/api/pkg/config"
"code.vikunja.io/api/pkg/files" "code.vikunja.io/api/pkg/files"
"code.vikunja.io/api/pkg/log" "code.vikunja.io/api/pkg/log"
@ -24,6 +26,7 @@ import (
"code.vikunja.io/api/pkg/modules/migration" "code.vikunja.io/api/pkg/modules/migration"
"code.vikunja.io/api/pkg/user" "code.vikunja.io/api/pkg/user"
"github.com/adlio/trello" "github.com/adlio/trello"
"github.com/yuin/goldmark"
) )
// Migration represents the trello migration struct // Migration represents the trello migration struct
@ -160,6 +163,16 @@ func getTrelloData(token string) (trelloData []*trello.Board, err error) {
return return
} }
func convertMarkdownToHTML(input string) (output string, err error) {
var buf bytes.Buffer
err = goldmark.Convert([]byte(input), &buf)
if err != nil {
return
}
//#nosec - we are not responsible to escape this as we don't know the context where it is used
return buf.String(), nil
}
// Converts all previously obtained data from trello into the vikunja format. // Converts all previously obtained data from trello into the vikunja format.
// `trelloData` should contain all boards with their projects and cards respectively. // `trelloData` should contain all boards with their projects and cards respectively.
func convertTrelloDataToVikunja(trelloData []*trello.Board, token string) (fullVikunjaHierachie []*models.ProjectWithTasksAndBuckets, err error) { func convertTrelloDataToVikunja(trelloData []*trello.Board, token string) (fullVikunjaHierachie []*models.ProjectWithTasksAndBuckets, err error) {
@ -220,11 +233,15 @@ func convertTrelloDataToVikunja(trelloData []*trello.Board, token string) (fullV
// The usual stuff: Title, description, position, bucket id // The usual stuff: Title, description, position, bucket id
task := &models.Task{ task := &models.Task{
Title: card.Name, Title: card.Name,
Description: card.Desc,
KanbanPosition: card.Pos, KanbanPosition: card.Pos,
BucketID: bucketID, BucketID: bucketID,
} }
task.Description, err = convertMarkdownToHTML(card.Desc)
if err != nil {
return nil, err
}
if card.Due != nil { if card.Due != nil {
task.DueDate = *card.Due task.DueDate = *card.Due
} }

View File

@ -52,7 +52,7 @@ func TestConvertTrelloToVikunja(t *testing.T) {
Cards: []*trello.Card{ Cards: []*trello.Card{
{ {
Name: "Test Card 1", Name: "Test Card 1",
Desc: "Card Description", Desc: "Card Description **bold**",
Pos: 123, Pos: 123,
Due: &time1, Due: &time1,
Labels: []*trello.Label{ Labels: []*trello.Label{
@ -218,7 +218,7 @@ func TestConvertTrelloToVikunja(t *testing.T) {
{ {
Task: models.Task{ Task: models.Task{
Title: "Test Card 1", Title: "Test Card 1",
Description: "Card Description", Description: "<p>Card Description <strong>bold</strong></p>\n",
BucketID: 1, BucketID: 1,
KanbanPosition: 123, KanbanPosition: 123,
DueDate: time1, DueDate: time1,