1 // SPDX-License-Identifier: Apache-2.0
3 * Copyright (C) 2016 The Qt Company Ltd.
4 * Copyright (C) 2016, 2017 Mentor Graphics Development (Deutschland) GmbH
5 * Copyright (c) 2018,2019 TOYOTA MOTOR CORPORATION
6 * Copyright (C) 2022 Konsulko Group
9 #include "applicationmodel.h"
12 #include <QtCore/QFile>
13 #include <QtCore/QJsonObject>
14 #include <QtCore/QJsonDocument>
15 #include <QtCore/QJsonArray>
17 #include "hmi-debug.h"
19 class ApplicationModel::Private
24 void addApp(QString icon, QString name, QString id);
25 void removeApp(QString id);
31 QString get_icon_name(QJsonObject const &i)
33 QString icon = i["icon"].toString();
34 fprintf(stderr, "Looking for icon %s\n", icon.toLocal8Bit().data());
35 if ( !QFile::exists(icon) )
41 ApplicationModel::Private::Private()
45 void ApplicationModel::Private::addApp(QString icon, QString name, QString id)
47 HMI_DEBUG("addApp","name: %s icon: %s id: %s.", name.toStdString().c_str(), icon.toStdString().c_str(), id.toStdString().c_str());
48 for(int i = 0; i < this->data.size(); ++i) {
49 if(this->data[i].id() == id)
54 if ( QFile::exists(icon) )
56 _icon = QString("file:%1").arg(icon);
57 fprintf(stderr, "using icon '%s'\n", _icon.toLocal8Bit().data());
65 for (pos = 0; pos < this->data.size(); ++pos) {
66 if (QString::compare(this->data.at(pos).name(), name, Qt::CaseInsensitive) > 0)
69 this->data.insert(pos, AppInfo(_icon, name, id));
72 void ApplicationModel::Private::removeApp(QString id)
74 HMI_DEBUG("removeApp","id: %s.",id.toStdString().c_str());
75 for (int i = 0; i < this->data.size(); ++i) {
76 if (this->data.at(i).id() == id) {
77 this->data.removeAt(i);
83 ApplicationModel::ApplicationModel(QObject *parent)
84 : QAbstractListModel(parent)
89 ApplicationModel::~ApplicationModel()
94 int ApplicationModel::rowCount(const QModelIndex &parent) const
99 return this->d->data.count();
102 QVariant ApplicationModel::data(const QModelIndex &index, int role) const
105 if (!index.isValid())
109 case Qt::DecorationRole:
110 ret = this->d->data[index.row()].iconPath();
112 case Qt::DisplayRole:
113 ret = this->d->data[index.row()].name();
116 ret = this->d->data[index.row()].id();
125 QHash<int, QByteArray> ApplicationModel::roleNames() const
127 QHash<int, QByteArray> roles;
128 roles[Qt::DecorationRole] = "icon";
129 roles[Qt::DisplayRole] = "name";
130 roles[Qt::UserRole] = "id";
134 QString ApplicationModel::id(int i) const
136 return data(index(i), Qt::UserRole).toString();
139 QString ApplicationModel::appid(int i) const
141 QString id = data(index(i), Qt::UserRole).toString();
142 return id.split("@")[0];
145 QString ApplicationModel::name(int i) const
147 return data(index(i), Qt::DisplayRole).toString();
150 void ApplicationModel::move(int from, int to)
153 if (to < 0 || to > rowCount()) return;
155 if (!beginMoveRows(parent, from, from, parent, to + 1)) {
156 HMI_NOTICE("launcher","from : %d, to : %d. false.", from, to);
159 d->data.move(from, to);
161 } else if (from > to) {
162 if (!beginMoveRows(parent, from, from, parent, to)) {
163 HMI_NOTICE("launcher","from : %d, to : %d. false.", from, to);
166 d->data.move(from, to);
169 HMI_NOTICE("launcher","from : %d, to : %d. false.", from, to);
173 void ApplicationModel::updateApplist(QStringList info)
175 QString icon = info.at(0);
176 QString name = info.at(1);
177 QString id = info.at(2);
180 if(icon == "") { // uninstall
185 d->addApp(icon, name, id);
190 void ApplicationModel::initAppList(QList<QMap<QString, QString>> &apps)
192 HMI_DEBUG("launcher","init application list.");
194 qDebug() << "ApplicationModel::initAppList: got " << apps.size() << " apps";
195 for (int i = 0; i < apps.size(); i++) {
196 d->addApp(apps[i]["icon_path"], apps[i]["name"], apps[i]["id"]);