kfile-plugins Library API Documentation

kfile_vcf.cpp

00001 /* This file is part of the KDE project 00002 * Copyright (C) 2002 Shane Wright <me@shanewright.co.uk> 00003 * 00004 * This program is free software; you can redistribute it and/or 00005 * modify it under the terms of the GNU General Public 00006 * License as published by the Free Software Foundation version 2. 00007 * 00008 * This program is distributed in the hope that it will be useful, 00009 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00010 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00011 * General Public License for more details. 00012 * 00013 * You should have received a copy of the GNU General Public License 00014 * along with this program; see the file COPYING. If not, write to 00015 * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00016 * Boston, MA 02111-1307, USA. 00017 * 00018 */ 00019 00020 #include <kdebug.h> 00021 #include <config.h> 00022 #include "kfile_vcf.h" 00023 00024 #include <kprocess.h> 00025 #include <klocale.h> 00026 #include <kgenericfactory.h> 00027 #include <kstringvalidator.h> 00028 00029 #include <qdict.h> 00030 #include <qvalidator.h> 00031 #include <qcstring.h> 00032 #include <qfile.h> 00033 #include <qdatetime.h> 00034 00035 #if !defined(__osf__) 00036 #include <inttypes.h> 00037 #else 00038 typedef unsigned short uint32_t; 00039 #endif 00040 00041 typedef KGenericFactory<KVcfPlugin> VcfFactory; 00042 00043 K_EXPORT_COMPONENT_FACTORY(kfile_vcf, VcfFactory( "kfile_vcf" )) 00044 00045 KVcfPlugin::KVcfPlugin(QObject *parent, const char *name, 00046 const QStringList &args) 00047 00048 : KFilePlugin(parent, name, args) 00049 { 00050 KFileMimeTypeInfo* info = addMimeTypeInfo( "text/x-vcard" ); 00051 00052 KFileMimeTypeInfo::GroupInfo* group = 0L; 00053 00054 group = addGroupInfo(info, "Technical", i18n("Technical Details")); 00055 00056 KFileMimeTypeInfo::ItemInfo* item; 00057 00058 item = addItemInfo(group, "Name", i18n("Name"), QVariant::String); 00059 item = addItemInfo(group, "Email", i18n("Email"), QVariant::String); 00060 item = addItemInfo(group, "Telephone", i18n("Telephone"), QVariant::String); 00061 00062 } 00063 00064 00065 bool KVcfPlugin::readInfo( KFileMetaInfo& info, uint /*what*/ ) 00066 { 00067 00068 QFile file(info.path()); 00069 00070 if (!file.open(IO_ReadOnly)) 00071 { 00072 kdDebug(7034) << "Couldn't open " << QFile::encodeName(info.path()) << endl; 00073 return false; 00074 } 00075 00076 char id_name[] = "FN:"; 00077 char id_email[] = "EMAIL;INTERNET:"; 00078 00079 // we need a buffer for lines 00080 char linebuf[1000]; 00081 00082 // we need a buffer for other stuff 00083 char buf_name[1000] = ""; 00084 char buf_email[1000] = ""; 00085 buf_name[999] = '\0'; 00086 buf_email[999] = '\0'; 00087 char * myptr; 00088 00089 // FIXME: This is intensely inefficient!!! 00090 00091 bool done=false; 00092 while (!done) { 00093 00094 // read a line 00095 int r = file.readLine(linebuf, sizeof( linebuf )); 00096 00097 if ( r < 0 ) { 00098 done = true; 00099 break; 00100 } 00101 00102 // have we got something useful? 00103 if (memcmp(linebuf, id_name, 3) == 0) { 00104 // we have a name 00105 myptr = linebuf + 3; 00106 strlcpy(buf_name, myptr, sizeof( buf_name )); 00107 } else if (memcmp(linebuf, id_email, 15) == 0) { 00108 // we have a name 00109 myptr = linebuf + 15; 00110 strlcpy(buf_email, myptr, sizeof( buf_email )); 00111 } 00112 00113 // are we done yet? 00114 if ((strlen(buf_name) > 0 && strlen(buf_email) > 0) || file.atEnd()) 00115 done = true; 00116 00117 } 00118 00119 00120 KFileMetaInfoGroup group = appendGroup(info, "Technical"); 00121 00122 if (strlen(buf_name) > 0) 00123 appendItem(group, "Name", buf_name); 00124 00125 if (strlen(buf_email) > 0) 00126 appendItem(group, "Email", buf_email); 00127 00128 return true; 00129 } 00130 00131 #include "kfile_vcf.moc"
KDE Logo
This file is part of the documentation for kfile-plugins Library Version 3.3.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Thu Oct 21 19:46:13 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003