953 lines
33 KiB
Go
953 lines
33 KiB
Go
|
|
// attributeDisplay provides a function to format profile attributes for display in the GUI
|
|
// Example: Raw Distance is formatted as a distance in kilometers, and we may need to convert it to metric
|
|
|
|
package attributeDisplay
|
|
|
|
//TODO: Deal with singular/multiple values and how that changes an attribute value's units
|
|
// For example: 1 variant, 2 variants
|
|
|
|
import "seekia/resources/worldLocations"
|
|
import "seekia/resources/worldLanguages"
|
|
import "seekia/resources/currencies"
|
|
|
|
import "seekia/internal/convertCurrencies"
|
|
import "seekia/internal/globalSettings"
|
|
import "seekia/internal/helpers"
|
|
import "seekia/internal/network/appNetworkType/getAppNetworkType"
|
|
import "seekia/internal/translation"
|
|
|
|
import "strings"
|
|
import "errors"
|
|
|
|
// This function will format the values into the user's currently selected language or measurement system
|
|
// This function also supports calculated attributes
|
|
//Outputs:
|
|
// -string: Attribute Title (translated)
|
|
// -bool: Attribute is numerical
|
|
// -func(string)(string, error): Function to convert attribute value to a displayable, translated value
|
|
// -Inputs:
|
|
// -string: Raw attribute value
|
|
// -Outputs:
|
|
// -string: Formatted attribute value
|
|
// -error
|
|
// -string: Units of the attribute value (translated)
|
|
// -string: Translated text to show if data is unavailable ("No Response"/"Unknown")
|
|
// -Example: Height is missing = "No Response", Identity Score is missing = "Unknown"
|
|
// - If it is impossible for the data to be unavailable, we return "". Example: IsMyContact
|
|
// -error
|
|
func GetProfileAttributeDisplayInfo(attributeName string)(string, bool, func(string)(string, error), string, string, error){
|
|
|
|
passValueFunction := func(input string)(string, error){
|
|
return input, nil
|
|
}
|
|
|
|
formatPercentageFunction := func(input string)(string, error){
|
|
valueFloat64, err := helpers.ConvertStringToFloat64(input)
|
|
if (err != nil){
|
|
return "", errors.New("formatPercentageFunction called with non-numeric " + attributeName + " value: " + input)
|
|
}
|
|
|
|
if (valueFloat64 < 0 || valueFloat64 > 100){
|
|
return "", errors.New("formatPercentageFunction called with invalid " + attributeName + " percentage value: " + input)
|
|
}
|
|
|
|
result := input + "%"
|
|
return result, nil
|
|
}
|
|
|
|
roundNumberFunction_Float64 := func(input float64)(string, error){
|
|
|
|
// We check to see if we need to round the number
|
|
// We need this for readability
|
|
// We also convert the number to show numeric units (Example: 5500000 -> 5.5 million)
|
|
|
|
if (input < 1000){
|
|
|
|
numberIsInteger := helpers.CheckIfFloat64IsInteger(input)
|
|
if (numberIsInteger == true){
|
|
|
|
valueRounded := helpers.ConvertFloat64ToStringRounded(input, 0)
|
|
return valueRounded, nil
|
|
}
|
|
|
|
valueRounded := helpers.ConvertFloat64ToStringRounded(input, 2)
|
|
return valueRounded, nil
|
|
}
|
|
|
|
translatedNumber, err := helpers.ConvertFloat64ToRoundedStringWithTranslatedUnits(input)
|
|
if (err != nil) { return "", err }
|
|
|
|
return translatedNumber, nil
|
|
}
|
|
|
|
roundNumberFunction := func(input string)(string, error){
|
|
|
|
valueFloat64, err := helpers.ConvertStringToFloat64(input)
|
|
if (err != nil){
|
|
return "", errors.New("roundNumberFunction called with non-numeric " + attributeName + " value: " + input)
|
|
}
|
|
|
|
result, err := roundNumberFunction_Float64(valueFloat64)
|
|
if (err != nil) { return "", err }
|
|
|
|
return result, nil
|
|
}
|
|
|
|
translateValueFunction := func(input string)(string, error){
|
|
|
|
result := translation.TranslateTextFromEnglishToMyLanguage(input)
|
|
return result, nil
|
|
}
|
|
|
|
noResponseTranslated := translation.TranslateTextFromEnglishToMyLanguage("No Response")
|
|
unknownTranslated := translation.TranslateTextFromEnglishToMyLanguage("Unknown")
|
|
|
|
switch attributeName {
|
|
|
|
case "ProfileVersion":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Profile Version")
|
|
|
|
return titleTranslated, true, passValueFunction, "", "", nil
|
|
}
|
|
case "NetworkType":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Network Type")
|
|
|
|
return titleTranslated, true, passValueFunction, "", "", nil
|
|
}
|
|
case "IdentityKey":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Identity Key")
|
|
|
|
return titleTranslated, false, passValueFunction, "", "", nil
|
|
}
|
|
case "IdentityHash":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Identity Hash")
|
|
|
|
return titleTranslated, false, passValueFunction, "", "", nil
|
|
}
|
|
case "ProfileType":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Profile Type")
|
|
|
|
return titleTranslated, false, translateValueFunction, "", "", nil
|
|
}
|
|
case "BroadcastTime":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Broadcast Time")
|
|
|
|
return titleTranslated, true, passValueFunction, "", "", nil
|
|
}
|
|
case "Disabled":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Disabled")
|
|
|
|
// This attribute will either have the value "Yes" or it won't exist
|
|
|
|
return titleTranslated, false, translateValueFunction, "", "", nil
|
|
}
|
|
case "DeviceIdentifier":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Device Identifier")
|
|
|
|
return titleTranslated, false, passValueFunction, "", "", nil
|
|
}
|
|
case "NaclKey":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Nacl Key")
|
|
|
|
return titleTranslated, false, passValueFunction, "", "", nil
|
|
}
|
|
case "KyberKey":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Kyber Key")
|
|
|
|
return titleTranslated, false, passValueFunction, "", "", nil
|
|
}
|
|
case "ChatKeysLatestUpdateTime":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Chat Keys Latest Update Time")
|
|
|
|
return titleTranslated, true, passValueFunction, "", "", nil
|
|
}
|
|
case "Username", "Description", "Hobbies", "Job", "Beliefs":{
|
|
|
|
// These are attributes which are not numerical and do not need their value translated
|
|
// These attributes also have a title which is identical to their name
|
|
// They are also all user-supplied, so they have a possible No Response value.
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage(attributeName)
|
|
|
|
return titleTranslated, false, passValueFunction, "", noResponseTranslated, nil
|
|
}
|
|
case "Photos", "Avatar", "Language", "Questionnaire", "Tags":{
|
|
|
|
// These are attributes which should not be displayed as strings in the GUI
|
|
// They must be displayed in a custom way
|
|
// These attributes also have a title which is identical to their name
|
|
// They are also all user-supplied, so they have a possible No Response value.
|
|
|
|
// Photos: a list of base64 webp images, separated by "+"
|
|
// Avatar: an integer which references an emoji (see /resources/imageFiles/emojis.go)
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage(attributeName)
|
|
|
|
return titleTranslated, false, passValueFunction, "", noResponseTranslated, nil
|
|
}
|
|
case "CatsRating":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Cats Rating")
|
|
|
|
return titleTranslated, true, passValueFunction, "/10", noResponseTranslated, nil
|
|
}
|
|
case "DogsRating":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Dogs Rating")
|
|
|
|
return titleTranslated, true, passValueFunction, "/10", noResponseTranslated, nil
|
|
}
|
|
case "PetsRating":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Pets Rating")
|
|
|
|
return titleTranslated, true, passValueFunction, "/10", noResponseTranslated, nil
|
|
}
|
|
case "GenderIdentity":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Gender Identity")
|
|
|
|
translateGenderFunction := func(input string)(string, error){
|
|
|
|
if (input == "Man" || input == "Woman"){
|
|
result := translation.TranslateTextFromEnglishToMyLanguage(input)
|
|
return result, nil
|
|
}
|
|
return input, nil
|
|
}
|
|
|
|
return titleTranslated, false, translateGenderFunction, "", noResponseTranslated, nil
|
|
}
|
|
case "FruitRating",
|
|
"VegetablesRating",
|
|
"NutsRating",
|
|
"GrainsRating",
|
|
"DairyRating",
|
|
"SeafoodRating",
|
|
"BeefRating",
|
|
"PorkRating",
|
|
"PoultryRating",
|
|
"EggsRating",
|
|
"BeansRating":{
|
|
|
|
foodName := strings.TrimSuffix(attributeName, "Rating")
|
|
|
|
attributeTitle := foodName + " Rating"
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage(attributeTitle)
|
|
|
|
return titleTranslated, true, passValueFunction, "/10", noResponseTranslated, nil
|
|
}
|
|
case "AlcoholFrequency":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Alcohol Frequency")
|
|
|
|
return titleTranslated, true, passValueFunction, "/10", noResponseTranslated, nil
|
|
}
|
|
case "TobaccoFrequency":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Tobacco Frequency")
|
|
|
|
return titleTranslated, true, passValueFunction, "/10", noResponseTranslated, nil
|
|
}
|
|
case "CannabisFrequency":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Cannabis Frequency")
|
|
|
|
return titleTranslated, true, passValueFunction, "/10", noResponseTranslated, nil
|
|
}
|
|
case "Fame":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Fame")
|
|
|
|
return titleTranslated, true, passValueFunction, "/10", noResponseTranslated, nil
|
|
}
|
|
case "Wealth":{
|
|
|
|
// This attribute should not be displayed to the user, use WealthInGold instead.
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Wealth")
|
|
|
|
return titleTranslated, true, passValueFunction, "", noResponseTranslated, nil
|
|
}
|
|
case "WealthCurrency":{
|
|
|
|
// This attribute should not be displayed to the user, use WealthInGold to display wealth in a user's currency instead.
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Wealth Currency")
|
|
|
|
return titleTranslated, false, passValueFunction, "", noResponseTranslated, nil
|
|
}
|
|
case "WealthIsLowerBound":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Wealth Is Lower Bound")
|
|
|
|
// Value is either "Yes" or "No"
|
|
|
|
return titleTranslated, false, translateValueFunction, "", noResponseTranslated, nil
|
|
}
|
|
case "WealthInGold":{
|
|
|
|
// We use this attribute to display a user's Wealth
|
|
// We have to convert it to the user's currency
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Wealth")
|
|
|
|
getAppCurrency := func()(string, error){
|
|
|
|
exists, appCurrencyCode, err := globalSettings.GetSetting("Currency")
|
|
if (err != nil) { return "", err }
|
|
if (exists == false){
|
|
return "USD", nil
|
|
}
|
|
return appCurrencyCode, nil
|
|
}
|
|
appCurrencyCode, err := getAppCurrency()
|
|
if (err != nil) { return "", false, nil, "", "", err }
|
|
|
|
_, appCurrencySymbol, err := currencies.GetCurrencyInfoFromCurrencyCode(appCurrencyCode)
|
|
if (err != nil) { return "", false, nil, "", "", err }
|
|
|
|
appNetworkType, err := getAppNetworkType.GetAppNetworkType()
|
|
if (err != nil){ return "", false, nil, "", "", err }
|
|
|
|
formatValueFunction := func(profileWealthInGold string)(string, error){
|
|
|
|
wealthInGoldFloat64, err := helpers.ConvertStringToFloat64(profileWealthInGold)
|
|
if (err != nil) { return "", err }
|
|
|
|
_, convertedProfileWealth, err := convertCurrencies.ConvertKilogramsOfGoldToAnyCurrency(appNetworkType, wealthInGoldFloat64, appCurrencyCode)
|
|
if (err != nil) { return "", err }
|
|
|
|
convertedResult, err := roundNumberFunction_Float64(convertedProfileWealth)
|
|
if (err != nil) { return "", err }
|
|
|
|
resultWithSymbol := appCurrencySymbol + convertedResult
|
|
|
|
return resultWithSymbol, nil
|
|
}
|
|
|
|
currencyCodePadded := " " + appCurrencyCode
|
|
|
|
return titleTranslated, true, formatValueFunction, currencyCodePadded, noResponseTranslated, nil
|
|
}
|
|
case "HasGenitalHerpes":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Has Genital Herpes")
|
|
|
|
return titleTranslated, false, passValueFunction, "", noResponseTranslated, nil
|
|
}
|
|
case "HasHIV":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Has HIV")
|
|
|
|
return titleTranslated, false, passValueFunction, "", noResponseTranslated, nil
|
|
}
|
|
case "HairColor":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Hair Color")
|
|
|
|
return titleTranslated, false, passValueFunction, "", noResponseTranslated, nil
|
|
}
|
|
case "HairTexture":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Hair Texture")
|
|
|
|
formatHairTextureValuesFunction := func(input string)(string, error){
|
|
|
|
//TODO: Translate
|
|
|
|
if (input == "1"){
|
|
result := "1/6 - Straight"
|
|
return result, nil
|
|
}
|
|
if (input == "2"){
|
|
result := "2/6 - Slightly Wavy"
|
|
return result, nil
|
|
}
|
|
if (input == "3"){
|
|
result := "3/6 - Wavy"
|
|
return result, nil
|
|
}
|
|
if (input == "4"){
|
|
result := "4/6 - Big Curls"
|
|
return result, nil
|
|
}
|
|
if (input == "5"){
|
|
result := "5/6 - Small Curls"
|
|
return result, nil
|
|
}
|
|
if (input == "6"){
|
|
result := "6/6 - Very Tight Curls"
|
|
return result, nil
|
|
}
|
|
return "", errors.New("HairTexture formatValuesFunction called with invalid input: " + input)
|
|
}
|
|
|
|
return titleTranslated, true, formatHairTextureValuesFunction, "", noResponseTranslated, nil
|
|
}
|
|
case "EyeColor":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Eye Color")
|
|
|
|
return titleTranslated, false, passValueFunction, "", noResponseTranslated, nil
|
|
}
|
|
case "SkinColor":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Skin Color")
|
|
|
|
return titleTranslated, true, passValueFunction, "", noResponseTranslated, nil
|
|
}
|
|
case "BodyMuscle":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Body Muscle")
|
|
|
|
return titleTranslated, true, passValueFunction, "/4", noResponseTranslated, nil
|
|
}
|
|
case "BodyFat":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Body Fat")
|
|
|
|
return titleTranslated, true, passValueFunction, "/4", noResponseTranslated, nil
|
|
}
|
|
case "Height":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Height")
|
|
|
|
unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("centimeters")
|
|
unitsWithPadding := " " + unitsTranslated
|
|
|
|
return titleTranslated, true, roundNumberFunction, unitsWithPadding, noResponseTranslated, nil
|
|
}
|
|
case "Sex":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Sex")
|
|
|
|
return titleTranslated, false, translateValueFunction, "", noResponseTranslated, nil
|
|
}
|
|
case "Age":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Age")
|
|
|
|
unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Years Old")
|
|
unitsWithPadding := " " + unitsTranslated
|
|
|
|
return titleTranslated, true, passValueFunction, unitsWithPadding, noResponseTranslated, nil
|
|
}
|
|
case "IsSameSex":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Is Same Sex")
|
|
|
|
return titleTranslated, false, translateValueFunction, "", unknownTranslated, nil
|
|
}
|
|
case "OffspringProbabilityOfAnyMonogenicDisease":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Offspring Probability Of Any Monogenic Disease")
|
|
|
|
return titleTranslated, true, formatPercentageFunction, "", unknownTranslated, nil
|
|
}
|
|
case "TotalPolygenicDiseaseRiskScore":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Total Polygenic Disease Risk Score")
|
|
|
|
return titleTranslated, true, passValueFunction, "/100", noResponseTranslated, nil
|
|
}
|
|
case "OffspringTotalPolygenicDiseaseRiskScore":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Offspring Total Polygenic Disease Risk Score")
|
|
|
|
return titleTranslated, true, passValueFunction, "/100", unknownTranslated, nil
|
|
}
|
|
case "23andMe_AncestryComposition":{
|
|
// There is no way to display this as text, we use the gui instead
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("23andMe Ancestry Composition")
|
|
|
|
return titleTranslated, false, passValueFunction, "", noResponseTranslated, nil
|
|
}
|
|
case "23andMe_NeanderthalVariants":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("23andMe Neanderthal Variants")
|
|
|
|
unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Variants")
|
|
|
|
unitsWithPadding := " " + unitsTranslated
|
|
|
|
return titleTranslated, true, passValueFunction, unitsWithPadding, noResponseTranslated, nil
|
|
}
|
|
case "23andMe_OffspringNeanderthalVariants":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Offspring 23andMe Neanderthal Variants")
|
|
|
|
unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Variants")
|
|
|
|
unitsWithPadding := " " + unitsTranslated
|
|
|
|
return titleTranslated, true, passValueFunction, unitsWithPadding, unknownTranslated, nil
|
|
}
|
|
case "23andMe_MaternalHaplogroup":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("23andMe Maternal Haplogroup")
|
|
|
|
return titleTranslated, false, passValueFunction, "", noResponseTranslated, nil
|
|
}
|
|
case "23andMe_PaternalHaplogroup":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("23andMe Paternal Haplogroup")
|
|
|
|
return titleTranslated, false, passValueFunction, "", noResponseTranslated, nil
|
|
}
|
|
case "IsMyContact":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Is My Contact")
|
|
|
|
return titleTranslated, false, translateValueFunction, "", "", nil
|
|
}
|
|
case "IsLiked":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Is Liked")
|
|
|
|
return titleTranslated, false, translateValueFunction, "", "", nil
|
|
}
|
|
case "IsIgnored":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Is Ignored")
|
|
|
|
return titleTranslated, false, translateValueFunction, "", "", nil
|
|
}
|
|
case "HasRejectedMe":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Has Rejected Me")
|
|
|
|
return titleTranslated, false, translateValueFunction, "", "", nil
|
|
}
|
|
case "IHaveMessaged":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("I Have Messaged")
|
|
|
|
return titleTranslated, false, translateValueFunction, "", "", nil
|
|
}
|
|
case "HasMessagedMe":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Has Messaged Me")
|
|
|
|
return titleTranslated, false, translateValueFunction, "", "", nil
|
|
}
|
|
case "SearchTermsCount":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Search Terms Count")
|
|
|
|
unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Terms")
|
|
unitsWithPadding := " " + unitsTranslated
|
|
|
|
return titleTranslated, true, passValueFunction, unitsWithPadding, "", nil
|
|
}
|
|
case "Sexuality":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Sexuality")
|
|
|
|
return titleTranslated, false, translateValueFunction, "", noResponseTranslated, nil
|
|
}
|
|
case "PrimaryLocationCountry", "SecondaryLocationCountry":{
|
|
|
|
getTitleTranslated := func()string{
|
|
|
|
if (attributeName == "PrimaryLocationCountry"){
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Primary Country")
|
|
|
|
return titleTranslated
|
|
}
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Secondary Country")
|
|
|
|
return titleTranslated
|
|
}
|
|
|
|
titleTranslated := getTitleTranslated()
|
|
|
|
formatValueFunction := func(inputValue string)(string, error){
|
|
|
|
inputCountryIdentifier, err := helpers.ConvertStringToInt(inputValue)
|
|
if (err != nil) { return "", err }
|
|
|
|
countryObject, err := worldLocations.GetCountryObjectFromCountryIdentifier(inputCountryIdentifier)
|
|
if (err != nil) { return "", err }
|
|
|
|
countryPrimaryName := countryObject.NamesList[0]
|
|
|
|
countryPrimaryNameTranslated := translation.TranslateTextFromEnglishToMyLanguage(countryPrimaryName)
|
|
|
|
return countryPrimaryNameTranslated, nil
|
|
}
|
|
|
|
return titleTranslated, false, formatValueFunction, "", noResponseTranslated, nil
|
|
}
|
|
case "PrimaryLocationLatitude":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Primary Location Latitude")
|
|
|
|
return titleTranslated, true, roundNumberFunction, "°", noResponseTranslated, nil
|
|
}
|
|
case "PrimaryLocationLongitude":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Primary Location Longitude")
|
|
|
|
return titleTranslated, true, roundNumberFunction, "°", noResponseTranslated, nil
|
|
}
|
|
case "SecondaryLocationLatitude":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Secondary Location Latitude")
|
|
|
|
return titleTranslated, true, roundNumberFunction, "°", noResponseTranslated, nil
|
|
}
|
|
case "SecondaryLocationLongitude":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Secondary Location Longitude")
|
|
|
|
return titleTranslated, true, roundNumberFunction, "°", noResponseTranslated, nil
|
|
}
|
|
case "Distance":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Distance")
|
|
|
|
getMetricOrImperial := func()(string, error){
|
|
|
|
exists, metricOrImperial, err := globalSettings.GetSetting("MetricOrImperial")
|
|
if (err != nil) { return "", err }
|
|
if (exists == false){
|
|
return "Metric", nil
|
|
}
|
|
if (metricOrImperial != "Metric" && metricOrImperial != "Imperial"){
|
|
return "", errors.New("Global settings contains invalid metricOrImperial: " + metricOrImperial)
|
|
}
|
|
return metricOrImperial, nil
|
|
}
|
|
|
|
metricOrImperial, err := getMetricOrImperial()
|
|
if (err != nil) { return "", false, nil, "", "", err }
|
|
|
|
if (metricOrImperial == "Metric"){
|
|
|
|
unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Kilometers")
|
|
unitsWithPadding := " " + unitsTranslated
|
|
|
|
return "Distance", true, roundNumberFunction, unitsWithPadding, unknownTranslated, nil
|
|
}
|
|
|
|
// We convert to imperial
|
|
|
|
formatValueFunction := func(inputValue string)(string, error){
|
|
|
|
distanceKilometersFloat64, err := helpers.ConvertStringToFloat64(inputValue)
|
|
if (err != nil){
|
|
return "", errors.New("formatValueFunction called with invalid distance: " + inputValue)
|
|
}
|
|
|
|
distanceMiles, err := helpers.ConvertKilometersToMiles(distanceKilometersFloat64)
|
|
if (err != nil) { return "", err }
|
|
|
|
distanceMilesRounded, err := roundNumberFunction_Float64(distanceMiles)
|
|
if (err != nil) { return "", err }
|
|
|
|
return distanceMilesRounded, nil
|
|
}
|
|
|
|
unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Miles")
|
|
unitsWithPadding := " " + unitsTranslated
|
|
|
|
return titleTranslated, true, formatValueFunction, unitsWithPadding, unknownTranslated, nil
|
|
}
|
|
case "ProfileLanguage":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Profile Language")
|
|
|
|
formatValueFunction := func(inputValue string)(string, error){
|
|
|
|
languageInt, err := helpers.ConvertStringToInt(inputValue)
|
|
if (err != nil){
|
|
return "", errors.New("Database corrupt: Contains invalid profile language identifier: " + inputValue)
|
|
}
|
|
|
|
languageObject, err := worldLanguages.GetLanguageObjectFromLanguageIdentifier(languageInt)
|
|
if (err != nil){
|
|
return "", errors.New("Database corrupt: Contains invalid profile language identifier: " + inputValue)
|
|
}
|
|
|
|
languagePrimaryName := languageObject.NamesList[0]
|
|
|
|
languageNameTranslated := translation.TranslateTextFromEnglishToMyLanguage(languagePrimaryName)
|
|
|
|
return languageNameTranslated, nil
|
|
}
|
|
|
|
return titleTranslated, true, formatValueFunction, "", noResponseTranslated, nil
|
|
}
|
|
case "SeekiaVersion":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Seekia Version")
|
|
|
|
return titleTranslated, false, passValueFunction, "", "", nil
|
|
}
|
|
case "IdentityScore":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Identity Score")
|
|
|
|
return titleTranslated, true, passValueFunction, "", unknownTranslated, nil
|
|
}
|
|
case "Controversy":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Controversy")
|
|
|
|
return titleTranslated, true, passValueFunction, "", unknownTranslated, nil
|
|
}
|
|
case "BanAdvocates":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Ban Advocates")
|
|
|
|
unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Advocates")
|
|
|
|
unitsWithPadding := " " + unitsTranslated
|
|
|
|
return titleTranslated, true, passValueFunction, unitsWithPadding, unknownTranslated, nil
|
|
}
|
|
case "NumberOfReviews":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Number Of Reviews")
|
|
|
|
unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Reviews")
|
|
|
|
unitsWithPadding := " " + unitsTranslated
|
|
|
|
return titleTranslated, true, passValueFunction, unitsWithPadding, unknownTranslated, nil
|
|
}
|
|
case "MatchScore":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Match Score")
|
|
|
|
return titleTranslated, true, passValueFunction, "", unknownTranslated, nil
|
|
}
|
|
case "RacialSimilarity":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Racial Similarity")
|
|
|
|
return titleTranslated, true, passValueFunction, "", unknownTranslated, nil
|
|
}
|
|
case "EyeColorSimilarity":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Eye Color Similarity")
|
|
|
|
return titleTranslated, true, passValueFunction, "%", unknownTranslated, nil
|
|
}
|
|
case "EyeColorGenesSimilarity":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Eye Color Genes Similarity")
|
|
|
|
return titleTranslated, true, passValueFunction, "%", unknownTranslated, nil
|
|
}
|
|
case "HairColorSimilarity":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Hair Color Similarity")
|
|
|
|
return titleTranslated, true, passValueFunction, "%", unknownTranslated, nil
|
|
}
|
|
case "HairColorGenesSimilarity":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Hair Color Genes Similarity")
|
|
|
|
return titleTranslated, true, passValueFunction, "%", unknownTranslated, nil
|
|
}
|
|
case "SkinColorSimilarity":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Skin Color Similarity")
|
|
|
|
return titleTranslated, true, passValueFunction, "%", unknownTranslated, nil
|
|
}
|
|
case "SkinColorGenesSimilarity":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Skin Color Genes Similarity")
|
|
|
|
return titleTranslated, true, passValueFunction, "%", unknownTranslated, nil
|
|
}
|
|
case "HairTextureSimilarity":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Hair Texture Similarity")
|
|
|
|
return titleTranslated, true, passValueFunction, "%", unknownTranslated, nil
|
|
}
|
|
case "HairTextureGenesSimilarity":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Hair Texture Genes Similarity")
|
|
|
|
return titleTranslated, true, passValueFunction, "%", unknownTranslated, nil
|
|
}
|
|
case "FacialStructureGenesSimilarity":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Facial Structure Genes Similarity")
|
|
|
|
return titleTranslated, true, passValueFunction, "%", unknownTranslated, nil
|
|
}
|
|
case "EyeColorGenesSimilarity_NumberOfSimilarAlleles":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Eye Color Genes Similarity - Number Of Similar Alleles")
|
|
|
|
unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Alleles")
|
|
|
|
unitsWithPadding := " " + unitsTranslated
|
|
|
|
return titleTranslated, true, passValueFunction, unitsWithPadding, unknownTranslated, nil
|
|
}
|
|
case "SkinColorGenesSimilarity_NumberOfSimilarAlleles":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Skin Color Genes Similarity - Number Of Similar Alleles")
|
|
|
|
unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Alleles")
|
|
|
|
unitsWithPadding := " " + unitsTranslated
|
|
|
|
return titleTranslated, true, passValueFunction, unitsWithPadding, unknownTranslated, nil
|
|
}
|
|
case "HairColorGenesSimilarity_NumberOfSimilarAlleles":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Hair Color Genes Similarity - Number Of Similar Alleles")
|
|
|
|
unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Alleles")
|
|
|
|
unitsWithPadding := " " + unitsTranslated
|
|
|
|
return titleTranslated, true, passValueFunction, unitsWithPadding, unknownTranslated, nil
|
|
}
|
|
case "HairTextureGenesSimilarity_NumberOfSimilarAlleles":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Hair Texture Genes Similarity - Number Of Similar Alleles")
|
|
|
|
unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Alleles")
|
|
|
|
unitsWithPadding := " " + unitsTranslated
|
|
|
|
return titleTranslated, true, passValueFunction, unitsWithPadding, unknownTranslated, nil
|
|
}
|
|
case "FacialStructureGenesSimilarity_NumberOfSimilarAlleles":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Facial Structure Genes Similarity - Number Of Similar Alleles")
|
|
|
|
unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Alleles")
|
|
|
|
unitsWithPadding := " " + unitsTranslated
|
|
|
|
return titleTranslated, true, passValueFunction, unitsWithPadding, unknownTranslated, nil
|
|
}
|
|
case "23andMe_AncestralSimilarity":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("23andMe Ancestral Similarity")
|
|
|
|
return titleTranslated, true, passValueFunction, "%", unknownTranslated, nil
|
|
}
|
|
case "23andMe_MaternalHaplogroupSimilarity":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("23andMe Maternal Haplogroup Similarity")
|
|
|
|
return titleTranslated, true, passValueFunction, "%", unknownTranslated, nil
|
|
}
|
|
case "23andMe_PaternalHaplogroupSimilarity":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("23andMe Paternal Haplogroup Similarity")
|
|
|
|
return titleTranslated, true, passValueFunction, "%", unknownTranslated, nil
|
|
}
|
|
case "OffspringProbabilityOfAnyMonogenicDisease_NumberOfDiseasesTested":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Offspring Probability Of Any Monogenic Disease - Number Of Diseases Tested")
|
|
|
|
unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Diseases")
|
|
|
|
unitsWithPadding := " " + unitsTranslated
|
|
|
|
return titleTranslated, true, passValueFunction, unitsWithPadding, "", nil
|
|
}
|
|
case "TotalPolygenicDiseaseRiskScore_NumberOfDiseasesTested":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Total Polygenic Disease Risk Score - Number Of Diseases Tested")
|
|
|
|
unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Diseases")
|
|
|
|
unitsWithPadding := " " + unitsTranslated
|
|
|
|
return titleTranslated, true, passValueFunction, unitsWithPadding, "", nil
|
|
}
|
|
case "OffspringTotalPolygenicDiseaseRiskScore_NumberOfDiseasesTested":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Offspring Total Polygenic Disease Risk Score - Number Of Diseases Tested")
|
|
|
|
unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Diseases")
|
|
|
|
unitsWithPadding := " " + unitsTranslated
|
|
|
|
return titleTranslated, true, passValueFunction, unitsWithPadding, "", nil
|
|
}
|
|
}
|
|
|
|
attributeHasMonogenicDiseasePrefix := strings.HasPrefix(attributeName, "MonogenicDisease_")
|
|
if (attributeHasMonogenicDiseasePrefix == true){
|
|
|
|
attributeNameWithoutPrefix := strings.TrimPrefix(attributeName, "MonogenicDisease_")
|
|
|
|
hasSuffix := strings.HasSuffix(attributeNameWithoutPrefix, "_ProbabilityOfPassingAVariant")
|
|
if (hasSuffix == true){
|
|
|
|
monogenicDiseaseNameWithUnderscores := strings.TrimSuffix(attributeNameWithoutPrefix, "_ProbabilityOfPassingAVariant")
|
|
|
|
monogenicDiseaseName := strings.ReplaceAll(monogenicDiseaseNameWithUnderscores, "_", " ")
|
|
|
|
title := monogenicDiseaseName + " Probability Of Passing A Variant"
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage(title)
|
|
|
|
return titleTranslated, true, formatPercentageFunction, "", noResponseTranslated, nil
|
|
}
|
|
|
|
hasSuffix = strings.HasSuffix(attributeNameWithoutPrefix, "_NumberOfVariantsTested")
|
|
if (hasSuffix == true){
|
|
|
|
monogenicDiseaseNameWithUnderscores := strings.TrimSuffix(attributeNameWithoutPrefix, "_NumberOfVariantsTested")
|
|
|
|
monogenicDiseaseName := strings.ReplaceAll(monogenicDiseaseNameWithUnderscores, "_", " ")
|
|
|
|
title := monogenicDiseaseName + " Number Of Variants Tested"
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage(title)
|
|
|
|
return titleTranslated, true, passValueFunction, "Variants", noResponseTranslated, nil
|
|
}
|
|
|
|
return "", false, nil, "", "", errors.New("GetProfileAttributeDisplayInfo called with unknown attributeName: " + attributeName)
|
|
}
|
|
|
|
hasLocusValuePrefix := strings.HasPrefix(attributeName, "LocusValue_rs")
|
|
if (hasLocusValuePrefix == true){
|
|
|
|
locusRSID := strings.TrimPrefix(attributeName, "LocusValue_")
|
|
|
|
locusTranslated := translation.TranslateTextFromEnglishToMyLanguage("Locus")
|
|
valueTranslated := translation.TranslateTextFromEnglishToMyLanguage("Value")
|
|
|
|
titleTranslated := locusTranslated + " " + locusRSID + " " + valueTranslated
|
|
|
|
return titleTranslated, false, passValueFunction, "", noResponseTranslated, nil
|
|
}
|
|
|
|
|
|
return "", false, nil, "", "", errors.New("GetProfileAttributeDisplayInfo called with unknown attributeName: " + attributeName)
|
|
}
|
|
|
|
|