Archived
1
Fork 0

Merge branch 'work/redstrate/android' into 'master'

Draft: Android port

See merge request redstrate/sukai!1
This commit is contained in:
Joshua Goins 2024-12-30 21:15:27 +00:00
commit f968b092ef
7 changed files with 66 additions and 8 deletions

43
CMakeLists.txt Normal file
View file

@ -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)

View file

@ -3,15 +3,18 @@ name = "Sukai"
version = "0.1.0" version = "0.1.0"
edition = "2021" edition = "2021"
[lib]
crate-type = ["staticlib"]
[build-dependencies] [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] [dependencies]
cxx = "1.0.121" cxx = "1.0.121"
cxx-qt = { git = "https://github.com/redstrate/cxx-qt", branch = "work/josh/add-qdatetime-from-string" } 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/add-qdatetime-from-string", features = ["qt_qml", "serde", "qt_gui", "qt_quickcontrols"] } 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 = { path = "/home/josh/sources/cxx-kde-frameworks" } cxx-kde-frameworks = { git = "https://invent.kde.org/libraries/cxx-kde-frameworks", branch = "work/redstrate/cmake-qt-modules" }
serde_json = "1.0" serde_json = "1.0"
serde = { version = "1.0", features = ["derive"] } serde = { version = "1.0", features = ["derive"] }
tokio = "1.41.1" tokio = "1.41.1"
reqwest = "0.12.9" reqwest = "0.12.9"

View file

@ -7,6 +7,9 @@ fn main() {
CxxQtBuilder::new() CxxQtBuilder::new()
.qt_module("Quick") .qt_module("Quick")
.qt_module("Network") .qt_module("Network")
// TODO: why are these needed explicitly on Android?
.qt_module("Qml")
.qt_module("QuickControls2")
.qml_module(QmlModule::<&str, &str> { .qml_module(QmlModule::<&str, &str> {
uri: "com.redstrate.sukai.models", uri: "com.redstrate.sukai.models",
rust_files: &["src/models/timelinemodel.rs"], rust_files: &["src/models/timelinemodel.rs"],

3
cpp/main.cpp Normal file
View file

@ -0,0 +1,3 @@
int main(int argc, char *argv[]) {
return 0;
}

5
src/lib.rs Normal file
View file

@ -0,0 +1,5 @@
mod accountmanager;
mod entities;
mod models;
mod navigation;
mod serde_utilities;

View file

@ -56,7 +56,7 @@ fn main() {
.as_mut() .as_mut()
.load(&QUrl::from("qrc:/qt/qml/com/redstrate/sukai/ui/Main.qml")); .load(&QUrl::from("qrc:/qt/qml/com/redstrate/sukai/ui/Main.qml"));
unsafe { /*unsafe {
let account_manager = engine let account_manager = engine
.singleton_instance::<AccountManager>( .singleton_instance::<AccountManager>(
QAnyStringView::from("com.redstrate.sukai"), QAnyStringView::from("com.redstrate.sukai"),
@ -65,7 +65,7 @@ fn main() {
.unwrap(); .unwrap();
let mut pin: Pin<&mut AccountManager> = Pin::new_unchecked(account_manager); let mut pin: Pin<&mut AccountManager> = Pin::new_unchecked(account_manager);
pin.as_mut().load_from_settings(); pin.as_mut().load_from_settings();
} }*/
} }
if let Some(app) = app.as_mut() { if let Some(app) = app.as_mut() {

View file

@ -28,7 +28,8 @@ where
D: Deserializer<'de>, D: Deserializer<'de>,
{ {
let s = QString::deserialize(deserializer)?; 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<Option<QDateTime>, D::Error> pub fn parse_datetime_optional<'de, D>(deserializer: D) -> Result<Option<QDateTime>, D::Error>