aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/addon/AddonFunctions.cpp
diff options
context:
space:
mode:
authorGravatar Szymon Tomasz Stefanek2015-09-15 01:10:11 +0200
committerGravatar Szymon Tomasz Stefanek2015-09-15 01:10:11 +0200
commit7337ca5d7f5c35cec949319069f6a3aa6b079d81 (patch)
treec86f5c669cac25135099be916120af69b2962413 /src/modules/addon/AddonFunctions.cpp
parentAdd the ability to not store the icons when saving a theme (diff)
downloadKVIrc-7337ca5d7f5c35cec949319069f6a3aa6b079d81.tar.gz
KVIrc-7337ca5d7f5c35cec949319069f6a3aa6b079d81.tar.bz2
KVIrc-7337ca5d7f5c35cec949319069f6a3aa6b079d81.zip
Add addon.pack to package addons manually. Improve addon support.
Diffstat (limited to 'src/modules/addon/AddonFunctions.cpp')
-rw-r--r--src/modules/addon/AddonFunctions.cpp121
1 files changed, 120 insertions, 1 deletions
diff --git a/src/modules/addon/AddonFunctions.cpp b/src/modules/addon/AddonFunctions.cpp
index e0a762ac8..03f3613a9 100644
--- a/src/modules/addon/AddonFunctions.cpp
+++ b/src/modules/addon/AddonFunctions.cpp
@@ -25,6 +25,7 @@
#include "AddonFunctions.h"
#include "KviPackageReader.h"
+#include "KviPackageWriter.h"
#include "KviLocale.h"
#include "KviMessageBox.h"
#include "KviApplication.h"
@@ -37,8 +38,12 @@
#include "KviKvsScript.h"
#include <QMessageBox>
-
+#include <QBuffer>
#include <QDir>
+#include <QDirIterator>
+#include <QFile>
+#include <QDateTime>
+
#include <stdlib.h>
@@ -113,6 +118,7 @@ namespace AddonFunctions
QString szPackageDate;
QString szAddonPackVersion;
QString szPackageApplication;
+ QString szMinKVIrcVersion;
QString szAuthor = __tr2qs_ctx("Author","addon");
QString szCreatedAt = __tr2qs_ctx("Created at","addon");
@@ -125,6 +131,7 @@ namespace AddonFunctions
r.getStringInfoField("Application",szPackageApplication);
r.getStringInfoField("Date",szPackageDate);
r.getStringInfoField("AddonPackVersion",szAddonPackVersion);
+ r.getStringInfoField("MinimumKVIrcVersion",szMinKVIrcVersion);
QString szWarnings;
QString szTmp;
@@ -137,6 +144,11 @@ namespace AddonFunctions
if(KviMiscUtils::compareVersions(szAddonPackVersion,KVI_CURRENT_ADDONS_ENGINE_VERSION) < 0)
bValid = false;
+ if(!szMinKVIrcVersion.isEmpty())
+ {
+ if(KviMiscUtils::compareVersions(szMinKVIrcVersion,KVI_VERSION) < 0)
+ bValid = false;
+ }
if(!bValid)
{
@@ -145,6 +157,7 @@ namespace AddonFunctions
szWarnings += "</b></font></center></p>";
}
+
hd.szHtmlText = QString(
"<html bgcolor=\"#ffffff\">" \
"<body bgcolor=\"#ffffff\">" \
@@ -255,4 +268,110 @@ namespace AddonFunctions
return szDirName;
}
+
+ bool checkDirTree(const QString &szDirPath,QString * pszError)
+ {
+ if(pszError)
+ *pszError = "";
+
+ QDir addon(szDirPath);
+ if(!addon.exists())
+ {
+ *pszError = __tr2qs_ctx("The selected directory does not exist.","addon");
+ return false;
+ }
+
+ QFileInfo init(szDirPath + "/install.kvs");
+ if(!init.exists())
+ {
+ *pszError = __tr2qs_ctx("The initialization script (install.kvs) does not exist.","addon");
+ return false;
+ }
+
+ return true;
+ }
+
+ bool pack(AddonInfo &info,QString &szError)
+ {
+ if(!checkDirTree(info.szDirPath,&szError))
+ return false;
+
+ if(info.szMinVersion.isEmpty())
+ info.szMinVersion = KVI_VERSION;
+
+ QString szTmp;
+ szTmp = QDateTime::currentDateTime().toString();
+
+ KviPackageWriter pw;
+ pw.addInfoField("PackageType","AddonPack");
+ pw.addInfoField("AddonPackVersion",KVI_CURRENT_ADDONS_ENGINE_VERSION);
+ pw.addInfoField("Name",info.szName);
+ pw.addInfoField("Version",info.szVersion);
+ pw.addInfoField("Author",info.szAuthor);
+ pw.addInfoField("Description",info.szDescription);
+ pw.addInfoField("Date",szTmp);
+ pw.addInfoField("MinimumKVIrcVersion",info.szMinVersion);
+ pw.addInfoField("Application","KVIrc " KVI_VERSION "." KVI_SOURCES_DATE);
+
+ QPixmap pix(info.szIcon);
+ if(!pix.isNull())
+ {
+ QByteArray * pba = new QByteArray();
+ QBuffer bufferz(pba,0);
+
+ bufferz.open(QIODevice::WriteOnly);
+ pix.save(&bufferz,"PNG");
+ bufferz.close();
+ pw.addInfoField("Image",pba);
+ }
+
+ QDir dir(info.szDirPath);
+ QFileInfoList ls = dir.entryInfoList(QDir::Dirs | QDir::Files | QDir::Readable | QDir::NoSymLinks | QDir::NoDotAndDotDot);
+
+ if(ls.isEmpty())
+ {
+ szError = __tr2qs_ctx("The package file list is empty","addon");
+ return false;
+ }
+
+ for(QFileInfoList::Iterator it = ls.begin();it != ls.end();++it)
+ {
+ const QFileInfo &inf = *it;
+
+ if(inf.isDir())
+ {
+ if(!pw.addDirectory(inf.absoluteFilePath(),QString("%1/").arg(inf.fileName())))
+ {
+ szError = pw.lastError();
+ return false;
+ }
+
+ continue;
+ }
+
+ // must be a file
+ if(!pw.addFile(inf.absoluteFilePath(),inf.fileName()))
+ {
+ szError = pw.lastError();
+ return false;
+ }
+ }
+
+
+ // Create the addon package
+ if(info.szSavePath.isEmpty())
+ {
+ szError = __tr2qs_ctx("Save path is empty","addon");
+ return false;
+ }
+
+ if(!pw.pack(info.szSavePath))
+ {
+ szError = pw.lastError();
+ return false;
+ }
+
+ return true;
+ }
+
}