namespace Publicate { public interface Savable : Object { public abstract void save_asset(Ppub.Builder builder) throws Error; } public class SavableAsset : Object, Savable { private Ppub.Publication publication; private Ppub.Asset asset; public SavableAsset(Ppub.Publication origin, Ppub.Asset asset) { publication = origin; this.asset = asset; } public void save_asset(Ppub.Builder builder) throws Error { var stream = publication.read_asset(asset.name); var compression_policy = Ppub.CompressionPolicy.AUTO; if(asset.mimetype.has_prefix("video/")) { compression_policy = Ppub.CompressionPolicy.NEVER_COMPRESS; } var compression = new Ppub.CompressionInfo(stream, compression_policy); stream = publication.read_asset(asset.name); builder.add_asset(asset.name, asset.mimetype, stream, Invercargill.empty(), compression); } } public class SavableNewAsset : Object, Savable { private string name; private string mimetype; private InputStream stream; private Ppub.CompressionInfo compression; public SavableNewAsset(string name, string mimetype, InputStream stream, Ppub.CompressionInfo compression) { this.name = name; this.mimetype = mimetype; this.stream = stream; this.compression = compression; } public void save_asset(Ppub.Builder builder) throws Error { builder.add_asset(name, mimetype, stream, Invercargill.empty(), compression); } } }