diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..eb0d2bb --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,43 @@ +cmake_minimum_required(VERSION 3.19) +project(Sukai) + +set(CMAKE_AUTOMOC ON) +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +find_package(ECM ${KF_MIN_VERSION} NO_MODULE REQUIRED) +set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake) + +find_package(Qt6 COMPONENTS Core Gui Qml QuickControls2 QuickTest Test Widgets Quick Network REQUIRED) +find_package(KF6CoreAddons REQUIRED) +find_package(OpenSSL REQUIRED) + +find_package(CxxQt QUIET) +if(NOT CxxQt_FOUND) + include(FetchContent) + FetchContent_Declare( + CxxQt + GIT_REPOSITORY https://github.com/kdab/cxx-qt-cmake.git + GIT_TAG main + ) + + FetchContent_MakeAvailable(CxxQt) +endif() + +# Needed for Craft Android, otherwise it tries to use native tooling which is wrong +#get_target_property(QMAKE_PATH Qt::qmake LOCATION) +set(QMAKE_PATH "/home/user/CraftRoot/build/libs/qt6/qtbase/image-MinSizeRel-6.8.0/bin/qmake") +message("Using ${QMAKE_PATH}") + +cxx_qt_import_crate( + MANIFEST_PATH Cargo.toml + CRATES Sukai + QT_MODULES Qt::Core Qt::Gui Qt::Qml Qt::QuickControls2 Qt::Widgets Qt::Quick Qt::Network + QMAKE ${QMAKE_PATH}) + +cxx_qt_import_qml_module(sukai_module + URI "com.redstrate.sukai" + SOURCE_CRATE Sukai) + +add_executable(sukai cpp/main.cpp) +target_link_libraries(sukai PRIVATE sukai_module OpenSSL::Crypto OpenSSL::SSL) diff --git a/Cargo.toml b/Cargo.toml index f3962eb..5600b78 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,15 +3,18 @@ name = "Sukai" version = "0.1.0" edition = "2021" +[lib] +crate-type = ["staticlib"] + [build-dependencies] -cxx-qt-build = { git = "https://github.com/redstrate/cxx-qt", branch = "work/josh/add-qdatetime-from-string"} +cxx-qt-build = { git = "https://github.com/redstrate/cxx-qt", branch = "work/josh/cmake-qt-modules" } [dependencies] cxx = "1.0.121" -cxx-qt = { git = "https://github.com/redstrate/cxx-qt", branch = "work/josh/add-qdatetime-from-string" } -cxx-qt-lib = { git = "https://github.com/redstrate/cxx-qt", branch = "work/josh/add-qdatetime-from-string", features = ["qt_qml", "serde", "qt_gui", "qt_quickcontrols"] } -cxx-kde-frameworks = { path = "/home/josh/sources/cxx-kde-frameworks" } +cxx-qt = { git = "https://github.com/redstrate/cxx-qt", branch = "work/josh/cmake-qt-modules" } +cxx-qt-lib = { git = "https://github.com/redstrate/cxx-qt", branch = "work/josh/cmake-qt-modules", features = ["qt_qml", "serde", "qt_gui", "qt_quickcontrols"] } +cxx-kde-frameworks = { git = "https://invent.kde.org/libraries/cxx-kde-frameworks", branch = "work/redstrate/cmake-qt-modules" } serde_json = "1.0" serde = { version = "1.0", features = ["derive"] } tokio = "1.41.1" -reqwest = "0.12.9" \ No newline at end of file +reqwest = "0.12.9" diff --git a/build.rs b/build.rs index e28235f..42f6e43 100644 --- a/build.rs +++ b/build.rs @@ -7,6 +7,9 @@ fn main() { CxxQtBuilder::new() .qt_module("Quick") .qt_module("Network") + // TODO: why are these needed explicitly on Android? + .qt_module("Qml") + .qt_module("QuickControls2") .qml_module(QmlModule::<&str, &str> { uri: "com.redstrate.sukai.models", rust_files: &["src/models/timelinemodel.rs"], diff --git a/cpp/main.cpp b/cpp/main.cpp new file mode 100644 index 0000000..30014d9 --- /dev/null +++ b/cpp/main.cpp @@ -0,0 +1,3 @@ +int main(int argc, char *argv[]) { + return 0; +} \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..ab875f3 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,5 @@ +mod accountmanager; +mod entities; +mod models; +mod navigation; +mod serde_utilities; diff --git a/src/main.rs b/src/main.rs index 0c5b2d7..62ef406 100644 --- a/src/main.rs +++ b/src/main.rs @@ -56,7 +56,7 @@ fn main() { .as_mut() .load(&QUrl::from("qrc:/qt/qml/com/redstrate/sukai/ui/Main.qml")); - unsafe { + /*unsafe { let account_manager = engine .singleton_instance::( QAnyStringView::from("com.redstrate.sukai"), @@ -65,7 +65,7 @@ fn main() { .unwrap(); let mut pin: Pin<&mut AccountManager> = Pin::new_unchecked(account_manager); pin.as_mut().load_from_settings(); - } + }*/ } if let Some(app) = app.as_mut() { diff --git a/src/serde_utilities.rs b/src/serde_utilities.rs index 8cc5477..3239ef5 100644 --- a/src/serde_utilities.rs +++ b/src/serde_utilities.rs @@ -28,7 +28,8 @@ where D: Deserializer<'de>, { let s = QString::deserialize(deserializer)?; - Ok(QDateTime::from_string(&s, DateFormat::ISODate).unwrap()) + //Ok(QDateTime::from_string(&s, DateFormat::ISODate).unwrap()) + Ok(QDateTime::default()) } pub fn parse_datetime_optional<'de, D>(deserializer: D) -> Result, D::Error>