/* * 接受isoftappdaemon finished 信号 * 1.更新所有包列表中对应包的状态 * 2.给每个页面发送taskfinished信号 * 3.更新taskqueue队列: * a、删除当前任务 * b、开始新任务 */ void JadedBus::getFinished(const QString &pkgName,qlonglong status) { if (status != STATUS_REMOVED && status != STATUS_UPDATED && status != STATUS_INSTALLED && status != STATUS_INSTALL && status != STATUS_UPGRADED && status != STATUS_INSTALL_ERROR) { return; } if(pkgName.isEmpty()) { return; } int i =0; for (i = 0; i < AllPkgList.size(); ++i) { if (AllPkgList.at(i).pkgName == pkgName) { if (status == STATUS_INSTALLED) { if (AllPkgList[i].status != 1) { AllPkgList[i].status = 1; QDateTime local(QDateTime::currentDateTime()); AllPkgList[i].datetime = local.toString("yyyy-MM-dd hh:mm:ss"); QString desktopName = m_isoftapp->GetDesktopName(pkgName).value(); if (!desktopName.isEmpty()) desktopName = desktopName.left(desktopName.size() - 8); KService::Ptr service = KService::serviceByDesktopName(desktopName); if (!service) { service = KService::serviceByDesktopName(pkgName); } if (service) { if (!service->exec().isEmpty() && !service->noDisplay()) { QFile::link(service->entryPath(), QStandardPaths::writableLocation(QStandardPaths::DesktopLocation) + "/" + service->name() + ".desktop"); } } } } else if (status == STATUS_REMOVED) { if (AllPkgList[i].status != 2) { AllPkgList[i].status = 2; QDateTime local(QDateTime::currentDateTime()); AllPkgList[i].datetime = local.toString("yyyy-MM-dd hh:mm:ss"); } } else if ( status == STATUS_INSTALL_ERROR) { if (AllPkgList[i].status != 2) { AllPkgList[i].status = 2; } QString details ="insatallfailed"; m_errored(pkgName,details); } getMyPkgNumber(); break; } } taskFinished(pkgName); for (i = 0; i < m_taskQueue.size(); i++) { if (m_taskQueue[i].status == "doing" && pkgName == m_taskQueue[i].name) { if (m_taskQueue[i].action == "update") { int t = (int)time(NULL); m_updateInfo.replace(pkgName,QString::number(t, 10)); //getUpdate() ; } printf("trace:%s,%d,name[%s],index[%d][%s] task is finished.\n",__FUNCTION__,__LINE__, qPrintable(m_taskQueue[i].name),i,qPrintable(m_taskQueue[i].action)); m_taskQueue[i].status = "done"; g_doingPkgName = ""; m_taskQueue.removeFirst(); m_runTask(); return; } } return; }