public string AddImage(string fileName, string id)
        {
            if (_partType != XMLParts.RibbonX12 && _partType != XMLParts.RibbonX14)
            {
                Debug.Assert(false);
                return(null);
            }

            if (fileName == null)
            {
                throw new ArgumentNullException("fileName");
            }
            if (fileName.Length == 0)
            {
                return(null);
            }

            if (id == null)
            {
                throw new ArgumentNullException("id");
            }
            if (id.Length == 0)
            {
                throw new ArgumentException(StringsResource.idsNonEmptyId);
            }

            if (_part.RelationshipExists(id))
            {
                id = "rId";
            }
            return(AddImageHelper(fileName, id));
        }
Ejemplo n.º 2
0
        public void RelationshipPartGetRelationships()
        {
            CheckAutomaticParts2();
            PackagePart p = package.GetPart(relationshipUri);

            try
            {
                p.CreateRelationship(uris[0], TargetMode.Internal, "asdas");
                Assert.Fail("This should fail 1");
            }
            catch (InvalidOperationException)
            {
            }

            try
            {
                p.DeleteRelationship("aa");
                Assert.Fail("This should fail 2");
            }
            catch (InvalidOperationException)
            {
            }

            try
            {
                p.GetRelationship("id");
                Assert.Fail("This should fail 3");
            }
            catch (InvalidOperationException)
            {
            }

            try
            {
                p.GetRelationships();
                Assert.Fail("This should fail 4");
            }
            catch (InvalidOperationException)
            {
            }

            try
            {
                p.GetRelationshipsByType("type");
                Assert.Fail("This should fail 5");
            }
            catch (InvalidOperationException)
            {
            }

            try
            {
                p.RelationshipExists("id");
                Assert.Fail("This should fail 6");
            }
            catch (InvalidOperationException)
            {
            }
        }
        public PackageRelationship GetImageRelationship(string relationshipId)
        {
            if (!PackagePart.RelationshipExists(relationshipId))
            {
                throw new ArgumentOutOfRangeException($"Package relationship ${relationshipId} does not exist", nameof(relationshipId));
            }

            return(PackagePart.GetRelationship(relationshipId));
        }
Ejemplo n.º 4
0
        private static string FindFirstAvailableImageId(PackagePart part, string imageId)
        {
            var index = 0;

            while (true)
            {
                if (!part.RelationshipExists(imageId))
                {
                    return(imageId);
                }

                Debug.Write($"A relationship '{imageId}' already exists");
                imageId = $"{imageId}{index++}";
            }
        }
        void IPersistable.Load(ExcelLoadContext context)
        {
            PackagePart currentSheetPart = context.Package.GetPart(this._WorkSheet.SheetUri);

            if (currentSheetPart.RelationshipExists(this._RelationshipID))
            {
                PackageRelationship rel = currentSheetPart.GetRelationship(this._RelationshipID);
                PictureUri = PackUriHelper.ResolvePartUri(rel.SourceUri, rel.TargetUri);

                XElement vmlDrawingPictureXml = context.Package.GetXElementFromUri(PictureUri);
                if (vmlDrawingPictureXml != null)
                {
                    context.Reader.ReadHeaderFooterVmlDrawingPicture(this, vmlDrawingPictureXml);
                }
            }
        }
Ejemplo n.º 6
0
        public void TestExcelWorkbook()
        {
            MemoryStream stream  = new MemoryStream();
            Package      package = CreateSpreadsheet(stream);

            Assert.IsTrue(package.PartExists(new Uri("/xl/workbook.xml", UriKind.Relative)), "#1");
            Assert.IsTrue(package.PartExists(new Uri("/xl/sharedStrings.xml", UriKind.Relative)), "#2");

            package.Close();
            package = Package.Open(new MemoryStream(stream.ToArray()), FileMode.Open);

            PackagePart workbookPart = package.GetPart(new Uri("/xl/workbook.xml", UriKind.Relative));

            Assert.IsTrue(workbookPart.RelationshipExists("rel1"), "#3");

            var r = workbookPart.GetRelationship("rel1");

            Assert.IsFalse(r.TargetUri.IsAbsoluteUri, "#4");
            package.Close();
        }
Ejemplo n.º 7
0
        void IPersistable.Load(ExcelLoadContext context)
        {
            PackagePart currentSheetPart = context.Package.GetPart(this._WorkSheet.SheetUri);

            if (currentSheetPart.RelationshipExists(this.RelationshipID))
            {
                PackageRelationship vmlDrawingRelation = currentSheetPart.GetRelationship(this.RelationshipID);
                this._VmlDrawingsUri = PackUriHelper.ResolvePartUri(vmlDrawingRelation.SourceUri, vmlDrawingRelation.TargetUri);
                XElement vmlDrawingElement = context.Package.GetXElementFromUri(this._VmlDrawingsUri);
                context.Reader.ReadSheetCommentVmlDrawing(this, vmlDrawingElement);

                PackageRelationshipCollection commentParts = currentSheetPart.GetRelationshipsByType(ExcelCommon.Schema_Comment);
                foreach (PackageRelationship commentPartRelationship in commentParts)
                {
                    this._CommentUri = PackUriHelper.ResolvePartUri(commentPartRelationship.SourceUri, commentPartRelationship.TargetUri);
                    PackagePart commentPart = context.Package.GetPart(this._CommentUri);
                    XDocument   commentXml  = XDocument.Load(commentPart.GetStream());

                    context.Reader.ReadSheetComments(this, commentXml.Root);
                }
            }
        }
Ejemplo n.º 8
0
        private void Apply(Package package, string localFilename, bool installed)
        {
            using (Package setPkg = Package.Open(localFilename, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
            {
                // Extract information about the target set
                PackageRelationship defRelationship =
                    setPkg.GetRelationshipsByType("http://schemas.octgn.org/set/definition").First();
                PackagePart definition = setPkg.GetPart(defRelationship.TargetUri);
                Set         set;
                using (XmlReader reader = XmlReader.Create(definition.GetStream(), XmlSettings))
                {
                    reader.ReadToFollowing("set"); // <?xml ... ?>
                    set = new Set(localFilename, reader, _game.Repository);
                    // Check if the set game matches the patch
                    if (set.Game != _game)
                    {
                        return;
                    }
                }

                // Check if there is a patch for this set
                string relationId = "S" + set.Id.ToString("N");
                if (!package.RelationshipExists(relationId))
                {
                    return;
                }

                PackagePart patchPart = package.GetPart(package.GetRelationship(relationId).TargetUri);
                XDocument   patchDoc;
                using (Stream stream = patchPart.GetStream())
                    patchDoc = XDocument.Load(stream);

                // Check if the set is at least the required version for patching
                if (set.Version < patchDoc.Root.Attr <Version>("minVersion"))
                {
                    return;
                }
                if (set.Version > patchDoc.Root.Attr <Version>("maxVersion"))
                {
                    return;
                }

                if (installed)
                {
                    _game.DeleteSet(_game.Sets.Single(s => s.PackageName == localFilename));
                }

                // Process the set
                if (patchDoc.Root != null)
                {
                    foreach (XElement action in patchDoc.Root.Elements())
                    {
                        switch (action.Name.LocalName)
                        {
                        case "new":
                        {
                            var         targetUri      = new Uri(action.Attr <string>("targetUri"), UriKind.Relative);
                            var         relationshipId = action.Attr <string>("relationshipId");
                            var         contentType    = action.Attr <string>("contentType");
                            PackagePart part           = setPkg.PartExists(targetUri)
                                                           ? setPkg.GetPart(targetUri)
                                                           : setPkg.CreatePart(targetUri, contentType,
                                                                               CompressionOption.Normal);
                            if (part != null)
                            {
                                using (Stream targetStream = part.GetStream(FileMode.Create, FileAccess.Write))
                                    using (
                                        Stream srcStream =
                                            package.GetPart(patchPart.GetRelationship(relationshipId).TargetUri).
                                            GetStream())
                                        srcStream.CopyTo(targetStream);
                            }
                            break;
                        }

                        case "newrel":
                        {
                            var partUri          = new Uri(action.Attr <string>("partUri"), UriKind.Relative);
                            var relationshipId   = action.Attr <string>("relationshipId");
                            var targetUri        = new Uri(action.Attr <string>("targetUri"), UriKind.Relative);
                            var relationshipType = action.Attr <string>("relationshipType");

                            PackagePart part = setPkg.GetPart(partUri);
                            if (part.RelationshipExists(relationshipId))
                            {
                                part.DeleteRelationship(relationshipId);
                            }
                            part.CreateRelationship(targetUri, TargetMode.Internal, relationshipType,
                                                    relationshipId);
                            break;
                        }

                        default:
                            throw new InvalidFileFormatException("Unknown patch action: " + action.Name);
                        }
                    }
                }
            }

            OnProgress(string.Format("{0} patched.", Path.GetFileName(localFilename)));

            if (installed)
            {
                try
                {
                    _game.InstallSet(localFilename);
                }
                catch (Exception ex)
                {
                    OnProgress(string.Format("{0} can't be re-installed.\nDetails: {1}", localFilename, ex.Message),
                               true);
                }
            }
        }