summaryrefslogtreecommitdiffstats
path: root/util/install/mac/unpackdlgimpl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'util/install/mac/unpackdlgimpl.cpp')
-rw-r--r--util/install/mac/unpackdlgimpl.cpp200
1 files changed, 200 insertions, 0 deletions
diff --git a/util/install/mac/unpackdlgimpl.cpp b/util/install/mac/unpackdlgimpl.cpp
new file mode 100644
index 0000000..5538f4d
--- /dev/null
+++ b/util/install/mac/unpackdlgimpl.cpp
@@ -0,0 +1,200 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the utils of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain
+** additional rights. These rights are described in the Nokia Qt LGPL
+** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "unpackdlgimpl.h"
+#include "licensedlgimpl.h"
+#include "keyinfo.h"
+#include <qdir.h>
+#include <qfiledialog.h>
+#include <qlineedit.h>
+#include <qtextview.h>
+#include <qpushbutton.h>
+#include <qarchive.h>
+#include <qmessagebox.h>
+#include <qregexp.h>
+#include <qapplication.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+UnpackDlgImpl::UnpackDlgImpl( QString key, QWidget* pParent, const char* pName, WindowFlags f ) :
+ UnpackDlg( pParent, pName, f )
+{
+ destPath->setText( QDir::currentDirPath() );
+ if(!key.isNull()) {
+ srcKey->setText(key);
+ } else if(QFile::exists( QDir::homeDirPath() + "/.qt-license")) {
+ QFile lic( QDir::homeDirPath() + "/.qt-license");
+ if( lic.open( IO_ReadOnly ) ) {
+ QString buffer;
+ while( lic.readLine( buffer, 1024 ) != -1 ) {
+ if( buffer[ 0 ] != '#' ) {
+ QStringList components = QStringList::split( '=', buffer );
+ QStringList::Iterator it = components.begin();
+ QString key = (*it++).stripWhiteSpace().replace( QRegExp( QString( "\"" ) ), QString() );
+ if(key.upper() == "LICENSEKEY") {
+ QString value = (*it++).stripWhiteSpace().replace( QRegExp( QString( "\"" ) ), QString() );
+ srcKey->setText(value);
+ }
+ }
+ }
+ lic.close();
+ }
+ }
+ connect( srcKey, SIGNAL( textChanged( const QString& ) ), this, SLOT( licenseKeyChanged() ) );
+ licenseKeyChanged();
+ logOutput->setWordWrap( QTextView::WidgetWidth );
+ logOutput->setWrapPolicy( QTextView::Anywhere );
+}
+
+void UnpackDlgImpl::clickedDestButton()
+{
+ QString dest = QFileDialog::getExistingDirectory( destPath->text(), this, NULL, "Select destination directory" );
+ if (!dest.isNull())
+ destPath->setText( dest );
+}
+
+void UnpackDlgImpl::clickedUnpack()
+{
+ QArchive archive;
+ connect( &archive, SIGNAL( operationFeedback( const QString& ) ), this, SLOT( updateProgress( const QString& ) ) );
+ connect( &archive, SIGNAL( operationFeedback( int ) ), this, SLOT( updateProgress( int ) ) );
+
+ archive.setVerbosity( QArchive::Destination | QArchive::Verbose | QArchive::Progress );
+
+ QString dest = destPath->text(), src="qt-mac-commercial-3.0.0.app/Contents/Qt/qtmac.arq";
+ if(!dest.isEmpty() && dest.right(1) != "/")
+ dest += "/";
+ archive.setPath( src );
+ if( !archive.open( IO_ReadOnly ) ) {
+ QMessageBox::critical( NULL, "Failure", "Failed to open input " + src);
+ return;
+ } else if(!QFile::exists(dest) ) {
+ QDir d;
+ if(!d.mkdir(dest)) {
+ QMessageBox::critical( NULL, "Failure", "Failed to open directory " + dest);
+ return;
+ }
+ }
+ unpackButton->setDisabled( true );
+ srcKey->setDisabled( true );
+ destPath->setDisabled( true );
+ destButton->setDisabled( true );
+ LicenseDialogImpl licenseDialog( this );
+ if((!licenseDialog.showLicense( featuresForKeyOnUnix( srcKey->text() ) & Feature_US )) ||
+ (!licenseDialog.exec())) {
+ QMessageBox::critical( NULL, "Failure", "The license agreement was rejected." );
+ updateProgress( "License rejected" );
+ unpackButton->setDisabled( false );
+ srcKey->setDisabled( false );
+ destPath->setDisabled( false );
+ destButton->setDisabled( false );
+ return;
+ }
+
+ QString srcName = "qt-mac-commercial-3.0.0.app/Contents/Qt/LICENSE";
+ QString destName = "/qt-mac-commercial-3.0.0/.LICENSE";
+ QString srcName2 = srcName;
+ if ( featuresForKeyOnUnix( srcKey->text() ) & Feature_US )
+ srcName2 = srcName2 + "-US";
+ if((!archive.readArchive( dest, srcKey->text() )) ||
+ (!copyFile( srcName, dest + destName )) ||
+ (!copyFile( srcName + "-US", dest + destName + "-US" )) ||
+ (!copyFile( srcName2, dest + "/qt-mac-commercial-3.0.0/LICENSE" )))
+ {
+ QMessageBox::critical( NULL, "Failure", "Failed to unpack " + src);
+ archive.close();
+ }
+ else {
+ QMessageBox::information( NULL, "Archive unpacked", "Qt has been "
+ "extracted to " + dest + "qt-mac-commerical-3.0.0\nPlease read "
+ "the INSTALL.macosx file for installation instructions." );
+ cancelButton->setText( "Quit" );
+ }
+}
+
+bool UnpackDlgImpl::copyFile( const QString& src, const QString& dest )
+{
+ int len;
+ const int buflen = 4096;
+ char buf[buflen];
+ QFileInfo info( src );
+ QFile srcFile( src ), destFile( dest );
+ if (!srcFile.open( IO_ReadOnly ))
+ return false;
+ destFile.remove();
+ if (!destFile.open( IO_WriteOnly )) {
+ srcFile.close();
+ return false;
+ }
+ while (!srcFile.atEnd()) {
+ len = srcFile.readBlock( buf, buflen );
+ if (len <= 0)
+ break;
+ if (destFile.writeBlock( buf, len ) != len)
+ return false;
+ }
+ destFile.flush();
+ return true;
+}
+
+void UnpackDlgImpl::updateProgress( const QString& message )
+{
+ logOutput->append( message );
+}
+
+void UnpackDlgImpl::updateProgress( int )
+{
+ qApp->processEvents();
+}
+
+void UnpackDlgImpl::licenseKeyChanged()
+{
+ QRegExp keyExpr("^....-....-....");
+ if ((keyExpr.search( srcKey->text() ) != -1) &&
+ (featuresForKey( srcKey->text() ) & Feature_Mac))
+ unpackButton->setEnabled( true );
+ else
+ unpackButton->setEnabled( false );
+}
+
+void UnpackDlgImpl::reject()
+{
+ exit( 0 );
+}