Skip to content

Commit

Permalink
imp - Filter out default types
Browse files Browse the repository at this point in the history
---

We need to filter out default types.

---

Type: imp
Breaking: False
Doc Required: False
Part: 1/1
  • Loading branch information
AptiviCEO committed Mar 31, 2024
1 parent 1d12301 commit c1758be
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 12 deletions.
6 changes: 3 additions & 3 deletions VisualCard.Tests/ContactData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -102,9 +102,9 @@ public static class ContactData
FN:John Sanders
NOTE:Note test for VisualCard
N:Sanders;John;;;
TEL;TYPE=CELL:495-522-3560
ADR;TYPE=HOME:;;Los Angeles;;;;USA
EMAIL;TYPE=HOME:[email protected]
TEL:495-522-3560
ADR:;;Los Angeles;;;;USA
EMAIL:[email protected]
END:VCARD
"""
Expand Down
10 changes: 8 additions & 2 deletions VisualCard/Parts/Card.cs
Original file line number Diff line number Diff line change
Expand Up @@ -159,13 +159,16 @@ public string SaveToString()

// Get the prefix
string prefix = VcardParserTools.GetPrefixFromPartsArrayEnum(partsArrayEnum);
var type = VcardParserTools.GetPartType(prefix);
string defaultType = type.defaultType;
string defaultValue = type.defaultValue;

// Now, assemble the line
foreach (var part in array)
{
var partBuilder = new StringBuilder();
string partRepresentation = part.ToStringVcardInternal(version);
string partArguments = CardBuilderTools.BuildArguments(part, version);
string partArguments = CardBuilderTools.BuildArguments(part, version, defaultType, defaultValue);
string[] partArgumentsLines = partArguments.SplitNewLines();
partBuilder.Append($"{prefix}");
partBuilder.Append($"{partArguments}");
Expand All @@ -185,11 +188,14 @@ public string SaveToString()

// Get the prefix
string prefix = VcardParserTools.GetPrefixFromPartsEnum(partsEnum);
var type = VcardParserTools.GetPartType(prefix);
string defaultType = type.defaultType;
string defaultValue = type.defaultValue;

// Now, assemble the line
var partBuilder = new StringBuilder();
string partRepresentation = part.ToStringVcardInternal(version);
string partArguments = CardBuilderTools.BuildArguments(part, version);
string partArguments = CardBuilderTools.BuildArguments(part, version, defaultType, defaultValue);
string[] partArgumentsLines = partArguments.SplitNewLines();
partBuilder.Append($"{prefix}");
partBuilder.Append($"{partArguments}");
Expand Down
17 changes: 10 additions & 7 deletions VisualCard/Parts/CardBuilderTools.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
//

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using VisualCard.Parsers;
Expand All @@ -28,20 +27,24 @@ namespace VisualCard.Parts
{
internal static class CardBuilderTools
{
internal static string BuildArguments(BaseCardPartInfo partInfo, Version cardVersion)
internal static string BuildArguments(BaseCardPartInfo partInfo, Version cardVersion, string defaultType, string defaultValue)
{
// Filter the list of types and values first
string[] finalElementTypes = partInfo.ElementTypes.Where((type) => !type.Equals(defaultType, StringComparison.OrdinalIgnoreCase)).ToArray();
string finalValue = partInfo.ValueType.Equals(defaultValue, StringComparison.OrdinalIgnoreCase) ? "" : partInfo.ValueType;

// Check to see if we've been provided arguments
bool installAltId = partInfo.AltId >= 0 && partInfo.Arguments.Length > 0 && cardVersion.Major >= 4;
bool noSemicolon = partInfo.AltId == 0 && partInfo.Arguments.Length == 0 && partInfo.ElementTypes.Length == 0 && string.IsNullOrEmpty(partInfo.ValueType);
bool noSemicolon = partInfo.AltId == 0 && partInfo.Arguments.Length == 0 && finalElementTypes.Length == 0 && string.IsNullOrEmpty(finalValue);
string xNonstandardName = partInfo is XNameInfo xName ? xName.XKeyName : "";
if (noSemicolon)
return xNonstandardName + VcardConstants._argumentDelimiter.ToString();

// Now, initialize the argument builder
StringBuilder argumentsBuilder = new(xNonstandardName + VcardConstants._fieldDelimiter.ToString());
bool installArguments = partInfo.Arguments.Length > 0;
bool installElementTypes = partInfo.ElementTypes.Length > 0;
bool installValueType = !string.IsNullOrEmpty(partInfo.ValueType);
bool installElementTypes = finalElementTypes.Length > 0;
bool installValueType = !string.IsNullOrEmpty(finalValue);

// First, install the AltId parameter if it exists
if (installAltId)
Expand All @@ -60,7 +63,7 @@ internal static string BuildArguments(BaseCardPartInfo partInfo, Version cardVer
// Then, install the element types parameter if it exists
if (installElementTypes)
{
argumentsBuilder.Append(VcardConstants._typeArgumentSpecifier + string.Join(",", partInfo.ElementTypes));
argumentsBuilder.Append(VcardConstants._typeArgumentSpecifier + string.Join(",", finalElementTypes));
noSemicolon = !installArguments && !installValueType;
if (noSemicolon)
{
Expand All @@ -74,7 +77,7 @@ internal static string BuildArguments(BaseCardPartInfo partInfo, Version cardVer
// Then, install the value type parameter if it exists
if (installValueType)
{
argumentsBuilder.Append(VcardConstants._valueArgumentSpecifier + string.Join(",", partInfo.ValueType));
argumentsBuilder.Append(VcardConstants._valueArgumentSpecifier + string.Join(",", finalValue));
noSemicolon = !installArguments;
if (noSemicolon)
{
Expand Down

0 comments on commit c1758be

Please sign in to comment.