diff --git a/amadeus/src/config.rs b/amadeus/src/config.rs index 4c79d76e45f4345cc0f2d06a7d66e0aba3e9ac60..1a4e5c71afe5c574f41dc30e2bc5d6536eac4a2d 100644 --- a/amadeus/src/config.rs +++ b/amadeus/src/config.rs @@ -1,8 +1,8 @@ -use cosmic::cosmic_config::{self, cosmic_config_derive::CosmicConfigEntry, CosmicConfigEntry}; -use derive_more::{AsRef, Display, From, Into}; +use cosmic::cosmic_config::{self, CosmicConfigEntry, cosmic_config_derive::CosmicConfigEntry}; +use derive_more::{Display, From, Into}; use lektor_lib::ConnectConfig; use lektor_utils::config::{SocketScheme, UserConfig}; -use serde::{de::Visitor, Deserialize, Serialize}; +use serde::{Deserialize, Serialize, de::Visitor}; use std::{ net::{IpAddr, Ipv4Addr, SocketAddr}, time::Duration, diff --git a/lektor_nkdb/src/playlists/mod.rs b/lektor_nkdb/src/playlists/mod.rs index fd5a0b5c52aecd3f1eabe32a1a23312f07fa01a3..350ac076cd78f432dc48b8d0ad3c346da8362bba 100644 --- a/lektor_nkdb/src/playlists/mod.rs +++ b/lektor_nkdb/src/playlists/mod.rs @@ -84,11 +84,11 @@ impl<'a, Storage: DatabaseStorage + Sized> PlaylistsHandle<'a, Storage> { pub async fn create( &self, name: impl ToString, - settings: impl FnOnce(Playlist) -> Playlist, + settings: impl AsyncFnOnce(Playlist) -> Playlist, ) -> Result<KId> { let mut this = self.playlists.content.write().await; let next_id = KId(this.keys().map(|KId(id)| id + 1).max().unwrap_or(1)); - let plt = settings(Playlist::new(next_id, name)).updated_now(); + let plt = settings(Playlist::new(next_id, name)).await.updated_now(); self.playlists.epoch.fetch_add(1, Ordering::AcqRel); self.storage.write_playlist(&plt).await?; this.insert(next_id, plt); diff --git a/lektor_nkdb/src/playlists/playlist.rs b/lektor_nkdb/src/playlists/playlist.rs index b720c82b8a2e3b2a409fb5d11f369362494bc48a..9f23ed56ad50dd212fc88aed0d2e4bea7b40d5e5 100644 --- a/lektor_nkdb/src/playlists/playlist.rs +++ b/lektor_nkdb/src/playlists/playlist.rs @@ -56,14 +56,6 @@ impl Playlist { } } - /// Add an owner to the playlist, in a sync way. This function may block. - pub fn with_owner_sync(mut self, user: impl AsRef<str>) -> Self { - if !(self.owners.iter()).any(|owner| owner.as_ref() == user.as_ref()) { - self.owners.push(strings::CACHE.get_sync(user.as_ref())); - } - self.updated_now() - } - /// Add an owner to the playlist, in an async way. This function may yield. pub async fn with_owner(mut self, user: impl AsRef<str>) -> Self { if !(self.owners.iter()).any(|owner| owner.as_ref() == user.as_ref()) { diff --git a/lektor_nkdb/src/strings.rs b/lektor_nkdb/src/strings.rs index d5892eebbb3270f836f5ea4c2ec0195b94bda0be..f3fda353db568d0f79a29d02cf5fb8236493c249 100644 --- a/lektor_nkdb/src/strings.rs +++ b/lektor_nkdb/src/strings.rs @@ -14,21 +14,12 @@ pub(crate) struct StringCache(RwLock<HashSet<Arc<str>>>); impl StringCache { /// Get a string, in an async way. pub async fn get(&self, str: impl AsRef<str>) -> Arc<str> { - match self.0.read().await.get(str.as_ref()).cloned() { - Some(str) => str, - None => (self.0.write().await) - .get_or_insert_with(str.as_ref(), |str| Arc::from(str)) - .clone(), + if let Some(str) = self.0.read().await.get(str.as_ref()).cloned() { + return str; } - } - /// Get a string, in a sync way. - pub fn get_sync(&self, str: impl AsRef<str>) -> Arc<str> { - match self.0.blocking_read().get(str.as_ref()).cloned() { - Some(str) => str, - None => (self.0.blocking_write()) - .get_or_insert_with(str.as_ref(), |str| Arc::from(str)) - .clone(), - } + (self.0.write().await) + .get_or_insert_with(str.as_ref(), |str| Arc::from(str)) + .clone() } } diff --git a/lektord/src/app/routes.rs b/lektord/src/app/routes.rs index a6953bbc277ae40ff7a4e4d6e03dc3329ff36dd7..e96a093ec25d7d002df8b49ed5412295e3c24526 100644 --- a/lektord/src/app/routes.rs +++ b/lektord/src/app/routes.rs @@ -9,10 +9,10 @@ use crate::*; use anyhow::anyhow; use app::search_adaptors; use axum::{ + Json, extract::{Path, State}, - http::{header::CONTENT_TYPE, HeaderValue}, + http::{HeaderValue, header::CONTENT_TYPE}, response::{IntoResponse, Response}, - Json, }; use lektor_nkdb::*; use lektor_payloads::*; @@ -252,8 +252,8 @@ pub(crate) async fn create_playlist( .maybe_user() .map(|user| user.into_parts().0); let id = (state.database.playlists()) - .create(name, |plt| match user { - Ok(user) => plt.with_owner_sync(user), + .create(name, async |plt| match user { + Ok(user) => plt.with_owner(user).await, _ => plt, }) .await?;