diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Package/OpenPackagingConvention/OPCDataFormat.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Package/OpenPackagingConvention/OPCDataFormat.cs index bedf0c36..e065f01d 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Package/OpenPackagingConvention/OPCDataFormat.cs +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Package/OpenPackagingConvention/OPCDataFormat.cs @@ -30,16 +30,17 @@ namespace UniversalEditor.DataFormats.Package.OpenPackagingConvention FileSystemObjectModel fsom = (objectModels.Pop() as FileSystemObjectModel); PackageObjectModel package = (objectModels.Pop() as PackageObjectModel); - - Folder _rels = fsom.Folders["_rels"]; - if (_rels != null) + + File[] files = fsom.GetAllFiles(); + foreach (File file in files) { - foreach (File file in _rels.Files) + if (file.Name.EndsWith(".rels") && file.Parent.Name == "_rels") { string relatedFileName = null; - if (file.Name.EndsWith(".rels") && file.Name != ".rels") + string fn = System.IO.Path.GetFileName(file.Name); + if (fn != ".rels") { - relatedFileName = file.Name.Substring(0, file.Name.Length - ".rels".Length); + relatedFileName = fn.Substring(0, fn.Length - ".rels".Length); } @@ -61,19 +62,22 @@ namespace UniversalEditor.DataFormats.Package.OpenPackagingConvention } } } - } - - File _Content_Types = fsom.Files["[Content_Types].xml"]; - { - byte[] data = _Content_Types.GetData(); - - OPCContentTypesDataFormat df = new OPCContentTypesDataFormat(); - ContentTypesObjectModel contentTypes = new ContentTypesObjectModel(); - Document.Load(contentTypes, df, new MemoryAccessor(data)); - - foreach (ContentType type in contentTypes.ContentTypes) + else if (file.Name == "[Content_Types].xml" && file.Parent == null) { - package.ContentTypes.Add(type); + byte[] data = file.GetData(); + + OPCContentTypesDataFormat df = new OPCContentTypesDataFormat(); + ContentTypesObjectModel contentTypes = new ContentTypesObjectModel(); + Document.Load(contentTypes, df, new MemoryAccessor(data)); + + foreach (ContentType type in contentTypes.ContentTypes) + { + package.ContentTypes.Add(type); + } + } + else + { + package.FileSystem.AddFile(file.Name, file.GetData()); } } diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/ObjectModels/Package/PackageObjectModel.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/ObjectModels/Package/PackageObjectModel.cs index 7ed69df3..1a8b4c13 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/ObjectModels/Package/PackageObjectModel.cs +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/ObjectModels/Package/PackageObjectModel.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using UniversalEditor.ObjectModels.FileSystem; using UniversalEditor.ObjectModels.Package.ContentTypes; using UniversalEditor.ObjectModels.Package.Relationships; @@ -36,5 +37,25 @@ namespace UniversalEditor.ObjectModels.Package clone.Relationships.Add(item.Clone() as Relationship); } } + + private FileSystemObjectModel mvarFileSystem = new FileSystemObjectModel(); + public FileSystemObjectModel FileSystem { get { return mvarFileSystem; } } + + public File[] GetFilesBySchema(string p) + { + List files = new List(); + Relationship[] rels = mvarRelationships.GetBySchema(p); + foreach (Relationship rel in rels) + { + if (rel.Target.StartsWith("/")) + { + string target = rel.Target.Substring(1); + + File file = mvarFileSystem.FindFile(target); + if (file != null) files.Add(file); + } + } + return files.ToArray(); + } } }