You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdepim/kioslaves/mbox/urlinfo.cc

134 lines
2.9 KiB

/*
* 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 <tqfileinfo.h>
#include <tqstring.h>
UrlInfo::UrlInfo( const KURL& url, const UrlType type )
: m_type( invalid ),
m_filename( new TQString ),
m_id( new TQString )
{
calculateInfo( url, type );
}
UrlInfo::~UrlInfo()
{
delete m_filename;
delete m_id;
}
TQString UrlInfo::mimetype() const
{
switch( m_type )
{
case message:
return "message/rfc822";
case directory:
return "inode/directory";
case invalid:
default:
return "invalid";
}
}
TQString UrlInfo::filename() const
{
return *m_filename;
}
TQString UrlInfo::id() const
{
return *m_id;
}
TQString 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}
TQString filename = url.path();
TQFileInfo 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 paramaters
*m_filename = filename;
*m_id = TQString();
m_type = directory;
kdDebug() << "urlInfo::isDirectory( " << url << " )" << endl;
return true;
}
bool UrlInfo::isMessage( const KURL& url )
{
TQString path = url.path();
TQFileInfo info;
int cutindex = path.findRev( '/' );
//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
kdDebug() << "urlInfo::isMessage( " << url << " )" << endl;
m_type = message;
*m_id = path.right( path.length() - cutindex - 1 );
*m_filename = path.left( cutindex );
return true;
}