adding in qt cli project instead of using raw c++ and/or golang FFI

This commit is contained in:
talksik
2025-02-22 08:45:54 -08:00
parent 7fcc9b8177
commit 05a6d677a4
32 changed files with 213 additions and 1 deletions
+4
View File
@@ -0,0 +1,4 @@
BasedOnStyle: Microsoft
TabWidth: 2
IndentWidth: 2
+82
View File
@@ -0,0 +1,82 @@
# This file is used to ignore files which are generated
# ----------------------------------------------------------------------------
*~
*.autosave
*.a
*.core
*.moc
*.o
*.obj
*.orig
*.rej
*.so
*.so.*
*_pch.h.cpp
*_resource.rc
*.qm
.#*
*.*#
core
!core/
tags
.DS_Store
.directory
*.debug
Makefile*
*.prl
*.app
moc_*.cpp
ui_*.h
qrc_*.cpp
Thumbs.db
*.res
*.rc
/.qmake.cache
/.qmake.stash
# qtcreator generated files
*.pro.user*
*.qbs.user*
CMakeLists.txt.user*
# xemacs temporary files
*.flc
# Vim temporary files
.*.swp
# Visual Studio generated files
*.ib_pdb_index
*.idb
*.ilk
*.pdb
*.sln
*.suo
*.vcproj
*vcproj.*.*.user
*.ncb
*.sdf
*.opensdf
*.vcxproj
*vcxproj.*
# MinGW generated files
*.Debug
*.Release
# Python byte code
*.pyc
# Binaries
# --------
*.dll
*.exe
# Directories with generated files
.moc/
.obj/
.pch/
.rcc/
.uic/
/build*/
+26
View File
@@ -0,0 +1,26 @@
cmake_minimum_required(VERSION 3.16)
project(qt-cli LANGUAGES CXX)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core Network)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Network)
add_executable(qt-cli
main.cpp
)
target_link_libraries(qt-cli Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Network)
include(GNUInstallDirs)
install(TARGETS qt-cli
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
+1
View File
@@ -0,0 +1 @@
build/Qt_6_8_2_for_macOS-Debug/compile_commands.json
+100
View File
@@ -0,0 +1,100 @@
#include <QCoreApplication>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QtNetwork/QNetworkReply>
#include <QtNetwork/qnetworkaccessmanager.h>
struct WaitlistEntry
{
QString firstName;
QString lastName;
QString email;
};
QVector<WaitlistEntry> parseGraphQLResponse(const QByteArray &responseData)
{
QVector<WaitlistEntry> waitlist;
QJsonDocument doc = QJsonDocument::fromJson(responseData);
if (!doc.isObject())
return waitlist;
QJsonObject obj = doc.object();
QJsonArray entries = obj["data"].toObject()["getWaitlist"].toArray();
for (const QJsonValue &value : entries)
{
QJsonObject entryObj = value.toObject();
WaitlistEntry entry{entryObj["firstName"].toString(), entryObj["lastName"].toString(),
entryObj["email"].toString()};
waitlist.append(entry);
}
return waitlist;
}
void sendGraphQLQuery(QNetworkAccessManager &manager)
{
QUrl url("https://helios.dev.flowy.live/query");
QNetworkRequest request(url);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
request.setRawHeader("Authorization", "talksik");
// Define GraphQL query
QJsonObject json;
json["query"] = R"(
query {
getWaitlist {
firstName
lastName
email
}
}
)";
// Convert to JSON and send request
QNetworkReply *reply = manager.post(request, QJsonDocument(json).toJson());
// Handle response asynchronously
QObject::connect(reply, &QNetworkReply::finished, [reply]() {
if (reply->error() == QNetworkReply::NoError)
{
auto response = reply->readAll();
auto parsedEntries = parseGraphQLResponse(response);
for (const auto &entry : parsedEntries)
{
qDebug() << "Entry: " << entry.email << Qt::endl;
}
}
else
{
qDebug() << "Error:" << reply->errorString();
}
reply->deleteLater();
QCoreApplication::quit();
});
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// Set up code that uses the Qt event loop here.
// Call a.quit() or a.exit() to quit the application.
// A not very useful example would be including
// #include <QTimer>
// near the top of the file and calling
// QTimer::singleShot(5000, &a, &QCoreApplication::quit);
// which quits the application after 5 seconds.
// If you do not need a running Qt event loop, remove the call
// to a.exec() or use the Non-Qt Plain C++ Application template.
qDebug() << "Sending GraphQL query...";
QNetworkAccessManager manager;
sendGraphQLQuery(manager);
qDebug() << "Waiting for response...";
return a.exec();
}