emersion / go-vcard

A Go library to parse and format vCard
MIT License
107 stars 34 forks source link

Unable to use Field Geolocation #26

Open GibMeMyPacket opened 1 year ago

GibMeMyPacket commented 1 year ago

Hello, I cannot get a same result as RFC describes for the Geolocation field!

RFC GEO Example: GEO;TYPE=work:geo:46.772673,-71.282945

My result: GEO;TYPE=work:geo:51.446570\,35.662524

go-vcard escapes the value and there is no way to use the actual chars in value.

The code:

card.Set(
        vcard.FieldGeolocation, &vcard.Field{
            Value: fmt.Sprintf("%f,%f", info.Location.X, info.Location.Y),
            Params: map[string][]string{
                vcard.ParamType: {vcard.TypeWork + ":geo"},
            },
            Group: "",
        },
    )

I was also getting GEO;TYPE=work;51.446570\,35.662524 which is why i used vcard.TypeWork + ":geo" as a value for ParamType

oliverpool commented 1 month ago

35 should address this:

card.Set(
    vcard.FieldGeolocation, &vcard.Field{
        Value: vcard.FieldValue(fmt.Sprintf("geo:%f,%f", info.Location.X, info.Location.Y)), // set raw value
        Params: map[string][]string{
            vcard.ParamType: {vcard.TypeWork},
        },
        Group: "",
    },
)

(you could also split the two coordinates and call NewFieldValue(x,y), but this would be more hacky I think)