mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-04-26 14:23:09 +00:00
kcm: Load applications in signal handler instead of waitForFinished for Waydroid
This commit is contained in:
parent
de7b63572f
commit
38d6f4080d
2 changed files with 31 additions and 29 deletions
|
|
@ -33,7 +33,7 @@ WaydroidApplicationListModel::WaydroidApplicationListModel(WaydroidState *parent
|
||||||
|
|
||||||
WaydroidApplicationListModel::~WaydroidApplicationListModel() = default;
|
WaydroidApplicationListModel::~WaydroidApplicationListModel() = default;
|
||||||
|
|
||||||
void WaydroidApplicationListModel::refreshApplications()
|
void WaydroidApplicationListModel::loadApplications(const QList<WaydroidApplication::Ptr> applications)
|
||||||
{
|
{
|
||||||
if (m_waydroidState->sessionStatus() != WaydroidState::SessionRunning) {
|
if (m_waydroidState->sessionStatus() != WaydroidState::SessionRunning) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -47,10 +47,9 @@ void WaydroidApplicationListModel::refreshApplications()
|
||||||
appIdMap.insert(application->packageName(), i);
|
appIdMap.insert(application->packageName(), i);
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<WaydroidApplication::Ptr> currentApps = queryApplications();
|
|
||||||
QList<WaydroidApplication::Ptr> toInsert;
|
QList<WaydroidApplication::Ptr> toInsert;
|
||||||
|
|
||||||
for (const WaydroidApplication::Ptr &application : currentApps) {
|
for (const WaydroidApplication::Ptr &application : applications) {
|
||||||
auto it = appIdMap.find(application->packageName());
|
auto it = appIdMap.find(application->packageName());
|
||||||
if (it != appIdMap.end()) {
|
if (it != appIdMap.end()) {
|
||||||
// Application already in m_applications
|
// Application already in m_applications
|
||||||
|
|
@ -85,7 +84,7 @@ void WaydroidApplicationListModel::refreshApplications()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<WaydroidApplication::Ptr> WaydroidApplicationListModel::queryApplications() const
|
void WaydroidApplicationListModel::refreshApplications()
|
||||||
{
|
{
|
||||||
QList<WaydroidApplication::Ptr> applications;
|
QList<WaydroidApplication::Ptr> applications;
|
||||||
|
|
||||||
|
|
@ -93,33 +92,36 @@ QList<WaydroidApplication::Ptr> WaydroidApplicationListModel::queryApplications(
|
||||||
|
|
||||||
QProcess *process = new QProcess(m_waydroidState);
|
QProcess *process = new QProcess(m_waydroidState);
|
||||||
process->start(WAYDROID_COMMAND, arguments);
|
process->start(WAYDROID_COMMAND, arguments);
|
||||||
process->waitForFinished();
|
|
||||||
|
|
||||||
if (process->exitCode() != 0) {
|
connect(process, &QProcess::finished, this, [this, process](int exitCode, QProcess::ExitStatus exitStatus) {
|
||||||
qCWarning(WAYDROIDINTEGRATIONPLUGIN) << "Failed to run waydroid app list command: " << process->readAllStandardError();
|
if (exitCode != 0 || exitStatus == QProcess::ExitStatus::CrashExit) {
|
||||||
return applications;
|
qCWarning(WAYDROIDINTEGRATIONPLUGIN) << "Failed to run waydroid app list command: " << process->readAllStandardError();
|
||||||
}
|
return;
|
||||||
|
|
||||||
const QByteArray data = process->readAllStandardOutput();
|
|
||||||
if (data.isEmpty()) {
|
|
||||||
qCWarning(WAYDROIDINTEGRATIONPLUGIN) << "Empty data: " << process->readAllStandardError();
|
|
||||||
return applications;
|
|
||||||
}
|
|
||||||
|
|
||||||
qCDebug(WAYDROIDINTEGRATIONPLUGIN) << "Waydroid output: " << data;
|
|
||||||
QTextStream output = QTextStream(data);
|
|
||||||
|
|
||||||
while (!output.atEnd()) {
|
|
||||||
const WaydroidApplication::Ptr app = WaydroidApplication::fromWaydroidLog(output);
|
|
||||||
if (app == nullptr) {
|
|
||||||
qCWarning(WAYDROIDINTEGRATIONPLUGIN) << "Failed to fetch the application: Maybe wrong QTextStream cursor position.";
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
qCDebug(WAYDROIDINTEGRATIONPLUGIN) << "Waydroid application found: " << app.get()->name() << " (" << app.get()->packageName() << ")";
|
const QByteArray data = process->readAllStandardOutput();
|
||||||
applications.append(app);
|
if (data.isEmpty()) {
|
||||||
}
|
qCWarning(WAYDROIDINTEGRATIONPLUGIN) << "Empty data: " << process->readAllStandardError();
|
||||||
return applications;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
qCDebug(WAYDROIDINTEGRATIONPLUGIN) << "Waydroid output: " << data;
|
||||||
|
QTextStream output = QTextStream(data);
|
||||||
|
|
||||||
|
QList<WaydroidApplication::Ptr> applications;
|
||||||
|
while (!output.atEnd()) {
|
||||||
|
const WaydroidApplication::Ptr app = WaydroidApplication::fromWaydroidLog(output);
|
||||||
|
if (app == nullptr) {
|
||||||
|
qCWarning(WAYDROIDINTEGRATIONPLUGIN) << "Failed to fetch the application: Maybe wrong QTextStream cursor position.";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
qCDebug(WAYDROIDINTEGRATIONPLUGIN) << "Waydroid application found: " << app.get()->name() << " (" << app.get()->packageName() << ")";
|
||||||
|
applications.append(app);
|
||||||
|
}
|
||||||
|
|
||||||
|
loadApplications(applications);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
QHash<int, QByteArray> WaydroidApplicationListModel::roleNames() const
|
QHash<int, QByteArray> WaydroidApplicationListModel::roleNames() const
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,6 @@ private:
|
||||||
QList<WaydroidApplication::Ptr> m_applications;
|
QList<WaydroidApplication::Ptr> m_applications;
|
||||||
QTimer *m_refreshTimer{nullptr};
|
QTimer *m_refreshTimer{nullptr};
|
||||||
|
|
||||||
|
void loadApplications(const QList<WaydroidApplication::Ptr> applications);
|
||||||
void refreshApplications();
|
void refreshApplications();
|
||||||
QList<WaydroidApplication::Ptr> queryApplications() const;
|
|
||||||
};
|
};
|
||||||
Loading…
Reference in a new issue