fix: switch to using stdout

This commit is contained in:
Tal 2024-10-02 22:07:02 +02:00
parent 60a00f189e
commit 5d2e6c6d23
5 changed files with 20 additions and 21 deletions

2
Cargo.lock generated
View File

@ -982,7 +982,7 @@ checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
[[package]]
name = "lowfi"
version = "1.2.4"
version = "1.3.1"
dependencies = [
"Inflector",
"arc-swap",

View File

@ -1,6 +1,6 @@
[package]
name = "lowfi"
version = "1.3.0"
version = "1.3.1"
edition = "2021"
description = "An extremely simple lofi player."
license = "MIT"

View File

@ -1,12 +1,10 @@
//! Responsible for the basic initialization & shutdown of the audio server & frontend.
use std::{io::stderr, sync::Arc};
use std::io::stdout;
use std::sync::Arc;
use crossterm::{cursor::SavePosition, terminal};
use tokio::{
sync::mpsc::{self},
task::{self},
};
use crossterm::cursor::SavePosition;
use tokio::{sync::mpsc, task};
use crate::player::Player;
use crate::player::{ui, Messages};
@ -16,12 +14,10 @@ use crate::player::{ui, Messages};
pub async fn play(alternate: bool) -> eyre::Result<()> {
// Save the position. This is important since later on we can revert to this position
// and clear any potential error messages that may have showed up.
// TODO: Figure how to set some sort of flag to hide error messages within rodio,
// TODO: Figure how to set some sort of flag to hide error messages within alsa/rodio,
// TODO: Instead of just ignoring & clearing them after.
crossterm::execute!(stderr(), SavePosition)?;
// Enable raw mode early in theory to prevent uncontrolled text in the terminal from the user.
terminal::enable_raw_mode()?;
// TODO: Fix this, as it doesn't work with some terminals when the cursor is at the bottom of the terminal.
crossterm::execute!(stdout(), SavePosition)?;
let (tx, rx) = mpsc::channel(8);

View File

@ -131,7 +131,7 @@ impl Player {
/// This is the main "audio server".
///
/// `rx` & `ts` are used to communicate with it, for example when to
/// `rx` & `tx` are used to communicate with it, for example when to
/// skip tracks or pause.
pub async fn play(
player: Arc<Self>,

View File

@ -1,7 +1,7 @@
//! The module which manages all user interface, including inputs.
use std::{
io::stderr,
io::stdout,
sync::{
atomic::{AtomicUsize, Ordering},
Arc,
@ -172,9 +172,9 @@ async fn interface(player: Arc<Player>, volume_timer: Arc<AtomicUsize>) -> eyre:
let menu = [main, middle, controls.join(" ")]
.map(|x| format!("{}\r\n", x.reset()).to_string());
crossterm::execute!(stderr(), Clear(ClearType::FromCursorDown))?;
crossterm::execute!(
stderr(),
stdout(),
Clear(ClearType::FromCursorDown),
MoveToColumn(0),
Print(format!("{}\r\n", "".repeat(WIDTH + 2))),
Print(menu.join("")),
@ -197,14 +197,17 @@ pub async fn start(
alternate: bool,
) -> eyre::Result<()> {
crossterm::execute!(
stderr(),
stdout(),
RestorePosition,
Clear(ClearType::CurrentLine),
Clear(ClearType::FromCursorDown),
Hide
)?;
terminal::enable_raw_mode()?;
if alternate {
crossterm::execute!(stderr(), EnterAlternateScreen, MoveTo(0, 0))?;
crossterm::execute!(stdout(), EnterAlternateScreen, MoveTo(0, 0))?;
}
let volume_timer = Arc::new(AtomicUsize::new(0));
@ -251,10 +254,10 @@ pub async fn start(
}
if alternate {
crossterm::execute!(stderr(), LeaveAlternateScreen)?;
crossterm::execute!(stdout(), LeaveAlternateScreen)?;
}
crossterm::execute!(stderr(), Clear(ClearType::FromCursorDown), Show)?;
crossterm::execute!(stdout(), Clear(ClearType::FromCursorDown), Show)?;
terminal::disable_raw_mode()?;
Ok(())