소스 검색

Add CompressionPolicy param to CompressionInfo constructor, add alternative-to to PPVM implementation.

Billy Barrow 2 년 전
부모
커밋
0d26fc3624
2개의 변경된 파일28개의 추가작업 그리고 4개의 파일을 삭제
  1. 18 2
      src/lib/Builder.vala
  2. 10 2
      src/lib/Ppvm.vala

+ 18 - 2
src/lib/Builder.vala

@@ -83,7 +83,7 @@ namespace Ppub {
             uncompressed_size = size;
         }
 
-        public CompressionInfo(InputStream stream, bool force = false) throws IOError {
+        public CompressionInfo(InputStream stream, CompressionPolicy policy = CompressionPolicy.AUTO) throws IOError {
             var uncompressed_counter = new InputStreamMonitor(stream);
             var compressor = new ZlibCompressor(ZlibCompressorFormat.GZIP, 9);
             var conv_stream = new ConverterInputStream(uncompressed_counter, compressor);
@@ -94,7 +94,17 @@ namespace Ppub {
             uncompressed_size = uncompressed_counter.bytes_read;
             compressed_size = compressed_counter.bytes_read;
 
-            compress = force || uncompressed_size > compressed_size;
+            switch (policy) {
+                case CompressionPolicy.AUTO:
+                    compress = uncompressed_size > compressed_size;
+                    break;
+                case CompressionPolicy.ALWAYS_COMPRESS:
+                    compress = true;
+                    break;
+                case CompressionPolicy.NEVER_COMPRESS:
+                    compress = false;
+                    break;
+            }
         }
 
         public uint64 size_in_ppub {
@@ -105,6 +115,12 @@ namespace Ppub {
 
     }
 
+    public enum CompressionPolicy {
+        AUTO,
+        ALWAYS_COMPRESS,
+        NEVER_COMPRESS
+    }
+
     public static string guess_mimetype(string name, uint8[] sample) {
         if(name == "metadata") {
             return "application/x-ppub-metadata";

+ 10 - 2
src/lib/Ppvm.vala

@@ -149,7 +149,6 @@ namespace Ppub {
                 var kv = line.split(": ", 2);
 
                 if(!metadata_complete) {
-                    print(@"[Stream reader] Property $(kv[0]) is $(kv[1])\n");
                     entries.set(kv[0], kv[1]);
                 }
                 else {
@@ -188,6 +187,7 @@ namespace Ppub {
 
         public const string SIZE = "size";
         public const string CODECS = "codecs";
+        public const string ALTERNATIVE_TO = "alternative-to";
 
         private Gee.HashMap<string, string> properties { get; set; }
 
@@ -210,7 +210,6 @@ namespace Ppub {
                 var item_parts = item.split("=\"", 2);
                 var name = item_parts[0].chomp().chug();
                 var value = item_parts[1].split("\"")[0];
-                print(@"prop: $(name) = $(value)\n");
                 properties.set(name, value);
             }
         }
@@ -253,6 +252,15 @@ namespace Ppub {
             }
         }
 
+        public string? alternative_to {
+            owned get {
+                return get_property(ALTERNATIVE_TO);
+            }
+            set {
+                set_property(ALTERNATIVE_TO, value);
+            }
+        }
+
     }
 
 }