int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); app.setApplicationName("Grabber"); app.setApplicationVersion(VERSION); app.setOrganizationName("Bionus"); app.setOrganizationDomain("bionus.fr.cr"); QCommandLineParser parser; parser.addHelpOption(); parser.addVersionOption(); QCommandLineOption tagsOption(QStringList() << "t" << "tags", "Tags to search for.", "tags"); QCommandLineOption sourceOption(QStringList() << "s" << "sources", "Source websites.", "sources"); QCommandLineOption pageOption(QStringList() << "p" << "page", "Starting page.", "page", "1"); QCommandLineOption limitOption(QStringList() << "m" << "max", "Maximum of returned images.", "count"); QCommandLineOption perpageOption(QStringList() << "i" << "perpage", "Number of images per page.", "count", "20"); QCommandLineOption pathOption(QStringList() << "l" << "location", "Location to save the results.", "path"); QCommandLineOption filenameOption(QStringList() << "f" << "filename", "Filename to save the results.", "filename"); QCommandLineOption userOption(QStringList() << "u" << "user", "Username to connect to the source.", "user"); QCommandLineOption passwordOption(QStringList() << "w" << "password", "Password to connect to the source.", "password"); QCommandLineOption blacklistOption(QStringList() << "b" << "blacklist", "Download blacklisted images."); QCommandLineOption postfilteringOption(QStringList() << "r" << "postfilter", "Filter results.", "filter"); QCommandLineOption noDuplicatesOption(QStringList() << "n" << "no-duplicates", "Remove duplicates from results."); QCommandLineOption verboseOption(QStringList() << "d" << "debug", "Show debug messages."); QCommandLineOption tagsMinOption(QStringList() << "tm" << "tags-min", "Minimum count for tags to be returned.", "count", "0"); QCommandLineOption tagsFormatOption(QStringList() << "tf" << "tags-format", "Format for returning tags.", "format", "%tag\t%count\t%type"); parser.addOption(tagsOption); parser.addOption(sourceOption); parser.addOption(pageOption); parser.addOption(limitOption); parser.addOption(perpageOption); parser.addOption(pathOption); parser.addOption(filenameOption); parser.addOption(userOption); parser.addOption(passwordOption); parser.addOption(blacklistOption); parser.addOption(postfilteringOption); parser.addOption(tagsMinOption); parser.addOption(tagsFormatOption); parser.addOption(noDuplicatesOption); parser.addOption(verboseOption); QCommandLineOption returnCountOption(QStringList() << "rc" << "return-count", "Return total image count."); QCommandLineOption returnTagsOption(QStringList() << "rt" << "return-tags", "Return tags for a search."); QCommandLineOption returnPureTagsOption(QStringList() << "rp" << "return-pure-tags", "Return tags."); QCommandLineOption returnImagesOption(QStringList() << "ri" << "return-images", "Return images url."); QCommandLineOption downloadOption(QStringList() << "download", "Download found images."); parser.addOption(returnCountOption); parser.addOption(returnTagsOption); parser.addOption(returnPureTagsOption); parser.addOption(returnImagesOption); parser.addOption(downloadOption); parser.process(app); if (!parser.isSet(verboseOption)) qInstallMessageHandler(noMessageOutput); Profile *profile = new Profile(savePath()); Downloader *dwnldr = new Downloader(profile, parser.value(tagsOption).split(" ", QString::SkipEmptyParts), parser.value(postfilteringOption).split(" ", QString::SkipEmptyParts), Site::getSites(profile, parser.value(sourceOption).split(" ", QString::SkipEmptyParts)), parser.value(pageOption).toInt(), parser.value(limitOption).toInt(), parser.value(perpageOption).toInt(), parser.value(pathOption), parser.value(filenameOption), parser.value(userOption), parser.value(passwordOption), parser.isSet(blacklistOption), profile->getBlacklist(), parser.isSet(noDuplicatesOption), parser.value(tagsMinOption).toInt(), parser.value(tagsFormatOption)); if (parser.isSet(returnCountOption)) dwnldr->getPageCount(); else if (parser.isSet(returnTagsOption)) dwnldr->getPageTags(); else if (parser.isSet(returnPureTagsOption)) dwnldr->getTags(); else if (parser.isSet(returnImagesOption)) dwnldr->getUrls(); else if (parser.isSet(downloadOption)) dwnldr->getImages(); else parser.showHelp(); dwnldr->setQuit(true); QObject::connect(dwnldr, SIGNAL(quit()), qApp, SLOT(quit())); return app.exec(); }
int Alpaca1Priority(int radius, std::vector<int>* drawArray) { std::cout << "Alpaca 1.0 began..." << std::endl; std::cout << "Node count: " << pathOption::maxDepth << std::endl; std::chrono::high_resolution_clock::time_point beginTime = std::chrono::high_resolution_clock::now(); std::vector<int> minPathArray; for (int i = 0; i < nodeArray.size(); i++) { nodeArray[i].preCalcDistance(i,&minPathArray); } std::cout << "Pre-Calculations finished." << std::endl; pathOption bestFinished = pathOption(&minPathArray); int smallest; for (int i = 1; i < pathOption::maxDepth; i++) { smallest = *(bestFinished.openNodes.begin()); for (std::set<int>::iterator i = ++bestFinished.openNodes.begin(); i != bestFinished.openNodes.end(); i++) { if (bestFinished.getLastNode().distanceArray[*i] < bestFinished.getLastNode().distanceArray[smallest]) { smallest = *i; } } bestFinished.addNode(smallest, &bestFinished); } std::cout << "Quasi-best path: " << bestFinished.curDistance << std::endl; bestFinished.printPath(); int quasiBest = bestFinished.curDistance; //Main loop int loopNum = 0; pathOption curOption = pathOption(&minPathArray); pathOption pushOption = pathOption(&minPathArray); std::priority_queue < pathOption, std::vector<pathOption>, shorterFirst> nodeQueue; nodeQueue.push(pathOption(&minPathArray)); do { curOption = nodeQueue.top(); nodeQueue.pop(); std::cout << ++loopNum << " " << curOption.curDistance << " " << curOption.getDepth() << std::endl; for (std::set<int>::iterator i = curOption.openNodes.begin(); i != curOption.openNodes.end(); i++) { pushOption = curOption; if (pushOption.addNode(*i, &bestFinished)) { nodeQueue.push(pushOption); } else if (pushOption.curDistance < bestFinished.curDistance) { std::cout << "Old best path: " << bestFinished.curDistance; bestFinished = pushOption; std::cout << " New best path: " << pushOption.curDistance << std::endl; } } } while (nodeQueue.size() > 0 /*|| nodeQueue.top().getDepth() < pathOption::maxDepth */ /*|| bestFinished->getPrecise() == false*/); std::chrono::high_resolution_clock::time_point endTime = std::chrono::high_resolution_clock::now(); std::chrono::duration<double> execTime = std::chrono::duration_cast<std::chrono::duration<double>>(endTime - beginTime); *drawArray = bestFinished.curPath; bestFinished.printPath(); std::cout << "Node count: " << pathOption::maxDepth << std::endl; std::cout << "Best path: " << bestFinished.curDistance << std::endl; std::cout << "Quasi-best path: " << quasiBest << std::endl; std::cout << "...Alpaca 1.0 ended." << std::endl; std::cout << "Time: " << execTime.count() << std::endl; return bestFinished.curDistance; }