diff options
Diffstat (limited to 'src/modules/addon/addonfunctions.cpp')
| -rw-r--r-- | src/modules/addon/addonfunctions.cpp | 96 |
1 files changed, 52 insertions, 44 deletions
diff --git a/src/modules/addon/addonfunctions.cpp b/src/modules/addon/addonfunctions.cpp index b245b176f..0505e28f1 100644 --- a/src/modules/addon/addonfunctions.cpp +++ b/src/modules/addon/addonfunctions.cpp @@ -44,7 +44,7 @@ namespace KviAddonFunctions { bool notAValidAddonPackage(QString &szError) { - KviQString::sprintf(szError,__tr2qs_ctx("The selected file does not seem to be a valid KVIrc addon package","addon")); + szError = __tr2qs_ctx("The selected file does not seem to be a valid KVIrc addon package","addon"); return false; } @@ -70,16 +70,19 @@ namespace KviAddonFunctions pInfoFields = r.stringInfoFields(); pValue = pInfoFields->find("PackageType"); - if(!pValue)return notAValidAddonPackage(szError); + if(!pValue) + return notAValidAddonPackage(szError); pValue = pInfoFields->find("AddonPackVersion"); - if(!pValue)return notAValidAddonPackage(szError); + if(!pValue) + return notAValidAddonPackage(szError); if(!KviQString::equalCI(*pValue,KVI_CURRENT_ADDONS_ENGINE_VERSION))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); + if(!pValue) + return notAValidAddonPackage(szError); } // ok.. it should be really valid at this point @@ -219,52 +222,57 @@ namespace KviAddonFunctions bInstall = KviHtmlDialog::display(pDialogParent,&hd) == 2; - if(bInstall) - { - // Create a random extraction dir - QString szTmpPath, szUnpackPath; - QString szRandomDir = createRandomDir(); - - g_pApp->getLocalKvircDirectory(szTmpPath,KviApp::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); - } + if(!bInstall) + return true; - // 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 true; - } + // Create a random extraction dir + QString szTmpPath, szUnpackPath; + QString szRandomDir = createRandomDir(); - // Now we have all stuff in ~/.config/KVIrc/tmp/$rand + g_pApp->getLocalKvircDirectory(szTmpPath,KviApp::Tmp); + KviQString::ensureLastCharIs(szTmpPath,QChar(KVI_PATH_SEPARATOR_CHAR)); + szUnpackPath = szTmpPath + szRandomDir; + QDir szTmpDir(szUnpackPath); - QString szParse="parse \"" + szUnpackPath + "\\install.kvs"+"\""; - szParse.replace("\\","\\\\"); - KviKvsScript::run(szParse,g_pActiveWindow); + // 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; + } - // Remove all files - QDir * pDir = new QDir(szUnpackPath); - QStringList list = pDir->entryList(QDir::AllEntries,QDir::DirsFirst); - debug("Path: %s",szUnpackPath.toUtf8().data()); - debug("Count: %d",list.count()); + // Now we have all stuff in ~/.config/KVIrc/tmp/$rand + if(! + KviKvsScript::run( + QString::fromAscii("parse \"%1\\install.kvs\"") + .arg( + szUnpackPath + .replace("\\","\\\\") + .replace("\"","\\\"") + ), + g_pActiveWindow + ) + ) + { + // Parsing the script failed + // However, the user should already be notified via normal script output. + } - if(!KviFileUtils::deleteDir(szUnpackPath)) - { - 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 true; - } + 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; |
