final 0.7 fixes: xcode 15/16 hybrid, auto openssldir for android, include_*! tracking hotpatch, fix /assets/ brick at high opt levels, windows linker file, etc (#4376)

* wip: openssl autodetection

* add voltaile read inside of asset fn

* support xcode 15 for --device

* vendor openssl on android

* Smaller width TUI

* switch to anyhow for the entire CLI

* add backtrace and print double printing of cargo_metadata errors

* add some padding to multi-line anyhow error

* check semvers

* don't open if not interactive

* set the tailwind current_dir so it doesn't twitch

* get the oboe demo working

* copy the c++ library on android

* cleanup env vars

* add depinfo watcher

* fix stale hotpatches and crate count

* add musl support

* remove outdated autofmt test

* update scanner app

* add hotdog app and bundle to ci

* upload dx on every branch

* collapse mobile into desktop

* `dx doctor` command

* windows command files

* no pipe on doctor

* fix ci?

* fix links

* fix ci

* use main instead of nightly

* bump node

* build cli for host

* cargo doc

* prep dog_app for bundle

* package hotdog

* no bundle or nightly cli

* comment out nightly cli

* add quotes to linker files
This commit is contained in:
Jonathan Kelley authored and GitHub committed 2025-07-14 12:54:15 -07:00
1 parent 97947b169b
commit 727752a965
78 files changed
+2270 -817

No files matched your search

+43
View File
@@ -0,0 +1,43 @@
use dioxus::prelude::*;
#[cfg(feature = "server")]
thread_local! {
static DB: rusqlite::Connection = {
let conn = rusqlite::Connection::open("hotdogdb/hotdog.db").expect("Failed to open database");
conn.execute_batch(
"CREATE TABLE IF NOT EXISTS dogs (
id INTEGER PRIMARY KEY,
url TEXT NOT NULL
);",
).unwrap();
conn
};
}
#[server(endpoint = "list_dogs")]
pub async fn list_dogs() -> Result<Vec<(usize, String)>, ServerFnError> {
let dogs = DB.with(|f| {
f.prepare("SELECT id, url FROM dogs ORDER BY id DESC LIMIT 10")
.unwrap()
.query_map([], |row| Ok((row.get(0)?, row.get(1)?)))
.unwrap()
.map(|r| r.unwrap())
.collect()
});
Ok(dogs)
}
#[server(endpoint = "remove_dog")]
pub async fn remove_dog(id: usize) -> Result<(), ServerFnError> {
DB.with(|f| f.execute("DELETE FROM dogs WHERE id = ?1", [&id]))?;
Ok(())
}
#[server(endpoint = "save_dog")]
pub async fn save_dog(image: String) -> Result<(), ServerFnError> {
_ = DB.with(|f| f.execute("INSERT INTO dogs (url) VALUES (?1)", [&image]));
Ok(())
}
@@ -0,0 +1,25 @@
use dioxus::prelude::*;
#[component]
pub fn Favorites() -> Element {
let mut favorites = use_resource(crate::backend::list_dogs);
rsx! {
div { id: "favorites",
div { id: "favorites-container",
for (id , url) in favorites.suspend()?.cloned().unwrap() {
div { class: "favorite-dog", key: "{id}",
img { src: "{url}" }
button {
onclick: move |_| async move {
crate::backend::remove_dog(id).await.unwrap();
favorites.restart();
},
"❌"
}
}
}
}
}
}
}
@@ -0,0 +1,7 @@
mod favorites;
mod nav;
mod view;
pub use favorites::*;
pub use nav::*;
pub use view::*;
@@ -0,0 +1,19 @@
use crate::Route;
use dioxus::prelude::*;
#[component]
pub fn NavBar() -> Element {
rsx! {
div { id: "title",
span {}
Link { to: Route::DogView,
h1 { "🌭 HotDog! " }
}
Link { to: Route::Favorites, id: "heart", "♥️" }
}
Outlet::<Route> {}
}
}
@@ -0,0 +1,42 @@
use dioxus::prelude::*;
#[component]
pub fn DogView() -> Element {
let mut img_src = use_resource(|| async move {
#[derive(serde::Deserialize)]
struct DogApi {
message: String,
}
reqwest::get("https://dog.ceo/api/breeds/image/random")
.await
.unwrap()
.json::<DogApi>()
.await
.unwrap()
.message
});
rsx! {
div { id: "dogview",
img { id: "dogimg", src: "{img_src().unwrap_or_default()}" }
}
div { id: "buttons",
button {
id: "skip",
onclick: move |_| {
img_src.restart();
},
"skip"
}
button {
id: "save",
onclick: move |_| async move {
img_src.restart();
crate::backend::save_dog(img_src().unwrap()).await.unwrap();
},
"save!"
}
}
}
}
+29
View File
@@ -0,0 +1,29 @@
mod backend;
mod components;
use components::{DogView, Favorites, NavBar};
use dioxus::prelude::*;
#[derive(Routable, PartialEq, Clone)]
enum Route {
#[layout(NavBar)]
#[route("/")]
DogView,
#[route("/favorites")]
Favorites,
}
fn main() {
#[cfg(not(feature = "server"))]
server_fn::client::set_server_url("https://hot-dog.fly.dev");
dioxus::launch(app);
}
fn app() -> Element {
rsx! {
document::Stylesheet { href: asset!("/assets/main.css") }
Router::<Route> {}
}
}