Mercurial > repos > IBBoard.ArmyBuilder.API
annotate Extractors/ArmyBuilderFileExtractor.cs @ 3:1a54f6afafe7
Re #84 and #85: Support Army Builder v2/v3 files
* Separate out the two versions of file
* Restructure file loader to load v2 files correctly
* Tidy up file extractor (still not working)
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sun, 17 May 2009 18:40:36 +0000 |
parents | 1a5205612b72 |
children | d2f7826147eb |
rev | line source |
---|---|
0
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
1 // This file (ArmyBuilderFileExtractor.cs) is a part of the IBBoard.ArmyBuilder.API project and is copyright 2009 IBBoard |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
2 // |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
3 // The file and the library/program it is in are licensed under the GNU LGPL license, either version 3 of the License or (at your option) any later version. Please see COPYING.LGPL for more information and the full license. |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
4 // |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
5 |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
6 using System; |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
7 using System.IO; |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
8 using ICSharpCode.SharpZipLib.Zip.Compression.Streams; |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
9 using IBBoard.ArmyBuilder.API; |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
10 |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
11 namespace IBBoard.ArmyBuilder.API.Extractors |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
12 { |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
13 public class ArmyBuilderFileExtractor |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
14 { |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
15 public static byte[] GetFileEntryContent(FileTableEntry entry) |
3
1a54f6afafe7
Re #84 and #85: Support Army Builder v2/v3 files
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
16 { |
0
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
17 InflaterInputStream zipped = null; |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
18 byte[] byteArr = new byte[entry.FileSize]; |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
19 |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
20 try |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
21 { |
3
1a54f6afafe7
Re #84 and #85: Support Army Builder v2/v3 files
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
22 byte[] compressed = GetFileEntryCompressedContent(entry); |
1a54f6afafe7
Re #84 and #85: Support Army Builder v2/v3 files
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
23 MemoryStream ms = new MemoryStream(compressed); |
0
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
24 ms.Seek(0, SeekOrigin.Begin); |
3
1a54f6afafe7
Re #84 and #85: Support Army Builder v2/v3 files
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
25 zipped = new InflaterInputStream(ms, new Inflater(true)); |
1a54f6afafe7
Re #84 and #85: Support Army Builder v2/v3 files
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
26 |
0
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
27 int size = 0; |
3
1a54f6afafe7
Re #84 and #85: Support Army Builder v2/v3 files
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
28 int pos = 0; |
0
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
29 |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
30 do |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
31 { |
3
1a54f6afafe7
Re #84 and #85: Support Army Builder v2/v3 files
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
32 size = zipped.Read(byteArr, pos, byteArr.Length); |
1a54f6afafe7
Re #84 and #85: Support Army Builder v2/v3 files
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
33 pos+=size; |
1a54f6afafe7
Re #84 and #85: Support Army Builder v2/v3 files
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
34 } |
1a54f6afafe7
Re #84 and #85: Support Army Builder v2/v3 files
IBBoard <dev@ibboard.co.uk>
parents:
0
diff
changeset
|
35 while (size > 0); |
0
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
36 } |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
37 finally |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
38 { |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
39 if (zipped != null) |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
40 { |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
41 zipped.Close(); |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
42 } |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
43 } |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
44 |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
45 return byteArr; |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
46 } |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
47 |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
48 public static byte[] GetFileEntryCompressedContent(FileTableEntry entry) |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
49 { |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
50 FileStream stream = entry.GetParentFileStream(); |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
51 stream.Seek(entry.Location, SeekOrigin.Begin); |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
52 byte[] bytes = new byte[entry.CompressedSize]; |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
53 |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
54 try |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
55 { |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
56 stream.Read(bytes, 0, entry.CompressedSize); |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
57 } |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
58 finally |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
59 { |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
60 stream.Close(); |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
61 } |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
62 |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
63 return bytes; |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
64 } |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
65 } |
1a5205612b72
Add initial work on ArmyBuilder API project\nno-open-ticket
IBBoard <dev@ibboard.co.uk>
parents:
diff
changeset
|
66 } |