/********************************************************************\
 * 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; either version 2 of   *
 * the License, or (at your option) any later version.              *
 *                                                                  *
 * 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.                     *
 *                                                                  *
 * You should have received a copy of the GNU General Public License*
 * along with this program; if not, contact:                        *
 *                                                                  *
 * Free Software Foundation           Voice:  +1-617-542-5942       *
 * 51 Franklin Street, Fifth Floor    Fax:    +1-617-542-2652       *
 * Boston, MA  02110-1301,  USA       gnu@gnu.org                   *
 *                                                                  *
\********************************************************************/

/** @addtogroup Engine
    @{ */
/** @addtogroup TransLog  Transaction Logging
    The transaction logging mechanism provides a very simple,
    low-level logging of user input to a file.   The goal of
    the transaction logger is to provide mechanism of last resort
    for recovering lost user data in the event of a crash.

    Ideally, the storage backends should provide a robust journaling,
    logging and crash-recovery mechanism.  But just in case they
    don't, or it didn't work, this mechanism provides a "Plan B"
    by providing a low-tech, fool-proof, simple logging system
    that can be used to recover user input.
    There are some simple command-line tools that will read a log
    and replay it.

    @{ */
/** @file TransLog.h
    @brief API for the transaction logger
    @author Copyright (C) 1998 Linas Vepstas
*/

#ifndef XACC_TRANS_LOG_H
#define XACC_TRANS_LOG_H

#include "Account.h"
#include "Transaction.h"

#ifdef __cplusplus
extern "C" {
#endif

void    xaccOpenLog (void);
void    xaccCloseLog (void);
void    xaccReopenLog (void);

/**
 * @param trans The transaction to write out to the log
 * @param flag The engine currently uses the log mechanism with flag char set as
 * follows:
 * 'B' for 'begin edit' (followed by the transaction as it looks
 *     before any changes, i.e. the 'old value')
 * 'D' for delete (i.e. delete the previous B; echoes the data in the
 *     'old B')
 * 'C' for commit (i.e. accept a previous B; data that follows is the
 *     'new value')
 * 'R' for rollback (i.e. revert to previous B; data that follows should
 *     be identical to old B)
 */
void    xaccTransWriteLog (Transaction *trans, char flag);

/** document me */
void    xaccLogEnable (void);

/** document me */
void    xaccLogDisable (void);

/** The xaccLogSetBaseName() method sets the base filepath and the
 *    root part of the journal file name.  If the journal file is
 *    already open, it will close it and reopen it with the new
 *    base name.
 */
void    xaccLogSetBaseName (const char *);

/** Test a filename to see if it is the name of the current logfile */
gboolean xaccFileIsCurrentLog (const gchar *name);

#ifdef __cplusplus
}
#endif

#endif /* XACC_TRANS_LOG_H */
/** @} */
/** @} */

