20#include "KoZipStore.h"
26#include <tdeversion.h>
28#include <tdeio/netaccess.h>
29#if ! KDE_IS_VERSION( 3, 4, 1 )
31#include <tqfileinfo.h>
34KoZipStore::KoZipStore(
const TQString & _filename, Mode _mode,
const TQCString & appIdentification )
36 kdDebug(s_area) <<
"KoZipStore Constructor filename = " << _filename
37 <<
" mode = " << int(_mode)
38 <<
" mimetype = " << appIdentification << endl;
40 m_pZip =
new KZip( _filename );
42#if ! KDE_IS_VERSION( 3, 4, 1 )
45 TQDir dir( TQFileInfo( _filename ).dir() );
46 if (_mode == Write && !TQFileInfo( dir.path() ).isWritable() )
48 kdWarning(s_area) << dir.path() <<
" isn't writable" << endl;
56 m_bGood = init( _mode, appIdentification );
60KoZipStore::KoZipStore( TQIODevice *dev, Mode mode,
const TQCString & appIdentification )
62 m_pZip =
new KZip( dev );
63 m_bGood = init( mode, appIdentification );
66KoZipStore::KoZipStore( TQWidget* window,
const KURL & _url,
const TQString & _filename, Mode _mode,
const TQCString & appIdentification )
68 kdDebug(s_area) <<
"KoZipStore Constructor url" << _url.prettyURL()
69 <<
" filename = " << _filename
70 <<
" mode = " << int(_mode)
71 <<
" mimetype = " << appIdentification << endl;
76 if ( _mode == KoStore::Read )
78 m_fileMode = KoStoreBase::RemoteRead;
79 m_localFileName = _filename;
84 m_fileMode = KoStoreBase::RemoteWrite;
85 m_localFileName =
"/tmp/kozip";
88 m_pZip =
new KZip( m_localFileName );
89 m_bGood = init( _mode, appIdentification );
92KoZipStore::~KoZipStore()
94 kdDebug(s_area) <<
"KoZipStore::~KoZipStore" << endl;
99 if ( m_fileMode == KoStoreBase::RemoteRead )
101 TDEIO::NetAccess::removeTempFile( m_localFileName );
103 else if ( m_fileMode == KoStoreBase::RemoteWrite )
105 TDEIO::NetAccess::upload( m_localFileName, m_url, m_window );
114 bool good = m_pZip->open( _mode == Write ? IO_WriteOnly : IO_ReadOnly );
116 if ( good && _mode == Read )
117 good = m_pZip->directory() != 0;
118 else if ( good && _mode == Write )
122 m_pZip->setCompression( KZip::NoCompression );
123 m_pZip->setExtraField( KZip::NoExtraField );
125 (void)m_pZip->writeFile(
"mimetype",
"",
"", appIdentification.length(), appIdentification.data() );
126 m_pZip->setCompression( KZip::DeflateCompression );
132bool KoZipStore::openWrite(
const TQString& name )
136 m_byteArray.resize( 0 );
137 m_stream =
new TQBuffer( m_byteArray );
138 m_stream->open( IO_WriteOnly );
142 return m_pZip->prepareWriting( name,
"",
"" , 0 );
145bool KoZipStore::openRead(
const TQString& name )
147 const KArchiveEntry * entry = m_pZip->directory()->entry( name );
154 if ( entry->isDirectory() )
156 kdWarning(s_area) <<
name <<
" is a directory !" << endl;
161 const KZipFileEntry * f =
static_cast<const KZipFileEntry *
>(entry);
163 m_stream = f->device();
170 if ( _len == 0L )
return 0;
175 kdError(s_area) <<
"KoStore: You must open before writing" << endl;
178 if ( m_mode != Write )
180 kdError(s_area) <<
"KoStore: Can not write to store that is opened for reading" << endl;
185 if ( m_pZip->writeData( _data, _len ) )
190bool KoZipStore::closeWrite()
192 kdDebug(s_area) <<
"Wrote file " << m_sName <<
" into ZIP archive. size "
194 return m_pZip->doneWriting( m_iSize );
196 if ( !m_pZip->writeFile( m_sName ,
"user",
"group", m_iSize, m_byteArray.data() ) )
197 kdWarning( s_area ) <<
"Failed to write " << m_sName << endl;
198 m_byteArray.resize( 0 );
203bool KoZipStore::enterRelativeDirectory(
const TQString& dirName )
205 if ( m_mode == Read ) {
206 if ( !m_currentDir ) {
207 m_currentDir = m_pZip->directory();
208 Q_ASSERT( m_currentPath.isEmpty() );
210 const KArchiveEntry *entry = m_currentDir->entry( dirName );
211 if ( entry && entry->isDirectory() ) {
212 m_currentDir =
dynamic_cast<const KArchiveDirectory*
>( entry );
213 return m_currentDir != 0;
221bool KoZipStore::enterAbsoluteDirectory(
const TQString& path )
223 if ( path.isEmpty() )
228 m_currentDir =
dynamic_cast<const KArchiveDirectory*
>( m_pZip->directory()->entry( path ) );
229 Q_ASSERT( m_currentDir );
230 return m_currentDir != 0;
233bool KoZipStore::fileExists(
const TQString& absPath )
const
235 const KArchiveEntry *entry = m_pZip->directory()->entry( absPath );
236 return entry && entry->isFile();
virtual bool init(Mode mode)
Init store - called by constructor.
TQ_LONG write(const TQByteArray &_data)
Write data into the currently opened file.
const char * name(StdAction id)