Example #1
0
        private void TryLoadRelationships(PartInfo forPart)
        {
            string sRelRoot = forPart.AbsolutePath();
            PartInfo rootPart;
            if (m_partsMap.TryGetValue(sRelRoot, out rootPart))
            {
                // already been here by some other path
                // However, need to add the related objects to forPart, which is a copy of the object in the map, because sorting in
                // the part filter may change the order in which we retrieve things from the relationship tree
                // Slides have circular relationships in the pptx files so watch that if we re-write this to use the mapped objets
                List<PartInfo> pliRels = rootPart.GetRelatedObjects();
                foreach (PartInfo rpi in pliRels)
                {
                    forPart.AddRelatedItem(rpi);
                }
                return;
            }

            m_partsMap[sRelRoot] = forPart;

            using (Stream str = GetPartContent(BuildRelationshipPartName(sRelRoot)))
            {
                if (str == null)
                    return;

                forPart.LoadRelationships(str);


                foreach (PartInfo part in forPart.GetRelatedObjects())
                {
                    if (!part.External)
                        TryLoadRelationships(part);
                }
            }
        }