6ed742eeca357f3d356466d2f7e36f4b27cd1ec7
[mono.git] / mcs / class / System.IO.Compression / SharpCompress / Common / Zip / ZipEntry.cs
1 using System;
2 using System.Collections.Generic;
3 using SharpCompress.Common.Zip.Headers;
4
5 namespace SharpCompress.Common.Zip
6 {
7     internal class ZipEntry : Entry
8     {
9         private readonly ZipFilePart filePart;
10         private DateTime? lastModifiedTime;
11
12         internal ZipEntry(ZipFilePart filePart)
13         {
14             if (filePart != null)
15             {
16                 this.filePart = filePart;
17                 lastModifiedTime = Utility.DosDateToDateTime(filePart.Header.LastModifiedDate,
18                                                              filePart.Header.LastModifiedTime);
19             }
20         }
21
22         public override CompressionType CompressionType
23         {
24             get
25             {
26                 switch (filePart.Header.CompressionMethod)
27                 {
28                     case ZipCompressionMethod.BZip2:
29                         {
30                             return CompressionType.BZip2;
31                         }
32                     case ZipCompressionMethod.Deflate:
33                         {
34                             return CompressionType.Deflate;
35                         }
36                     case ZipCompressionMethod.LZMA:
37                         {
38                             return CompressionType.LZMA;
39                         }
40                     case ZipCompressionMethod.PPMd:
41                         {
42                             return CompressionType.PPMd;
43                         }
44                     case ZipCompressionMethod.None:
45                         {
46                             return CompressionType.None;
47                         }
48                     default:
49                         {
50                             return CompressionType.Unknown;
51                         }
52                 }
53             }
54         }
55
56         public override uint Crc
57         {
58             get { return filePart.Header.Crc; }
59         }
60
61         public override string Key
62         {
63             get { return filePart.Header.Name; }
64         }
65
66         public override long CompressedSize
67         {
68             get { return filePart.Header.CompressedSize; }
69         }
70
71         public override long Size
72         {
73             get { return filePart.Header.UncompressedSize; }
74         }
75
76         public override DateTime? LastModifiedTime
77         {
78             get { return lastModifiedTime; }
79             set { lastModifiedTime = value; }
80         }
81
82         public override DateTime? CreatedTime
83         {
84             get { return null; }
85         }
86
87         public override DateTime? LastAccessedTime
88         {
89             get { return null; }
90         }
91
92         public override DateTime? ArchivedTime
93         {
94             get { return null; }
95         }
96
97         public override bool IsEncrypted
98         {
99             get { return FlagUtility.HasFlag(filePart.Header.Flags, HeaderFlags.Encrypted); }
100         }
101
102         public override bool IsDirectory
103         {
104             get { return filePart.Header.IsDirectory; }
105         }
106
107         public override bool IsSplit
108         {
109             get { return false; }
110         }
111
112         internal override IEnumerable<FilePart> Parts
113         {
114             get { return filePart.AsEnumerable<FilePart>(); }
115         }
116     }
117 }