Use futures crate to await collection rendering concurrently

This commit is contained in:
Reinout Meliesie 2025-02-12 10:27:29 +01:00
parent 85b0fc2f21
commit e633000de5
Signed by: zedfrigg
GPG key ID: 3AFCC06481308BC6
3 changed files with 33 additions and 3 deletions

27
Cargo.lock generated
View file

@ -120,6 +120,21 @@ dependencies = [
"rustc_version", "rustc_version",
] ]
[[package]]
name = "futures"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876"
dependencies = [
"futures-channel",
"futures-core",
"futures-executor",
"futures-io",
"futures-sink",
"futures-task",
"futures-util",
]
[[package]] [[package]]
name = "futures-channel" name = "futures-channel"
version = "0.3.31" version = "0.3.31"
@ -127,6 +142,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
dependencies = [ dependencies = [
"futures-core", "futures-core",
"futures-sink",
] ]
[[package]] [[package]]
@ -163,6 +179,12 @@ dependencies = [
"syn", "syn",
] ]
[[package]]
name = "futures-sink"
version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
[[package]] [[package]]
name = "futures-task" name = "futures-task"
version = "0.3.31" version = "0.3.31"
@ -175,9 +197,13 @@ version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
dependencies = [ dependencies = [
"futures-channel",
"futures-core", "futures-core",
"futures-io",
"futures-macro", "futures-macro",
"futures-sink",
"futures-task", "futures-task",
"memchr",
"pin-project-lite", "pin-project-lite",
"pin-utils", "pin-utils",
"slab", "slab",
@ -877,6 +903,7 @@ version = "1.0.0"
dependencies = [ dependencies = [
"async-sqlite", "async-sqlite",
"fallible-iterator", "fallible-iterator",
"futures",
"gtk4", "gtk4",
"libadwaita", "libadwaita",
] ]

View file

@ -12,5 +12,6 @@ lto = true
[ dependencies ] [ dependencies ]
async-sqlite = { version = "0.4.0" , default-features = false } async-sqlite = { version = "0.4.0" , default-features = false }
fallible-iterator = "0.3.0" # Must match version used by async-sqlite fallible-iterator = "0.3.0" # Must match version used by async-sqlite
futures = "0.3.31"
gtk4 = { version = "0.9.5" , features = [ "v4_16" ] } gtk4 = { version = "0.9.5" , features = [ "v4_16" ] }
libadwaita = { version = "0.7.1" , features = [ "v1_6" ] } libadwaita = { version = "0.7.1" , features = [ "v1_6" ] }

View file

@ -2,6 +2,7 @@ mod collatable_container ;
mod component ; mod component ;
mod utility ; mod utility ;
use futures :: * ;
use gtk4 :: Orientation :: * ; use gtk4 :: Orientation :: * ;
use gtk4 :: prelude :: * ; use gtk4 :: prelude :: * ;
use libadwaita :: * ; use libadwaita :: * ;
@ -49,8 +50,9 @@ impl UI {
pub fn close_window ( & self ) { self . window . close () } pub fn close_window ( & self ) { self . window . close () }
pub async fn render_collection_overview ( & self , collection : CollectionOverview ) { pub async fn render_collection_overview ( & self , collection : CollectionOverview ) {
// TODO: Find a way to await these futures concurrently join ! (
self . films_component . set_media ( collection . films ) . await ; self . films_component . set_media ( collection . films ) ,
self . series_component . set_media ( collection . series ) . await ; self . series_component . set_media ( collection . series ) ,
) ;
} }
} }