parent
d2f1ad161d
commit
7f328ba699
@ -0,0 +1,42 @@
|
||||
#################################################
|
||||
#
|
||||
# (C) 2010 Serghei Amelian
|
||||
# serghei (DOT) amelian (AT) gmail.com
|
||||
#
|
||||
# Improvements and feedback are welcome
|
||||
#
|
||||
# This file is released under GPL >= 2
|
||||
#
|
||||
#################################################
|
||||
|
||||
include_directories(
|
||||
${TQT_INCLUDE_DIRS}
|
||||
${CMAKE_BINARY_DIR}
|
||||
${CMAKE_BINARY_DIR}/tdecore
|
||||
${CMAKE_SOURCE_DIR}/tdecore
|
||||
${CMAKE_SOURCE_DIR}/tdeio/tdeio
|
||||
)
|
||||
|
||||
link_directories(
|
||||
${TQT_LIBRARY_DIRS}
|
||||
)
|
||||
|
||||
|
||||
##### other data ################################
|
||||
|
||||
install( FILES kxzfilter.desktop DESTINATION ${SERVICES_INSTALL_DIR} )
|
||||
|
||||
|
||||
##### kxzfilter ###############################
|
||||
|
||||
set( target kxzfilter )
|
||||
|
||||
set( ${target}_SRCS
|
||||
kxzfilter.cpp
|
||||
)
|
||||
|
||||
tde_add_kpart( ${target} AUTOMOC
|
||||
SOURCES ${${target}_SRCS}
|
||||
LINK tdeio-shared ${LZMA_LIBRARIES}
|
||||
DESTINATION ${PLUGIN_INSTALL_DIR}
|
||||
)
|
@ -0,0 +1,189 @@
|
||||
/* This file is part of the KDE libraries
|
||||
Copyright (C) 2007-2008 Per Øyvind Karlsen <peroyvind@mandriva.org>
|
||||
|
||||
Based on kbzip2filter:
|
||||
Copyright (C) 2000-2005 David Faure <faure@kde.org>
|
||||
|
||||
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.
|
||||
*/
|
||||
|
||||
#include "kxzfilter.h"
|
||||
#include <klibloader.h>
|
||||
|
||||
#include <config.h>
|
||||
#if HAVE_XZ_SUPPORT
|
||||
extern "C" {
|
||||
#include <lzma.h>
|
||||
}
|
||||
|
||||
#include <kdebug.h>
|
||||
|
||||
#include <tqiodevice.h>
|
||||
|
||||
// #define DEBUG_XZ
|
||||
|
||||
class KXzFilterFactory : public KLibFactory
|
||||
{
|
||||
public:
|
||||
KXzFilterFactory() : KLibFactory() {}
|
||||
virtual ~KXzFilterFactory(){}
|
||||
TQObject *createObject( TQObject *, const char *, const char*, const TQStringList & )
|
||||
{
|
||||
return new KXzFilter;
|
||||
}
|
||||
};
|
||||
|
||||
K_EXPORT_COMPONENT_FACTORY( kxzfilter, KXzFilterFactory )
|
||||
|
||||
|
||||
class KXzFilter::Private
|
||||
{
|
||||
public:
|
||||
Private()
|
||||
: isInitialized(false)
|
||||
{
|
||||
memset(&zStream, 0, sizeof(zStream));
|
||||
mode = 0;
|
||||
}
|
||||
|
||||
lzma_stream zStream;
|
||||
int mode;
|
||||
bool isInitialized;
|
||||
};
|
||||
|
||||
KXzFilter::KXzFilter()
|
||||
:d(new Private)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
KXzFilter::~KXzFilter()
|
||||
{
|
||||
delete d;
|
||||
}
|
||||
|
||||
void KXzFilter::init( int mode )
|
||||
{
|
||||
if (d->isInitialized) {
|
||||
terminate();
|
||||
}
|
||||
|
||||
lzma_ret result;
|
||||
d->zStream.next_in = 0;
|
||||
d->zStream.avail_in = 0;
|
||||
if ( mode == IO_ReadOnly )
|
||||
{
|
||||
/* We set the memlimit for decompression to 100MiB which should be
|
||||
* more than enough to be sufficient for level 9 which requires 65 MiB.
|
||||
*/
|
||||
result = lzma_auto_decoder(&d->zStream, 100<<20, 0);
|
||||
//kdDebug(7131) << "lzma_auto_decoder returned " << result;
|
||||
} else if ( mode == IO_WriteOnly ) {
|
||||
result = lzma_easy_encoder(&d->zStream, LZMA_PRESET_DEFAULT, LZMA_CHECK_CRC32);
|
||||
//kdDebug(7131) << "lzma_easy_encoder returned " << result;
|
||||
} else
|
||||
kdWarning(7131) << "Unsupported mode " << mode << ". Only IO_ReadOnly and IO_WriteOnly supported";
|
||||
d->mode = mode;
|
||||
d->isInitialized = true;
|
||||
}
|
||||
|
||||
int KXzFilter::mode() const
|
||||
{
|
||||
return d->mode;
|
||||
}
|
||||
|
||||
void KXzFilter::terminate()
|
||||
{
|
||||
if (d->mode == IO_ReadOnly || d->mode == IO_WriteOnly) {
|
||||
lzma_end(&d->zStream);
|
||||
} else {
|
||||
kdWarning(7131) << "Unsupported mode " << d->mode << ". Only IO_ReadOnly and IO_WriteOnly supported";
|
||||
}
|
||||
d->isInitialized = false;
|
||||
}
|
||||
|
||||
|
||||
void KXzFilter::reset()
|
||||
{
|
||||
//kdDebug(7131) << "KXzFilter::reset";
|
||||
// liblzma doesn't have a reset call...
|
||||
terminate();
|
||||
init( d->mode );
|
||||
}
|
||||
|
||||
void KXzFilter::setOutBuffer( char * data, uint maxlen )
|
||||
{
|
||||
d->zStream.avail_out = maxlen;
|
||||
d->zStream.next_out = (uint8_t *)data;
|
||||
}
|
||||
|
||||
void KXzFilter::setInBuffer( const char *data, unsigned int size )
|
||||
{
|
||||
d->zStream.avail_in = size;
|
||||
d->zStream.next_in = (uint8_t *)const_cast<char *>(data);
|
||||
}
|
||||
|
||||
int KXzFilter::inBufferAvailable() const
|
||||
{
|
||||
return d->zStream.avail_in;
|
||||
}
|
||||
|
||||
int KXzFilter::outBufferAvailable() const
|
||||
{
|
||||
return d->zStream.avail_out;
|
||||
}
|
||||
|
||||
KXzFilter::Result KXzFilter::uncompress()
|
||||
{
|
||||
//kdDebug(7131) << "Calling lzma_code with avail_in=" << inBufferAvailable() << " avail_out =" << outBufferAvailable();
|
||||
lzma_ret result = lzma_code(&d->zStream, LZMA_RUN);
|
||||
if ( result != LZMA_OK )
|
||||
{
|
||||
kdDebug(7131) << "lzma_code returned " << result;
|
||||
kdDebug(7131) << "KXzFilter::uncompress " << ( result == LZMA_STREAM_END ? END : ERROR );
|
||||
}
|
||||
|
||||
switch (result) {
|
||||
case LZMA_OK:
|
||||
return OK;
|
||||
case LZMA_STREAM_END:
|
||||
return END;
|
||||
default:
|
||||
return ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
KXzFilter::Result KXzFilter::compress( bool finish )
|
||||
{
|
||||
//kdDebug(7131) << "Calling lzma_code with avail_in=" << inBufferAvailable() << " avail_out=" << outBufferAvailable();
|
||||
lzma_ret result = lzma_code(&d->zStream, finish ? LZMA_FINISH : LZMA_RUN );
|
||||
|
||||
switch (result) {
|
||||
case LZMA_OK:
|
||||
return OK;
|
||||
break;
|
||||
case LZMA_STREAM_END:
|
||||
kdDebug(7131) << " lzma_code returned " << result;
|
||||
return END;
|
||||
break;
|
||||
default:
|
||||
kdDebug(7131) << " lzma_code returned " << result;
|
||||
return ERROR;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* HAVE_XZ_SUPPORT */
|
@ -0,0 +1,86 @@
|
||||
[Desktop Entry]
|
||||
Type=Service
|
||||
Name=XZ Filter
|
||||
Name[af]=XZ Filter
|
||||
Name[ar]=فلتر XZ
|
||||
Name[az]=XZ Filtri
|
||||
Name[be]=Фільтр XZ
|
||||
Name[bg]=Филтър XZ
|
||||
Name[bn]=জি-জিপ (XZ) ফিল্টার
|
||||
Name[br]=Sil XZ
|
||||
Name[ca]=Filtre XZ
|
||||
Name[cs]=Filtr XZ
|
||||
Name[csb]=Filter XZ
|
||||
Name[cy]=Hidl XZ
|
||||
Name[da]=XZ-filter
|
||||
Name[de]=XZ-Filter
|
||||
Name[el]=Φίλτρο XZ
|
||||
Name[eo]=XZ-filtrilo
|
||||
Name[es]=Filtro XZ
|
||||
Name[et]=XZ filter
|
||||
Name[eu]=XZ iragazkia
|
||||
Name[fa]=پالایۀ XZ
|
||||
Name[fi]=XZ-suodin
|
||||
Name[fr]=Filtre XZ
|
||||
Name[fy]=XZ-filter
|
||||
Name[ga]=Scagaire XZ
|
||||
Name[gl]=Filtro XZ
|
||||
Name[he]=מסנן XZ
|
||||
Name[hi]=XZ फ़िल्टर
|
||||
Name[hr]=XZ filtar
|
||||
Name[hu]=XZ szűrő
|
||||
Name[id]=Filter XZ
|
||||
Name[is]=XZ sía
|
||||
Name[it]=Filtro XZ
|
||||
Name[ja]=XZ フィルタ
|
||||
Name[ka]=XZ ფილტრი
|
||||
Name[kk]=XZ сүзгісі
|
||||
Name[km]=តម្រង XZ
|
||||
Name[ko]=XZ 거르개
|
||||
Name[lb]=XZ-Filter
|
||||
Name[lt]=XZ filtras
|
||||
Name[lv]=XZ Filtrs
|
||||
Name[mk]=XZ филтер
|
||||
Name[mn]=XZ-Filter
|
||||
Name[ms]=Penapis XZ
|
||||
Name[mt]=Filtru XZ
|
||||
Name[nb]=XZ-filter
|
||||
Name[nds]=XZ-Filter
|
||||
Name[ne]=XZ फिल्टर
|
||||
Name[nl]=XZ-filter
|
||||
Name[nn]=XZ-filter
|
||||
Name[nso]=Sesekodi sa XZ
|
||||
Name[pa]=XZ ਫਿਲਟਰ
|
||||
Name[pl]=Filtr XZ
|
||||
Name[pt]=Filtro XZ
|
||||
Name[pt_BR]=Filtro XZ
|
||||
Name[ro]=Filtru XZ
|
||||
Name[ru]=Фильтр XZ
|
||||
Name[rw]=Muyunguruzi XZ
|
||||
Name[se]=XZ-filter
|
||||
Name[sk]=XZ filter
|
||||
Name[sl]=Filter za XZ
|
||||
Name[sq]=Filteri XZ
|
||||
Name[sr]=XZ филтер
|
||||
Name[sr@Latn]=XZ filter
|
||||
Name[ss]=Sisefo se XZ
|
||||
Name[sv]=XZ-filter
|
||||
Name[ta]=XZ வடிகட்டி
|
||||
Name[te]=జిజిప్ గలని
|
||||
Name[tg]=Таровиши XZ
|
||||
Name[th]=ตัวกรอง XZ
|
||||
Name[tr]=XZ Filtresi
|
||||
Name[tt]=XZ Sözgeçe
|
||||
Name[uk]=Фільтр XZ
|
||||
Name[uz]=XZ-filter
|
||||
Name[uz@cyrillic]=XZ-филтер
|
||||
Name[ven]=Filithara ya XZ
|
||||
Name[vi]=Bộ lọc XZ
|
||||
Name[wa]=Passete XZ
|
||||
Name[xh]=Isihluzi se XZ
|
||||
Name[zh_CN]=XZ 过滤程序
|
||||
Name[zh_HK]=XZ 過濾器
|
||||
Name[zh_TW]=XZ 過濾器
|
||||
Name[zu]=Ihluzo le-XZ
|
||||
X-TDE-Library=kxzfilter
|
||||
ServiceTypes=TDECompressionFilter,application/x-xz,application/x-txz,application/x-lzma
|
@ -0,0 +1,60 @@
|
||||
/* This file is part of the KDE libraries
|
||||
Copyright (C) 2007-2008 Per Øyvind Karlsen <peroyvind@mandriva.org>
|
||||
|
||||
Based on kbzip2filter:
|
||||
Copyright (C) 2000 David Faure <faure@kde.org>
|
||||
|
||||
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.
|
||||
*/
|
||||
|
||||
#ifndef KXZFILTER_H
|
||||
#define KXZFILTER_H
|
||||
|
||||
#include <config.h>
|
||||
#if HAVE_XZ_SUPPORT
|
||||
|
||||
#include "kfilterbase.h"
|
||||
|
||||
/**
|
||||
* Internal class used by KFilterDev
|
||||
* @internal
|
||||
*/
|
||||
class KXzFilter : public KFilterBase
|
||||
{
|
||||
public:
|
||||
KXzFilter();
|
||||
virtual ~KXzFilter();
|
||||
|
||||
virtual void init( int );
|
||||
virtual int mode() const;
|
||||
virtual void terminate();
|
||||
virtual void reset();
|
||||
virtual bool readHeader() { return true; } // lzma handles it by itself ! Cool !
|
||||
virtual bool writeHeader( const TQCString & ) { return true; }
|
||||
virtual void setOutBuffer( char * data, uint maxlen );
|
||||
virtual void setInBuffer( const char * data, uint size );
|
||||
virtual int inBufferAvailable() const;
|
||||
virtual int outBufferAvailable() const;
|
||||
virtual Result uncompress();
|
||||
virtual Result compress( bool finish );
|
||||
private:
|
||||
class Private;
|
||||
Private* const d;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif // KXZFILTER_H
|
Loading…
Reference in new issue