some more review changes
This commit is contained in:
@@ -81,7 +81,6 @@ impl super::AudioSystemInterface for NativeAudioSystem {
|
|||||||
type AudioPlayer = NativeAudioPlayer;
|
type AudioPlayer = NativeAudioPlayer;
|
||||||
|
|
||||||
async fn new() -> Result<Self, Error> {
|
async fn new() -> Result<Self, Error> {
|
||||||
// TODO
|
|
||||||
let host = cpal::default_host();
|
let host = cpal::default_host();
|
||||||
let name = host.id();
|
let name = host.id();
|
||||||
let processors = AudioProcessorSender::default();
|
let processors = AudioProcessorSender::default();
|
||||||
|
|||||||
+19
-17
@@ -1,3 +1,5 @@
|
|||||||
|
/// Stub implementation of the platform interface, so that we can
|
||||||
|
/// `cargo check` without any --feature flags.
|
||||||
use crate::effects::AudioProcessor;
|
use crate::effects::AudioProcessor;
|
||||||
use color_eyre::eyre::Error;
|
use color_eyre::eyre::Error;
|
||||||
use dioxus::hooks::UnboundedReceiver;
|
use dioxus::hooks::UnboundedReceiver;
|
||||||
@@ -10,11 +12,11 @@ impl super::PlatformInterface for StubPlatform {
|
|||||||
type AudioSystem = StubAudioSystem;
|
type AudioSystem = StubAudioSystem;
|
||||||
|
|
||||||
fn init_logging() {
|
fn init_logging() {
|
||||||
todo!()
|
panic!("stubbed platform")
|
||||||
}
|
}
|
||||||
|
|
||||||
fn request_permissions() {
|
fn request_permissions() {
|
||||||
todo!()
|
panic!("stubbed platform")
|
||||||
}
|
}
|
||||||
|
|
||||||
fn network_connect(
|
fn network_connect(
|
||||||
@@ -23,37 +25,37 @@ impl super::PlatformInterface for StubPlatform {
|
|||||||
_event_rx: &mut UnboundedReceiver<crate::app::Command>,
|
_event_rx: &mut UnboundedReceiver<crate::app::Command>,
|
||||||
_gui_config: &ClientConfig,
|
_gui_config: &ClientConfig,
|
||||||
) -> impl Future<Output = Result<(), Error>> {
|
) -> impl Future<Output = Result<(), Error>> {
|
||||||
async { todo!() }
|
async { panic!("stubbed platform") }
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_status(
|
fn get_status(
|
||||||
_client: &reqwest::Client,
|
_client: &reqwest::Client,
|
||||||
) -> impl Future<Output = color_eyre::Result<ServerStatus>> {
|
) -> impl Future<Output = color_eyre::Result<ServerStatus>> {
|
||||||
async { todo!() }
|
async { panic!("stubbed platform") }
|
||||||
}
|
}
|
||||||
|
|
||||||
fn load_config() -> impl Future<Output = color_eyre::Result<ClientConfig>> {
|
fn load_config() -> impl Future<Output = color_eyre::Result<ClientConfig>> {
|
||||||
async { todo!() }
|
async { panic!("stubbed platform") }
|
||||||
}
|
}
|
||||||
|
|
||||||
fn load_username() -> Option<String> {
|
fn load_username() -> Option<String> {
|
||||||
todo!()
|
panic!("stubbed platform")
|
||||||
}
|
}
|
||||||
|
|
||||||
fn load_server_url() -> Option<String> {
|
fn load_server_url() -> Option<String> {
|
||||||
todo!()
|
panic!("stubbed platform")
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_default_username(_username: &str) -> Option<()> {
|
fn set_default_username(_username: &str) -> Option<()> {
|
||||||
todo!()
|
panic!("stubbed platform")
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_default_server(_server: &str) -> Option<()> {
|
fn set_default_server(_server: &str) -> Option<()> {
|
||||||
todo!()
|
panic!("stubbed platform")
|
||||||
}
|
}
|
||||||
|
|
||||||
fn sleep(_duration: std::time::Duration) -> impl Future<Output = ()> {
|
fn sleep(_duration: std::time::Duration) -> impl Future<Output = ()> {
|
||||||
async { todo!() }
|
async { panic!("stubbed platform") }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -63,22 +65,22 @@ impl super::AudioSystemInterface for StubAudioSystem {
|
|||||||
type AudioPlayer = StubAudioPlayer;
|
type AudioPlayer = StubAudioPlayer;
|
||||||
|
|
||||||
async fn new() -> Result<Self, Error> {
|
async fn new() -> Result<Self, Error> {
|
||||||
todo!()
|
panic!("stubbed platform")
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_processor(&self, _processor: AudioProcessor) {
|
fn set_processor(&self, _processor: AudioProcessor) {
|
||||||
todo!()
|
panic!("stubbed platform")
|
||||||
}
|
}
|
||||||
|
|
||||||
fn start_recording(
|
fn start_recording(
|
||||||
&mut self,
|
&mut self,
|
||||||
_each: impl FnMut(Vec<u8>, bool) + Send + 'static,
|
_each: impl FnMut(Vec<u8>, bool) + Send + 'static,
|
||||||
) -> Result<(), Error> {
|
) -> Result<(), Error> {
|
||||||
todo!()
|
panic!("stubbed platform")
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_player(&mut self) -> Result<Self::AudioPlayer, Error> {
|
fn create_player(&mut self) -> Result<Self::AudioPlayer, Error> {
|
||||||
todo!()
|
panic!("stubbed platform")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -86,7 +88,7 @@ pub struct StubAudioPlayer;
|
|||||||
|
|
||||||
impl super::AudioPlayerInterface for StubAudioPlayer {
|
impl super::AudioPlayerInterface for StubAudioPlayer {
|
||||||
fn play_opus(&mut self, _payload: &[u8]) {
|
fn play_opus(&mut self, _payload: &[u8]) {
|
||||||
todo!()
|
panic!("stubbed platform")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -99,7 +101,7 @@ impl SpawnHandle {
|
|||||||
where
|
where
|
||||||
F: Future<Output = ()> + 'static,
|
F: Future<Output = ()> + 'static,
|
||||||
{
|
{
|
||||||
todo!()
|
panic!("stubbed platform")
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(unused)]
|
#[allow(unused)]
|
||||||
@@ -113,5 +115,5 @@ pub fn spawn<F>(_future: F)
|
|||||||
where
|
where
|
||||||
F: Future<Output = ()> + 'static,
|
F: Future<Output = ()> + 'static,
|
||||||
{
|
{
|
||||||
todo!()
|
panic!("stubbed platform")
|
||||||
}
|
}
|
||||||
|
|||||||
+51
-80
@@ -3,7 +3,6 @@ use crate::effects::{AudioProcessor, AudioProcessorSender, TransmitState};
|
|||||||
use color_eyre::eyre::{bail, eyre, Error};
|
use color_eyre::eyre::{bail, eyre, Error};
|
||||||
use crossbeam::atomic::AtomicCell;
|
use crossbeam::atomic::AtomicCell;
|
||||||
use dioxus::prelude::*;
|
use dioxus::prelude::*;
|
||||||
use futures::{AsyncRead, AsyncWrite};
|
|
||||||
use gloo_timers::future::TimeoutFuture;
|
use gloo_timers::future::TimeoutFuture;
|
||||||
use js_sys::Float32Array;
|
use js_sys::Float32Array;
|
||||||
use mumble_protocol::control::ClientControlCodec;
|
use mumble_protocol::control::ClientControlCodec;
|
||||||
@@ -65,7 +64,25 @@ impl super::PlatformInterface for WebPlatform {
|
|||||||
type AudioSystem = WebAudioSystem;
|
type AudioSystem = WebAudioSystem;
|
||||||
|
|
||||||
fn init_logging() {
|
fn init_logging() {
|
||||||
init_logging();
|
// copied from tracing_web example usage
|
||||||
|
|
||||||
|
use tracing_subscriber::fmt::format::Pretty;
|
||||||
|
use tracing_subscriber::prelude::*;
|
||||||
|
use tracing_web::{performance_layer, MakeWebConsoleWriter};
|
||||||
|
|
||||||
|
let fmt_layer = tracing_subscriber::fmt::layer()
|
||||||
|
.with_ansi(false) // Only partially supported across browsers
|
||||||
|
.without_time() // std::time is not available in browsers
|
||||||
|
.with_writer(MakeWebConsoleWriter::new()) // write events to the console
|
||||||
|
.with_filter(LevelFilter::DEBUG);
|
||||||
|
let perf_layer = performance_layer().with_details_from_fields(Pretty::default());
|
||||||
|
|
||||||
|
tracing_subscriber::registry()
|
||||||
|
.with(fmt_layer)
|
||||||
|
.with(perf_layer)
|
||||||
|
.init();
|
||||||
|
|
||||||
|
info!("logging initiated");
|
||||||
}
|
}
|
||||||
|
|
||||||
fn request_permissions() {
|
fn request_permissions() {
|
||||||
@@ -73,23 +90,43 @@ impl super::PlatformInterface for WebPlatform {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fn load_config() -> color_eyre::Result<ClientConfig> {
|
async fn load_config() -> color_eyre::Result<ClientConfig> {
|
||||||
load_config().await
|
let config_url = match option_env!("MUMBLE_WEB2_GUI_CONFIG_URL") {
|
||||||
|
Some(url) => Url::parse(url)?,
|
||||||
|
None => absolute_url("config")?,
|
||||||
|
};
|
||||||
|
info!("loading config from {}", config_url);
|
||||||
|
|
||||||
|
let config = reqwest::get(config_url)
|
||||||
|
.await?
|
||||||
|
.json::<ClientConfig>()
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
Ok(config)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn load_username() -> Option<String> {
|
fn load_username() -> Option<String> {
|
||||||
load_username()
|
web_sys::window()
|
||||||
|
.unwrap()
|
||||||
|
.local_storage()
|
||||||
|
.ok()??
|
||||||
|
.get_item("username")
|
||||||
|
.ok()?
|
||||||
}
|
}
|
||||||
|
|
||||||
fn load_server_url() -> Option<String> {
|
fn load_server_url() -> Option<String> {
|
||||||
load_server_url()
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_default_username(username: &str) -> Option<()> {
|
fn set_default_username(username: &str) -> Option<()> {
|
||||||
set_default_username(username)
|
web_sys::window()?
|
||||||
|
.local_storage()
|
||||||
|
.ok()??
|
||||||
|
.set_item("username", username)
|
||||||
|
.ok()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_default_server(server: &str) -> Option<()> {
|
fn set_default_server(_server: &str) -> Option<()> {
|
||||||
set_default_server(server)
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn network_connect(
|
async fn network_connect(
|
||||||
@@ -102,7 +139,12 @@ impl super::PlatformInterface for WebPlatform {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fn get_status(client: &reqwest::Client) -> color_eyre::Result<ServerStatus> {
|
async fn get_status(client: &reqwest::Client) -> color_eyre::Result<ServerStatus> {
|
||||||
get_status(client).await
|
Ok(client
|
||||||
|
.get(absolute_url("status")?)
|
||||||
|
.send()
|
||||||
|
.await?
|
||||||
|
.json::<ServerStatus>()
|
||||||
|
.await?)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn sleep(duration: Duration) {
|
async fn sleep(duration: Duration) {
|
||||||
@@ -476,79 +518,8 @@ pub async fn network_connect(
|
|||||||
crate::network_loop(username, event_rx, reader, writer).await
|
crate::network_loop(username, event_rx, reader, writer).await
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_default_username(username: &str) -> Option<()> {
|
|
||||||
web_sys::window()?
|
|
||||||
.local_storage()
|
|
||||||
.ok()??
|
|
||||||
.set_item("username", username)
|
|
||||||
.ok()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn set_default_server(username: &str) -> Option<()> {
|
|
||||||
None
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn load_username() -> Option<String> {
|
|
||||||
web_sys::window()
|
|
||||||
.unwrap()
|
|
||||||
.local_storage()
|
|
||||||
.ok()??
|
|
||||||
.get_item("username")
|
|
||||||
.ok()?
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn load_server_url() -> Option<String> {
|
|
||||||
None
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn absolute_url(path: &str) -> Result<Url, Error> {
|
pub fn absolute_url(path: &str) -> Result<Url, Error> {
|
||||||
let window: web_sys::Window = web_sys::window().expect("no global `window` exists");
|
let window: web_sys::Window = web_sys::window().expect("no global `window` exists");
|
||||||
let location = window.location();
|
let location = window.location();
|
||||||
Ok(Url::parse(&location.href().ey()?)?.join(path)?)
|
Ok(Url::parse(&location.href().ey()?)?.join(path)?)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn load_config() -> color_eyre::Result<ClientConfig> {
|
|
||||||
let config_url = match option_env!("MUMBLE_WEB2_GUI_CONFIG_URL") {
|
|
||||||
Some(url) => Url::parse(url)?,
|
|
||||||
None => absolute_url("config")?,
|
|
||||||
};
|
|
||||||
info!("loading config from {}", config_url);
|
|
||||||
|
|
||||||
let config = reqwest::get(config_url)
|
|
||||||
.await?
|
|
||||||
.json::<ClientConfig>()
|
|
||||||
.await?;
|
|
||||||
|
|
||||||
Ok(config)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub async fn get_status(client: &reqwest::Client) -> color_eyre::Result<ServerStatus> {
|
|
||||||
Ok(client
|
|
||||||
.get(absolute_url("status")?)
|
|
||||||
.send()
|
|
||||||
.await?
|
|
||||||
.json::<ServerStatus>()
|
|
||||||
.await?)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn init_logging() {
|
|
||||||
// copied from tracing_web example usage
|
|
||||||
|
|
||||||
use tracing_subscriber::fmt::format::Pretty;
|
|
||||||
use tracing_subscriber::prelude::*;
|
|
||||||
use tracing_web::{performance_layer, MakeWebConsoleWriter};
|
|
||||||
|
|
||||||
let fmt_layer = tracing_subscriber::fmt::layer()
|
|
||||||
.with_ansi(false) // Only partially supported across browsers
|
|
||||||
.without_time() // std::time is not available in browsers
|
|
||||||
.with_writer(MakeWebConsoleWriter::new()) // write events to the console
|
|
||||||
.with_filter(LevelFilter::DEBUG);
|
|
||||||
let perf_layer = performance_layer().with_details_from_fields(Pretty::default());
|
|
||||||
|
|
||||||
tracing_subscriber::registry()
|
|
||||||
.with(fmt_layer)
|
|
||||||
.with(perf_layer)
|
|
||||||
.init();
|
|
||||||
|
|
||||||
info!("logging initiated");
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user