// Copyright 2014 CrossWire Bible Society (http://www.crosswire.org) // CrossWire Bible Society // P. O. Box 2528 // Tempe, AZ 85280-2528 // // This program is free software; you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by the // Free Software Foundation version 2. // // This program is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // General Public License for more details. using System; using System.Collections.Generic; using System.Runtime.InteropServices; namespace Sword { public class Manager : IDisposable { IntPtr _handle; public Manager () { _handle = NativeMethods.org_crosswire_sword_SWMgr_new(); } public Manager (string path) { _handle = NativeMethods.org_crosswire_sword_SWMgr_newWithPath(path); } internal IntPtr Handle { get { return _handle; } } protected void Dispose(bool disposing) { if(disposing) { if(_handle != IntPtr.Zero) { NativeMethods.org_crosswire_sword_SWMgr_delete(_handle); _handle = IntPtr.Zero; } } } public Module GetModuleByName(string name) { IntPtr modulePtr = NativeMethods.org_crosswire_sword_SWMgr_getModuleByName(_handle, name); if(modulePtr == IntPtr.Zero) { return null; } return new Module(modulePtr); } /// /// Gets a list of the installed modules /// public IEnumerable GetModInfoList() { IntPtr modulesPointer = NativeMethods.org_crosswire_sword_SWMgr_getModInfoList(_handle); ModInfo modInfo = (ModInfo)Marshal.PtrToStructure(modulesPointer, typeof(ModInfo)); while (modInfo.Name != null) { yield return modInfo; modulesPointer = new IntPtr(modulesPointer.ToInt64() + Marshal.SizeOf(typeof(ModInfo))); modInfo = (ModInfo)Marshal.PtrToStructure(modulesPointer, typeof(ModInfo)); } } public string Version { get { IntPtr versionPtr = NativeMethods.org_crosswire_sword_SWMgr_version(_handle); return Marshal.PtrToStringAnsi(versionPtr); } } public string PrefixPath { get { IntPtr prefixPathPtr = NativeMethods.org_crosswire_sword_SWMgr_getPrefixPath(_handle); return Marshal.PtrToStringAnsi(prefixPathPtr); } } public string ConfigPath { get { IntPtr configPathPtr = NativeMethods.org_crosswire_sword_SWMgr_getConfigPath(_handle); return Marshal.PtrToStringAnsi(configPathPtr); } } public void SetGlobalOption(string option, string @value) { NativeMethods.org_crosswire_sword_SWMgr_setGlobalOption(_handle, option, @value); } public IEnumerable GetGlobalOptionValues(string option) { IntPtr optionsPtr = NativeMethods.org_crosswire_sword_SWMgr_getGlobalOptionValues(_handle, option); return NativeMethods.MarshalStringArray(optionsPtr); } public void SetCipherKey(string modName, byte[] key) { NativeMethods.org_crosswire_sword_SWMgr_setCipherKey(_handle, modName, key); } public bool Javascript { set { NativeMethods.org_crosswire_sword_SWMgr_setJavascript(_handle, value); } } public IEnumerable AvailableLocales { get { IntPtr localesPtr = NativeMethods.org_crosswire_sword_SWMgr_getAvailableLocales(_handle); return NativeMethods.MarshalStringArray(localesPtr); } } public string DefaultLocale { set { NativeMethods.org_crosswire_sword_SWMgr_setDefaultLocale(_handle, value); } } public string Translate(string text, string localeName) { IntPtr translatedPtr = NativeMethods.org_crosswire_sword_SWMgr_translate(_handle, text, localeName); return Marshal.PtrToStringAnsi(translatedPtr); } public void Dispose () { Dispose (true); GC.Collect(); } } }