Optimize the search app interface.
This commit is contained in:
parent
0e267ac29c
commit
bf22f0e150
|
@ -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();
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue