diff --git a/ukui-search-app-data-service/app-db-manager.cpp b/ukui-search-app-data-service/app-db-manager.cpp index f06806b..c11b7af 100644 --- a/ukui-search-app-data-service/app-db-manager.cpp +++ b/ukui-search-app-data-service/app-db-manager.cpp @@ -875,7 +875,7 @@ bool AppDBManager::handleLaunchTimesUpdate(const QString &desktopfp, int num) return res; } -bool AppDBManager::handleFavoritesStateUpdate(const QString &desktopfp, int num) +bool AppDBManager::handleFavoritesStateUpdate(const QString &desktopfp, int num, bool isOrderChanged) { if (num < 0) { qWarning() << "Invalid favorite num, I quit!!!"; @@ -884,26 +884,30 @@ bool AppDBManager::handleFavoritesStateUpdate(const QString &desktopfp, int num) bool res(true); QSqlQuery sql(m_database); + QString cmd; - //查询要设置的favorites标志位是否被占用 - QString cmd = QString("SELECT DESKTOP_FILE_PATH, FAVORITES FROM APPINFO WHERE FAVORITES = %1").arg(num); - if (!sql.exec(cmd)) { - qWarning() << "Fail to exec:" << cmd << "because:" << m_database.lastError(); - } else { - while (sql.next()) { - if (num && sql.value("FAVORITES").toInt() == num) { - res = false; - if (sql.value("DESKTOP_FILE_PATH").toString() == desktopfp) { - qWarning() << "favorites state has no changes, I quit!"; - return res; - } else { - qWarning() << "the favorites num:" << num << "has been used, fail to update favorites state of" << desktopfp; - return res; + //当直接设置的时候需要查询要设置的favorites标志位是否被占用 + if (!isOrderChanged) { + cmd = QString("SELECT DESKTOP_FILE_PATH, FAVORITES FROM APPINFO WHERE FAVORITES = %1").arg(num); + if (!sql.exec(cmd)) { + qWarning() << "Fail to exec:" << cmd << "because:" << m_database.lastError(); + } else { + while (sql.next()) { + if (num && sql.value("FAVORITES").toInt() == num) { + res = false; + if (sql.value("DESKTOP_FILE_PATH").toString() == desktopfp) { + qWarning() << "favorites state has no changes, I quit!"; + return res; + } else { + qWarning() << "the favorites num:" << num << "has been used, fail to update favorites state of" << desktopfp; + return res; + } } } } } + //更新favorites状态 cmd = QString("UPDATE APPINFO SET MODIFYED_TIME='%0', FAVORITES=%1 WHERE DESKTOP_FILE_PATH='%2'") .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")) @@ -922,7 +926,7 @@ bool AppDBManager::handleFavoritesStateUpdate(const QString &desktopfp, int num) return res; } -bool AppDBManager::handleTopStateUpdate(const QString &desktopfp, int num) +bool AppDBManager::handleTopStateUpdate(const QString &desktopfp, int num, bool isOrderChanged) { if (num < 0) { qWarning() << "Invalid top num, I quit!!!"; @@ -932,20 +936,23 @@ bool AppDBManager::handleTopStateUpdate(const QString &desktopfp, int num) bool res(true); QSqlQuery sql(m_database); - //查询要设置的top标志位是否被占用 - QString cmd = QString("SELECT DESKTOP_FILE_PATH, TOP FROM APPINFO WHERE TOP = %1").arg(num); - if (!sql.exec(cmd)) { - qWarning() << "Fail to exec:" << cmd << "because:" << m_database.lastError(); - } else { - while (sql.next()) { - if (num && sql.value("TOP").toInt() == num) { - res = false; - if (sql.value("DESKTOP_FILE_PATH").toString() == desktopfp) { - qWarning() << "top state has no changes, I quit!"; - return res; - } else { - qWarning() << "the top num:" << num << "has been used, fail to update top state of" << desktopfp; - return res; + //当直接设置的时候需要查询要设置的top标志位是否被占用 + QString cmd; + if (!isOrderChanged) { + cmd = QString("SELECT DESKTOP_FILE_PATH, TOP FROM APPINFO WHERE TOP = %1").arg(num); + if (!sql.exec(cmd)) { + qWarning() << "Fail to exec:" << cmd << "because:" << m_database.lastError(); + } else { + while (sql.next()) { + if (num && sql.value("TOP").toInt() == num) { + res = false; + if (sql.value("DESKTOP_FILE_PATH").toString() == desktopfp) { + qWarning() << "top state has no changes, I quit!"; + return res; + } else { + qWarning() << "the top num:" << num << "has been used, fail to update top state of" << desktopfp; + return res; + } } } } @@ -1050,17 +1057,19 @@ void AppDBManager::updateLaunchTimes(const QString &desktopfp) PendingAppInfoQueue::getAppInfoQueue().enqueue(item); } -void AppDBManager::updateFavoritesState(const QString &desktopfp, int num) +void AppDBManager::updateFavoritesState(const QString &desktopfp, int num, bool isOrderChanged) { PendingAppInfo item(desktopfp, PendingAppInfo::HandleType::UpdateFavorites); item.setFavorites(num); + item.setChangeFavoritePos(isOrderChanged); PendingAppInfoQueue::getAppInfoQueue().enqueue(item); } -void AppDBManager::updateTopState(const QString &desktopfp, int num) +void AppDBManager::updateTopState(const QString &desktopfp, int num, bool isOrderChanged) { PendingAppInfo item(desktopfp, PendingAppInfo::HandleType::UpdateTop); item.setTop(num); + item.setChangeTopPos(isOrderChanged); PendingAppInfoQueue::getAppInfoQueue().enqueue(item); } @@ -1115,13 +1124,13 @@ bool AppDBManager::changeFavoriteAppPos(const QString &desktopfp, int pos) } else { while (sql.next()) { if (sql.value("FAVORITES").toInt() == previousPos) { - this->updateFavoritesState(desktopfp, pos); + this->updateFavoritesState(desktopfp, pos, true); continue; } if (previousPos > pos) { - this->updateFavoritesState(sql.value("DESKTOP_FILE_PATH").toString(), sql.value("FAVORITES").toInt() + 1); + this->updateFavoritesState(sql.value("DESKTOP_FILE_PATH").toString(), sql.value("FAVORITES").toInt() + 1, true); } else { - this->updateFavoritesState(sql.value("DESKTOP_FILE_PATH").toString(), sql.value("FAVORITES").toInt() - 1); + this->updateFavoritesState(sql.value("DESKTOP_FILE_PATH").toString(), sql.value("FAVORITES").toInt() - 1, true); } } @@ -1177,13 +1186,13 @@ bool AppDBManager::changeTopAppPos(const QString &desktopfp, int pos) } else { while (sql.next()) { if (sql.value("TOP").toInt() == previousPos) { - this->updateTopState(desktopfp, pos); + this->updateTopState(desktopfp, pos, true); continue; } if (previousPos > pos) { - this->updateTopState(sql.value("DESKTOP_FILE_PATH").toString(), sql.value("TOP").toInt() + 1); + this->updateTopState(sql.value("DESKTOP_FILE_PATH").toString(), sql.value("TOP").toInt() + 1, true); } else { - this->updateTopState(sql.value("DESKTOP_FILE_PATH").toString(), sql.value("TOP").toInt() - 1); + this->updateTopState(sql.value("DESKTOP_FILE_PATH").toString(), sql.value("TOP").toInt() - 1, true); } } diff --git a/ukui-search-app-data-service/app-db-manager.h b/ukui-search-app-data-service/app-db-manager.h index bd4e9f4..9eaad4b 100644 --- a/ukui-search-app-data-service/app-db-manager.h +++ b/ukui-search-app-data-service/app-db-manager.h @@ -70,8 +70,8 @@ public: bool handleLocaleDataUpdate(const QString &desktopfp); bool handleLaunchTimesUpdate(const QString &desktopfp, int num); - bool handleFavoritesStateUpdate(const QString &desktopfp, int num); - bool handleTopStateUpdate(const QString &desktopfp, int num); + bool handleFavoritesStateUpdate(const QString &desktopfp, int num, bool isOrderChanged = false); + bool handleTopStateUpdate(const QString &desktopfp, int num, bool isOrderChanged = false); bool handleLockStateUpdate(const QString &desktopfp, int num); bool createAppInfoResult(const QString &desktopfp, AppInfoResult &result); @@ -84,8 +84,8 @@ public Q_SLOTS: //对数据库某字段进行update void updateLocaleData(const QString &desktopfp); void updateLaunchTimes(const QString &desktopfp); - void updateFavoritesState(const QString &desktopfp, int num); - void updateTopState(const QString &desktopfp, int num); + void updateFavoritesState(const QString &desktopfp, int num, bool isOrderChanged = false); + void updateTopState(const QString &desktopfp, int num, bool isOrderChanged = false); void udpateLockState(const QString &desktopfp, int num); //拖动改变置顶和收藏应用位置 diff --git a/ukui-search-app-data-service/pending-app-info-queue.cpp b/ukui-search-app-data-service/pending-app-info-queue.cpp index 48d5442..5b5d63c 100644 --- a/ukui-search-app-data-service/pending-app-info-queue.cpp +++ b/ukui-search-app-data-service/pending-app-info-queue.cpp @@ -158,10 +158,10 @@ void PendingAppInfoQueue::processCache() AppDBManager::getInstance()->handleLaunchTimesUpdate(info.path(), info.launchTimes()); } if (handleTypes & PendingAppInfo::UpdateFavorites) { - AppDBManager::getInstance()->handleFavoritesStateUpdate(info.path(), info.favoritesState()); + AppDBManager::getInstance()->handleFavoritesStateUpdate(info.path(), info.favoritesState(), info.isFavoritePosChanged()); } if (handleTypes & PendingAppInfo::UpdateTop) { - AppDBManager::getInstance()->handleTopStateUpdate(info.path(), info.topState()); + AppDBManager::getInstance()->handleTopStateUpdate(info.path(), info.topState(), info.isTopPosChanged()); } if (handleTypes & PendingAppInfo::UpdateLock) { AppDBManager::getInstance()->handleLockStateUpdate(info.path(), info.lockState()); diff --git a/ukui-search-app-data-service/pending-app-info.h b/ukui-search-app-data-service/pending-app-info.h index 51e11c7..653580f 100644 --- a/ukui-search-app-data-service/pending-app-info.h +++ b/ukui-search-app-data-service/pending-app-info.h @@ -22,14 +22,19 @@ public: Q_DECLARE_FLAGS(HandleTypes, HandleType) PendingAppInfo() = default; - PendingAppInfo(QString desktopfp, HandleTypes type, int favorites = -1, int top = -1, int lock = -1, bool addLaunch = false, int launchTimes = 0) + PendingAppInfo(QString desktopfp, HandleTypes type, + int favorites = -1, int top = -1, int lock = -1, + bool addLaunch = false, int launchTimes = 0, + bool isChangeFavorite = false, bool isChangeTopPos = false) : m_desktopfp(desktopfp), m_handleType(type), m_favoritesState(favorites), m_topState(top), m_lockState(lock), m_willAddLaunch(addLaunch), - m_launchTimes(launchTimes) {} + m_launchTimes(launchTimes), + m_isFavoritePosChanged(isChangeFavorite), + m_isTopPosChanged(isChangeTopPos) {} QString path() const {return m_desktopfp;} HandleTypes handleType() const {return m_handleType;} @@ -38,15 +43,20 @@ public: int lockState() const {return m_lockState;} int launchTimes() const {return m_launchTimes;} bool willAddLunchTimes() const {return m_willAddLaunch;} + bool isFavoritePosChanged() const {return m_isFavoritePosChanged;} + bool isTopPosChanged() const {return m_isTopPosChanged;} - void setHandleType(const PendingAppInfo & info) {m_handleType = info.handleType();} + void setDesktopFp(const QString& desktopfp) {m_desktopfp = desktopfp;} + void setHandleType(const PendingAppInfo& info) {m_handleType = info.handleType();} void setHandleType(HandleTypes type) {m_handleType = type;} void setFavorites(int favoritesState) {m_favoritesState = favoritesState;} void setTop(int top) {m_topState = top;} void setLock(int lock) {m_lockState = lock;} void setLaunchWillAdd(bool willAdd) {m_willAddLaunch = willAdd;} void setLaunchTimes(int times) {m_launchTimes = times;} - void merge(const PendingAppInfo &info) + void setChangeFavoritePos(bool isOrderChanged) {m_isFavoritePosChanged = isOrderChanged;} + void setChangeTopPos(bool isOrderChanged) {m_isTopPosChanged = isOrderChanged;} + void merge(const PendingAppInfo& info) { m_handleType |= info.handleType(); @@ -72,11 +82,13 @@ public: private: QString m_desktopfp; HandleTypes m_handleType; - int m_favoritesState; - int m_topState; - int m_lockState; - bool m_willAddLaunch; - int m_launchTimes; + int m_favoritesState = -1; + int m_topState = -1; + int m_lockState = -1; + bool m_willAddLaunch = false; + int m_launchTimes = 0; + bool m_isFavoritePosChanged = false; + bool m_isTopPosChanged = false; }; }