aboutsummaryrefslogtreecommitdiff
path: root/Mammoth/Couscous/mammoth/internal/archives/ZippedArchive.cs
blob: 6ff10bf45160568bad4af1bfda79b562ab1e8510 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
using System.IO.Compression;
using Mammoth.Couscous.java.io;
using Mammoth.Couscous.java.util;

namespace Mammoth.Couscous.org.zwobble.mammoth.@internal.archives {
    internal class ZippedArchive : Archive {
        private readonly ZipArchive _zipFile;
        
        internal ZippedArchive(File file) {
            _zipFile = ZipFile.OpenRead(file.Path);
        }

        internal ZippedArchive(System.IO.Stream stream) {
            _zipFile = new ZipArchive(stream);
        }
        
        public Optional<InputStream> tryGetInputStream(string name) {
            var entry = _zipFile.GetEntry(name);
            if (entry == null) {
                return Optional.empty<InputStream>();
            } else {
                return Optional.of(ToJava.StreamToInputStream(entry.Open()));
            }
        }
        
        public bool exists(string name) {
            return _zipFile.GetEntry(name) != null;
        }
        
        public void close() {
            _zipFile.Dispose();
        }
    }
}