Savable.vala 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. namespace Publicate {
  2. public interface Savable : Object {
  3. public abstract void save_asset(Ppub.Builder builder) throws Error;
  4. }
  5. public class SavableAsset : Object, Savable {
  6. private Ppub.Publication publication;
  7. private Ppub.Asset asset;
  8. public SavableAsset(Ppub.Publication origin, Ppub.Asset asset) {
  9. publication = origin;
  10. this.asset = asset;
  11. }
  12. public void save_asset(Ppub.Builder builder) throws Error {
  13. var stream = publication.read_asset(asset.name);
  14. var compression_policy = Ppub.CompressionPolicy.AUTO;
  15. if(asset.mimetype.has_prefix("video/")) {
  16. compression_policy = Ppub.CompressionPolicy.NEVER_COMPRESS;
  17. }
  18. var compression = new Ppub.CompressionInfo(stream, compression_policy);
  19. stream = publication.read_asset(asset.name);
  20. builder.add_asset(asset.name, asset.mimetype, stream, Invercargill.empty<string>(), compression);
  21. }
  22. }
  23. public class SavableNewAsset : Object, Savable {
  24. private string name;
  25. private string mimetype;
  26. private InputStream stream;
  27. private Ppub.CompressionInfo compression;
  28. public SavableNewAsset(string name, string mimetype, InputStream stream, Ppub.CompressionInfo compression) {
  29. this.name = name;
  30. this.mimetype = mimetype;
  31. this.stream = stream;
  32. this.compression = compression;
  33. }
  34. public void save_asset(Ppub.Builder builder) throws Error {
  35. builder.add_asset(name, mimetype, stream, Invercargill.empty<string>(), compression);
  36. }
  37. }
  38. }