|
|
|
/* This file is part of the KDE project
|
|
|
|
* Copyright (C) 2002 Shane Wright <me@shanewright.co.uk>
|
|
|
|
*
|
|
|
|
* 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 version 2.
|
|
|
|
*
|
|
|
|
* 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; see the file COPYING. If not, write to
|
|
|
|
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
|
|
* Boston, MA 02110-1301, USA.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <config.h>
|
|
|
|
#include "kfile_rfc822.h"
|
|
|
|
|
|
|
|
#include <kprocess.h>
|
|
|
|
#include <klocale.h>
|
|
|
|
#include <kgenericfactory.h>
|
|
|
|
#include <kstringvalidator.h>
|
|
|
|
#include <kdebug.h>
|
|
|
|
|
|
|
|
#include <tqdict.h>
|
|
|
|
#include <tqvalidator.h>
|
|
|
|
#include <tqcstring.h>
|
|
|
|
#include <tqfile.h>
|
|
|
|
#include <tqdatetime.h>
|
|
|
|
|
|
|
|
#if !defined(__osf__)
|
|
|
|
#include <inttypes.h>
|
|
|
|
#else
|
|
|
|
typedef unsigned short uint32_t;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
typedef KGenericFactory<KRfc822Plugin> Rfc822Factory;
|
|
|
|
|
|
|
|
K_EXPORT_COMPONENT_FACTORY(kfile_rfc822, Rfc822Factory( "kfile_rfc822" ))
|
|
|
|
|
|
|
|
KRfc822Plugin::KRfc822Plugin(TQObject *tqparent, const char *name,
|
|
|
|
const TQStringList &args)
|
|
|
|
|
|
|
|
: KFilePlugin(tqparent, name, args)
|
|
|
|
{
|
|
|
|
KFileMimeTypeInfo* info = addMimeTypeInfo( "message/rfc822" );
|
|
|
|
|
|
|
|
KFileMimeTypeInfo::GroupInfo* group = 0L;
|
|
|
|
|
|
|
|
group = addGroupInfo(info, "Technical", i18n("Technical Details"));
|
|
|
|
|
|
|
|
KFileMimeTypeInfo::ItemInfo* item;
|
|
|
|
|
|
|
|
item = addItemInfo(group, "From", i18n("From"), TQVariant::String);
|
|
|
|
item = addItemInfo(group, "To", i18n("To"), TQVariant::String);
|
|
|
|
item = addItemInfo(group, "Subject", i18n("Subject"), TQVariant::String);
|
|
|
|
item = addItemInfo(group, "Date", i18n("Date"), TQVariant::String);
|
|
|
|
item = addItemInfo(group, "Content-Type", i18n("Content-Type"), TQVariant::String);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool KRfc822Plugin::readInfo( KFileMetaInfo& info, uint /*what*/ )
|
|
|
|
{
|
|
|
|
|
|
|
|
TQFile file(info.path());
|
|
|
|
|
|
|
|
if (!file.open(IO_ReadOnly))
|
|
|
|
{
|
|
|
|
kdDebug(7034) << "Couldn't open " << TQFile::encodeName(info.path()) << endl;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
Note to self: probably should use TQCString for all this, but
|
|
|
|
what we're doing is simple and self-contained so never mind..
|
|
|
|
*/
|
|
|
|
|
|
|
|
char id_from[] = "From: ";
|
|
|
|
char id_to[] = "To: ";
|
|
|
|
char id_subject[] = "Subject: ";
|
|
|
|
char id_date[] = "Date: ";
|
|
|
|
char id_contenttype[] = "Content-Type: ";
|
|
|
|
|
|
|
|
// we need a buffer for lines
|
|
|
|
char linebuf[4096];
|
|
|
|
|
|
|
|
// we need a buffer for other stuff
|
|
|
|
char buf_from[1000] = "";
|
|
|
|
char buf_to[1000] = "";
|
|
|
|
char buf_subject[1000] = "";
|
|
|
|
char buf_date[1000] = "";
|
|
|
|
char buf_contenttype[1000] = "";
|
|
|
|
|
|
|
|
memset(buf_from, 0, 999);
|
|
|
|
memset(buf_to, 0, 999);
|
|
|
|
memset(buf_subject, 0, 999);
|
|
|
|
memset(buf_date, 0, 999);
|
|
|
|
memset(buf_contenttype, 0, 999);
|
|
|
|
char * myptr;
|
|
|
|
|
|
|
|
bool done=false;
|
|
|
|
while (!done) {
|
|
|
|
|
|
|
|
// read a line
|
|
|
|
file.readLine(linebuf, sizeof( linebuf ));
|
|
|
|
|
|
|
|
// have we got something useful?
|
|
|
|
if (memcmp(linebuf, id_from, 6) == 0) {
|
|
|
|
// we have a name
|
|
|
|
myptr = linebuf + 6;
|
|
|
|
strncpy(buf_from, myptr, sizeof( buf_from ));
|
|
|
|
buf_from[998]='\0';
|
|
|
|
} else if (memcmp(linebuf, id_to, 4) == 0) {
|
|
|
|
// we have a name
|
|
|
|
myptr = linebuf + 4;
|
|
|
|
strncpy(buf_to, myptr, sizeof( buf_to ));
|
|
|
|
buf_to[998]='\0';
|
|
|
|
} else if (memcmp(linebuf, id_subject, 9) == 0) {
|
|
|
|
// we have a name
|
|
|
|
myptr = linebuf + 9;
|
|
|
|
strncpy(buf_subject, myptr, sizeof( buf_subject ));
|
|
|
|
buf_subject[998]='\0';
|
|
|
|
} else if (memcmp(linebuf, id_date, 6) == 0) {
|
|
|
|
// we have a name
|
|
|
|
myptr = linebuf + 6;
|
|
|
|
strncpy(buf_date, myptr, sizeof( buf_date ));
|
|
|
|
buf_date[998]='\0';
|
|
|
|
} else if (memcmp(linebuf, id_contenttype, 14) == 0) {
|
|
|
|
// we have a name
|
|
|
|
myptr = linebuf + 14;
|
|
|
|
strncpy(buf_contenttype, myptr, sizeof( buf_contenttype ));
|
|
|
|
buf_contenttype[998]='\0';
|
|
|
|
}
|
|
|
|
|
|
|
|
// are we done yet?
|
|
|
|
if (
|
|
|
|
((strlen(buf_from) > 0) && (strlen(buf_to) > 0) &&
|
|
|
|
(strlen(buf_subject) > 0) && (strlen(buf_date) > 0) &&
|
|
|
|
(strlen(buf_contenttype) > 0)) ||
|
|
|
|
(file.atEnd())
|
|
|
|
)
|
|
|
|
done = true;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
KFileMetaInfoGroup group = appendGroup(info, "Technical");
|
|
|
|
|
|
|
|
if (strlen(buf_from) > 0) appendItem(group, "From", buf_from);
|
|
|
|
if (strlen(buf_to) > 0) appendItem(group, "To", buf_to);
|
|
|
|
if (strlen(buf_subject) > 0) appendItem(group, "Subject", buf_subject);
|
|
|
|
if (strlen(buf_date) > 0) appendItem(group, "Date", buf_date);
|
|
|
|
if (strlen(buf_contenttype) > 0) appendItem(group, "Content-Type", buf_contenttype);
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
#include "kfile_rfc822.moc"
|