66 lines
1.9 KiB
C++
66 lines
1.9 KiB
C++
|
|
#include "usenetsearch/Application.h"
|
|
#include "usenetsearch/Indexer.h"
|
|
#include "usenetsearch/StringUtils.h"
|
|
#include "usenetsearch/UsenetClient.h"
|
|
|
|
#include <iostream>
|
|
|
|
using namespace usenetsearch;
|
|
|
|
int main(int argc, char* argv[])
|
|
{
|
|
std::string searchString;
|
|
Application::Get().AddStringOption('s', "Search string",
|
|
[&searchString](const std::string& s){
|
|
searchString = s;
|
|
}
|
|
);
|
|
int maxResults{0};
|
|
Application::Get().AddIntegerOption('n', "Maximum results",
|
|
[&maxResults](int n){
|
|
maxResults = n;
|
|
}
|
|
);
|
|
if (!Application::Get().Init(argc, argv)) return 1;
|
|
if (searchString.empty())
|
|
{
|
|
std::cerr << "Missing search string." << std::endl;
|
|
Application::Get().Usage(argv[0]);
|
|
return 1;
|
|
}
|
|
UsenetClient client;
|
|
Indexer idx(client);
|
|
std::unique_ptr<SearchResults> results = idx.Search(
|
|
searchString
|
|
);
|
|
if (!results)
|
|
{
|
|
std::cout << "Nothing found." << std::endl;
|
|
return 0;
|
|
}
|
|
idx.Connect();
|
|
size_t resultCounter{0};
|
|
for (const auto& sr: *results)
|
|
{
|
|
if (Application::Get().ShouldStop()) return 1;
|
|
const std::unique_ptr<NntpListEntry> newsGroup
|
|
= Application::Get().GetDb().FindNntpEntry(sr.NewsgroupId());
|
|
if (!newsGroup) continue;
|
|
client.Group(WideStringFromString(newsGroup->name));
|
|
const NntpHeader headers = client.Head(sr.ArticleId());
|
|
std::cout
|
|
<< "Score: " + std::to_string(sr.Hits())
|
|
<< " | "
|
|
<< "Newsgroup: " + newsGroup->name
|
|
<< " | "
|
|
<< "Article id: " + std::to_string(sr.ArticleId())
|
|
<< " | "
|
|
<< "Subject: " + headers.subject
|
|
<< std::endl;
|
|
resultCounter++;
|
|
if ((maxResults > 0) && (resultCounter >= maxResults)) break;
|
|
}
|
|
return 0;
|
|
}
|