Mercurial > repos > IBDev-IBBoard.WarFoundry.API
view API/Savers/Xml/WarFoundryXmlFileSaver.cs @ 483:4d6c92744254
Re #419: Remove assumptions of a file-based install
* Embed sample files as resources
* Load the sample files as a "hack"
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Wed, 11 Jul 2012 20:39:34 +0100 |
parents | 3c4a6403a88c |
children |
line wrap: on
line source
using System; using IBBoard.WarFoundry.API.Savers; using IBBoard.WarFoundry.API.Objects; using ICSharpCode.SharpZipLib.Zip; using System.IO; using IBBoard.IO; using IBBoard.Lang; namespace IBBoard.WarFoundry.API.Savers.Xml { public class WarFoundryXmlFileSaver : IWarFoundryFileSaver { public WarFoundryXmlFileSaver() { } public bool Save(string path, params WarFoundryLoadedObject[] objects) { ZipOutputStream zipStream = new ZipOutputStream(new FileStream(path, FileMode.Create)); AddFiles(zipStream, objects); zipStream.Close(); return true; } public void AddFiles(ZipOutputStream zipStream, WarFoundryLoadedObject[] objects) { foreach (WarFoundryLoadedObject obj in objects) { AddFile(zipStream, obj); } } public void AddFile(ZipOutputStream zipStream, WarFoundryLoadedObject obj) { ZipEntry entry = new ZipEntry(GetZipEntryName(obj)); zipStream.PutNextEntry(entry); byte[] bytes = GetObjectBytes(obj); zipStream.Write(bytes, 0, bytes.Length); } public byte[] GetObjectBytes(WarFoundryLoadedObject obj) { string xmlString = ""; if (obj is GameSystem) { xmlString = GetGameSystemString((GameSystem)obj); } else if (obj is Army) { xmlString = GetArmyString((Army)obj); } return StringManipulation.StringToBytes(xmlString); } public string GetGameSystemString(GameSystem obj) { return new WarFoundryXmlGameSystemSaver().CreateXmlString(obj); } public string GetArmyString(Army obj) { return new WarFoundryXmlArmySaver().CreateXmlString(obj); } private string GetZipEntryName(WarFoundryLoadedObject obj) { return obj.ID + GetFileExtension(obj); } public string GetFileExtension(WarFoundryLoadedObject obj) { string ext = ""; if (obj is Army) { ext = ".armyx"; } else if (obj is Race) { ext = ".racex"; } else if (obj is GameSystem) { ext = ".systemx"; } return ext; } } }