Beispiel #1
0
 /*********
 ** Public methods
 *********/
 /// <summary>Construct an instance.</summary>
 /// <param name="key">The field key.</param>
 /// <param name="value">The field value.</param>
 /// <param name="isDefault">Whether this field should only be applied if it's not already set.</param>
 /// <param name="lowerVersion">The lowest version in the range, or <c>null</c> for all past versions.</param>
 /// <param name="upperVersion">The highest version in the range, or <c>null</c> for all future versions.</param>
 public ModDataField(ModDataFieldKey key, string value, bool isDefault, ISemanticVersion lowerVersion, ISemanticVersion upperVersion)
 {
     this.Key          = key;
     this.Value        = value;
     this.IsDefault    = isDefault;
     this.LowerVersion = lowerVersion;
     this.UpperVersion = upperVersion;
 }
Beispiel #2
0
        /*********
        ** Private methods
        *********/
        /// <summary>Get whether a manifest field has a meaningful value for the purposes of enforcing <see cref="IsDefault"/>.</summary>
        /// <param name="manifest">The mod manifest.</param>
        /// <param name="key">The field key matching <see cref="ModDataFieldKey"/>.</param>
        private bool HasFieldValue(IManifest manifest, ModDataFieldKey key)
        {
            switch (key)
            {
            // update key
            case ModDataFieldKey.UpdateKey:
                return(manifest.UpdateKeys.Any(p => !string.IsNullOrWhiteSpace(p)));

            // non-manifest fields
            case ModDataFieldKey.StatusReasonPhrase:
            case ModDataFieldKey.StatusReasonDetails:
            case ModDataFieldKey.Status:
                return(false);

            default:
                return(false);
            }
        }
Beispiel #3
0
        /*********
        ** Public methods
        *********/
        /// <summary>Get a parsed representation of the <see cref="Fields"/>.</summary>
        public IEnumerable <ModDataField> GetFields()
        {
            foreach (KeyValuePair <string, string> pair in this.Fields)
            {
                // init fields
                string           packedKey    = pair.Key;
                string           value        = pair.Value;
                bool             isDefault    = false;
                ISemanticVersion lowerVersion = null;
                ISemanticVersion upperVersion = null;

                // parse
                string[]        parts    = packedKey.Split('|').Select(p => p.Trim()).ToArray();
                ModDataFieldKey fieldKey = (ModDataFieldKey)Enum.Parse(typeof(ModDataFieldKey), parts.Last(), ignoreCase: true);
                foreach (string part in parts.Take(parts.Length - 1))
                {
                    // 'default'
                    if (part.Equals("Default", StringComparison.OrdinalIgnoreCase))
                    {
                        isDefault = true;
                        continue;
                    }

                    // version range
                    if (part.Contains("~"))
                    {
                        string[] versionParts = part.Split(new[] { '~' }, 2);
                        lowerVersion = versionParts[0] != "" ? new SemanticVersion(versionParts[0]) : null;
                        upperVersion = versionParts[1] != "" ? new SemanticVersion(versionParts[1]) : null;
                        continue;
                    }

                    // single version
                    lowerVersion = new SemanticVersion(part);
                    upperVersion = new SemanticVersion(part);
                }

                yield return(new ModDataField(fieldKey, value, isDefault, lowerVersion, upperVersion));
            }
        }