Optimize the search app interface.

This commit is contained in:
JunjieBai 2023-03-14 16:06:37 +08:00
parent 0e267ac29c
commit bf22f0e150
5 changed files with 117 additions and 57 deletions

View File

@ -18,17 +18,13 @@ public:
AppInfoTablePrivate &operator =(const AppInfoTablePrivate &) = delete; AppInfoTablePrivate &operator =(const AppInfoTablePrivate &) = delete;
//设置应用的置顶和收藏 //设置应用的置顶和收藏
void setAppFavoritesState(QString &desktopfp, int num); void setAppFavoritesState(const QString &desktopfp, int num);
void setAppTopState(QString &desktopfp, int num); void setAppTopState(const QString &desktopfp, int num);
//改变置顶和收藏应用位置 //改变置顶和收藏应用位置
bool changeFavoriteAppPos(const QString &desktopfp, int pos); bool changeFavoriteAppPos(const QString &desktopfp, int pos);
bool changeTopAppPos(const QString &desktopfp, int pos); bool changeTopAppPos(const QString &desktopfp, int pos);
//添加快捷方式
bool addAppShortcut2Desktop(QString &desktopfp);
bool addAppShortcut2Panel(QString &desktopfp);
//搜索接口 //搜索接口
bool searchInstallApp(QString &keyWord, QStringList &installAppInfoRes); bool searchInstallApp(QString &keyWord, QStringList &installAppInfoRes);
bool searchInstallApp(QStringList &keyWord, QStringList &installAppInfoRes); bool searchInstallApp(QStringList &keyWord, QStringList &installAppInfoRes);
@ -41,10 +37,9 @@ public:
bool tranPidToDesktopFp(int pid, QString &desktopfp); bool tranPidToDesktopFp(int pid, QString &desktopfp);
//下面的接口都不外放,暂时没啥用 //下面的接口都不外放,暂时没啥用
bool setAppLaunchTimes(QString &desktopfp, size_t num); bool setAppLaunchTimes(const QString &desktopfp, size_t num);
bool updateAppLaunchTimes(QString &desktopfp); bool updateAppLaunchTimes(const QString &desktopfp);
bool setAppLockState(QString &desktopfp, size_t num); bool setAppLockState(const QString &desktopfp, size_t num);
bool getAllAppDesktopList(QStringList &list);
private: private:
~AppInfoTablePrivate(); ~AppInfoTablePrivate();

View File

@ -63,12 +63,12 @@ AppInfoTablePrivate::AppInfoTablePrivate(AppInfoTable *parent) : QObject(parent)
} }
} }
void AppInfoTablePrivate::setAppFavoritesState(QString &desktopfp, int num) void AppInfoTablePrivate::setAppFavoritesState(const QString &desktopfp, int num)
{ {
m_appDBInterface->call("updateFavoritesState", desktopfp, num); m_appDBInterface->call("updateFavoritesState", desktopfp, num);
} }
void AppInfoTablePrivate::setAppTopState(QString &desktopfp, int num) void AppInfoTablePrivate::setAppTopState(const QString &desktopfp, int num)
{ {
m_appDBInterface->call("updateTopState", desktopfp, num); m_appDBInterface->call("updateTopState", desktopfp, num);
} }
@ -191,7 +191,7 @@ bool AppInfoTablePrivate::tranPidToDesktopFp(int pid, QString &desktopfp)
} }
} }
bool AppInfoTablePrivate::setAppLaunchTimes(QString &desktopfp, size_t num) bool AppInfoTablePrivate::setAppLaunchTimes(const QString &desktopfp, size_t num)
{ {
bool res(true); bool res(true);
if (m_database->transaction()) { if (m_database->transaction()) {
@ -217,7 +217,7 @@ bool AppInfoTablePrivate::setAppLaunchTimes(QString &desktopfp, size_t num)
return res; return res;
} }
bool AppInfoTablePrivate::updateAppLaunchTimes(QString &desktopfp) bool AppInfoTablePrivate::updateAppLaunchTimes(const QString &desktopfp)
{ {
bool res(true); bool res(true);
if (m_database->transaction()) { if (m_database->transaction()) {
@ -254,7 +254,7 @@ bool AppInfoTablePrivate::updateAppLaunchTimes(QString &desktopfp)
return res; return res;
} }
bool AppInfoTablePrivate::setAppLockState(QString &desktopfp, size_t num) bool AppInfoTablePrivate::setAppLockState(const QString &desktopfp, size_t num)
{ {
bool res(true); bool res(true);
if (m_database->transaction()) { if (m_database->transaction()) {
@ -279,24 +279,6 @@ bool AppInfoTablePrivate::setAppLockState(QString &desktopfp, size_t num)
return res; return res;
} }
bool AppInfoTablePrivate::getAllAppDesktopList(QStringList &list)
{
bool res(true);
QSqlQuery sql(*m_database);
QString cmd = QString("SELECT DESKTOP_FILE_PATH FROM APPINFO");
if (sql.exec(cmd)) {
while (sql.next()) {
list.append(sql.value(0).toString());
}
} else {
qWarning() << QString("cmd %0 failed!").arg(cmd) << m_database->lastError();
res = false;
}
return res;
}
AppInfoTablePrivate::~AppInfoTablePrivate() AppInfoTablePrivate::~AppInfoTablePrivate()
{ {
this->closeDataBase(); this->closeDataBase();
@ -426,9 +408,9 @@ bool AppInfoTable::query(ApplicationInfoMap &infoMap, Properties properties, Pro
QString condition; QString condition;
for (const ApplicationProperty::Property prop: restrictions.keys()) { for (const ApplicationProperty::Property prop: restrictions.keys()) {
condition.append(ApplicationPropertyHelper(prop).dataBaseField() + "=? AND"); condition.append(ApplicationPropertyHelper(prop).dataBaseField() + "=? AND ");
} }
condition = condition.left(condition.lastIndexOf(" AND")); condition = condition.left(condition.lastIndexOf(" AND "));
QSqlQuery query(*d->m_database); QSqlQuery query(*d->m_database);
query.setForwardOnly(true); query.setForwardOnly(true);
@ -454,24 +436,38 @@ bool AppInfoTable::query(ApplicationInfoMap &infoMap, Properties properties, Pro
return true; return true;
} }
bool AppInfoTable::query(ApplicationInfoMap &infoMap, Properties properties, const QString &keyword) bool AppInfoTable::query(ApplicationInfoMap &infoMap, Properties properties, const QString &keyword, PropertyMap restrictions)
{ {
QString field(ApplicationPropertyHelper(ApplicationProperty::Property::DesktopFilePath).dataBaseField()); QString field(ApplicationPropertyHelper(ApplicationProperty::Property::DesktopFilePath).dataBaseField());
for(const ApplicationProperty::Property &pro : properties) { for(const ApplicationProperty::Property &pro : properties) {
field.append("," + ApplicationPropertyHelper(pro).dataBaseField()); field.append("," + ApplicationPropertyHelper(pro).dataBaseField());
} }
QString condition;
for (const ApplicationProperty::Property prop: restrictions.keys()) {
condition.append(ApplicationPropertyHelper(prop).dataBaseField() + "=? AND ");
}
QString cmd; QString cmd;
if (keyword.size() < 2) { if (keyword.size() < 2) {
cmd = QString("SELECT %0 FROM APPINFO WHERE (LOCAL_NAME || NAME_EN || NAME_ZH || FIRST_LETTER_OF_PINYIN) LIKE :keyword").arg(field); cmd = QString("SELECT %0 FROM APPINFO WHERE %1(LOCAL_NAME || NAME_EN || NAME_ZH || FIRST_LETTER_OF_PINYIN) LIKE ?")
.arg(field)
.arg(condition);
} else { } else {
cmd = QString("SELECT %0 FROM APPINFO WHERE (LOCAL_NAME || NAME_EN || NAME_ZH || PINYIN_NAME || FIRST_LETTER_OF_PINYIN) LIKE :keyword").arg(field); cmd = QString("SELECT %0 FROM APPINFO WHERE %1(LOCAL_NAME || NAME_EN || NAME_ZH || PINYIN_NAME || FIRST_LETTER_OF_PINYIN) LIKE ?")
.arg(field)
.arg(condition);
} }
QSqlQuery query(*d->m_database); QSqlQuery query(*d->m_database);
query.setForwardOnly(true); query.setForwardOnly(true);
query.prepare(cmd); query.prepare(cmd);
query.bindValue(":keyword", "%" + keyword + "%"); int count = 0;
for (const QVariant &conditionValue : restrictions) {
query.bindValue(count, conditionValue);
count++;
}
query.bindValue(count, "%" + keyword + "%");
if (!query.exec()) { if (!query.exec()) {
qWarning() << d->m_database->lastError() << query.lastError(); qWarning() << d->m_database->lastError() << query.lastError();
return false; return false;
@ -487,12 +483,72 @@ bool AppInfoTable::query(ApplicationInfoMap &infoMap, Properties properties, con
return true; return true;
} }
void AppInfoTable::setAppFavoritesState(QString &desktopfp, size_t num) bool AppInfoTable::query(ApplicationInfoMap &infoMap, Properties properties, const QStringList &keywords, PropertyMap restrictions)
{
QString field(ApplicationPropertyHelper(ApplicationProperty::Property::DesktopFilePath).dataBaseField());
for(const ApplicationProperty::Property &pro : properties) {
field.append("," + ApplicationPropertyHelper(pro).dataBaseField());
}
QString condition;
for (const ApplicationProperty::Property prop: restrictions.keys()) {
condition.append(ApplicationPropertyHelper(prop).dataBaseField() + "=? AND ");
}
QString cmd;
if (keywords.at(0).size() < 2) {
cmd = QString("SELECT %0 FROM APPINFO WHERE %1(LOCAL_NAME || NAME_EN || NAME_ZH || FIRST_LETTER_OF_PINYIN) LIKE ?")
.arg(field)
.arg(condition);
} else {
cmd = QString("SELECT %0 FROM APPINFO WHERE %1(LOCAL_NAME || NAME_EN || NAME_ZH || PINYIN_NAME || FIRST_LETTER_OF_PINYIN) LIKE ?")
.arg(field)
.arg(condition);
}
for (int i = 1; i < keywords.size(); i++) {
if (keywords.at(i).size() < 2) {
cmd += " AND (LOCAL_NAME || NAME_EN || NAME_ZH || FIRST_LETTER_OF_PINYIN) LIKE ?";
} else {
cmd += " AND (LOCAL_NAME || NAME_EN || NAME_ZH || FIRST_LETTER_OF_PINYIN || PINYIN_NAME) LIKE ?";
}
}
cmd += QString(" ORDER BY LENGTH(LOCAL_NAME)");
QSqlQuery query(*d->m_database);
query.setForwardOnly(true);
query.prepare(cmd);
int count = 0;
for (const QVariant &conditionValue : restrictions) {
query.bindValue(count, conditionValue);
count++;
}
for (int i = 0; i < keywords.size(); i++) {
query.bindValue(count + i, "%" + keywords.at(i) + "%");
}
if (!query.exec()) {
qWarning() << d->m_database->lastError() << query.lastError();
return false;
}
while (query.next()) {
PropertyMap propertyMap;
for(int i = 0; i< properties.size(); i++) {
propertyMap.insert(properties.at(i), query.value(i + 1));
}
infoMap.insert(query.value(0).toString(), propertyMap);
}
return true;
}
void AppInfoTable::setAppFavoritesState(const QString &desktopfp, size_t num)
{ {
return d->setAppFavoritesState(desktopfp, num); return d->setAppFavoritesState(desktopfp, num);
} }
void AppInfoTable::setAppTopState(QString &desktopfp, size_t num) void AppInfoTable::setAppTopState(const QString &desktopfp, size_t num)
{ {
return d->setAppTopState(desktopfp, num); return d->setAppTopState(desktopfp, num);
} }
@ -528,17 +584,17 @@ bool AppInfoTable::tranPidToDesktopFp(int pid, QString &desktopfp)
} }
//下面接口暂时没啥用,不外放。 //下面接口暂时没啥用,不外放。
bool AppInfoTable::setAppLaunchTimes(QString &desktopfp, size_t num) bool AppInfoTable::setAppLaunchTimes(const QString &desktopfp, size_t num)
{ {
return d->setAppLaunchTimes(desktopfp, num); return d->setAppLaunchTimes(desktopfp, num);
} }
bool AppInfoTable::updateAppLaunchTimes(QString &desktopfp) bool AppInfoTable::updateAppLaunchTimes(const QString &desktopfp)
{ {
return d->updateAppLaunchTimes(desktopfp); return d->updateAppLaunchTimes(desktopfp);
} }
bool AppInfoTable::setAppLockState(QString &desktopfp, size_t num) bool AppInfoTable::setAppLockState(const QString &desktopfp, size_t num)
{ {
return d->setAppLockState(desktopfp, num); return d->setAppLockState(desktopfp, num);
} }

View File

@ -23,7 +23,8 @@ public:
bool query(PropertyMap &propertyMap, const QString &desktopFile, Properties properties); bool query(PropertyMap &propertyMap, const QString &desktopFile, Properties properties);
bool query(ApplicationInfoMap &infoMap, Properties properties); bool query(ApplicationInfoMap &infoMap, Properties properties);
bool query(ApplicationInfoMap &infoMap, Properties properties, PropertyMap restrictions); bool query(ApplicationInfoMap &infoMap, Properties properties, PropertyMap restrictions);
bool query(ApplicationInfoMap &infoMap, Properties properties, const QString &keyword); bool query(ApplicationInfoMap &infoMap, Properties properties, const QString &keyword, PropertyMap restrictions);
bool query(ApplicationInfoMap &infoMap, Properties properties, const QStringList &keywords, PropertyMap restrictions);
/** /**
* @brief AppInfoTable::setAppFavoritesState * @brief AppInfoTable::setAppFavoritesState
@ -31,7 +32,7 @@ public:
* @param desktopfp: the desktop file path of app * @param desktopfp: the desktop file path of app
* @param num: the favorites app's order(from 1) * @param num: the favorites app's order(from 1)
*/ */
void setAppFavoritesState(QString &desktopfp, size_t num); void setAppFavoritesState(const QString &desktopfp, size_t num);
/** /**
* @brief AppInfoTable::setAppTopState * @brief AppInfoTable::setAppTopState
@ -39,7 +40,7 @@ public:
* @param desktopfp: the desktop file path of app * @param desktopfp: the desktop file path of app
* @param num: the top app's order(from 1) * @param num: the top app's order(from 1)
*/ */
void setAppTopState(QString &desktopfp, size_t num); void setAppTopState(const QString &desktopfp, size_t num);
/** /**
* @brief AppInfoTable::changeFavoriteAppPos * @brief AppInfoTable::changeFavoriteAppPos
@ -80,9 +81,9 @@ public:
private: private:
//暂不外放的接口 //暂不外放的接口
bool setAppLaunchTimes(QString &desktopfp, size_t num); bool setAppLaunchTimes(const QString &desktopfp, size_t num);
bool setAppLockState(QString &desktopfp, size_t num); bool setAppLockState(const QString &desktopfp, size_t num);
bool updateAppLaunchTimes(QString &desktopfp); bool updateAppLaunchTimes(const QString &desktopfp);
private: private:
explicit AppInfoTable(QObject *parent = nullptr); explicit AppInfoTable(QObject *parent = nullptr);

View File

@ -52,19 +52,26 @@ ApplicationInfoMap ApplicationInfo::getInfo(Properties properties, PropertyMap r
return infoMap; return infoMap;
} }
ApplicationInfoMap ApplicationInfo::searchApp(Properties properties, QString &keyWord) ApplicationInfoMap ApplicationInfo::searchApp(Properties properties, const QString &keyword, PropertyMap restrictions)
{ {
ApplicationInfoMap infoMap; ApplicationInfoMap infoMap;
AppInfoTable::self()->query(infoMap, properties, keyWord); AppInfoTable::self()->query(infoMap, properties, keyword, restrictions);
return infoMap; return infoMap;
} }
void ApplicationInfo::setAppFavoritesState(QString &desktopFilePath, size_t num) ApplicationInfoMap ApplicationInfo::searchApp(Properties properties, const QStringList &keywords, PropertyMap restrictions)
{
ApplicationInfoMap infoMap;
AppInfoTable::self()->query(infoMap, properties, keywords, restrictions);
return infoMap;
}
void ApplicationInfo::setAppFavoritesState(const QString &desktopFilePath, size_t num)
{ {
AppInfoTable::self()->setAppFavoritesState(desktopFilePath, num); AppInfoTable::self()->setAppFavoritesState(desktopFilePath, num);
} }
void ApplicationInfo::setAppTopState(QString &desktopFilePath, size_t num) void ApplicationInfo::setAppTopState(const QString &desktopFilePath, size_t num)
{ {
AppInfoTable::self()->setAppTopState(desktopFilePath, num); AppInfoTable::self()->setAppTopState(desktopFilePath, num);
} }

View File

@ -48,7 +48,8 @@ public:
* @param installAppInfoRes: the search results of applications * @param installAppInfoRes: the search results of applications
* @return ApplicationInfoMap: the search result * @return ApplicationInfoMap: the search result
*/ */
ApplicationInfoMap searchApp(Properties properties, QString &keyWord); ApplicationInfoMap searchApp(Properties properties, const QString &keyword, PropertyMap restrictions);
ApplicationInfoMap searchApp(Properties properties, const QStringList &keywords, PropertyMap restrictions);
/** /**
* @brief ApplicationInfo::setAppFavoritesState * @brief ApplicationInfo::setAppFavoritesState
@ -56,7 +57,7 @@ public:
* @param desktopFilePath: the desktop file path of app * @param desktopFilePath: the desktop file path of app
* @param num: the favorites app's order(from 1) * @param num: the favorites app's order(from 1)
*/ */
void setAppFavoritesState(QString &desktopFilePath, size_t num); void setAppFavoritesState(const QString &desktopFilePath, size_t num);
/** /**
* @brief ApplicationInfo::setAppTopState * @brief ApplicationInfo::setAppTopState
@ -64,7 +65,7 @@ public:
* @param desktopFilePath: the desktop file path of app * @param desktopFilePath: the desktop file path of app
* @param num: the top app's order(from 1) * @param num: the top app's order(from 1)
*/ */
void setAppTopState(QString &desktopFilePath, size_t num); void setAppTopState(const QString &desktopFilePath, size_t num);
/** /**
* @brief ApplicationInfo::changeFavoriteAppPos * @brief ApplicationInfo::changeFavoriteAppPos