Esempio n. 1
0
        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;
        }
Esempio n. 2
0
 public bool AliasContains(string str)
 {
     if (str == "")
     {
         return(Aliases.Count == 0);
     }
     return(Aliases.Any(s => s.ToLower().Contains(str.ToLower())));
 }
Esempio n. 3
0
        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}");
        }
Esempio n. 4
0
        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"];
            }
        }
Esempio n. 5
0
        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));
        }
Esempio n. 6
0
        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}");
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        // 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;
        }
Esempio n. 9
0
 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)));
 }
Esempio n. 11
0
        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();
            }
        }
Esempio n. 12
0
        // 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;
        }
Esempio n. 13
0
 bool GetIsRequired() => _collection.RequiredMods.Contains(Name, StringComparer.CurrentCultureIgnoreCase)
 //|| Collection.RequiredMods.Contains(CppName, StringComparer.CurrentCultureIgnoreCase)
 || Aliases.Any(x => _collection.RequiredMods.Contains(x));
Esempio n. 14
0
 public override string ToString() => Aliases.Any()
     ? $"{Name}({string.Join('/', Aliases)}): {Description ?? "<no description>"}"
     : $"{Name}: {Description ?? "<no description>"}";
Esempio n. 15
0
 public override bool HasAlias(string alias)
 {
     return
         (Aliases.Any(x => System.Text.RegularExpressions.Regex.Match(alias, x, RegexOptions.IgnoreCase).Success));
 }
Esempio n. 16
0
 /// <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)));
 }
Esempio n. 17
0
 public override string ToString() => Aliases?.Any() ?? false ? $"{(IncludeIndent ? Indent : String.Empty)}[Alias({Aliases.Select(an => $"'{an}'").JoinIgnoreEmpty(ItemSeparator)})]{Environment.NewLine}" : String.Empty;
Esempio n. 18
0
        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);
        }