private void Pack(Stream output, List <Source> sources)
        {
            var offsets = new Dictionary <Source, int>();
            var coffset = 0;

            foreach (var s in sources)
            {
                offsets[s] = coffset;
                coffset   += s.Size;
            }
            var index = sources.Select(s => new AvaloniaResourcesIndexEntry
            {
                Path   = s.Path,
                Size   = s.Size,
                Offset = offsets[s]
            }).ToList();
            var ms = new MemoryStream();

            AvaloniaResourcesIndexReaderWriter.Write(ms, index);
            new BinaryWriter(output).Write((int)ms.Length);
            ms.Position = 0;
            ms.CopyTo(output);
            foreach (var s in sources)
            {
                using (var input = s.Open())
                    input.CopyTo(output);
            }
        }
Exemplo n.º 2
0
            public void Save()
            {
                if (_embedded != null)
                {
                    _asm.MainModule.Resources.Remove(_embedded);
                    _embedded = null;
                }

                if (_resources.Count == 0)
                {
                    return;
                }

                _embedded = new EmbeddedResource("!AvaloniaResources", ManifestResourceAttributes.Public,
                                                 AvaloniaResourcesIndexReaderWriter.Create(_resources.ToDictionary(x => x.Key,
                                                                                                                   x => x.Value.FileContents)));
                _asm.MainModule.Resources.Add(_embedded);
            }
Exemplo n.º 3
0
 public AvaloniaResources(AssemblyDefinition asm, string projectDir)
 {
     _asm      = asm;
     _embedded = ((EmbeddedResource)asm.MainModule.Resources.FirstOrDefault(r =>
                                                                            r.ResourceType == ResourceType.Embedded && r.Name == "!AvaloniaResources"));
     if (_embedded == null)
     {
         return;
     }
     using (var stream = _embedded.GetResourceStream())
     {
         var br         = new BinaryReader(stream);
         var index      = AvaloniaResourcesIndexReaderWriter.Read(new MemoryStream(br.ReadBytes(br.ReadInt32())));
         var baseOffset = stream.Position;
         foreach (var e in index)
         {
             stream.Position    = e.Offset + baseOffset;
             _resources[e.Path] = new AvaloniaResource(this, projectDir, e.Path, br.ReadBytes(e.Size));
         }
     }
 }
Exemplo n.º 4
0
            public AssemblyDescriptor(Assembly assembly)
            {
                Assembly = assembly;

                if (assembly != null)
                {
                    Resources = assembly.GetManifestResourceNames()
                                .ToDictionary(n => n, n => (IAssetDescriptor) new AssemblyResourceDescriptor(assembly, n));
                    Name = assembly.GetName().Name;
                    using (var resources = assembly.GetManifestResourceStream(AvaloniaResourceName))
                    {
                        if (resources != null)
                        {
                            Resources.Remove(AvaloniaResourceName);

                            var indexLength = new BinaryReader(resources).ReadInt32();
                            var index       = AvaloniaResourcesIndexReaderWriter.Read(new SlicedStream(resources, 4, indexLength));
                            var baseOffset  = indexLength + 4;
                            AvaloniaResources = index.ToDictionary(r => "/" + r.Path !.TrimStart('/'), r => (IAssetDescriptor)
                                                                   new AvaloniaResourceDescriptor(assembly, baseOffset + r.Offset, r.Size));
                        }
                    }
                }
            }