/* ****************************************************************************
  This file is part of KBabel

  Copyright (C) 2002-2003 by Marco Wegner <mail@marcowegner.de>

  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, write to the Free Software
  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

**************************************************************************** */


#ifndef KBMAILER_H
#define KBMAILER_H

class QString;
class QStringList;

class KCompletion;
class KConfig;
class KLineEditDlg;

namespace KBabel
{

/**
 * Utility class for providing the capability to send compressed mail
 * archives from within KBabel and the Catalog Manager.
 *
 * @short Utility class for compressed mail attachments.
 * @author Marco Wegner <mail@marcowegner.de>
 */
class KBabelMailer
{
  public:
    /**
     * Constructor.
     *
     * @param configFile The config file to be used.
     */
    KBabelMailer(QString configFile);
    virtual ~KBabelMailer();

    /**
     * Send only one file as a mail attachment. The file can either be sent
     * as a compressed or an uncompressed file.
     *
     * @param fileName the name of the file to be sent.
     */
    void sendOneFile(const QString& fileName);
    /**
     * Send several files as a mail attachment. The files will be included in
     * an archive.
     *
     * @param fileList contains the names of the files to be sent.
     * @param initialName the possible name of the archive
     */
    void sendFiles(QStringList fileList, const QString& initialName = QString::null);
    /**
     * The archives which are to be sent as mail attachments are created as
     * temporary files. The names of the successfully created archives are
     * stored. When leaving KBabel these files have to be deleted. This is
     * done here.
     */
    void removeTempFiles();
    /**
     * Sets the the PO files' base directory.
     *
     * @param dir the PO file base dir.
     */
    void setPOBaseDir(const QString& dir) { _poBaseDir = dir; }


  private:
    /**
     * This is where the archive is actually created.
     *
     * @param fileList contains the names of the files to be included in
     *  the archive.
     * @param initialName the name used as initial name when the archive
     *  name is queried.
     *
     * @return name of the archive if it was created successfully,
     *  otherwise QString::null.
     */
    QString createArchive(QStringList fileList, QString initialName);
    /**
     * Read the config file to extract the values for compression
     * method and compression of single files.
     */
    void readConfig();
    /**
     * Save the config settings, only the list of recent archive names for now.
     */
    void saveConfig( );


  private:
    /**
     * This variable is used to store the pathe to the temp dir.
     */
    QString tempDir;
    /**
     * This variable is used to store the filenames of the temporary
     * archive files.
     */
    QStringList tempFileNames;
    /**
     * Whether to use bzip2 as compression method. If false use gzip.
     */
    bool bzipCompression;
    /**
     * Whether to compress single files as well.
     */
    bool singleFileCompression;
    /**
     * The dialog for querying the archive name.
     */
    KLineEditDlg* editDialog;
    /**
     * The completion object for the dialog's KLineEdit.
     */
    KCompletion* editCompletion;
    /**
     * This QStringList stores the recently used archive names.
     */
    QStringList archiveList;
    /**
     * The KConfig object.
     */
    KConfig* _config;
    /**
     * The config file from which the PoBaseDir variable is to be read.
     */
    QString _configFile;
    /**
     * The path to the PO Base directory
     */
    QString _poBaseDir;
};

}

#endif // KBMAILER_H
