kde-playground/kdepimlibs/kioslave/mbox/urlinfo.cpp
2015-04-14 21:49:29 +00:00

136 lines
3.1 KiB
C++

/*
* 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;
}