diff options
Diffstat (limited to 'kioslaves/mbox/stat.cc')
-rw-r--r-- | kioslaves/mbox/stat.cc | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/kioslaves/mbox/stat.cc b/kioslaves/mbox/stat.cc new file mode 100644 index 000000000..e3418cbbd --- /dev/null +++ b/kioslaves/mbox/stat.cc @@ -0,0 +1,115 @@ +/* + * 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 "stat.h" + +#include "readmbox.h" +#include "urlinfo.h" + +#include <kdebug.h> +#include <kio/global.h> + +#include <sys/stat.h> + +KIO::UDSEntry Stat::stat( const UrlInfo& info ) +{ + if( info.type() == UrlInfo::message ) + return Stat::statMessage( info ); + else if( info.type() == UrlInfo::directory ) + return Stat::statDirectory( info ); + else + return KIO::UDSEntry(); +} + +KIO::UDSEntry Stat::stat( ReadMBox& mbox, const UrlInfo& info ) +{ + kdDebug() << "Stat::stat()" << endl; + KIO::UDSEntry entry; + QString url; + + if( info.type() == UrlInfo::invalid ) + return entry; + else if( info.type() == UrlInfo::message ) + mbox.searchMessage( info.id() ); + + Stat::addAtom( entry, KIO::UDS_FILE_TYPE, S_IFREG ); + Stat::addAtom( entry, KIO::UDS_MIME_TYPE, "message/rfc822" ); + + url = QString( "mbox:%1/%2" ).arg( info.filename(), mbox.currentID() ); + Stat::addAtom( entry, KIO::UDS_URL, url ); + if( mbox.currentID().isEmpty() ) + Stat::addAtom( entry, KIO::UDS_NAME, "foobar" ); + else + Stat::addAtom( entry, KIO::UDS_NAME, mbox.currentID() ); + + + Stat::addAtom( entry, KIO::UDS_SIZE, mbox.skipMessage() ); + + return entry; +} + +KIO::UDSEntry Stat::statDirectory( const UrlInfo& info ) +{ + kdDebug() << "statDirectory()" << endl; + KIO::UDSEntry entry; + + //Specific things for a directory + Stat::addAtom( entry, KIO::UDS_FILE_TYPE, S_IFDIR ); + Stat::addAtom( entry, KIO::UDS_NAME, info.filename() ); + + return entry; +} + +KIO::UDSEntry Stat::statMessage( const UrlInfo& info ) +{ + kdDebug() << "statMessage( " << info.url() << " )" << endl; + KIO::UDSEntry entry; + QString url = QString( "mbox:%1" ).arg( info.url() ); + + //Specific things for a message + Stat::addAtom( entry, KIO::UDS_FILE_TYPE, S_IFREG ); + Stat::addAtom( entry, KIO::UDS_MIME_TYPE, "message/rfc822" ); + + Stat::addAtom( entry, KIO::UDS_URL, url ); + url = url.right( url.length() - url.findRev( "/" ) - 1 ); + Stat::addAtom( entry, KIO::UDS_NAME, url ); + + return entry; +} + +void Stat::addAtom( KIO::UDSEntry& entry, unsigned int uds, const QString& str ) +{ + KIO::UDSAtom atom; + atom.m_uds = uds; + atom.m_str = str; + atom.m_long = 0; + + entry.append( atom ); +} + + +void Stat::addAtom( KIO::UDSEntry& entry, unsigned int uds, long lng ) +{ + KIO::UDSAtom atom; + atom.m_uds = uds; + atom.m_str = QString::null; + atom.m_long = lng; + + entry.append( atom ); +} + |