kmail Library API Documentation

mailinglist-magic.cpp

00001 #ifdef HAVE_CONFIG_H 00002 #include <config.h> 00003 #endif 00004 00005 #include "kmmessage.h" 00006 #include "mailinglist-magic.h" 00007 00008 typedef QString (*MagicDetectorFunc) (const KMMessage *, QCString &, QString &); 00009 00010 /* Sender: (owner-([^@]+)|([^@+]-owner)@ */ 00011 static QString check_sender(const KMMessage *message, 00012 QCString &header_name, 00013 QString &header_value ) 00014 { 00015 QString header = message->headerField( "Sender" ); 00016 00017 if ( header.isEmpty() ) 00018 return QString::null; 00019 00020 if ( header.left( 6 ) == "owner-" ) 00021 { 00022 header_name = "Sender"; 00023 header_value = header; 00024 header = header.mid( 6, header.find( '@' ) - 6 ); 00025 00026 } else { 00027 int index = header.find( "-owner@ " ); 00028 if ( index == -1 ) 00029 return QString::null; 00030 00031 header.truncate( index ); 00032 header_name = "Sender"; 00033 header_value = header; 00034 } 00035 00036 return header; 00037 } 00038 00039 /* X-BeenThere: ([^@]+) */ 00040 static QString check_x_beenthere(const KMMessage *message, 00041 QCString &header_name, 00042 QString &header_value ) 00043 { 00044 QString header = message->headerField( "X-BeenThere" ); 00045 if ( header.isNull() || header.find( '@' ) == -1 ) 00046 return QString::null; 00047 00048 header_name = "X-BeenThere"; 00049 header_value = header; 00050 header.truncate( header.find( '@' ) ); 00051 return header; 00052 } 00053 00054 /* Delivered-To:: <([^@]+) */ 00055 static QString check_delivered_to(const KMMessage *message, 00056 QCString &header_name, 00057 QString &header_value ) 00058 { 00059 QString header = message->headerField( "Delivered-To" ); 00060 if ( header.isNull() || header.left(13 ) != "mailing list" 00061 || header.find( '@' ) == -1 ) 00062 return QString::null; 00063 00064 header_name = "Delivered-To"; 00065 header_value = header; 00066 00067 return header.mid( 13, header.find( '@' ) - 13 ); 00068 } 00069 00070 /* X-Mailing-List: <?([^@]+) */ 00071 static QString check_x_mailing_list(const KMMessage *message, 00072 QCString &header_name, 00073 QString &header_value ) 00074 { 00075 QString header = message->headerField( "X-Mailing-List"); 00076 if ( header.isEmpty() ) 00077 return QString::null; 00078 00079 if ( header.find( '@' ) < 1 ) 00080 return QString::null; 00081 00082 header_name = "X-Mailing-List"; 00083 header_value = header; 00084 if ( header[0] == '<' ) 00085 header = header.mid(1, header.find( '@' ) - 1); 00086 else 00087 header.truncate( header.find( '@' ) ); 00088 return header; 00089 } 00090 00091 /* List-Id: [^<]* <([^.]+) */ 00092 static QString check_list_id(const KMMessage *message, 00093 QCString &header_name, 00094 QString &header_value ) 00095 { 00096 int lAnglePos, firstDotPos; 00097 QString header = message->headerField( "List-Id" ); 00098 if ( header.isEmpty() ) 00099 return QString::null; 00100 00101 lAnglePos = header.find( '<' ); 00102 if ( lAnglePos < 0 ) 00103 return QString::null; 00104 00105 firstDotPos = header.find( '.', lAnglePos ); 00106 if ( firstDotPos < 0 ) 00107 return QString::null; 00108 00109 header_name = "List-Id"; 00110 header_value = header.mid( lAnglePos ); 00111 header = header.mid( lAnglePos + 1, firstDotPos - lAnglePos - 1 ); 00112 return header; 00113 } 00114 00115 00116 /* List-Post: <mailto:[^< ]*>) */ 00117 static QString check_list_post(const KMMessage *message, 00118 QCString &header_name, 00119 QString &header_value ) 00120 { 00121 QString header = message->headerField( "List-Post" ); 00122 if ( header.isEmpty() ) 00123 return QString::null; 00124 00125 int lAnglePos = header.find( "<mailto:" ); 00126 if ( lAnglePos < 0 ) 00127 return QString::null; 00128 00129 header_name = "List-Post"; 00130 header_value = header; 00131 header = header.mid( lAnglePos + 8, header.length()); 00132 header.truncate( header.find('@') ); 00133 return header; 00134 } 00135 00136 /* Mailing-List: list ([^@]+) */ 00137 static QString check_mailing_list(const KMMessage *message, 00138 QCString &header_name, 00139 QString &header_value ) 00140 { 00141 QString header = message->headerField( "Mailing-List"); 00142 if ( header.isEmpty() ) 00143 return QString::null; 00144 00145 if (header.left( 5 ) != "list " || header.find( '@' ) < 5 ) 00146 return QString::null; 00147 00148 header_name = "Mailing-List"; 00149 header_value = header; 00150 header = header.mid(5, header.find( '@' ) - 5); 00151 return header; 00152 } 00153 00154 00155 /* X-Loop: ([^@]+) */ 00156 static QString check_x_loop(const KMMessage *message, 00157 QCString &header_name, 00158 QString &header_value ){ 00159 QString header = message->headerField( "X-Loop"); 00160 if ( header.isEmpty() ) 00161 return QString::null; 00162 00163 if (header.find( '@' ) < 2 ) 00164 return QString::null; 00165 00166 header_name = "X-Loop"; 00167 header_value = header; 00168 header.truncate(header.find( '@' )); 00169 return header; 00170 } 00171 00172 /* X-ML-Name: (.+) */ 00173 static QString check_x_ml_name(const KMMessage *message, 00174 QCString &header_name, 00175 QString &header_value ){ 00176 QString header = message->headerField( "X-ML-Name"); 00177 if ( header.isEmpty() ) 00178 return QString::null; 00179 00180 header_name = "X-ML-Name"; 00181 header_value = header; 00182 header.truncate(header.find( '@' )); 00183 return header; 00184 } 00185 00186 MagicDetectorFunc magic_detector[] = 00187 { 00188 check_list_id, 00189 check_list_post, 00190 check_sender, 00191 check_x_mailing_list, 00192 check_mailing_list, 00193 check_delivered_to, 00194 check_x_beenthere, 00195 check_x_loop, 00196 check_x_ml_name 00197 }; 00198 00199 static const int num_detectors = sizeof (magic_detector) / sizeof (magic_detector[0]); 00200 00201 QString 00202 KMMLInfo::name( const KMMessage *message, QCString &header_name, 00203 QString &header_value ) 00204 { 00205 QString mlist; 00206 header_name = QCString(); 00207 header_value = QString::null; 00208 00209 if ( !message ) 00210 return QString::null; 00211 00212 for (int i = 0; i < num_detectors; i++) { 00213 mlist = magic_detector[i] (message, header_name, header_value); 00214 if ( !mlist.isNull() ) 00215 return mlist; 00216 } 00217 00218 00219 return QString::null; 00220 }
KDE Logo
This file is part of the documentation for kmail Library Version 3.2.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Jul 28 23:58:04 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003