Esempio n. 1
0
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();
}
Esempio n. 2
0
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;
}