00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
#ifdef HAVE_CONFIG_H
00033
#include <config.h>
00034
#endif
00035
00036
#include "attachmentstrategy.h"
00037
00038
#include "partNode.h"
00039
#include "kmmsgpart.h"
00040
00041
#include <qstring.h>
00042
00043
#include <kdebug.h>
00044
00045
00046
namespace KMail {
00047
00048
00049
00050
00051
00052
00053
00054
class IconicAttachmentStrategy :
public AttachmentStrategy {
00055
friend class AttachmentStrategy;
00056
protected:
00057 IconicAttachmentStrategy() : AttachmentStrategy() {}
00058
virtual ~IconicAttachmentStrategy() {}
00059
00060
public:
00061
const char * name()
const {
return "iconic"; }
00062
const AttachmentStrategy * next()
const {
return smart(); }
00063
const AttachmentStrategy * prev()
const {
return hidden(); }
00064
00065
bool inlineNestedMessages()
const {
return false; }
00066 Display defaultDisplay(
const partNode * )
const {
return AsIcon; }
00067 };
00068
00069
00070
00071
00072
00073
00074
00075
00076
class SmartAttachmentStrategy :
public AttachmentStrategy {
00077
friend class AttachmentStrategy;
00078
protected:
00079 SmartAttachmentStrategy() : AttachmentStrategy() {}
00080
virtual ~SmartAttachmentStrategy() {}
00081
00082
public:
00083
const char * name()
const {
return "smart"; }
00084
const AttachmentStrategy * next()
const {
return inlined(); }
00085
const AttachmentStrategy * prev()
const {
return iconic(); }
00086
00087
bool inlineNestedMessages()
const {
return true; }
00088 Display defaultDisplay(
const partNode * node )
const {
00089
if ( node->hasContentDispositionInline() )
00090
00091
return Inline;
00092
if ( node->isAttachment() )
00093
00094
return AsIcon;
00095
if ( node->type() == DwMime::kTypeText &&
00096 node->msgPart().fileName().stripWhiteSpace().isEmpty() &&
00097 node->msgPart().name().stripWhiteSpace().isEmpty() )
00098
00099
return Inline;
00100
return AsIcon;
00101 }
00102 };
00103
00104
00105
00106
00107
00108
00109
class InlinedAttachmentStrategy :
public AttachmentStrategy {
00110
friend class AttachmentStrategy;
00111
protected:
00112 InlinedAttachmentStrategy() : AttachmentStrategy() {}
00113
virtual ~InlinedAttachmentStrategy() {}
00114
00115
public:
00116
const char * name()
const {
return "inlined"; }
00117
const AttachmentStrategy * next()
const {
return hidden(); }
00118
const AttachmentStrategy * prev()
const {
return smart(); }
00119
00120
bool inlineNestedMessages()
const {
return true; }
00121 Display defaultDisplay(
const partNode * )
const {
return Inline; }
00122 };
00123
00124
00125
00126
00127
00128
00129
class HiddenAttachmentStrategy :
public AttachmentStrategy {
00130
friend class AttachmentStrategy;
00131
protected:
00132 HiddenAttachmentStrategy() : AttachmentStrategy() {}
00133
virtual ~HiddenAttachmentStrategy() {}
00134
00135
public:
00136
const char * name()
const {
return "hidden"; }
00137
const AttachmentStrategy * next()
const {
return iconic(); }
00138
const AttachmentStrategy * prev()
const {
return inlined(); }
00139
00140
bool inlineNestedMessages()
const {
return false; }
00141 Display defaultDisplay(
const partNode * )
const {
return None; }
00142 };
00143
00144
00145
00146
00147
00148
00149 AttachmentStrategy::AttachmentStrategy() {
00150
00151 }
00152
00153 AttachmentStrategy::~AttachmentStrategy() {
00154
00155 }
00156
00157
const AttachmentStrategy * AttachmentStrategy::create( Type type ) {
00158
switch ( type ) {
00159
case Iconic:
return iconic();
00160
case Smart:
return smart();
00161
case Inlined:
return inlined();
00162
case Hidden:
return hidden();
00163 }
00164 kdFatal( 5006 ) <<
"AttachmentStrategy::create(): Unknown attachment startegy ( type == "
00165 << (
int)type <<
" ) requested!" << endl;
00166
return 0;
00167 }
00168
00169
const AttachmentStrategy * AttachmentStrategy::create(
const QString & type ) {
00170
QString lowerType = type.lower();
00171
if ( lowerType ==
"iconic" )
return iconic();
00172
00173
if ( lowerType ==
"inlined" )
return inlined();
00174
if ( lowerType ==
"hidden" )
return hidden();
00175
00176
00177
return smart();
00178 }
00179
00180
static const AttachmentStrategy * iconicStrategy = 0;
00181
static const AttachmentStrategy * smartStrategy = 0;
00182
static const AttachmentStrategy * inlinedStrategy = 0;
00183
static const AttachmentStrategy * hiddenStrategy = 0;
00184
00185
const AttachmentStrategy * AttachmentStrategy::iconic() {
00186
if ( !iconicStrategy )
00187 iconicStrategy =
new IconicAttachmentStrategy();
00188
return iconicStrategy;
00189 }
00190
00191
const AttachmentStrategy * AttachmentStrategy::smart() {
00192
if ( !smartStrategy )
00193 smartStrategy =
new SmartAttachmentStrategy();
00194
return smartStrategy;
00195 }
00196
00197
const AttachmentStrategy * AttachmentStrategy::inlined() {
00198
if ( !inlinedStrategy )
00199 inlinedStrategy =
new InlinedAttachmentStrategy();
00200
return inlinedStrategy;
00201 }
00202
00203
const AttachmentStrategy * AttachmentStrategy::hidden() {
00204
if ( !hiddenStrategy )
00205 hiddenStrategy =
new HiddenAttachmentStrategy();
00206
return hiddenStrategy;
00207 }
00208
00209 }