diff options
Diffstat (limited to 'kfile-plugins/rfc822')
-rw-r--r-- | kfile-plugins/rfc822/Makefile.am | 22 | ||||
-rw-r--r-- | kfile-plugins/rfc822/RETURNED_ITEMS | 14 | ||||
-rw-r--r-- | kfile-plugins/rfc822/kfile_rfc822.cpp | 161 | ||||
-rw-r--r-- | kfile-plugins/rfc822/kfile_rfc822.desktop | 63 | ||||
-rw-r--r-- | kfile-plugins/rfc822/kfile_rfc822.h | 37 |
5 files changed, 297 insertions, 0 deletions
diff --git a/kfile-plugins/rfc822/Makefile.am b/kfile-plugins/rfc822/Makefile.am new file mode 100644 index 000000000..f8fa6f941 --- /dev/null +++ b/kfile-plugins/rfc822/Makefile.am @@ -0,0 +1,22 @@ +## Makefile.am for rfc822 file meta info plugin + +# set the include path for X, qt and KDE +INCLUDES = $(all_includes) + +# these are the headers for your project +noinst_HEADERS = kfile_rfc822.h + +kde_module_LTLIBRARIES = kfile_rfc822.la + +kfile_rfc822_la_SOURCES = kfile_rfc822.cpp +kfile_rfc822_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN) +kfile_rfc822_la_LIBADD = $(LIB_KSYCOCA) + +# let automoc handle all of the meta source files (moc) +METASOURCES = AUTO + +messages: rc.cpp + $(XGETTEXT) kfile_rfc822.cpp -o $(podir)/kfile_rfc822.pot + +services_DATA = kfile_rfc822.desktop +servicesdir = $(kde_servicesdir) diff --git a/kfile-plugins/rfc822/RETURNED_ITEMS b/kfile-plugins/rfc822/RETURNED_ITEMS new file mode 100644 index 000000000..be8c9b7e7 --- /dev/null +++ b/kfile-plugins/rfc822/RETURNED_ITEMS @@ -0,0 +1,14 @@ +If you make a new plugin, please add the list of returned items to this list. + + +rfc822 plugin: +=========== + +type key W/A details +------------------------------------------------------------------------ +String From -/- Name/email of sender +String To -/- Name/email of recipient +String Subject -/- Subject line of message +String Date -/- Date stamped in message +String Content-Type -/- Content type declared in headers + diff --git a/kfile-plugins/rfc822/kfile_rfc822.cpp b/kfile-plugins/rfc822/kfile_rfc822.cpp new file mode 100644 index 000000000..794d335d6 --- /dev/null +++ b/kfile-plugins/rfc822/kfile_rfc822.cpp @@ -0,0 +1,161 @@ +/* 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 <qdict.h> +#include <qvalidator.h> +#include <qcstring.h> +#include <qfile.h> +#include <qdatetime.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(QObject *parent, const char *name, + const QStringList &args) + + : KFilePlugin(parent, 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"), QVariant::String); + item = addItemInfo(group, "To", i18n("To"), QVariant::String); + item = addItemInfo(group, "Subject", i18n("Subject"), QVariant::String); + item = addItemInfo(group, "Date", i18n("Date"), QVariant::String); + item = addItemInfo(group, "Content-Type", i18n("Content-Type"), QVariant::String); +} + + +bool KRfc822Plugin::readInfo( KFileMetaInfo& info, uint /*what*/ ) +{ + + QFile file(info.path()); + + if (!file.open(IO_ReadOnly)) + { + kdDebug(7034) << "Couldn't open " << QFile::encodeName(info.path()) << endl; + return false; + } + + /* + Note to self: probably should use QCString 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" diff --git a/kfile-plugins/rfc822/kfile_rfc822.desktop b/kfile-plugins/rfc822/kfile_rfc822.desktop new file mode 100644 index 000000000..1428c96f8 --- /dev/null +++ b/kfile-plugins/rfc822/kfile_rfc822.desktop @@ -0,0 +1,63 @@ +[Desktop Entry] +Type=Service +Name=Email Info +Name[af]=E-pos informasie +Name[be]=Інфармацыя аб паведамленні электроннай пошты +Name[bg]=Информация за е-поща +Name[br]=Titouroù postel +Name[ca]=Informació de correu-e +Name[cs]=Informace o emailu +Name[cy]=Gwybodaeth Ebost +Name[da]=E-mail-info +Name[de]=E-Mail-Info +Name[el]=Πληροφορίες Email +Name[eo]=Retpoŝt-informo +Name[es]=Info de correo electrónico +Name[et]=Kirja info +Name[eu]=E-posta informazioa +Name[fa]=اطلاعات رایانامه +Name[fi]=Sähköpostitiedot +Name[fr]=Informations sur le courrier électronique +Name[fy]=E-port-ynformaasje +Name[gl]=Información de Correo-e +Name[he]=מידע על דוא"ל +Name[hi]=ई-मेल जानकारी +Name[hr]=Email Informacije +Name[hu]=E-mail-jellemzők +Name[is]=Tölvupóst upplýsingar +Name[it]=Informazioni di posta elettronica +Name[ja]=Eメール 情報 +Name[ka]=ელფოსტის ინფორმაცია +Name[kk]=Эл.пошта мәліметі +Name[km]=ព័ត៌មានអ៊ីមែល +Name[lt]=E. pašto info +Name[mk]=Информации за е-пошта +Name[ms]=Info Emel +Name[nb]=E-post-info +Name[nds]=Nettbreef-Informatschonen +Name[ne]=इमेल सूचना +Name[nl]=E-mail-informatie +Name[nn]=Epost-info +Name[pa]=ਈ-ਪੱਤਰ ਜਾਣਕਾਰੀ +Name[pl]=Informacja o e-mailu +Name[pt]=Informação do E-Mail +Name[pt_BR]=Informações sobre E-mail +Name[ro]=Informaţii e-mail +Name[ru]=Сведения об электронной почте +Name[se]=E-boastadieđut +Name[sk]=Informácie o emaily +Name[sl]=Informacije o e-pošti +Name[sr]=Е-поштанске информације +Name[sr@Latn]=E-poštanske informacije +Name[sv]=E-postinformation +Name[ta]=மின்னஞ்சல் தகவல் +Name[tg]=Иттилоот дар бораи почтаи электронӣ +Name[tr]=E-Posta Bilgisi +Name[uk]=Інформація про повідомлення ел. пошти +Name[zh_CN]=电子邮件信息 +Name[zh_TW]=電子郵件資訊 +ServiceTypes=KFilePlugin +X-KDE-Library=kfile_rfc822 +MimeType=message/rfc822 +PreferredGroups=Technical +PreferredItems=From,To,Subject,Date,Content-Type diff --git a/kfile-plugins/rfc822/kfile_rfc822.h b/kfile-plugins/rfc822/kfile_rfc822.h new file mode 100644 index 000000000..f2066754a --- /dev/null +++ b/kfile-plugins/rfc822/kfile_rfc822.h @@ -0,0 +1,37 @@ +/* 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. + * + */ + +#ifndef __KFILE_RFC822_H__ +#define __KFILE_RFC822_H__ + +#include <kfilemetainfo.h> + +class QStringList; + +class KRfc822Plugin: public KFilePlugin +{ + Q_OBJECT + +public: + KRfc822Plugin( QObject *parent, const char *name, const QStringList& args ); + + virtual bool readInfo( KFileMetaInfo& info, uint what); +}; + +#endif |