aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/addon/addonfunctions.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/addon/addonfunctions.cpp')
-rw-r--r--src/modules/addon/addonfunctions.cpp272
1 files changed, 0 insertions, 272 deletions
diff --git a/src/modules/addon/addonfunctions.cpp b/src/modules/addon/addonfunctions.cpp
deleted file mode 100644
index 590935319..000000000
--- a/src/modules/addon/addonfunctions.cpp
+++ /dev/null
@@ -1,272 +0,0 @@
-//=============================================================================
-//
-// File : addonfunctions.cpp
-// Creation date : Fri 02 May 2008 17:36:07 by Elvio Basello
-//
-// This file is part of the KVIrc IRC Client distribution
-// Copyright (C) 2008 Elvio Basello <hellvis69 at netsons dot org>
-//
-// This program is FREE software. You can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your opinion) any later version.
-//
-// This program 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 General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program. If not, write to the Free Software Foundation,
-// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//=============================================================================
-
-#include "addonfunctions.h"
-
-#include "KviPackageReader.h"
-#include "KviLocale.h"
-#include "KviMessageBox.h"
-#include "KviApplication.h"
-#include "KviHtmlDialog.h"
-#include "KviIconManager.h"
-#include "KviFileUtils.h"
-#include "KviMiscUtils.h"
-#include "kvi_sourcesdate.h"
-#include "KviMainWindow.h"
-#include "KviKvsScript.h"
-
-#include <QDir>
-
-#include <stdlib.h>
-
-namespace KviAddonFunctions
-{
- bool notAValidAddonPackage(QString &szError)
- {
- szError = __tr2qs_ctx("The selected file does not seem to be a valid KVIrc addon package","addon");
- return false;
- }
-
- bool installAddonPackage(const QString &szAddonPackageFileName,QString &szError,QWidget * pDialogParent)
- {
- KviPointerHashTable<QString,QString> * pInfoFields;
- QString * pValue;
- QString szErr;
- QPixmap pix;
- QByteArray * pByteArray;
- bool bInstall;
- KviHtmlDialogData hd;
-
- const char * check_fields[] = { "Name", "Version", "Author", "Description", "Date", "Application" };
-
- // check if it is a valid addon file
- KviPackageReader r;
- if(!r.readHeader(szAddonPackageFileName))
- {
- szErr = r.lastError();
- KviQString::sprintf(szError,__tr2qs_ctx("The selected file does not seem to be a valid KVIrc package: %Q","addon"),&szErr);
- return false;
- }
-
- pInfoFields = r.stringInfoFields();
-
- pValue = pInfoFields->find("PackageType");
-
- if(!pValue)
- return notAValidAddonPackage(szError);
-
- if(!KviQString::equalCI(*pValue,"AddonPack"))
- return notAValidAddonPackage(szError);
-
- pValue = pInfoFields->find("AddonPackVersion");
-
- if(!pValue)
- return notAValidAddonPackage(szError);
-
- // make sure the default fields exist
- for(int i=0;i<6;i++)
- {
- pValue = pInfoFields->find(check_fields[i]);
- if(!pValue)
- return notAValidAddonPackage(szError);
- }
-
- // ok.. it should be really valid at this point
- // load its picture
- pByteArray = r.binaryInfoFields()->find("Image");
- if(pByteArray)
- pix.loadFromData(*pByteArray,0,0);
-
- if(pix.isNull())
- {
- // load the default icon
- pix = *(g_pIconManager->getBigIcon(KVI_BIGICON_ADDONS));
- }
-
- QString szPackageName;
- QString szPackageVersion;
- QString szPackageAuthor;
- QString szPackageDescription;
- QString szPackageDate;
- QString szAddonPackVersion;
- QString szPackageApplication;
-
- QString szAuthor = __tr2qs_ctx("Author","addon");
- QString szCreatedAt = __tr2qs_ctx("Created at","addon");
- QString szCreatedWith = __tr2qs_ctx("Created with","addon");
-
- r.getStringInfoField("Name",szPackageName);
- r.getStringInfoField("Version",szPackageVersion);
- r.getStringInfoField("Author",szPackageAuthor);
- r.getStringInfoField("Description",szPackageDescription);
- r.getStringInfoField("Application",szPackageApplication);
- r.getStringInfoField("Date",szPackageDate);
- r.getStringInfoField("AddonPackVersion",szAddonPackVersion);
-
- QString szWarnings;
- QString szTmp;
-
- bool bValid = true;
-
- if(szPackageName.isEmpty() || szPackageVersion.isEmpty() || szAddonPackVersion.isEmpty())
- bValid = false;
-
- if(KviMiscUtils::compareVersions(szAddonPackVersion,KVI_CURRENT_ADDONS_ENGINE_VERSION) < 0)
- bValid = false;
-
-
- if(!bValid)
- {
- szWarnings += "<p><center><font color=\"#ff0000\"><b>";
- szWarnings += __tr2qs_ctx("Warning: The addon might be incompatible with this version of KVIrc","addon");
- szWarnings += "</b></font></center></p>";
- }
-
- KviQString::sprintf(hd.szHtmlText,
- "<html bgcolor=\"#ffffff\">" \
- "<body bgcolor=\"#ffffff\">" \
- "<p><center>" \
- "<h2>%Q %Q</h2>" \
- "</center></p>" \
- "<p><center>" \
- "<img src=\"addon_dialog_pack_image\">" \
- "</center></p>" \
- "<p><center>" \
- "<i>%Q</i>" \
- "</center></p>" \
- "<p><center>" \
- "%Q: <b>%Q</b><br>" \
- "%Q: <b>%Q</b><br>" \
- "</center></p>" \
- "<p><center>" \
- "<font color=\"#808080\">" \
- "%Q: %Q<br>" \
- "</font>" \
- "</center></p>" \
- "%Q" \
- "<br>" \
- "</body>" \
- "</html>",
- &szPackageName,
- &szPackageVersion,
- &szPackageDescription,
- &szAuthor,
- &szPackageAuthor,
- &szCreatedAt,
- &szPackageDate,
- &szCreatedWith,
- &szPackageApplication,
- &szWarnings
- );
-
- hd.addImageResource("addon_dialog_pack_image",pix);
- hd.addHtmlResource("addon_dialog_main",hd.szHtmlText);
-
- QString beginCenter = "<center>";
- QString endCenter = "</center>";
-
- hd.szCaption = __tr2qs_ctx("Install Addon Pack - KVIrc","addon");
- hd.szUpperLabelText = beginCenter + __tr2qs_ctx("You're about to install the following addon package","addon") + endCenter;
- hd.szLowerLabelText = beginCenter + __tr2qs_ctx("Do you want to proceed with the installation ?","addon") + endCenter;
- hd.szButton1Text = __tr2qs_ctx("Do Not Install","addon");
- hd.szButton2Text = __tr2qs_ctx("Yes, Proceed","addon");
- hd.iDefaultButton = 2;
- hd.iCancelButton = 1;
- hd.pixIcon = *(g_pIconManager->getSmallIcon(KVI_SMALLICON_ADDONS));
- hd.iMinimumWidth = 350;
- hd.iMinimumHeight = 420;
- hd.iFlags = KviHtmlDialogData::ForceMinimumSize;
-
- bInstall = KviHtmlDialog::display(pDialogParent,&hd) == 2;
-
- if(!bInstall)
- return true;
-
- // Create a random extraction dir
- QString szTmpPath, szUnpackPath;
- QString szRandomDir = createRandomDir();
-
- g_pApp->getLocalKvircDirectory(szTmpPath,KviApplication::Tmp);
- KviQString::ensureLastCharIs(szTmpPath,QChar(KVI_PATH_SEPARATOR_CHAR));
- szUnpackPath = szTmpPath + szRandomDir;
- QDir szTmpDir(szUnpackPath);
-
- // Check for dir existence
- while(szTmpDir.exists())
- {
- szRandomDir = createRandomDir();
- szUnpackPath = szTmpPath + szRandomDir;
- szTmpDir = QDir(szUnpackPath);
- }
-
- // Unpack addon package into the random tmp dir
- if(!r.unpack(szAddonPackageFileName,szUnpackPath))
- {
- szErr = r.lastError();
- KviQString::sprintf(szError,__tr2qs_ctx("Failed to unpack the selected file: %Q","addon"),&szErr);
- return false;
- }
-
- // Now we have all stuff in ~/.config/KVIrc/tmp/$rand
- KviQString::escapeKvs(&szUnpackPath, KviQString::EscapeSpace);
- if(!KviKvsScript::run(QString::fromAscii("parse %1/install.kvs").arg(szUnpackPath), g_pActiveWindow))
- {
- // Parsing the script failed
- // However, the user should already be notified via normal script output.
- }
-
- if(!KviFileUtils::deleteDir(szUnpackPath))
- {
- // FIXME: Just warn the user and assume success?
- szErr = __tr2qs_ctx("One or more files can't be deleted","addon");
- KviQString::sprintf(szError,__tr2qs_ctx("Failed to unpack the selected file: %Q","addon"),&szErr);
- return false;
- }
-
- return true;
- }
-
- QString createRandomDir()
- {
- QString szDirName;
- char chars[] = {
- 'A','B','C','D','E','F','G','H',
- 'I','J','K','L','M','N','O','P',
- 'Q','R','S','T','U','V','W','X',
- 'Y','Z','a','b','c','d','e','f',
- 'g','h','i','j','k','l','m','n',
- 'o','p','q','r','s','t','u','v',
- 'w','x','y','z','-','_','.'
- };
-
- // Generate dir name
- for(int i=0;i<10;i++)
- {
- int n = rand() % sizeof(chars);
- szDirName.append(chars[n]);
- }
-
- return szDirName;
- }
-}