~ubuntu-branches/ubuntu/raring/kdepimlibs/raring-proposed

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/*
    ktnefproperty.cpp

    Copyright (C) 2002 Michael Goffioul <kdeprint@swing.be>

    This file is part of KTNEF, the KDE TNEF support library/program.

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.

    This library 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
    Library General Public License for more details.

    You should have received a copy of the GNU Library General Public License
    along with this library; see the file COPYING.LIB.  If not, write to
    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
    Boston, MA 02110-1301, USA.
 */
/**
 * @file
 * This file is part of the API for handling TNEF data and
 * defines the KTNEFProperty class.
 *
 * @author Michael Goffioul
 */

#include "ktnefproperty.h"
#include "mapi.h"

#include <QtCore/QDateTime>

#include <ctype.h>

using namespace KTnef;

class KTNEFProperty::Private
{
  public:
    int _key;
    int _type;
    QVariant _value;
    QVariant _name;
};

KTNEFProperty::KTNEFProperty()
  : d( new Private )
{
}

KTNEFProperty::KTNEFProperty( int key_, int type_, const QVariant &value_,
                              const QVariant &name_ )
  : d( new Private )
{
  d->_key = key_;
  d->_type = type_;
  d->_value = value_;
  d->_name = name_;
}

KTNEFProperty::KTNEFProperty( const KTNEFProperty &p )
  : d( new Private )
{
  *d = *p.d;
}

KTNEFProperty::~KTNEFProperty()
{
  delete d;
}

KTNEFProperty &KTNEFProperty::operator=( const KTNEFProperty &other )
{
  if ( this != &other ) {
    *d = *other.d;
  }

  return *this;
}

QString KTNEFProperty::keyString() const
{
  if ( d->_name.isValid() ) {
    if ( d->_name.type() == QVariant::String ) {
      return d->_name.toString();
    } else {
      return mapiNamedTagString( d->_name.toUInt(), d->_key );
    }
  } else {
    return mapiTagString( d->_key );
  }
}

QString KTNEFProperty::formatValue( const QVariant &value, bool beautify )
{
  if ( value.type() == QVariant::ByteArray ) {
    // check the first bytes (up to 8) if they are
    // printable characters
    QByteArray arr = value.toByteArray();
    bool printable = true;
    for ( int i=qMin( arr.size(), 8 )-1; i>=0 && printable; i-- ) {
      printable = ( isprint( arr[ i ] ) != 0 );
    }
    if ( !printable ) {
      QString s;
      int i;
      int txtCount = beautify ? qMin( arr.size(), 32 ) : arr.size();
      for ( i=0; i < txtCount; ++i ) {
        s.append( QString().sprintf( "%02X", ( uchar )arr[ i ] ) );
        if ( beautify ) {
          s.append( " " );
        }
      }
      if ( i < arr.size() ) {
        s.append( "... (size=" + QString::number( arr.size() ) + ')' );
      }
      return s;
    }
  }
  //else if ( value.type() == QVariant::DateTime )
  //	return value.toDateTime().toString();
  return value.toString();
}

QString KTNEFProperty::valueString() const
{
  return formatValue( d->_value );
}

int KTNEFProperty::key() const
{
  return d->_key;
}

int KTNEFProperty::type() const
{
  return d->_type;
}

QVariant KTNEFProperty::value() const
{
  return d->_value;
}

QVariant KTNEFProperty::name() const
{
  return d->_name;
}

bool KTNEFProperty::isVector() const
{
  return d->_value.type() == QVariant::List;
}