private void LoadFromXml(XDocument document) { var rootElem = document.Root; if (rootElem.Name != "LEGOPrimitive") { throw new InvalidDataException(); } rootElem.TryGetIntAttribute("versionMajor", out int vMaj); rootElem.TryGetIntAttribute("versionMinor", out int vMin); FileVersion = new VersionInfo(vMaj, vMin); ExtraElements.Clear(); foreach (var element in rootElem.Elements()) { try { ReadPrimitiveSection(element); } catch (Exception ex) { throw new Exception($"Error while reading {element.Name.LocalName}", ex); } } if (PhysicsAttributes == null) { PhysicsAttributes = new PhysicsAttributes(); } if (ID == 0 && Aliases.Any()) { ID = Aliases.First(); } Comments = document.Nodes().OfType <XComment>().FirstOrDefault()?.Value ?? string.Empty; }
public bool AliasContains(string str) { if (str == "") { return(Aliases.Count == 0); } return(Aliases.Any(s => s.ToLower().Contains(str.ToLower()))); }
public string ToHelpText(bool cropText = false) { StringBuilder cmd = new StringBuilder(Name); if (Aliases.Any()) { cmd.AppendFormat("/{0}", string.Join("/", Aliases)); } cmd.AppendFormat(" {0}", string.Join(" ", Parameters)); return(cropText ? $"{cmd}" : $"{cmd,-32} - {Description}"); }
private void LoadJson([NotNull] JObject bestLanguageR, JObject backupLanguageR) { //Here we have two pieces of JSON. One in local language and one in the default language (English). //We will populate with the best language frst and then fill in any gaps with the backup Language LoadJson(bestLanguageR); //backupLanguageR should be a cachedSeries of name/value pairs (ie a JArray of JPropertes) //TVDB asserts that name and overview are the fields that are localised string s = (string)backupLanguageR["seriesName"]; if (string.IsNullOrWhiteSpace(Name) && s != null) { Name = System.Web.HttpUtility.HtmlDecode(s); } string o = (string)backupLanguageR["overview"]; if (string.IsNullOrWhiteSpace(Overview) && o != null) { Overview = System.Web.HttpUtility.HtmlDecode(o); } //Looking at the data then the aliases, banner and runtime are also different by language if (!Aliases.Any()) { JToken?aliasesToken = backupLanguageR["aliases"]; if (aliasesToken is null) { throw new SourceConsistencyException($"Can not find aliases in {backupLanguageR}", TVDoc.ProviderType.TheTVDB); } Aliases = aliasesToken.Select(x => x.Value <string>()).ToList(); } if (string.IsNullOrWhiteSpace(Runtime)) { Runtime = (string)backupLanguageR["runtime"]; } if (string.IsNullOrWhiteSpace(BannerString)) { BannerString = (string)backupLanguageR["banner"]; } }
public bool NameMatches(string name) { if (IsValueProperty) { return(false); } var upperName = name.ToUpperInvariant(); if (Name == name || (!CaseSensitive && upperName == Name.ToUpperInvariant())) { return(true); } return(!CaseSensitive ? Aliases.Any(alias => alias.ToUpper() == upperName) : Aliases.Any(alias => alias == name)); }
public string ToHelpText(bool singleCommand, bool cropText = false) { StringBuilder cmd = new(Name); if (Aliases.Any()) { cmd.AppendFormat("/{0}", string.Join("/", Aliases)); } cmd.AppendFormat(" {0}", string.Join(" ", Parameters)); if (singleCommand) { string parameterPreText = Parameters.Count == 0 ? "" : Environment.NewLine; string parameterText = $"{parameterPreText}{string.Join("\n", Parameters.Select(p => $"{p,-47} - {p.GetDescription()}"))}"; return(cropText ? $"{cmd}" : $"{cmd,-32} - {Description} {parameterText}"); } return(cropText ? $"{cmd}" : $"{cmd,-32} - {Description}"); }
public XElement SerializeToXml() { var rootElem = new XElement("LEGOPrimitive", new XAttribute("versionMajor", FileVersion.Major), new XAttribute("versionMinor", FileVersion.Minor)); var annotations = rootElem.AddElement("Annotations"); if (!Aliases.Contains(ID) && ID > 0) { Aliases.Add(ID); } if (Aliases.Any()) { annotations.Add(new XElement("Annotation", new XAttribute("aliases", string.Join(";", Aliases)))); } annotations.Add(new XElement("Annotation", new XAttribute("designname", Name))); if (MainGroup != null) { annotations.Add(new XElement("Annotation", new XAttribute("maingroupid", MainGroup.ID))); annotations.Add(new XElement("Annotation", new XAttribute("maingroupname", MainGroup.Name))); } if (Platform != null) { annotations.Add(new XElement("Annotation", new XAttribute("platformid", Platform.ID))); annotations.Add(new XElement("Annotation", new XAttribute("platformname", Platform.Name))); } annotations.Add(new XElement("Annotation", new XAttribute("version", PartVersion))); foreach (var extra in ExtraAnnotations) { annotations.Add(new XElement("Annotation", new XAttribute(extra.Key, extra.Value))); } if (Collisions.Any()) { rootElem.Add(new XElement("Collision", Collisions.Select(x => x.SerializeToXml()))); } if (Connectors.Any()) { rootElem.Add(new XElement("Connectivity", Connectors.Select(x => x.SerializeToXml()))); } if (FlexBones.Any()) { rootElem.Add(new XElement("Flex", FlexBones.Select(x => x.SerializeToXml()))); } if (PhysicsAttributes != null && !PhysicsAttributes.IsEmpty) { rootElem.Add(PhysicsAttributes.SerializeToXml()); } if (Bounding != null) { var boundingElem = rootElem.AddElement("Bounding"); boundingElem.Add(Bounding.SerializeToXml("AABB")); } if (GeometryBounding != null) { var boundingElem = rootElem.AddElement("GeometryBounding"); boundingElem.Add(GeometryBounding.SerializeToXml("AABB")); } if (SubMaterials != null) { var decorationElem = rootElem.AddElement("Decoration"); decorationElem.Add(new XAttribute("faces", SubMaterials.Length)); decorationElem.Add(new XAttribute("subMaterialRedirectLookupTable", string.Join(",", SubMaterials))); } if (DefaultOrientation != null) { rootElem.Add(new XElement("DefaultOrientation", DefaultOrientation.ToXmlAttributes())); } if (DefaultCamera != null) { rootElem.Add(XmlHelper.DefaultSerialize(DefaultCamera, "DefaultCamera")); } foreach (var elem in rootElem.Descendants("Custom2DField")) { int depth = elem.AncestorsAndSelf().Count(); elem.Value = elem.Value.Indent(depth, " "); elem.Value += StringExtensions.Tab(depth - 1, " "); //fixes the closing tag indentation } if (ExtraElements != null) { foreach (var elem in ExtraElements) { if (elem.Parent != null) { var parentElem = rootElem.Descendants().FirstOrDefault(x => x.Name.LocalName == elem.Parent.Name.LocalName); //if (parentElem != null) // parentElem.Add(elem.) } else { rootElem.Add(elem); } } } return(rootElem); }
// ReSharper disable once FunctionComplexityOverflow public void Merge([NotNull] CachedMovieInfo o) { if (o.IsSearchResultOnly && !IsSearchResultOnly) { return; } if (o.TvdbCode != TvdbCode && o.TvMazeCode != TvMazeCode) { return; // that's not us! } if (o.TvMazeCode != -1 && TvMazeCode != o.TvMazeCode) { TvMazeCode = o.TvMazeCode; } if (o.TvdbCode != -1 && TvdbCode != o.TvdbCode) { TvdbCode = o.TvdbCode; } if (o.TmdbCode != -1 && TmdbCode != o.TmdbCode) { TmdbCode = o.TmdbCode; } if (o.SrvLastUpdated != 0 && o.SrvLastUpdated < SrvLastUpdated) { return; // older!? } if (!o.IsSearchResultOnly) { IsSearchResultOnly = false; } bool currentLanguageNotSet = LanguageId == -1; string bestLanguageCode = TargetLanguageCode ?? TVSettings.Instance.PreferredLanguageCode; Language optimaLanguage = LocalCache.Instance.GetLanguageFromCode(bestLanguageCode); bool newLanguageOptimal = !(optimaLanguage is null) && o.LanguageId == optimaLanguage.Id; bool useNewDataOverOld = currentLanguageNotSet || newLanguageOptimal; SrvLastUpdated = o.SrvLastUpdated; // take the best bits of "o" // "o" is always newer/better than us, if there is a choice Name = ChooseBetter(Name, useNewDataOverOld, o.Name); Imdb = ChooseBetter(Imdb, useNewDataOverOld, o.Imdb); WebUrl = ChooseBetter(WebUrl, useNewDataOverOld, o.WebUrl); OfficialUrl = ChooseBetter(OfficialUrl, useNewDataOverOld, o.OfficialUrl); ShowLanguage = ChooseBetter(ShowLanguage, useNewDataOverOld, o.ShowLanguage); Type = ChooseBetter(Type, useNewDataOverOld, o.Type); Overview = ChooseBetter(Overview, useNewDataOverOld, o.Overview); PosterUrl = ChooseBetter(PosterUrl, useNewDataOverOld, o.PosterUrl); FanartUrl = ChooseBetter(FanartUrl, useNewDataOverOld, o.FanartUrl); TrailerUrl = ChooseBetter(TrailerUrl, useNewDataOverOld, o.TrailerUrl); Network = ChooseBetter(Network, useNewDataOverOld, o.Network); Runtime = ChooseBetter(Runtime, useNewDataOverOld, o.Runtime); SeriesId = ChooseBetter(SeriesId, useNewDataOverOld, o.SeriesId); Status = ChooseBetterStatus(Status, useNewDataOverOld, o.Status); ContentRating = ChooseBetter(ContentRating, useNewDataOverOld, o.ContentRating); Slug = ChooseBetter(Slug, useNewDataOverOld, o.Slug); CollectionName = ChooseBetter(CollectionName, useNewDataOverOld, o.CollectionName); TwitterId = ChooseBetter(TwitterId, useNewDataOverOld, o.TwitterId); InstagramId = ChooseBetter(InstagramId, useNewDataOverOld, o.InstagramId); FacebookId = ChooseBetter(FacebookId, useNewDataOverOld, o.FacebookId); TagLine = ChooseBetter(TagLine, useNewDataOverOld, o.TagLine); if (useNewDataOverOld && o.CollectionId.HasValue) { CollectionId = o.CollectionId; } if (o.FirstAired.HasValue && (useNewDataOverOld || !FirstAired.HasValue)) { FirstAired = o.FirstAired; } if (useNewDataOverOld && o.SiteRating > 0) { SiteRating = o.SiteRating; } if (useNewDataOverOld && o.SiteRatingVotes > 0) { SiteRatingVotes = o.SiteRatingVotes; } bool useNewAliases = o.Aliases.Any() && useNewDataOverOld; if (!Aliases.Any() || useNewAliases) { Aliases = o.Aliases; } bool useNewGenres = o.Genres.Any() && useNewDataOverOld; if (!Genres.Any() || useNewGenres) { Genres = o.Genres; } if (useNewDataOverOld) { LanguageId = o.LanguageId; } Dirty = o.Dirty; IsSearchResultOnly = o.IsSearchResultOnly; }
public bool Match(string name) => name.Equals(Name, StringComparison.OrdinalIgnoreCase) || name.Equals(CppName, StringComparison.OrdinalIgnoreCase) || Aliases.Any(x => name.Equals(x, StringComparison.OrdinalIgnoreCase));
public bool HasAlias(string alias) { return(Aliases.Any(a => a.Equals(alias, StringComparison.OrdinalIgnoreCase))); }
private void LoadFromXml(XDocument document) { var rootElem = document.Root; if (rootElem.Name != "LXFML") { throw new InvalidDataException(); } rootElem.TryGetIntAttribute("versionMajor", out int vMaj); rootElem.TryGetIntAttribute("versionMinor", out int vMin); FileVersion = new VersionInfo(vMaj, vMin); if (rootElem.HasElement("Meta", out XElement metaElem)) { foreach (var annotationElem in metaElem.Elements("Annotation")) { var annotationAttr = annotationElem.FirstAttribute; string annotationName = annotationAttr.Name.LocalName; string value = annotationAttr.Value; //bool handled = true; switch (annotationName) { case "aliases": var aliases = value.Split(';'); for (int i = 0; i < aliases.Length; i++) { if (int.TryParse(aliases[i], out int aliasID)) { Aliases.Add(aliasID); } } break; case "designname": Name = value; break; case "maingroupid": if (MainGroup == null) { MainGroup = new MainGroup(); } MainGroup.ID = int.Parse(value); break; case "maingroupname": if (MainGroup == null) { MainGroup = new MainGroup(); } MainGroup.Name = value; break; case "platformid": if (Platform == null) { Platform = new Platform(); } Platform.ID = int.Parse(value); break; case "platformname": if (Platform == null) { Platform = new Platform(); } Platform.Name = value; break; //default: // handled = false; // break; } //if (!handled) // ExtraAnnotations.Add(annotationName, value); } } Bricks.Clear(); if (rootElem.HasElement("Bricks", out XElement bricksElem)) { foreach (var brickElem in bricksElem.Elements("Brick")) { var brick = new Brick(); brick.LoadFromXml(brickElem); Bricks.Add(brick); } } if (document.Root.HasAttribute("name")) { ID = document.Root.ReadAttribute("name", 0); } if (ID == 0 && Aliases.Any()) { ID = Aliases.First(); } }
// ReSharper disable once FunctionComplexityOverflow public void Merge([NotNull] CachedSeriesInfo o) { if (o.TvdbCode != TvdbCode && o.TvMazeCode != TvMazeCode) { return; // that's not us! } if (o.TvMazeCode != -1 && TvMazeCode != o.TvMazeCode) { TvMazeCode = o.TvMazeCode; } if (o.TmdbCode != -1 && TmdbCode != o.TmdbCode) { TmdbCode = o.TmdbCode; } if (o.TvdbCode != -1 && TvdbCode != o.TvdbCode) { TvdbCode = o.TvdbCode; } if (o.SrvLastUpdated != 0 && o.SrvLastUpdated < SrvLastUpdated) { return; // older!? } if (!o.IsSearchResultOnly) { IsSearchResultOnly = false; } bool currentLanguageNotSet = LanguageId == -1; string bestLanguageCode = TargetLanguageCode ?? TVSettings.Instance.PreferredLanguageCode; Language optimaLanguage = LocalCache.Instance.GetLanguageFromCode(bestLanguageCode); bool newLanguageOptimal = !(optimaLanguage is null) && o.LanguageId == optimaLanguage.Id; bool useNewDataOverOld = currentLanguageNotSet || newLanguageOptimal; SrvLastUpdated = o.SrvLastUpdated; // take the best bits of "o" // "o" is always newer/better than us, if there is a choice Name = ChooseBetter(Name, useNewDataOverOld, o.Name); AirsDay = ChooseBetter(AirsDay, useNewDataOverOld, o.AirsDay); Imdb = ChooseBetter(Imdb, useNewDataOverOld, o.Imdb); WebUrl = ChooseBetter(WebUrl, useNewDataOverOld, o.WebUrl); OfficialUrl = ChooseBetter(OfficialUrl, useNewDataOverOld, o.OfficialUrl); ShowLanguage = ChooseBetter(ShowLanguage, useNewDataOverOld, o.ShowLanguage); Type = ChooseBetter(Type, useNewDataOverOld, o.Type); Overview = ChooseBetter(Overview, useNewDataOverOld, o.Overview); BannerString = ChooseBetter(BannerString, useNewDataOverOld, o.BannerString); PosterUrl = ChooseBetter(PosterUrl, useNewDataOverOld, o.PosterUrl); Network = ChooseBetter(Network, useNewDataOverOld, o.Network); Runtime = ChooseBetter(Runtime, useNewDataOverOld, o.Runtime); SeriesId = ChooseBetter(SeriesId, useNewDataOverOld, o.SeriesId); Status = ChooseBetterStatus(Status, useNewDataOverOld, o.Status); ContentRating = ChooseBetter(ContentRating, useNewDataOverOld, o.ContentRating); Slug = ChooseBetter(Slug, useNewDataOverOld, o.Slug); if (o.FirstAired.HasValue && (useNewDataOverOld || !FirstAired.HasValue)) { FirstAired = o.FirstAired; } if (useNewDataOverOld && o.SiteRating > 0) { SiteRating = o.SiteRating; } if (useNewDataOverOld && o.Popularity > 0) { Popularity = o.Popularity; } if (useNewDataOverOld && o.SiteRatingVotes > 0) { SiteRatingVotes = o.SiteRatingVotes; } bool useNewAliases = o.Aliases.Any() && useNewDataOverOld; if (!Aliases.Any() || useNewAliases) { Aliases = o.Aliases; } bool useNewGenres = o.Genres.Any() && useNewDataOverOld; if (!Genres.Any() || useNewGenres) { Genres = o.Genres; } bool useNewSeasons = o.seasons.Any() && useNewDataOverOld; if (!seasons.Any() || useNewSeasons) { seasons = o.seasons; } if (o.AirsTime != null) { AirsTime = o.AirsTime; } if (o.sourceEpisodes.Count != 0) { sourceEpisodes = o.sourceEpisodes; } banners.MergeBanners(o.banners); BannersLoaded = o.BannersLoaded; if (useNewDataOverOld) { LanguageId = o.LanguageId; } Dirty = o.Dirty; }
bool GetIsRequired() => _collection.RequiredMods.Contains(Name, StringComparer.CurrentCultureIgnoreCase) //|| Collection.RequiredMods.Contains(CppName, StringComparer.CurrentCultureIgnoreCase) || Aliases.Any(x => _collection.RequiredMods.Contains(x));
public override string ToString() => Aliases.Any() ? $"{Name}({string.Join('/', Aliases)}): {Description ?? "<no description>"}" : $"{Name}: {Description ?? "<no description>"}";
public override bool HasAlias(string alias) { return (Aliases.Any(x => System.Text.RegularExpressions.Regex.Match(alias, x, RegexOptions.IgnoreCase).Success)); }
/// <summary> /// Does this rule's name or any of its aliases start with the specified prefix? /// </summary> /// <param name="prefix"></param> /// <returns></returns> public bool StartsWith(string prefix) { return(Name.StartsWith(prefix) || Aliases.Any(a => a.StartsWith(prefix))); }
public override string ToString() => Aliases?.Any() ?? false ? $"{(IncludeIndent ? Indent : String.Empty)}[Alias({Aliases.Select(an => $"'{an}'").JoinIgnoreEmpty(ItemSeparator)})]{Environment.NewLine}" : String.Empty;
protected virtual bool DoAlias(string rawParameters, params CommandParameter[] parameters) { if (parameters.Length == 0) { if (Aliases.Any()) { Send("Your current aliases are:"); foreach (KeyValuePair <string, string> alias in Aliases.OrderBy(x => x.Key)) { Send(" {0}: {1}", alias.Key, alias.Value); } } else { Send("You have no aliases defined."); } } else if (parameters.Length == 1) { string alias = parameters[0].Value.ToLowerInvariant(); string cmd; if (Aliases.TryGetValue(alias, out cmd)) { Send($"{alias} is aliases to {cmd}."); } else { Send("That alias is not defined."); } } else if (parameters.Length == 2) { // TODO: else add alias (!!! cannot set an alias on alias or delete :p) string alias = parameters[0].Value.ToLowerInvariant().Trim(); string newCmd = parameters[1].Value; if (alias.StartsWith("alias") || alias.StartsWith("unalias")) { Send("Sorry, that word is reserved."); return(true); } if (alias.Any(c => c == '\'' || c == '"' || c == ' ')) { Send("Aliases with that kind of characters are not allowed!"); return(true); } if (alias.StartsWith("delete")) { Send("That shall not be done."); return(true); } string oldCmd; if (Aliases.TryGetValue(alias, out oldCmd)) { Aliases[alias] = newCmd; Send($"{alias} is now realiased to '{newCmd}'."); } else { Aliases.Add(alias, newCmd); Send($"{alias} is now aliased to '{newCmd}'."); } } else { Send("Syntax:" + Environment.NewLine + " alias" + Environment.NewLine + " alias <alias>" + Environment.NewLine + " alias <alias> <command>"); } return(true); }