Example #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="Manifest"></param>
        /// <param name="Tag"></param>
        public void TagManifest(Guid ManifestId, Guid TagId)
        {
            BuildManifest Manifest = GetManifestById(ManifestId);

            if (Manifest == null)
            {
                return;
            }

            Tag Tag = TagRegistry.GetTagById(TagId);

            if (Tag == null)
            {
                return;
            }

            if (Manifest.Metadata != null && !Manifest.Metadata.TagIds.Contains(TagId))
            {
                Logger.Log(LogLevel.Info, LogCategory.Manifest, "Tagging manifest {0} with {1}", ManifestId.ToString(), Tag.Name);

                Manifest.Metadata.ModifiedTime = DateTime.UtcNow;
                Manifest.Metadata.TagIds.Add(TagId);
                StoreMetadata(Manifest);
            }

            if (Tag.Unique)
            {
                string ParentPath = VirtualFileSystem.GetParentPath(Manifest.VirtualPath);
                string NodeName   = VirtualFileSystem.GetNodeName(Manifest.VirtualPath);

                List <string> Children = GetVirtualPathChildren(ParentPath);

                Tag DecayTag = TagRegistry.GetTagById(Tag.DecayTagId);

                foreach (string ChildName in Children)
                {
                    if (ChildName == Manifest.VirtualPath)
                    {
                        continue;
                    }

                    BuildManifest ChildManifest = GetManifestByPath(ChildName);
                    if (ChildManifest != null)
                    {
                        if (ChildManifest.Metadata != null && ChildManifest.Metadata.TagIds.Contains(TagId))
                        {
                            UntagManifest(ChildManifest.Guid, TagId);

                            if (DecayTag != null)
                            {
                                TagManifest(ChildManifest.Guid, DecayTag.Id);
                            }
                        }
                    }
                }
            }
        }