[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kopete-devel
Subject:    Re: [kopete-devel]
From:       Olivier Goffart <ogoffart () kde ! org>
Date:       2005-09-30 16:09:11
Message-ID: 200509301809.16465.ogoffart () kde ! org
[Download RAW message or body]

[Attachment #2 (multipart/signed)]


Le Vendredi 30 Septembre 2005 02:23, Engin Aydogan a écrit :
> SVN commit 465508 by engin:
>
> Disabled KNewStuff buttons by default. They can be enabled by settings
> ForceNewStuff to true in configuration file in section ChatWindowSettings.
> Also added package verification routines which are commented out since user
> is willing to take the risk by forcing this buggy feature enabled. Reason
> why this routines are commited anyway is I don't want it to disappear in my
> local hard drive ;)


Can you please describe the exact reason of this ?

Also i don't think that disabling the button is a correct way to disable the 
feature,  or user will ask 'how to enable it' 
the correct way is to make the button invisible i think.

Are commented string parsed by gettext ?

> [Error: 7]  

what's that strange code ?


I think that getNewHotStuff is a nice feature, and disabling it is a pitty.
I'd like to know reasons.


> ---
> branches/KDE/3.5/kdenetwork/kopete/kopete/config/appearance/appearanceconfi
>g.cpp #465507:465508 @@ -95,7 +95,8 @@
>  class KopeteStyleNewStuff : public KNewStuff
>  {
>  	public:
> -	KopeteStyleNewStuff(const QString &type, AppearanceConfig * ac, QWidget
> *parentWidget=0) : KNewStuff( type, parentWidget ), mAppearanceConfig( ac )
> +	KopeteStyleNewStuff(const QString &type, AppearanceConfig * ac, QWidget
> *parentWidget=0) +         : KNewStuff( type, parentWidget ),
> mAppearanceConfig( ac ), m_integrity( false ) { }
>
>  	bool createUploadFile(const QString&)
> @@ -108,6 +109,15 @@
>  		{
>  			// copy to apps/kopete/styles
>  			kdDebug(14000) << k_funcinfo << " installing simple style file: " <<
> origFileName << endl; +			/*
> +			if( !m_integrity )
> +			{
> +				KMessageBox::queuedMessageBox( parentWidget(), KMessageBox::Error,
> +					i18n( "Package could not be verified. Please contact to author of the
> package. [Error: 7]" ), +					i18n( "Package Verification Failed" ) );
> +				return false;
> +			}
> +			*/
>  			QString styleSheet = mAppearanceConfig->fileContents(fileName);
>  			if ( Kopete::XSLT( styleSheet ).isValid() )
>  				mAppearanceConfig->addStyle( origFileName.section( '.', 0, 0 ),
> styleSheet ); @@ -117,6 +127,16 @@
>  		}
>  		else if ( origFileName.endsWith( ".tar.gz" ) )
>  		{
> +			/* If KNewStuff is forced to be enabled from config file, then no
> verification is necessary. +			int r;
> +			if( ( r = verify( fileName ) ) != 0 )
> +			{
> +				KMessageBox::queuedMessageBox( parentWidget(), KMessageBox::Error,
> +					i18n( "Package could not be verified. Please contact to author of the
> package. [Error: %1]" ).arg( r ), +					i18n( "Package Verification Failed"
> ) );
> +				return false;
> +			}
> +			*/
>  			// install a tar.gz
>  			kdDebug(14000) << k_funcinfo << " extracting gzipped tarball: " <<
> origFileName << endl; QString uncompress = "application/x-gzip";
> @@ -132,6 +152,15 @@
>  		else if ( origFileName.endsWith( ".xsl.gz" ) )
>  		{
>  			kdDebug(14000) << k_funcinfo << " installing gzipped single style file:
> " << origFileName << endl; +			/*
> +			if( !m_integrity )
> +			{
> +				KMessageBox::queuedMessageBox( parentWidget(), KMessageBox::Error,
> +					i18n( "Package could not be verified. Please contact to author of the
> package. [Error: 7]" ), +					i18n( "Package Verification Failed" ) );
> +				return false;
> +			}
> +			*/
>  			QIODevice * iod = KFilterDev::deviceForFile( fileName,
> "application/x-gzip" ); iod->open( IO_ReadOnly );
>  			QTextStream stream( iod );
> @@ -146,14 +175,114 @@
>  		}
>  		else
>  		{
> -			kdDebug( 14000 ) << k_funcinfo << "unsupported file type" << endl;
> +			/* Commented out due to string freeze.
> +			KMessageBox::queuedMessageBox( parentWidget(), KMessageBox::Error,
> +				i18n( "Only allowed package extensions are .xsl, .tar.gz and .xsl.gz"
> ), +				i18n( "Extension not supported" ) );
> +			*/
>  			return false;
>  		}
>  	}
>
> +	/**
> +	 * A package named Foo must be packaged as Foo.tar.gz use alphanumeric
> package +	 * names (i.e. do not use a . in the file name ).
> +	 * content should be like as follows:
> +	 * /Foo.xsl
> +	 * /data/Foo/file1.png
> +	 * /data/Foo/file2.png
> +	 * /data/Foo/bar/zoo/boo.png ...
> +	 *
> +	 * @param file file name to be verified
> +	 * @return 0 on success<br>
> +	 *         1 if root directory contains garbage<br>
> +	 *         2 data directory does not exists<br>
> +	 *         3 data directory contains garbage files/dirs<br>
> +	 *         4 the directory under data/ is not the same name as
> package<br> +	 *         5 Style file does not exist.<br>
> +	 *         6 data directory does not contain any files<br>
> +	 *         7 file does not even exists!
> +	 *         8 package name must be same with basename of the file
> +	 */
> +	int verify( const QString& file )
> +	{
> +		QFileInfo i( file );
> +		if( !i.exists() )
> +		{
> +			kdDebug( 14000 ) << k_funcinfo << "ERROR: Could not open file [" <<
> file << "] This should never have happened." << endl; +			return 7; //
> actually it's pointless to return this, since this is a sign of internal
> error. +		}
> +
> +		if( !m_integrity )
> +		{
> +			kdDebug( 14000 ) << k_funcinfo << "ERROR: Package name is not the same
> with basename of the filename." << endl; +			return 8;
> +		}
> +
> +		QString base = i.baseName();
> +
> +		KTar tar( file, "application/x-gzip" );
> +		tar.open( IO_ReadOnly );
> +		const KArchiveDirectory *dir = tar.directory();
> +		QStringList list = dir->entries();
> +
> +		if( list.count() != 2 )
> +		{
> +			kdDebug( 14000 ) << k_funcinfo << "ERROR: Garbage file or directory in
> root directory of the package" << endl; +			return 1;
> +		}
> +
> +		const KArchiveEntry *data = dir->entry( "data" );
> +		if( !data || !data->isDirectory()  )
> +		{
> +			kdDebug( 14000 ) << k_funcinfo << "ERROR: data directory does not
> exist" << endl; +			return 2;
> +		}
> +		else
> +		{
> +			list = ((KArchiveDirectory*)data)->entries();
> +			if( list.count() == 0 )
> +			{
> +				kdDebug( 14000 ) << k_funcinfo << "ERROR: There is no file in the data
> directory. So why use a tarball?" << endl; +				return 6;
> +			}
> +			else if( list.count() != 1 )
> +			{
> +				kdDebug( 14000 ) << k_funcinfo << "ERROR: data directory contains
> garbage entries" << endl; +				return 3;
> +			}
> +			data = ((KArchiveDirectory*)data)->entry( base );
> +			if( !data || !data->isDirectory() )
> +			{
> +				kdDebug( 14000 ) << k_funcinfo << "ERROR: directory under data dir
> should have the same name as package" << endl; +				return 4;
> +			}
> +		}
> +
> +		const KArchiveEntry *xsl = dir->entry( base + ".xsl" );
> +		if( !xsl || !xsl->isFile() )
> +		{
> +			kdDebug( 14000 ) << k_funcinfo << "ERROR: Style file does not exist."
> << endl; +			return 5;
> +		}
> +
> +		return 0;
> +
> +	}
> +
>  	QString downloadDestination( KNS::Entry * e )
>  	{
>  		QString filename = e->payload().fileName();
> +		QFileInfo i( filename );
> +		if( e->name() != i.baseName() )
> +		{
> +			kdDebug( 14000 ) << k_funcinfo << "ERROR: Package name is not the
> basename of the file." << endl; +			m_integrity = false;
> +		}
> +		else
> +		{
> +			m_integrity = true;
> +		}
>  		QString tempDestination = KNewStuff::downloadDestination( e );
>  		mFilenameMap.insert( tempDestination, filename );
>  		return tempDestination;
> @@ -161,6 +290,8 @@
>
>  	QMap<QString, QString > mFilenameMap;
>  	AppearanceConfig * mAppearanceConfig;
> +private:
> +	bool m_integrity;
>  };
>
>  AppearanceConfig::AppearanceConfig(QWidget *parent, const char* /*name*/,
> const QStringList &args ) @@ -176,6 +307,9 @@
>  	mAppearanceTabCtl = new QTabWidget(this, "mAppearanceTabCtl");
>
>
> +	KConfig *config = KGlobal::config();
> +	config->setGroup( "ChatWindowSettings" );
> +
>  	// "Emoticons" TAB
> ========================================================== mPrfsEmoticons =
> new AppearanceConfig_Emoticons(mAppearanceTabCtl);
> connect(mPrfsEmoticons->chkUseEmoticons, SIGNAL(toggled(bool)),
> @@ -186,6 +320,9 @@
>  		this, SLOT(slotSelectedEmoticonsThemeChanged()));
>  	connect(mPrfsEmoticons->btnInstallTheme, SIGNAL(clicked()),
>  		this, SLOT(installNewTheme()));
> +
> +	// Since KNewStuff is incomplete and buggy we'll disable it by default.
> +	mPrfsEmoticons->btnGetThemes->setEnabled( config->readBoolEntry(
> "ForceNewStuff", false ) ); connect(mPrfsEmoticons->btnGetThemes,
> SIGNAL(clicked()),
>  		this, SLOT(slotGetThemes()));
>  	connect(mPrfsEmoticons->btnRemoveTheme, SIGNAL(clicked()),
> @@ -212,6 +349,9 @@
>  	connect(mPrfsChatWindow->btnGetStyles, SIGNAL(clicked()),
>  		this, SLOT(slotGetStyles()));
>
> +	// Since KNewStuff is incomplete and buggy we'll disable it by default.
> +	mPrfsChatWindow->btnGetStyles->setEnabled( config->readBoolEntry(
> "ForceNewStuff", false ) ); +
>  	connect(mPrfsChatWindow->mTransparencyTintColor, SIGNAL(activated (const
> QColor &)), this, SLOT(emitChanged()));
>  	connect(mPrfsChatWindow->mTransparencyValue, SIGNAL(valueChanged(int)),

[Attachment #5 (application/pgp-signature)]

_______________________________________________
kopete-devel mailing list
kopete-devel@kde.org
https://mail.kde.org/mailman/listinfo/kopete-devel


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic