diff --git a/src/server/WebBackend.cpp b/src/server/WebBackend.cpp index 753cf50..f61cd8f 100644 --- a/src/server/WebBackend.cpp +++ b/src/server/WebBackend.cpp @@ -726,11 +726,18 @@ RestOutputStruct::ExitCode WebSocket::EvaluateSysadmPkgRequest(const QJsonValue //REQUIRED: "search_term" (string to search for) //OPTIONAL: "repo" //OPTIONAL: "category" + //OPTIONAL: "search_excludes" (array of string or single string); QString srch = in_args.toObject().value("search_term").toString(); if(srch.isEmpty()){ return RestOutputStruct::BADREQUEST; } - QStringList pkgs = sysadm::PKG::pkg_search(repo, srch, cat); + QStringList exclude; + if(in_args.toObject().contains("search_excludes")){ + if(in_args.toObject().value("search_excludes").isString()){ exclude << in_args.toObject().value("search_excludes").toString(); } + else if(in_args.toObject().value("search_excludes").isArray()){ exclude = JsonArrayToStringList( in_args.toObject().value("search_excludes").toArray() ); } + } + QStringList pkgs = sysadm::PKG::pkg_search(repo, srch, exclude, cat); if(!pkgs.isEmpty()){ QJsonObject info = sysadm::PKG::pkg_info(pkgs, repo, cat, false); //always do simple results for a search + info.insert("results_order", QJsonArray::fromStringList(pkgs)); if(!info.isEmpty()){ out->insert("pkg_search",info); } }else{ return RestOutputStruct::NOCONTENT; diff --git a/src/server/library/sysadm-pkg.cpp b/src/server/library/sysadm-pkg.cpp index 580bfd9..99618d7 100644 --- a/src/server/library/sysadm-pkg.cpp +++ b/src/server/library/sysadm-pkg.cpp @@ -89,18 +89,28 @@ inline void checkDB(QString repo){ // ================= QJsonObject PKG::pkg_info(QStringList origins, QString repo, QString category, bool fullresults){ QJsonObject retObj; + //if(origins.contains("math/R")){ qDebug() << "pkg_info:" << repo << category; } checkDB(repo); //create if needed QSqlDatabase DB = QSqlDatabase::database(repo); if(!DB.isOpen()){ return retObj; } //could not open DB (file missing?) //Now do all the pkg info, one pkg origin at a time origins.removeAll(""); + origins.removeDuplicates(); QString q_string = "SELECT * FROM packages"; - if(!origins.isEmpty()){ q_string.append(" WHERE origin = '"+origins.join("' OR origin = '")+"'"); } + if(!origins.isEmpty()){ + q_string.append(" WHERE origin IN ('"+origins.join("', '")+"')"); + //Also keep the ordering of the origins preserved + /*q_string.append(" ORDER BY CASE origins "); + for(int i=0; i