kabc Library API Documentation

binaryformat.cpp

00001 /* 00002 This file is part of libkabc. 00003 Copyright (c) 2002 Tobias Koenig <tokoe@kde.org> 00004 00005 This library is free software; you can redistribute it and/or 00006 modify it under the terms of the GNU Library General Public 00007 License as published by the Free Software Foundation; either 00008 version 2 of the License, or (at your option) any later version. 00009 00010 This library is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 Library General Public License for more details. 00014 00015 You should have received a copy of the GNU Library General Public License 00016 along with this library; see the file COPYING.LIB. If not, write to 00017 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00018 Boston, MA 02111-1307, USA. 00019 */ 00020 00021 #include <qdatastream.h> 00022 #include <qimage.h> 00023 00024 #include <kdebug.h> 00025 #include <klocale.h> 00026 #include <kstandarddirs.h> 00027 00028 #include "addressbook.h" 00029 #include "addressee.h" 00030 #include "picture.h" 00031 #include "sound.h" 00032 00033 #include "binaryformat.h" 00034 00035 #define BINARY_FORMAT_VERSION 1 00036 00037 using namespace KABC; 00038 00039 extern "C" 00040 { 00041 FormatPlugin *format() 00042 { 00043 return new BinaryFormat; 00044 } 00045 } 00046 00047 bool BinaryFormat::load( Addressee &addressee, QFile *file ) 00048 { 00049 kdDebug(5700) << "BinaryFormat::load()" << endl; 00050 QDataStream stream( file ); 00051 00052 if ( !checkHeader( stream ) ) 00053 return false; 00054 00055 loadAddressee( addressee, stream ); 00056 00057 return true; 00058 } 00059 00060 bool BinaryFormat::loadAll( AddressBook*, Resource *resource, QFile *file ) 00061 { 00062 kdDebug(5700) << "BinaryFormat::loadAll()" << endl; 00063 00064 QDataStream stream( file ); 00065 00066 if ( !checkHeader( stream ) ) 00067 return false; 00068 00069 Q_UINT32 entries; 00070 00071 stream >> entries; 00072 00073 for ( uint i = 0; i < entries; ++i ) { 00074 Addressee addressee; 00075 loadAddressee( addressee, stream ); 00076 addressee.setResource( resource ); 00077 addressee.setChanged( false ); 00078 resource->insertAddressee( addressee ); 00079 } 00080 00081 return true; 00082 } 00083 00084 void BinaryFormat::save( const Addressee &addressee, QFile *file ) 00085 { 00086 kdDebug(5700) << "BinaryFormat::save()" << endl; 00087 00088 QDataStream stream( file ); 00089 00090 writeHeader( stream ); 00091 00092 Q_UINT32 entries = 1; 00093 stream << entries; 00094 saveAddressee( addressee, stream ); 00095 } 00096 00097 void BinaryFormat::saveAll( AddressBook*, Resource *resource, QFile *file ) 00098 { 00099 kdDebug(5700) << "BinaryFormat::saveAll()" << endl; 00100 00101 Q_UINT32 counter = 0; 00102 QDataStream stream( file ); 00103 00104 writeHeader( stream ); 00105 // set dummy number of entries 00106 stream << counter; 00107 00108 Resource::Iterator it; 00109 for ( it = resource->begin(); it != resource->end(); ++it ) { 00110 saveAddressee( (*it), stream ); 00111 counter++; 00112 (*it).setChanged( false ); 00113 } 00114 00115 // set real number of entries 00116 stream.device()->at( 2 * sizeof( Q_UINT32 ) ); 00117 stream << counter; 00118 } 00119 00120 bool BinaryFormat::checkFormat( QFile *file ) const 00121 { 00122 kdDebug(5700) << "BinaryFormat::checkFormat()" << endl; 00123 00124 QDataStream stream( file ); 00125 00126 return checkHeader( stream ); 00127 } 00128 00129 bool BinaryFormat::checkHeader( QDataStream &stream ) const 00130 { 00131 Q_UINT32 magic, version; 00132 00133 stream >> magic >> version; 00134 00135 QFile *file = dynamic_cast<QFile*>( stream.device() ); 00136 00137 if ( !file ) { 00138 kdError() << i18n("Not a file?") << endl; 00139 return false; 00140 } 00141 00142 if ( magic != 0x2e93e ) { 00143 kdError() << i18n("File '%1' is not binary format.").arg( file->name() ) << endl; 00144 return false; 00145 } 00146 00147 if ( version != BINARY_FORMAT_VERSION ) { 00148 kdError() << i18n("File '%1' is the wrong version.").arg( file->name() ) << endl; 00149 return false; 00150 } 00151 00152 return true; 00153 } 00154 00155 void BinaryFormat::writeHeader( QDataStream &stream ) 00156 { 00157 Q_UINT32 magic, version; 00158 00159 magic = 0x2e93e; 00160 version = BINARY_FORMAT_VERSION; 00161 00162 stream << magic << version; 00163 } 00164 00165 void BinaryFormat::loadAddressee( Addressee &addressee, QDataStream &stream ) 00166 { 00167 stream >> addressee; 00168 /* 00169 // load pictures 00170 Picture photo = addressee.photo(); 00171 Picture logo = addressee.logo(); 00172 00173 if ( photo.isIntern() ) { 00174 QImage img; 00175 if ( !img.load( locateLocal( "data", "kabc/photos/" ) + addressee.uid() ) ) 00176 kdDebug(5700) << "No photo available for '" << addressee.uid() << "'." << endl; 00177 00178 addressee.setPhoto( img ); 00179 } 00180 00181 if ( logo.isIntern() ) { 00182 QImage img; 00183 if ( !img.load( locateLocal( "data", "kabc/logos/" ) + addressee.uid() ) ) 00184 kdDebug(5700) << "No logo available for '" << addressee.uid() << "'." << endl; 00185 00186 addressee.setLogo( img ); 00187 } 00188 00189 // load sound 00190 // TODO: load sound data from file 00191 */ 00192 } 00193 00194 void BinaryFormat::saveAddressee( const Addressee &addressee, QDataStream &stream ) 00195 { 00196 stream << addressee; 00197 /* 00198 // load pictures 00199 Picture photo = addressee.photo(); 00200 Picture logo = addressee.logo(); 00201 00202 if ( photo.isIntern() ) { 00203 QImage img = photo.data(); 00204 QString fileName = locateLocal( "data", "kabc/photos/" ) + addressee.uid(); 00205 00206 if ( !img.save( fileName, "PNG" ) ) 00207 kdDebug(5700) << "Unable to save photo for '" << addressee.uid() << "'." << endl; 00208 } 00209 00210 if ( logo.isIntern() ) { 00211 QImage img = logo.data(); 00212 QString fileName = locateLocal( "data", "kabc/logos/" ) + addressee.uid(); 00213 00214 if ( !img.save( fileName, "PNG" ) ) 00215 kdDebug(5700) << "Unable to save logo for '" << addressee.uid() << "'." << endl; 00216 } 00217 00218 // save sound 00219 // TODO: save the sound data to file 00220 */ 00221 }
KDE Logo
This file is part of the documentation for kabc Library Version 3.2.3.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Fri Aug 20 09:50:09 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003