1131 lines
38 KiB
Go
1131 lines
38 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, 1 centimeter, 2 centimeters
|
|
|
|
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 := helpers.ConvertIntToString(int(valueFloat64))
|
|
|
|
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 "CreationTime":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Creation 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 "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",
|
|
"PetsRating",
|
|
"DogsRating",
|
|
"CatsRating":{
|
|
|
|
thingName := strings.TrimSuffix(attributeName, "Rating")
|
|
|
|
attributeTitle := thingName + " 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",
|
|
"PredictedHeight",
|
|
"OffspringPredictedHeight":{
|
|
|
|
getAttributeTitle := func()string{
|
|
|
|
switch attributeName{
|
|
case "Height":{
|
|
return "Height"
|
|
}
|
|
case "PredictedHeight":{
|
|
return "Predicted Height"
|
|
}
|
|
}
|
|
|
|
return "Offspring Predicted Height"
|
|
}
|
|
|
|
attributeTitle := getAttributeTitle()
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage(attributeTitle)
|
|
|
|
getMyMetricOrImperial := 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("Malformed globalSettings: Invalid metricOrImperial: " + metricOrImperial)
|
|
}
|
|
|
|
return metricOrImperial, nil
|
|
}
|
|
|
|
myMetricOrImperial, err := getMyMetricOrImperial()
|
|
if (err != nil) { return "", false, nil, "", "", err }
|
|
|
|
formatHeightFunction := func(input string)(string, error){
|
|
|
|
inputCentimeters, err := helpers.ConvertStringToFloat64(input)
|
|
if (err != nil) { return "", err }
|
|
|
|
if (myMetricOrImperial == "Metric"){
|
|
|
|
centimetersString := helpers.ConvertFloat64ToStringRounded(inputCentimeters, 2)
|
|
|
|
return centimetersString, nil
|
|
}
|
|
|
|
feetInchesString, err := helpers.ConvertCentimetersToFeetInchesTranslatedString(inputCentimeters)
|
|
if (err != nil) { return "", err }
|
|
|
|
return feetInchesString, nil
|
|
}
|
|
|
|
getUnitsTranslated := func()string{
|
|
|
|
if (myMetricOrImperial == "Metric"){
|
|
|
|
unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Centimeters")
|
|
|
|
return unitsTranslated
|
|
}
|
|
|
|
// There are no units to add
|
|
// The value is in the format "5 feet, 10 inches"
|
|
|
|
return ""
|
|
}
|
|
|
|
unitsTranslated := getUnitsTranslated()
|
|
|
|
unitsWithPadding := " " + unitsTranslated
|
|
|
|
getUnavailableText := func()string{
|
|
if (attributeName == "Height"){
|
|
return noResponseTranslated
|
|
}
|
|
return unknownTranslated
|
|
}
|
|
|
|
unavailableText := getUnavailableText()
|
|
|
|
return titleTranslated, true, formatHeightFunction, unitsWithPadding, unavailableText, 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 "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":{
|
|
|
|
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 "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
|
|
}
|
|
case "AutismRiskScore",
|
|
"OffspringAutismRiskScore",
|
|
"ObesityRiskScore",
|
|
"OffspringObesityRiskScore",
|
|
"HomosexualnessScore",
|
|
"OffspringHomosexualnessScore":{
|
|
|
|
getAttributeTitle := func()(string, error){
|
|
|
|
switch attributeName{
|
|
|
|
case "AutismRiskScore":{
|
|
return "Autism Risk Score", nil
|
|
}
|
|
case "OffspringAutismRiskScore":{
|
|
return "Offspring Autism Risk Score", nil
|
|
}
|
|
case "ObesityRiskScore":{
|
|
return "Obesity Risk Score", nil
|
|
}
|
|
case "OffspringObesityRiskScore":{
|
|
return "Offspring Obesity Risk Score", nil
|
|
}
|
|
case "HomosexualnessScore":{
|
|
return "Homosexualness Score", nil
|
|
}
|
|
case "OffspringHomosexualnessScore":{
|
|
return "Offspring Homosexualness Score", nil
|
|
}
|
|
}
|
|
|
|
return "", errors.New("getAttributeTitle reached with unknown attributeName: " + attributeName)
|
|
}
|
|
|
|
attributeTitle, err := getAttributeTitle()
|
|
if (err != nil) { return "", false, nil, "", "", err }
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage(attributeTitle)
|
|
|
|
return titleTranslated, true, passValueFunction, "/10", unknownTranslated, nil
|
|
}
|
|
case "PredictedEyeColor":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Predicted Eye Color")
|
|
|
|
return titleTranslated, false, translateValueFunction, "", unknownTranslated, nil
|
|
}
|
|
case "PredictedHairTexture":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Predicted Hair Texture")
|
|
|
|
return titleTranslated, false, translateValueFunction, "", unknownTranslated, nil
|
|
}
|
|
case "PredictedLactoseTolerance":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Predicted Lactose Tolerance")
|
|
|
|
return titleTranslated, false, translateValueFunction, "", unknownTranslated, nil
|
|
}
|
|
case "OffspringBlueEyesProbability":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Offspring Blue Eyes Probability")
|
|
|
|
return titleTranslated, false, formatPercentageFunction, "%", unknownTranslated, nil
|
|
}
|
|
case "OffspringGreenEyesProbability":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Offspring Green Eyes Probability")
|
|
|
|
return titleTranslated, false, formatPercentageFunction, "%", unknownTranslated, nil
|
|
}
|
|
case "OffspringHazelEyesProbability":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Offspring Hazel Eyes Probability")
|
|
|
|
return titleTranslated, false, formatPercentageFunction, "%", unknownTranslated, nil
|
|
}
|
|
case "OffspringBrownEyesProbability":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Offspring Brown Eyes Probability")
|
|
|
|
return titleTranslated, false, formatPercentageFunction, "%", unknownTranslated, nil
|
|
}
|
|
case "OffspringLactoseToleranceProbability":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Offspring Lactose Tolerance Probability")
|
|
|
|
return titleTranslated, false, formatPercentageFunction, "%", unknownTranslated, nil
|
|
}
|
|
case "OffspringStraightHairProbability":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Offspring Straight Hair Probability")
|
|
|
|
return titleTranslated, false, formatPercentageFunction, "%", unknownTranslated, nil
|
|
}
|
|
case "OffspringCurlyHairProbability":{
|
|
|
|
titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Offspring Curly Hair Probability")
|
|
|
|
return titleTranslated, false, formatPercentageFunction, "%", unknownTranslated, 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
|
|
}
|
|
|
|
hasLocusIsPhasedPrefix := strings.HasPrefix(attributeName, "LocusIsPhased_rs")
|
|
if (hasLocusIsPhasedPrefix == true){
|
|
|
|
locusRSID := strings.TrimPrefix(attributeName, "LocusIsPhased_")
|
|
|
|
locusTranslated := translation.TranslateTextFromEnglishToMyLanguage("Locus")
|
|
isPhasedTranslated := translation.TranslateTextFromEnglishToMyLanguage("Is Phased")
|
|
|
|
titleTranslated := locusTranslated + " " + locusRSID + " " + isPhasedTranslated
|
|
|
|
return titleTranslated, false, translateValueFunction, "", noResponseTranslated, nil
|
|
}
|
|
|
|
return "", false, nil, "", "", errors.New("GetProfileAttributeDisplayInfo called with unknown attributeName: " + attributeName)
|
|
}
|
|
|
|
|