forked from qt-creator/qt-creator
Maemo: Fix path to exectuable in desktop file when publishing.
This commit is contained in:
@@ -209,15 +209,15 @@ bool MaemoDeployableListModel::isEditable(const QModelIndex &index) const
|
||||
&& m_deployables.first().remoteDir.isEmpty();
|
||||
}
|
||||
|
||||
bool MaemoDeployableListModel::hasDesktopFile() const
|
||||
QString MaemoDeployableListModel::localDesktopFilePath() const
|
||||
{
|
||||
if (m_projectType == LibraryTemplate)
|
||||
return false;
|
||||
return QString();
|
||||
foreach (const MaemoDeployable &d, m_deployables) {
|
||||
if (QFileInfo(d.localFilePath).fileName() == m_projectName + QLatin1String(".desktop"))
|
||||
return true;
|
||||
return d.localFilePath;
|
||||
}
|
||||
return false;
|
||||
return QString();
|
||||
}
|
||||
|
||||
bool MaemoDeployableListModel::addDesktopFile(QString &error)
|
||||
|
||||
@@ -70,7 +70,8 @@ public:
|
||||
QString applicationName() const { return m_targetInfo.target; }
|
||||
bool hasTargetPath() const { return m_hasTargetPath; }
|
||||
bool canAddDesktopFile() const { return isApplicationProject() && !hasDesktopFile(); }
|
||||
bool hasDesktopFile() const;
|
||||
QString localDesktopFilePath() const;
|
||||
bool hasDesktopFile() const { return !localDesktopFilePath().isEmpty(); }
|
||||
bool addDesktopFile(QString &error);
|
||||
bool canAddIcon() const { return isApplicationProject() && remoteIconFilePath().isEmpty(); }
|
||||
bool addIcon(const QString &fileName, QString &error);
|
||||
|
||||
@@ -28,6 +28,8 @@
|
||||
**************************************************************************/
|
||||
#include "maemopublisherfremantlefree.h"
|
||||
|
||||
#include "maemodeployablelistmodel.h"
|
||||
#include "maemodeploystep.h"
|
||||
#include "maemoglobal.h"
|
||||
#include "maemopackagecreationstep.h"
|
||||
#include "maemopublishingfileselectiondialog.h"
|
||||
@@ -35,6 +37,7 @@
|
||||
|
||||
#include <coreplugin/ifile.h>
|
||||
#include <projectexplorer/project.h>
|
||||
#include <projectexplorer/target.h>
|
||||
#include <qt4projectmanager/qmakestep.h>
|
||||
#include <qt4projectmanager/qt4buildconfiguration.h>
|
||||
|
||||
@@ -125,8 +128,14 @@ void MaemoPublisherFremantleFree::createPackage()
|
||||
return;
|
||||
}
|
||||
|
||||
emit progressReport(tr("Cleaning up temporary directory ..."));
|
||||
QString error;
|
||||
if (!updateDesktopFiles(&error)) {
|
||||
finishWithFailure(error,
|
||||
tr("Publishing failed: Could not create package."));
|
||||
return;
|
||||
}
|
||||
|
||||
emit progressReport(tr("Cleaning up temporary directory ..."));
|
||||
if (!MaemoPackageCreationStep::preparePackagingProcess(m_process,
|
||||
m_buildConfig, m_tmpProjectDir, &error)) {
|
||||
finishWithFailure(tr("Error preparing packaging process: %1").arg(error),
|
||||
@@ -474,6 +483,67 @@ void MaemoPublisherFremantleFree::finishWithFailure(const QString &progressMsg,
|
||||
setState(Inactive);
|
||||
}
|
||||
|
||||
bool MaemoPublisherFremantleFree::updateDesktopFiles(QString *error) const
|
||||
{
|
||||
bool success = true;
|
||||
MaemoDeployStep * const deployStep
|
||||
= MaemoGlobal::buildStep<MaemoDeployStep>(m_buildConfig->target()
|
||||
->activeDeployConfiguration());
|
||||
for (int i = 0; i < deployStep->deployables()->modelCount(); ++i) {
|
||||
const MaemoDeployableListModel * const model
|
||||
= deployStep->deployables()->modelAt(i);
|
||||
QString desktopFilePath = model->localDesktopFilePath();
|
||||
if (desktopFilePath.isEmpty())
|
||||
continue;
|
||||
desktopFilePath.replace(model->projectDir(), m_tmpProjectDir);
|
||||
QFile desktopFile(desktopFilePath);
|
||||
const QString executableFilePath = model->remoteExecutableFilePath();
|
||||
if (executableFilePath.isEmpty()) {
|
||||
qDebug("%s: Skipping subproject %s with missing deployment information.",
|
||||
Q_FUNC_INFO, qPrintable(model->proFilePath()));
|
||||
continue;
|
||||
}
|
||||
if (!desktopFile.exists() || !desktopFile.open(QIODevice::ReadWrite)) {
|
||||
success = false;
|
||||
if (error) {
|
||||
*error = tr("Failed to adapt desktop file '%1'.")
|
||||
.arg(desktopFilePath);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
QByteArray desktopFileContents = desktopFile.readAll();
|
||||
bool fileNeedsUpdate = addOrReplaceDesktopFileValue(desktopFileContents,
|
||||
"Exec", executableFilePath.toUtf8());
|
||||
if (fileNeedsUpdate) {
|
||||
desktopFile.resize(0);
|
||||
desktopFile.write(desktopFileContents);
|
||||
}
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
||||
bool MaemoPublisherFremantleFree::addOrReplaceDesktopFileValue(QByteArray &fileContent,
|
||||
const QByteArray &key, const QByteArray &newValue) const
|
||||
{
|
||||
const int keyPos = fileContent.indexOf(key + '=');
|
||||
if (keyPos == -1) {
|
||||
if (!fileContent.endsWith('\n'))
|
||||
fileContent += '\n';
|
||||
fileContent += key + '=' + newValue + '\n';
|
||||
return true;
|
||||
}
|
||||
int nextNewlinePos = fileContent.indexOf('\n', keyPos);
|
||||
if (nextNewlinePos == -1)
|
||||
nextNewlinePos = fileContent.count();
|
||||
const int replacePos = keyPos + key.count() + 1;
|
||||
const int replaceCount = nextNewlinePos - replacePos;
|
||||
const QByteArray &oldValue = fileContent.mid(replacePos, replaceCount);
|
||||
if (oldValue == newValue)
|
||||
return false;
|
||||
fileContent.replace(replacePos, replaceCount, newValue);
|
||||
return true;
|
||||
}
|
||||
|
||||
void MaemoPublisherFremantleFree::setState(State newState)
|
||||
{
|
||||
if (m_state == newState)
|
||||
|
||||
@@ -96,6 +96,9 @@ private:
|
||||
void prepareToSendFile();
|
||||
void sendFile();
|
||||
void finishWithFailure(const QString &progressMsg, const QString &resultMsg);
|
||||
bool updateDesktopFiles(QString *error = 0) const;
|
||||
bool addOrReplaceDesktopFileValue(QByteArray &fileContent,
|
||||
const QByteArray &key, const QByteArray &newValue) const;
|
||||
|
||||
const ProjectExplorer::Project * const m_project;
|
||||
bool m_doUpload;
|
||||
|
||||
Reference in New Issue
Block a user