// 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;
namespace Sword
{
public class InstallManager : IDisposable
{
readonly IntPtr _handle;
public InstallManager (string baseDirectory)
{
_handle = NativeMethods.org_crosswire_sword_InstallMgr_new(baseDirectory, IntPtr.Zero);
}
public void SetUserDisclaimerConfirmed()
{
NativeMethods.org_crosswire_sword_InstallMgr_setUserDisclaimerConfirmed(_handle);
}
///
/// Retrieves a list of sources from the master server.
///
///
/// True if successful
/// False if SetUserDisclaimerConfirmed has not been called.
/// False if the sync failed.
///
public bool SyncConfig()
{
int result = NativeMethods.org_crosswire_sword_InstallMgr_syncConfig(_handle);
return result == 0 ? true : false;
}
///
/// Gets the remote sources.
/// You may need to call SyncConfig before calling this
/// to get an upto date source list.
///
public IEnumerable RemoteSources
{
get
{
IntPtr remoteSourcesPtr = NativeMethods.org_crosswire_sword_InstallMgr_getRemoteSources(_handle);
return NativeMethods.MarshalStringArray(remoteSourcesPtr);
}
}
public bool RefreshRemoteSource(string sourceName)
{
int result = NativeMethods.org_crosswire_sword_InstallMgr_refreshRemoteSource(_handle, sourceName);
return result == 0 ? true : false;
}
public IEnumerable GetRemoteModInfoList(Manager manager, string sourceName)
{
IntPtr pointer = NativeMethods.org_crosswire_sword_InstallMgr_getRemoteModInfoList(_handle, manager.Handle, sourceName);
return NativeMethods.MarshallModInfoArray(pointer);
}
public bool RemoteInstallModule(Manager to, string sourceName, string modName)
{
int result = NativeMethods.org_crosswire_sword_InstallMgr_remoteInstallModule(_handle, to.Handle, sourceName, modName);
return result == 0 ? true : false;
}
protected void Dispose(bool disposing)
{
if(disposing)
{
if(_handle != IntPtr.Zero)
{
NativeMethods.org_crosswire_sword_InstallMgr_delete(_handle);
}
}
}
public void Dispose ()
{
Dispose (true);
GC.Collect();
}
}
}