kabc
binaryformat.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "binaryformat.h"
00022 #include "kabc/addressbook.h"
00023 #include "kabc/addressee.h"
00024 #include "kabc/picture.h"
00025 #include "kabc/sound.h"
00026
00027 #include <kdebug.h>
00028 #include <klocale.h>
00029 #include <kstandarddirs.h>
00030
00031 #include <QtCore/QDataStream>
00032 #include <QtGui/QImage>
00033
00034 #define BINARY_FORMAT_VERSION 1
00035
00036 using namespace KABC;
00037
00038 extern "C"
00039 {
00040 KDE_EXPORT Format *format()
00041 {
00042 return new BinaryFormat;
00043 }
00044 }
00045
00046 bool BinaryFormat::load( Addressee &addressee, QFile *file )
00047 {
00048 kDebug();
00049 QDataStream stream( file );
00050
00051 if ( !checkHeader( stream ) ) {
00052 return false;
00053 }
00054
00055 loadAddressee( addressee, stream );
00056
00057 return true;
00058 }
00059
00060 bool BinaryFormat::loadAll( AddressBook *, Resource *resource, QFile *file )
00061 {
00062 kDebug();
00063
00064 QDataStream stream( file );
00065
00066 if ( !checkHeader( stream ) ) {
00067 return false;
00068 }
00069
00070 quint32 entries;
00071
00072 stream >> entries;
00073
00074 for ( uint i = 0; i < entries; ++i ) {
00075 Addressee addressee;
00076 loadAddressee( addressee, stream );
00077 addressee.setResource( resource );
00078 addressee.setChanged( false );
00079 resource->insertAddressee( addressee );
00080 }
00081
00082 return true;
00083 }
00084
00085 void BinaryFormat::save( const Addressee &addressee, QFile *file )
00086 {
00087 kDebug();
00088
00089 QDataStream stream( file );
00090
00091 writeHeader( stream );
00092
00093 quint32 entries = 1;
00094 stream << entries;
00095 saveAddressee( addressee, stream );
00096 }
00097
00098 void BinaryFormat::saveAll( AddressBook *, Resource *resource, QFile *file )
00099 {
00100 kDebug();
00101
00102 quint32 counter = 0;
00103 QDataStream stream( file );
00104
00105 writeHeader( stream );
00106
00107 stream << counter;
00108
00109 Resource::Iterator it;
00110 for ( it = resource->begin(); it != resource->end(); ++it ) {
00111 saveAddressee( (*it), stream );
00112 counter++;
00113 (*it).setChanged( false );
00114 }
00115
00116
00117 stream.device()->seek( 2 * sizeof( quint32 ) );
00118 stream << counter;
00119 }
00120
00121 bool BinaryFormat::checkFormat( QFile *file ) const
00122 {
00123 kDebug();
00124
00125 QDataStream stream( file );
00126
00127 return checkHeader( stream );
00128 }
00129
00130 bool BinaryFormat::checkHeader( QDataStream &stream ) const
00131 {
00132 quint32 magic, version;
00133
00134 stream >> magic >> version;
00135
00136 QFile *file = dynamic_cast<QFile*>( stream.device() );
00137
00138 if ( !file ) {
00139 kError() << i18n( "Not a file?" );
00140 return false;
00141 }
00142
00143 if ( magic != 0x2e93e ) {
00144 kError() << i18n( "File '%1' is not binary format.", file->fileName() );
00145 return false;
00146 }
00147
00148 if ( version != BINARY_FORMAT_VERSION ) {
00149 kError() << i18n( "File '%1' is the wrong version.", file->fileName() );
00150 return false;
00151 }
00152
00153 return true;
00154 }
00155
00156 void BinaryFormat::writeHeader( QDataStream &stream )
00157 {
00158 quint32 magic, version;
00159
00160 magic = 0x2e93e;
00161 version = BINARY_FORMAT_VERSION;
00162
00163 stream << magic << version;
00164 }
00165
00166 void BinaryFormat::loadAddressee( Addressee &addressee, QDataStream &stream )
00167 {
00168 stream >> addressee;
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193 }
00194
00195 void BinaryFormat::saveAddressee( const Addressee &addressee, QDataStream &stream )
00196 {
00197 stream << addressee;
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222 }