Пример #1
0
        private PageableResource ConvertPageableResource(Stream sourceStream, Stream destStream, PageableResource resource)
        {
            if (resource.GetLocation(out var location) && location == ResourceLocation.ResourcesB)
            {
                resource.ChangeLocation(ResourceLocation.Resources);

                var resourceData = ResourcesB.ExtractRaw(sourceStream, resource.Page.Index, resource.Page.CompressedBlockSize);
                resource.Page.Index = Resources.AddRaw(destStream, resourceData);
            }

            return(resource);
        }
Пример #2
0
        private object ConvertData(Stream tagsStream, Stream sourceStream, Stream destStream, object data)
        {
            var type = data.GetType();

            if (type == typeof(PageableResource))
            {
                var resource = (PageableResource)data;

                if (resource.GetLocation(out var location) && location == ResourceLocation.ResourcesB)
                {
                    resource.ChangeLocation(ResourceLocation.Resources);

                    var resourceData = ResourcesB.ExtractRaw(sourceStream, resource.Page.Index, resource.Page.CompressedBlockSize);
                    resource.Page.Index = Resources.AddRaw(destStream, resourceData);
                }

                return(resource);
            }

            switch (data)
            {
            case null:
            case string _:
            case ValueType _:
                return(data);

            case PageableResource resource:
                return(ConvertPageableResource(sourceStream, destStream, resource));

            case TagStructure structure:
                return(ConvertStructure(tagsStream, sourceStream, destStream, structure));

            case IList collection:
                return(ConvertCollection(tagsStream, sourceStream, destStream, collection));
            }

            return(data);
        }