/*
 * This is a simple kioslave to handle mbox-files.
 * Copyright (C) 2004 Mart Kelder (mart.kde@hccnet.nl)
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 */
#include "urlinfo.h"

#include <kdebug.h>
#include <kurl.h>

#include <QFileInfo>
#include <QString>

UrlInfo::UrlInfo( const KUrl& url, const UrlType type )
	: m_type( invalid ),
	m_filename( new QString ),
	m_id( new QString )
{
	calculateInfo( url, type );
}

UrlInfo::~UrlInfo()
{
	delete m_filename;
	delete m_id;
}

QString UrlInfo::mimetype() const
{
	switch( m_type )
	{
	case message:
		return "message/rfc822";
	case directory:
		return "inode/directory";
	case invalid:
	default:
		return "invalid";
	}
}

QString UrlInfo::filename() const
{
	return *m_filename;
}

QString UrlInfo::id() const
{
	return *m_id;
}

QString UrlInfo::url() const
{
	return *m_filename + '/' + *m_id;
}


void UrlInfo::calculateInfo( const KUrl& url, const UrlType type )
{
	bool found = false;

	if( !found && type & UrlInfo::message )
		found = isMessage( url );
	if( !found && type & UrlInfo::directory )
		found = isDirectory( url );
	if( !found )
	{
		m_type = invalid;
		*m_filename = "";
		*m_id = "";
	}
}

bool UrlInfo::isDirectory( const KUrl& url )
{
	//Check is url is in the form mbox://{filename}
	QString filename = url.path();
	QFileInfo info;

	//Remove ending /
	while( filename.length() > 1 && filename.right( 1 ) == "/" )
		filename.remove( filename.length()-2, 1 );

	//Is this a directory?
	info.setFile( filename );
	if( !info.isFile() )
		return false;

	//Setting parameters
	*m_filename = filename;
	(*m_id).clear();
	m_type = directory;
	kDebug() << "urlInfo::isDirectory(" << url << " )";
	return true;
}

bool UrlInfo::isMessage( const KUrl& url )
{
	QString path = url.path();
	QFileInfo info;
	int cutindex = path.lastIndexOf( '/' );

	//Does it contain at least one /?
	if( cutindex < 0 )
		return false;

	//Does the mbox-file exists?
	info.setFile( path.left( cutindex ) );
	if( !info.isFile() )
		return false;

	//Settings parameters
	kDebug() <<"urlInfo::isMessage(" << url <<" )";
	m_type = message;
	*m_id = path.right( path.length() - cutindex - 1 );
	*m_filename = path.left( cutindex );

	return true;
}

