mirror of
https://github.com/redstrate/Astra.git
synced 2025-04-24 21:37:46 +00:00
83 lines
2.6 KiB
C++
83 lines
2.6 KiB
C++
![]() |
#include "gameparser.h"
|
||
|
|
||
|
#include <QDebug>
|
||
|
#include <QRegularExpression>
|
||
|
#include <QBuffer>
|
||
|
|
||
|
GameParser::GameParser() {
|
||
|
api = new tesseract::TessBaseAPI();
|
||
|
|
||
|
if (api->Init(nullptr, "eng")) {
|
||
|
qDebug() << "Could not initialize tesseract!";
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
api->SetPageSegMode(tesseract::PageSegMode::PSM_SINGLE_BLOCK);
|
||
|
}
|
||
|
|
||
|
GameParser::~GameParser() {
|
||
|
api->End();
|
||
|
delete api;
|
||
|
}
|
||
|
|
||
|
GameParseResult GameParser::parseImage(QImage img) {
|
||
|
QBuffer buf;
|
||
|
img = img.convertToFormat(QImage::Format_Grayscale8);
|
||
|
img.save(&buf, "PNG", 100);
|
||
|
|
||
|
Pix* image = pixReadMem((const l_uint8 *) buf.data().data(), buf.size());
|
||
|
api->SetImage(image);
|
||
|
api->SetSourceResolution(300);
|
||
|
|
||
|
const QString text = api->GetUTF8Text();
|
||
|
|
||
|
// TODO: clean up these names
|
||
|
const bool hasWorldFullText = text.contains("This World is currently full.") || text.contains("Players in queue");
|
||
|
const bool hasLobbyErrorText = text.contains("The lobby server connection has encountered an error.");
|
||
|
const bool hasCONFIGURATIONText = text.contains("CONFIGURATION") || text.contains("ONLINE");
|
||
|
const bool hasConnectingToData = text.contains("Connecting to data center");
|
||
|
const bool worldTotallyFull = text.contains("3001");
|
||
|
|
||
|
if(hasLobbyErrorText) {
|
||
|
qDebug() << "LOBBY ERROR";
|
||
|
|
||
|
return {ScreenState::LobbyError, -1};
|
||
|
} else {
|
||
|
if(worldTotallyFull) {
|
||
|
qDebug() << "TOTALLY FULL WORLD (CLOSED BY SQENIX)";
|
||
|
|
||
|
return {ScreenState::WorldFull, -1};
|
||
|
} else {
|
||
|
if(hasConnectingToData) {
|
||
|
qDebug() << "CONNECTING TO DATA CENTER";
|
||
|
|
||
|
return {ScreenState::ConnectingToDataCenter, -1};
|
||
|
} else {
|
||
|
if(hasWorldFullText) {
|
||
|
qDebug() << "FULL WORLD";
|
||
|
|
||
|
// attempt to extract number of players in queue
|
||
|
QRegularExpression exp("(?:Players in queue: )([\\d|,]*)");
|
||
|
|
||
|
auto match = exp.match(text);
|
||
|
if(match.isValid()) {
|
||
|
return {ScreenState::InLoginQueue, match.captured(1).remove(',').toInt()};
|
||
|
}
|
||
|
|
||
|
return {ScreenState::InLoginQueue, -1};
|
||
|
} else {
|
||
|
if(hasCONFIGURATIONText) {
|
||
|
qDebug() << "TITLE SCREEN";
|
||
|
return {ScreenState::EnteredTitleScreen, -1};
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// TODO: figure out how to properly clear tesseract data
|
||
|
api->Clear();
|
||
|
api->ClearAdaptiveClassifier();
|
||
|
|
||
|
return {ScreenState::Splash, -1};
|
||
|
}
|