fix: correct autostart source during scanning autostart desktop file
Signed-off-by: ComixHe <heyuming@deepin.org>
This commit is contained in:
parent
0555895452
commit
23002cda6a
@ -357,8 +357,12 @@ QHash<QSharedPointer<ApplicationService>, QString> ApplicationManager1Service::s
|
||||
continue;
|
||||
}
|
||||
|
||||
QString originalSource;
|
||||
QSharedPointer<ApplicationService> app{nullptr};
|
||||
auto asApplication = tmp.value(DesktopFileEntryKey, X_Deepin_GenerateSource).value_or(DesktopEntry::Value{});
|
||||
auto shouldLaunch = tmp.value(DesktopFileEntryKey, DesktopEntryHidden).value_or(DesktopEntry::Value{});
|
||||
auto autostartFlag = shouldLaunch.isNull() || (shouldLaunch.toString().compare("true", Qt::CaseInsensitive) != 0);
|
||||
|
||||
if (!asApplication.isNull()) { // modified by application manager
|
||||
auto appSource = asApplication.toString();
|
||||
|
||||
@ -388,22 +392,19 @@ QHash<QSharedPointer<ApplicationService>, QString> ApplicationManager1Service::s
|
||||
qWarning() << "add autostart application failed, skip.";
|
||||
continue;
|
||||
}
|
||||
|
||||
originalSource = appSource;
|
||||
}
|
||||
|
||||
auto shouldLaunch = tmp.value(DesktopFileEntryKey, DesktopEntryHidden).value_or(DesktopEntry::Value{});
|
||||
if (!shouldLaunch.isNull() and (shouldLaunch.toString().compare("true", Qt::CaseInsensitive) == 0)) {
|
||||
if (app)
|
||||
app->setAutostartSource({desktopFile.sourcePath(), std::move(tmp)});
|
||||
|
||||
qInfo() << "shouldn't launch this autoStart item.";
|
||||
continue;
|
||||
}
|
||||
|
||||
originalSource = originalSource.isNull() ? desktopFile.sourcePath() : originalSource;
|
||||
if (app) {
|
||||
auto realExec = tmp.value(DesktopFileEntryKey, "Exec").value_or(QString{""}).toString();
|
||||
qInfo() << "launch normal autostart application " << app->id() << " by " << realExec;
|
||||
ret.insert(app, realExec);
|
||||
app->setAutostartSource({desktopFile.sourcePath(), std::move(tmp)});
|
||||
if (autostartFlag) {
|
||||
auto realExec = tmp.value(DesktopFileEntryKey, "Exec").value_or(QString{""}).toString();
|
||||
qInfo() << "launch autostart application " << app->id() << " by " << realExec;
|
||||
ret.insert(app, realExec);
|
||||
}
|
||||
|
||||
app->setAutostartSource({std::move(originalSource), std::move(tmp)});
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -417,24 +418,28 @@ QHash<QSharedPointer<ApplicationService>, QString> ApplicationManager1Service::s
|
||||
m_applicationList.cend(),
|
||||
[&desktopFile](const auto &app) { return desktopFile.desktopId() == app->id(); });
|
||||
appIt != m_applicationList.cend()) {
|
||||
auto realExec = tmp.value(DesktopFileEntryKey, "Exec").value_or(QString{""}).toString();
|
||||
qInfo() << "launch exist autostart application " << (*appIt)->id() << " by " << realExec;
|
||||
ret.insert(*appIt, realExec);
|
||||
(*appIt)->setAutostartSource({desktopFile.sourcePath(), std::move(tmp)});
|
||||
if (autostartFlag) {
|
||||
auto realExec = tmp.value(DesktopFileEntryKey, "Exec").value_or(QString{""}).toString();
|
||||
qInfo() << "launch exist autostart application " << (*appIt)->id() << " by " << realExec;
|
||||
ret.insert(*appIt, realExec);
|
||||
}
|
||||
(*appIt)->setAutostartSource({std::move(originalSource), std::move(tmp)});
|
||||
continue;
|
||||
}
|
||||
|
||||
guard.close();
|
||||
// new application
|
||||
auto newApp = addApplication(std::move(desktopFile));
|
||||
if (!newApp) {
|
||||
app = addApplication(std::move(desktopFile));
|
||||
if (!app) {
|
||||
qWarning() << "add autostart application failed, skip.";
|
||||
continue;
|
||||
}
|
||||
app->setAutostartSource({std::move(originalSource), {}});
|
||||
|
||||
qInfo() << "launch new autostart application " << newApp->id();
|
||||
newApp->setAutostartSource({desktopFile.sourcePath(), {}});
|
||||
ret.insert(newApp, {});
|
||||
if (autostartFlag) {
|
||||
qInfo() << "launch new autostart application " << app->id();
|
||||
ret.insert(app, {});
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
@ -475,8 +480,7 @@ QSharedPointer<ApplicationService> ApplicationManager1Service::addApplication(De
|
||||
{
|
||||
auto objectPath = QDBusObjectPath{getObjectPathFromAppId(desktopFileSource.desktopId())};
|
||||
if (auto app = m_applicationList.constFind(objectPath); app != m_applicationList.cend()) {
|
||||
qInfo() << "this application already exists."
|
||||
<< "current desktop source:" << desktopFileSource.sourcePath()
|
||||
qInfo() << "this application already exists." << "current desktop source:" << desktopFileSource.sourcePath()
|
||||
<< "exists app source:" << app->data()->desktopFileSource().sourcePath();
|
||||
return *app;
|
||||
}
|
||||
|
@ -623,6 +623,10 @@ bool ApplicationService::isAutoStart() const noexcept
|
||||
return false;
|
||||
}
|
||||
|
||||
if (m_autostartSource.m_filePath == m_desktopSource.sourcePath()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
auto appId = id();
|
||||
auto dirs = getAutoStartDirs();
|
||||
QString destDesktopFile;
|
||||
@ -663,13 +667,18 @@ void ApplicationService::setAutoStart(bool autostart) noexcept
|
||||
}
|
||||
|
||||
DesktopEntry newEntry;
|
||||
QString originalSource;
|
||||
if (!m_autostartSource.m_entry.data().isEmpty()) {
|
||||
newEntry = m_autostartSource.m_entry;
|
||||
originalSource = newEntry.value(DesktopFileEntryKey, X_Deepin_GenerateSource)
|
||||
.value_or(DesktopEntry::Value{m_autostartSource.m_filePath})
|
||||
.toString();
|
||||
} else {
|
||||
newEntry = *m_entry;
|
||||
originalSource = m_desktopSource.sourcePath();
|
||||
}
|
||||
|
||||
newEntry.insert(DesktopFileEntryKey, X_Deepin_GenerateSource, m_desktopSource.sourcePath());
|
||||
newEntry.insert(DesktopFileEntryKey, X_Deepin_GenerateSource, originalSource);
|
||||
newEntry.insert(DesktopFileEntryKey, DesktopEntryHidden, !autostart);
|
||||
|
||||
setAutostartSource({fileName, newEntry});
|
||||
@ -1027,8 +1036,7 @@ LaunchTask ApplicationService::unescapeExec(const QString &str, const QStringLis
|
||||
|
||||
const auto &rawValue = val.value();
|
||||
if (!rawValue.canConvert<QStringMap>()) {
|
||||
qDebug() << "Name's underlying type mismatch:"
|
||||
<< "QStringMap" << rawValue.metaType().name();
|
||||
qDebug() << "Name's underlying type mismatch:" << "QStringMap" << rawValue.metaType().name();
|
||||
task.command.append(std::move(execList));
|
||||
return task;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user