[INFO] cloning repository https://github.com/IKchen/ratatui_musicplayer
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/IKchen/ratatui_musicplayer" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FIKchen%2Fratatui_musicplayer", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FIKchen%2Fratatui_musicplayer'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] f5f392f50384e16aeb2fd87ca25e34fcf9e74395
[INFO] testing IKchen/ratatui_musicplayer against master#1871252fc8bb672d40787e67404e6eaae7059369 for pr-125151
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FIKchen%2Fratatui_musicplayer" "/workspace/builds/worker-2-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-2-tc1/source'...
[INFO] [stderr] done.
[INFO] validating manifest of git repo https://github.com/IKchen/ratatui_musicplayer on toolchain 1871252fc8bb672d40787e67404e6eaae7059369
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1871252fc8bb672d40787e67404e6eaae7059369" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] started tweaking git repo https://github.com/IKchen/ratatui_musicplayer
[INFO] finished tweaking git repo https://github.com/IKchen/ratatui_musicplayer
[INFO] tweaked toml for git repo https://github.com/IKchen/ratatui_musicplayer written to /workspace/builds/worker-2-tc1/source/Cargo.toml
[INFO] crate git repo https://github.com/IKchen/ratatui_musicplayer already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1871252fc8bb672d40787e67404e6eaae7059369" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded hound v3.5.1
[INFO] [stderr]   Downloaded symphonia-bundle-mp3 v0.5.4
[INFO] [stderr]   Downloaded ratatui v0.25.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:59a85a07ab18ca8720692f8e61effa1c651d9e2ca591e072c2b212bb91a6b8b5" "/opt/rustwide/cargo-home/bin/cargo" "+1871252fc8bb672d40787e67404e6eaae7059369" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] a17e983a85db92626fe6e11823da92a2886300ee710e7d82ef10a003f70910c6
[INFO] running `Command { std: "docker" "start" "-a" "a17e983a85db92626fe6e11823da92a2886300ee710e7d82ef10a003f70910c6", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "a17e983a85db92626fe6e11823da92a2886300ee710e7d82ef10a003f70910c6", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "a17e983a85db92626fe6e11823da92a2886300ee710e7d82ef10a003f70910c6", kill_on_drop: false }`
[INFO] [stdout] a17e983a85db92626fe6e11823da92a2886300ee710e7d82ef10a003f70910c6
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:59a85a07ab18ca8720692f8e61effa1c651d9e2ca591e072c2b212bb91a6b8b5" "/opt/rustwide/cargo-home/bin/cargo" "+1871252fc8bb672d40787e67404e6eaae7059369" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 05cd3f92909327ba13082040d40249faff3d91d67fd38254142e7a3bbed8ef63
[INFO] running `Command { std: "docker" "start" "-a" "05cd3f92909327ba13082040d40249faff3d91d67fd38254142e7a3bbed8ef63", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.79
[INFO] [stderr]    Compiling autocfg v1.2.0
[INFO] [stderr]    Compiling libc v0.2.153
[INFO] [stderr]    Compiling log v0.4.21
[INFO] [stderr]    Compiling serde v1.0.197
[INFO] [stderr]    Compiling pkg-config v0.3.30
[INFO] [stderr]    Compiling ahash v0.8.11
[INFO] [stderr]    Compiling bytemuck v1.15.0
[INFO] [stderr]    Compiling rustversion v1.0.15
[INFO] [stderr]    Compiling signal-hook v0.3.17
[INFO] [stderr]    Compiling arrayvec v0.7.4
[INFO] [stderr]    Compiling lock_api v0.4.11
[INFO] [stderr]    Compiling num-traits v0.2.18
[INFO] [stderr]    Compiling slab v0.4.9
[INFO] [stderr]    Compiling symphonia-core v0.5.4
[INFO] [stderr]    Compiling alsa-sys v0.3.1
[INFO] [stderr]    Compiling encoding_rs v0.8.33
[INFO] [stderr]    Compiling quote v1.0.35
[INFO] [stderr]    Compiling futures-channel v0.3.30
[INFO] [stderr]    Compiling syn v2.0.58
[INFO] [stderr]    Compiling signal-hook-registry v1.4.1
[INFO] [stderr]    Compiling parking_lot_core v0.9.9
[INFO] [stderr]    Compiling mio v0.8.11
[INFO] [stderr]    Compiling parking_lot v0.12.1
[INFO] [stderr]    Compiling socket2 v0.5.6
[INFO] [stderr]    Compiling num-integer v0.1.46
[INFO] [stderr]    Compiling symphonia-metadata v0.5.4
[INFO] [stderr]    Compiling num_cpus v1.16.0
[INFO] [stderr]    Compiling tracing-core v0.1.32
[INFO] [stderr]    Compiling cpal v0.15.3
[INFO] [stderr]    Compiling futures-io v0.3.30
[INFO] [stderr]    Compiling memchr v2.7.2
[INFO] [stderr]    Compiling paste v1.0.14
[INFO] [stderr]    Compiling thiserror v1.0.58
[INFO] [stderr]    Compiling hashbrown v0.14.3
[INFO] [stderr]    Compiling symphonia-bundle-mp3 v0.5.4
[INFO] [stderr]    Compiling ogg v0.8.0
[INFO] [stderr]    Compiling signal-hook-mio v0.2.3
[INFO] [stderr]    Compiling syn v1.0.109
[INFO] [stderr]    Compiling rustfft v6.2.0
[INFO] [stderr]    Compiling strength_reduce v0.2.4
[INFO] [stderr]    Compiling either v1.10.0
[INFO] [stderr]    Compiling dasp_sample v0.11.0
[INFO] [stderr]    Compiling overload v0.1.1
[INFO] [stderr]    Compiling symphonia v0.5.4
[INFO] [stderr]    Compiling transpose v0.2.3
[INFO] [stderr]    Compiling nu-ansi-term v0.46.0
[INFO] [stderr]    Compiling itertools v0.12.1
[INFO] [stderr]    Compiling lru v0.12.3
[INFO] [stderr]    Compiling lewton v0.10.2
[INFO] [stderr]    Compiling tracing-log v0.2.0
[INFO] [stderr]    Compiling primal-check v0.3.3
[INFO] [stderr]    Compiling num-complex v0.4.5
[INFO] [stderr]    Compiling sharded-slab v0.1.7
[INFO] [stderr]    Compiling thread_local v1.1.8
[INFO] [stderr]    Compiling unicode-segmentation v1.11.0
[INFO] [stderr]    Compiling cassowary v0.3.0
[INFO] [stderr]    Compiling indoc v2.0.5
[INFO] [stderr]    Compiling claxon v0.4.3
[INFO] [stderr]    Compiling unicode-width v0.1.11
[INFO] [stderr]    Compiling hound v3.5.1
[INFO] [stderr]    Compiling tracing-subscriber v0.3.18
[INFO] [stderr]    Compiling serde_derive v1.0.197
[INFO] [stderr]    Compiling futures-macro v0.3.30
[INFO] [stderr]    Compiling tokio-macros v2.2.0
[INFO] [stderr]    Compiling strum_macros v0.25.3
[INFO] [stderr]    Compiling thiserror-impl v1.0.58
[INFO] [stderr]    Compiling stability v0.1.1
[INFO] [stderr]    Compiling tokio v1.37.0
[INFO] [stderr]    Compiling tracing-attributes v0.1.27
[INFO] [stderr]    Compiling futures-util v0.3.30
[INFO] [stderr]    Compiling mp3-duration v0.1.10
[INFO] [stderr]    Compiling strum v0.25.0
[INFO] [stderr]    Compiling tracing v0.1.40
[INFO] [stderr]    Compiling futures-executor v0.3.30
[INFO] [stderr]    Compiling futures v0.3.30
[INFO] [stderr]    Compiling tokio-util v0.7.10
[INFO] [stderr]    Compiling tokio-stream v0.1.15
[INFO] [stderr]    Compiling bitflags v2.5.0
[INFO] [stderr]    Compiling alsa v0.9.0
[INFO] [stderr]    Compiling crossterm v0.27.0
[INFO] [stderr]    Compiling ratatui v0.25.0
[INFO] [stderr]    Compiling rodio v0.17.3
[INFO] [stderr]    Compiling ratatui_music v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `std::io::Error`
[INFO] [stdout]  --> src/error.rs:3:6
[INFO] [stdout]   |
[INFO] [stdout] 3 | use  std::io::Error;
[INFO] [stdout]   |      ^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `interval`
[INFO] [stdout]  --> src/event.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 |     time::{interval,Duration},
[INFO] [stdout]   |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::channel::oneshot::Cancellation`
[INFO] [stdout]   --> src/event.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use futures::channel::oneshot::Cancellation;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ok`, `select`
[INFO] [stdout]   --> src/event.rs:12:23
[INFO] [stdout]    |
[INFO] [stdout] 12 | use futures::future::{ok, select};
[INFO] [stdout]    |                       ^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `CrosstermBackend`
[INFO] [stdout]  --> src/tui.rs:1:53
[INFO] [stdout]   |
[INFO] [stdout] 1 | use ratatui::backend::{CrosstermBackend as Backend, CrosstermBackend};
[INFO] [stdout]   |                                                     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `event`
[INFO] [stdout]  --> src/tui.rs:3:28
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::{error::MyError,event};
[INFO] [stdout]   |                            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `thread`
[INFO] [stdout]  --> src/tui.rs:4:11
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::{thread,io};
[INFO] [stdout]   |           ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/components.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stdout]  --> src/components.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::Mutex`
[INFO] [stdout]  --> src/components.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::Mutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]  --> src/components.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::app::App;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::tracing::TracingLog`
[INFO] [stdout]   --> src/components.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::tracing::TracingLog;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/components/home.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stdout]  --> src/components/home.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::Mutex`
[INFO] [stdout]  --> src/components/home.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::Mutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing::info`
[INFO] [stdout]  --> src/components/home.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tracing::info;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]  --> src/components/home.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::app::App;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::tracinglog::TracingLogComponent`
[INFO] [stdout]   --> src/components/home.rs:11:6
[INFO] [stdout]    |
[INFO] [stdout] 11 | use  crate::components::tracinglog::TracingLogComponent;
[INFO] [stdout]    |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::tracing::TracingLog`
[INFO] [stdout]   --> src/components/home.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use crate::tracing::TracingLog;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/components/quit.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::future::ok`
[INFO] [stdout]  --> src/components/quit.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use futures::future::ok;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::prelude::Direction::Vertical`
[INFO] [stdout]  --> src/components/quit.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use ratatui::prelude::Direction::Vertical;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::Mutex`
[INFO] [stdout]  --> src/components/quit.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::Mutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]  --> src/components/quit.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::app::App;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ptr::addr_of_mut`
[INFO] [stdout]  --> src/components/tracinglog.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::ptr::addr_of_mut;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/components/tracinglog.rs:2:17
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::runtime::Runtime`
[INFO] [stdout]  --> src/components/tracinglog.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::runtime::Runtime;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stdout]  --> src/components/tracinglog.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::Mutex`
[INFO] [stdout]  --> src/components/tracinglog.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::sync::Mutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Event`, `Level`, `Subscriber`, `event`, `info`, `warn`
[INFO] [stdout]   --> src/components/tracinglog.rs:11:15
[INFO] [stdout]    |
[INFO] [stdout] 11 | use tracing::{Subscriber, Event, event, Level, info, warn};
[INFO] [stdout]    |               ^^^^^^^^^^  ^^^^^  ^^^^^  ^^^^^  ^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]   --> src/components/tracinglog.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use crate::app::App;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::tracing::TracingLog`
[INFO] [stdout]   --> src/components/tracinglog.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::tracing::TracingLog;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::Path`
[INFO] [stdout]  --> src/components/filelist.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::path::Path;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc`, `Mutex`
[INFO] [stdout]  --> src/components/filelist.rs:2:17
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::fs`
[INFO] [stdout]  --> src/components/filelist.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::fs;
[INFO] [stdout]   |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]  --> src/components/filelist.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::app::App;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing_subscriber::field::display::Messages`
[INFO] [stdout]  --> src/components/playzone.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing_subscriber::field::display::Messages;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc`, `Mutex`
[INFO] [stdout]  --> src/components/analysis.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Receiver`
[INFO] [stdout]  --> src/components/analysis.rs:2:23
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::sync::mpsc::{Receiver, Sender};
[INFO] [stdout]   |                       ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]  --> src/components/analysis.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::thread;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `log::info`
[INFO] [stdout]  --> src/components/analysis.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use log::info;
[INFO] [stdout]   |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc`, `Mutex`
[INFO] [stdout]  --> src/components/musicprogress.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]  --> src/components/musicprogress.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::thread;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stdout]  --> src/components/lyric.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::text::Line`
[INFO] [stdout]  --> src/components/apptitle.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use ratatui::text::Line;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ops::DerefMut`
[INFO] [stdout]  --> src/app.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::ops::DerefMut;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `channel`
[INFO] [stdout]  --> src/app.rs:4:23
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::sync::mpsc::{channel, Sender};
[INFO] [stdout]   |                       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/app.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::channel::mpsc::unbounded`
[INFO] [stdout]  --> src/app.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use futures::channel::mpsc::unbounded;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::future::try_join`
[INFO] [stdout]  --> src/app.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use futures::future::try_join;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::time::Instant`
[INFO] [stdout]   --> src/app.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use tokio::time::Instant;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `runtime`, `try_join`
[INFO] [stdout]   --> src/app.rs:13:13
[INFO] [stdout]    |
[INFO] [stdout] 13 | use tokio::{runtime, try_join};
[INFO] [stdout]    |             ^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `UnboundedReceiver`, `UnboundedSender`
[INFO] [stdout]   --> src/app.rs:14:25
[INFO] [stdout]    |
[INFO] [stdout] 14 | use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender};
[INFO] [stdout]    |                         ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::task::JoinHandle`
[INFO] [stdout]   --> src/app.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use tokio::task::JoinHandle;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio_util::sync::CancellationToken`
[INFO] [stdout]   --> src/app.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use tokio_util::sync::CancellationToken;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing::info`
[INFO] [stdout]   --> src/app.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use tracing::info;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing_subscriber::fmt::writer::EitherWriter::A`
[INFO] [stdout]   --> src/app.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use tracing_subscriber::fmt::writer::EitherWriter::A;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Identity`, `SubscriberExt`
[INFO] [stdout]   --> src/app.rs:19:33
[INFO] [stdout]    |
[INFO] [stdout] 19 | use tracing_subscriber::layer::{Identity, SubscriberExt};
[INFO] [stdout]    |                                 ^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::home::Home`
[INFO] [stdout]   --> src/app.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use crate::components::home::Home;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `action`, `app`, `render`
[INFO] [stdout]   --> src/app.rs:24:13
[INFO] [stdout]    |
[INFO] [stdout] 24 | use crate::{action, app, event, render};
[INFO] [stdout]    |             ^^^^^^  ^^^         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::lyric::LyricController`
[INFO] [stdout]   --> src/app.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 | use crate::lyric::LyricController;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]    --> src/app.rs:200:69
[INFO] [stdout]     |
[INFO] [stdout] 200 |     let (sample_sender,sample_receiver)= std::sync::mpsc::channel();;//播放时，发送样本数据给fft
[INFO] [stdout]     |                                                                     ^ help: remove this semicolon
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(redundant_semicolons)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `fmt`, `string::ToString`
[INFO] [stdout]  --> src/action.rs:1:11
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::{fmt, string::ToString};
[INFO] [stdout]   |           ^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `KeyEvent`
[INFO] [stdout]  --> src/action.rs:4:33
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crossterm::event::{KeyCode, KeyEvent};
[INFO] [stdout]   |                                 ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `MutexGuard`, `mpsc`
[INFO] [stdout]  --> src/action.rs:5:19
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::{mpsc, MutexGuard,Mutex};
[INFO] [stdout]   |                   ^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `UnboundedReceiver`, `UnboundedSender`
[INFO] [stdout]  --> src/action.rs:6:25
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender};
[INFO] [stdout]   |                         ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::task::JoinHandle`
[INFO] [stdout]  --> src/action.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::task::JoinHandle;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio_util::sync::CancellationToken`
[INFO] [stdout]  --> src/action.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio_util::sync::CancellationToken;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Deserializer`, `Visitor`, `self`
[INFO] [stdout]   --> src/action.rs:11:10
[INFO] [stdout]    |
[INFO] [stdout] 11 |     de::{self, Deserializer, Visitor},
[INFO] [stdout]    |          ^^^^  ^^^^^^^^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::apptitle::AppTitle`
[INFO] [stdout]   --> src/action.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use crate::components::apptitle::AppTitle;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::filelist::FileListComponent`
[INFO] [stdout]   --> src/action.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | use crate::components::filelist::FileListComponent;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::event`
[INFO] [stdout]   --> src/action.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | use crate::event;
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::mpsc::Receiver`
[INFO] [stdout]  --> src/render.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::sync::mpsc::Receiver;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]  --> src/render.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::thread;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/render.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::Frame`
[INFO] [stdout]  --> src/render.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use ratatui::Frame;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Margin`
[INFO] [stdout]  --> src/render.rs:7:54
[INFO] [stdout]   |
[INFO] [stdout] 7 | use ratatui::layout::{Constraint, Direction, Layout, Margin};
[INFO] [stdout]   |                                                      ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `UnboundedReceiver`, `UnboundedSender`
[INFO] [stdout]  --> src/render.rs:8:25
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender};
[INFO] [stdout]   |                         ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `spawn`
[INFO] [stdout]   --> src/render.rs:10:31
[INFO] [stdout]    |
[INFO] [stdout] 10 | use tokio::task::{JoinHandle, spawn};
[INFO] [stdout]    |                               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing::info`
[INFO] [stdout]   --> src/render.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use tracing::info;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::action::Action`
[INFO] [stdout]   --> src/render.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use crate::action::Action;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::analysis::Analysis`
[INFO] [stdout]   --> src/render.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::components::analysis::Analysis;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::home::Home`
[INFO] [stdout]   --> src/render.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::components::home::Home;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::quit::Quit`
[INFO] [stdout]   --> src/render.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use crate::components::quit::Quit;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::lyric::Lyric`
[INFO] [stdout]   --> src/render.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use crate::lyric::Lyric;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::musicplayer::MusicPlayer`
[INFO] [stdout]   --> src/render.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | use crate::musicplayer::MusicPlayer;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/tracing.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::text::Text`
[INFO] [stdout]  --> src/tracing.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use ratatui::text::Text;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::time::timeout`
[INFO] [stdout]  --> src/tracing.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use tokio::time::timeout;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing::info`
[INFO] [stdout]   --> src/tracing.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use tracing::info;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing_subscriber::Registry`
[INFO] [stdout]   --> src/tracing.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use tracing_subscriber::Registry;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around type
[INFO] [stdout]   --> src/tracing.rs:71:86
[INFO] [stdout]    |
[INFO] [stdout] 71 | pub  fn recv_log(log_receiver:  UnboundedReceiver<String>, app:  Arc<Mutex<App>> ) ->(JoinHandle<()>) {
[INFO] [stdout]    |                                                                                      ^              ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 71 - pub  fn recv_log(log_receiver:  UnboundedReceiver<String>, app:  Arc<Mutex<App>> ) ->(JoinHandle<()>) {
[INFO] [stdout] 71 + pub  fn recv_log(log_receiver:  UnboundedReceiver<String>, app:  Arc<Mutex<App>> ) ->JoinHandle<()> {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::arch::x86_64::_addcarryx_u64`
[INFO] [stdout]  --> src/fft.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::arch::x86_64::_addcarryx_u64;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs::File`
[INFO] [stdout]  --> src/fft.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::fs::File;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]  --> src/fft.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::io::BufReader;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Sender`
[INFO] [stdout]  --> src/fft.rs:7:33
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::sync::mpsc::{Receiver, Sender};
[INFO] [stdout]   |                                 ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]  --> src/fft.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::thread;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TryFutureExt`
[INFO] [stdout]  --> src/fft.rs:9:24
[INFO] [stdout]   |
[INFO] [stdout] 9 | use futures::{SinkExt, TryFutureExt};
[INFO] [stdout]   |                        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Decoder`
[INFO] [stdout]   --> src/fft.rs:12:13
[INFO] [stdout]    |
[INFO] [stdout] 12 | use rodio::{Decoder, Source};
[INFO] [stdout]    |             ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::action::Action`
[INFO] [stdout]   --> src/fft.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::action::Action;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::MyError`
[INFO] [stdout]   --> src/fft.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use crate::error::MyError;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around type
[INFO] [stdout]    --> src/fft.rs:140:100
[INFO] [stdout]     |
[INFO] [stdout] 140 |  pub async fn get_fft_result(mut music_reciver:UnboundedReceiver<Vec<f32>>, app:Arc<Mutex<App>>) ->(JoinHandle<()>){
[INFO] [stdout]     |                                                                                                    ^              ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 140 -  pub async fn get_fft_result(mut music_reciver:UnboundedReceiver<Vec<f32>>, app:Arc<Mutex<App>>) ->(JoinHandle<()>){
[INFO] [stdout] 140 +  pub async fn get_fft_result(mut music_reciver:UnboundedReceiver<Vec<f32>>, app:Arc<Mutex<App>>) ->JoinHandle<()>{
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::Path`
[INFO] [stdout]  --> src/musicplayer.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::path::Path;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/musicplayer.rs:4:17
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Sample`
[INFO] [stdout]   --> src/musicplayer.rs:81:14
[INFO] [stdout]    |
[INFO] [stdout] 81 | use rodio::{ Sample};
[INFO] [stdout]    |              ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Receiver`, `channel`
[INFO] [stdout]   --> src/musicplayer.rs:82:23
[INFO] [stdout]    |
[INFO] [stdout] 82 | use std::sync::mpsc::{channel, Receiver, Sender};
[INFO] [stdout]    |                       ^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread::spawn`
[INFO] [stdout]   --> src/musicplayer.rs:83:5
[INFO] [stdout]    |
[INFO] [stdout] 83 | use std::thread::spawn;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Instant`
[INFO] [stdout]   --> src/musicplayer.rs:84:27
[INFO] [stdout]    |
[INFO] [stdout] 84 | use std::time::{Duration, Instant};
[INFO] [stdout]    |                           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]   --> src/musicplayer.rs:88:5
[INFO] [stdout]    |
[INFO] [stdout] 88 | use crate::app::App;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::MyError`
[INFO] [stdout]   --> src/musicplayer.rs:89:5
[INFO] [stdout]    |
[INFO] [stdout] 89 | use crate::error::MyError;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ffi::OsStr`
[INFO] [stdout]  --> src/lyric.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::ffi::OsStr;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs`
[INFO] [stdout]  --> src/lyric.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::fs;
[INFO] [stdout]   |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::MyError`
[INFO] [stdout]  --> src/lyric.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::error::MyError;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::future::ok`
[INFO] [stdout]  --> src/sounds.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use futures::future::ok;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::Component`
[INFO] [stdout]   --> src/main.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::components::Component;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::Write`
[INFO] [stdout]   --> src/main.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use std::io::Write;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `app::App`
[INFO] [stdout]   --> src/main.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | use app::App;
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Decoder`, `OutputStream`, `Sink`, `Source`
[INFO] [stdout]   --> src/main.rs:23:13
[INFO] [stdout]    |
[INFO] [stdout] 23 | use rodio::{Decoder, OutputStream, Sink, Source};
[INFO] [stdout]    |             ^^^^^^^  ^^^^^^^^^^^^  ^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rustfft::num_complex::Complex`
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 | use rustfft::num_complex::Complex;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rustfft::FftPlanner`
[INFO] [stdout]   --> src/main.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 | use rustfft::FftPlanner;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs::File`
[INFO] [stdout]   --> src/main.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 | use std::fs::File;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]   --> src/main.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 | use std::io::BufReader;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::Path`
[INFO] [stdout]   --> src/main.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | use std::path::Path;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc`, `Mutex`
[INFO] [stdout]   --> src/main.rs:29:17
[INFO] [stdout]    |
[INFO] [stdout] 29 | use std::sync::{Arc, Mutex};
[INFO] [stdout]    |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::mpsc::channel`
[INFO] [stdout]   --> src/main.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 | use std::sync::mpsc::channel;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]   --> src/main.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 | use std::thread;
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]   --> src/main.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 | use std::time::Duration;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rustfft::num_traits::ToPrimitive`
[INFO] [stdout]   --> src/main.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 | use rustfft::num_traits::ToPrimitive;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc`
[INFO] [stdout]   --> src/main.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 | use tokio::sync::mpsc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::fft::FFTController`
[INFO] [stdout]   --> src/main.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 | use crate::fft::FFTController;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::lyric::LyricController`
[INFO] [stdout]   --> src/main.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 | use crate::lyric::LyricController;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::musicplayer::MusicPlayer`
[INFO] [stdout]   --> src/main.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 | use crate::musicplayer::MusicPlayer;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::sounds::SoundsList`
[INFO] [stdout]   --> src/main.rs:38:5
[INFO] [stdout]    |
[INFO] [stdout] 38 | use crate::sounds::SoundsList;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `err`
[INFO] [stdout]   --> src/event.rs:77:38
[INFO] [stdout]    |
[INFO] [stdout] 77 | ...                   Some(Err(err)) => {
[INFO] [stdout]    |                                ^^^ help: if this is intentional, prefix it with an underscore: `_err`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/event.rs:128:9
[INFO] [stdout]     |
[INFO] [stdout] 128 |     let mut cancelation_token = CancellationToken::new();
[INFO] [stdout]     |         ----^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/render.rs:129:53
[INFO] [stdout]     |
[INFO] [stdout] 129 | ...                   let mut sub_layout=Layout::new(
[INFO] [stdout]     |                           ----^^^^^^^^^^
[INFO] [stdout]     |                           |
[INFO] [stdout]     |                           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/render.rs:133:53
[INFO] [stdout]     |
[INFO] [stdout] 133 | ...                   let mut fft_layout=Layout::new(
[INFO] [stdout]     |                           ----^^^^^^^^^^
[INFO] [stdout]     |                           |
[INFO] [stdout]     |                           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/render.rs:137:53
[INFO] [stdout]     |
[INFO] [stdout] 137 | ...                   let mut playzone_layout=Layout::new(
[INFO] [stdout]     |                           ----^^^^^^^^^^^^^^^
[INFO] [stdout]     |                           |
[INFO] [stdout]     |                           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: irrefutable `if let` pattern
[INFO] [stdout]    --> src/app.rs:218:16
[INFO] [stdout]     |
[INFO] [stdout] 218 |             if let (action,path) = action_receiver.recv().unwrap() {
[INFO] [stdout]     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this pattern will always match, so the `if let` is useless
[INFO] [stdout]     = help: consider replacing the `if let` with a `let`
[INFO] [stdout]     = note: `#[warn(irrefutable_let_patterns)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:153:9
[INFO] [stdout]     |
[INFO] [stdout] 153 |     let mut app=App::new();
[INFO] [stdout]     |         ----^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:158:11
[INFO] [stdout]     |
[INFO] [stdout] 158 |     let  (mut log,log_receiver) =TracingLog::new();
[INFO] [stdout]     |           ----^^^
[INFO] [stdout]     |           |
[INFO] [stdout]     |           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:165:25
[INFO] [stdout]     |
[INFO] [stdout] 165 |     let (action_sender, mut action_receiver) = std::sync::mpsc::channel();
[INFO] [stdout]     |                         ----^^^^^^^^^^^^^^^
[INFO] [stdout]     |                         |
[INFO] [stdout]     |                         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:168:9
[INFO] [stdout]     |
[INFO] [stdout] 168 |     let mut tui = Tui::new()?;
[INFO] [stdout]     |         ----^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: irrefutable `while let` pattern
[INFO] [stdout]    --> src/fft.rs:144:16
[INFO] [stdout]     |
[INFO] [stdout] 144 |          while let mut fft_result=music_reciver.recv().await.unwrap(){
[INFO] [stdout]     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this pattern will always match, so the loop will never exit
[INFO] [stdout]     = help: consider instead using a `loop { ... }` with a `let` inside it
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `name`
[INFO] [stdout]    --> src/fft.rs:147:20
[INFO] [stdout]     |
[INFO] [stdout] 147 |              for ((name, value), new_value) in fft_buffer_clone.lock().await.iter_mut().zip(fft_result.iter()) {
[INFO] [stdout]     |                    ^^^^ help: if this is intentional, prefix it with an underscore: `_name`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/fft.rs:143:13
[INFO] [stdout]     |
[INFO] [stdout] 143 |         let mut fft_buffer_clone=Arc::clone(&app.lock().await.fft_result);
[INFO] [stdout]     |             ----^^^^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/fft.rs:144:20
[INFO] [stdout]     |
[INFO] [stdout] 144 |          while let mut fft_result=music_reciver.recv().await.unwrap(){
[INFO] [stdout]     |                    ----^^^^^^^^^^
[INFO] [stdout]     |                    |
[INFO] [stdout]     |                    help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `FutureExt`
[INFO] [stdout]   --> src/action.rs:15:15
[INFO] [stdout]    |
[INFO] [stdout] 15 | use futures::{FutureExt, StreamExt};
[INFO] [stdout]    |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StreamExt`
[INFO] [stdout]   --> src/action.rs:15:26
[INFO] [stdout]    |
[INFO] [stdout] 15 | use futures::{FutureExt, StreamExt};
[INFO] [stdout]    |                          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rustfft::num_complex::ComplexFloat`
[INFO] [stdout]  --> src/tracing.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use rustfft::num_complex::ComplexFloat;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Source`
[INFO] [stdout]   --> src/fft.rs:12:22
[INFO] [stdout]    |
[INFO] [stdout] 12 | use rodio::{Decoder, Source};
[INFO] [stdout]    |                      ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SinkExt`
[INFO] [stdout]  --> src/fft.rs:9:15
[INFO] [stdout]   |
[INFO] [stdout] 9 | use futures::{SinkExt, TryFutureExt};
[INFO] [stdout]   |               ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/event.rs:120:9
[INFO] [stdout]     |
[INFO] [stdout] 120 |         _ => {}
[INFO] [stdout]     |         ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/home.rs:36:13
[INFO] [stdout]    |
[INFO] [stdout] 36 |         let mut sub_layout=Layout::new(
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/home.rs:58:26
[INFO] [stdout]    |
[INFO] [stdout] 58 |     fn update(& mut self,action:Option<Action>)->Result<(),MyError>{
[INFO] [stdout]    |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rect`
[INFO] [stdout]   --> src/components/quit.rs:24:43
[INFO] [stdout]    |
[INFO] [stdout] 24 |     fn draw(&mut self, f: &mut Frame<'_>, rect: Rect) -> Result<(), MyError> {
[INFO] [stdout]    |                                           ^^^^ help: if this is intentional, prefix it with an underscore: `_rect`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/quit.rs:39:25
[INFO] [stdout]    |
[INFO] [stdout] 39 |     fn update(&mut self,action:Option<Action>) -> Result<(), MyError> {
[INFO] [stdout]    |                         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/tracinglog.rs:36:13
[INFO] [stdout]    |
[INFO] [stdout] 36 |         let mut liststate=ListState::default();
[INFO] [stdout]    |             ----^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/tracinglog.rs:48:14
[INFO] [stdout]    |
[INFO] [stdout] 48 |          let mut list_item:Vec<ListItem>=lines.iter().rev().map(//rev（）是倒序
[INFO] [stdout]    |              ----^^^^^^^^^
[INFO] [stdout]    |              |
[INFO] [stdout]    |              help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/tracinglog.rs:75:27
[INFO] [stdout]    |
[INFO] [stdout] 75 |     fn update(& mut self, action: Option<Action>) ->Result<(),MyError>{
[INFO] [stdout]    |                           ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:26:13
[INFO] [stdout]    |
[INFO] [stdout] 26 |         let mut vertical_scroll=0;
[INFO] [stdout]    |             ----^^^^^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:27:13
[INFO] [stdout]    |
[INFO] [stdout] 27 |         let mut vertical_scroll_state=ratatui::widgets::ScrollbarState::new(20);
[INFO] [stdout]    |             ----^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:29:13
[INFO] [stdout]    |
[INFO] [stdout] 29 |         let mut action_tx=None;
[INFO] [stdout]    |             ----^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:74:13
[INFO] [stdout]    |
[INFO] [stdout] 74 |         let mut itemlist=self.sound_list.sounds.clone();
[INFO] [stdout]    |             ----^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:77:21
[INFO] [stdout]    |
[INFO] [stdout] 77 |                 let mut listitem=ListItem::new(fileitem.name).bg(Color::Black);
[INFO] [stdout]    |                     ----^^^^^^^^
[INFO] [stdout]    |                     |
[INFO] [stdout]    |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/playzone.rs:34:26
[INFO] [stdout]    |
[INFO] [stdout] 34 |     fn update(&mut self, action: Option<Action>) -> Result<(), MyError> {
[INFO] [stdout]    |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/analysis.rs:66:13
[INFO] [stdout]    |
[INFO] [stdout] 66 |         let mut newdata: Vec<_>=self.data.iter().map(|(barname,value)|{
[INFO] [stdout]    |             ----^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/analysis.rs:70:13
[INFO] [stdout]    |
[INFO] [stdout] 70 |         let mut group=BarGroup::default().bars(&newdata);
[INFO] [stdout]    |             ----^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]    --> src/components/lyric.rs:126:26
[INFO] [stdout]     |
[INFO] [stdout] 126 |     fn update(&mut self, action: Option<Action>) -> Result<(), MyError> {
[INFO] [stdout]     |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `block`
[INFO] [stdout]   --> src/components/apptitle.rs:27:13
[INFO] [stdout]    |
[INFO] [stdout] 27 |         let block=Block::new().borders(Borders::ALL).light_red().padding(Padding::new(0,0,0,0)).title("out");
[INFO] [stdout]    |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_block`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/apptitle.rs:41:26
[INFO] [stdout]    |
[INFO] [stdout] 41 |     fn update(&mut self, action: Option<Action>) -> Result<(), MyError> {
[INFO] [stdout]    |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tx`
[INFO] [stdout]   --> src/components.rs:40:43
[INFO] [stdout]    |
[INFO] [stdout] 40 |     fn register_action_handler(&mut self, tx: Sender<Action>) {
[INFO] [stdout]    |                                           ^^ help: if this is intentional, prefix it with an underscore: `_tx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:51:13
[INFO] [stdout]    |
[INFO] [stdout] 51 |         let mut log=vec![String::new()];
[INFO] [stdout]    |             ----^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:52:13
[INFO] [stdout]    |
[INFO] [stdout] 52 |         let mut sounds_list=SoundsList::set_path("music".to_string());
[INFO] [stdout]    |             ----^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:53:13
[INFO] [stdout]    |
[INFO] [stdout] 53 |         let mut fft_result=Arc::new(Mutex::new(
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action_sender`
[INFO] [stdout]   --> src/app.rs:72:38
[INFO] [stdout]    |
[INFO] [stdout] 72 |     pub fn init_component(&mut self, action_sender: Sender<(Action,Option<String>)>){
[INFO] [stdout]    |                                      ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_action_sender`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:91:13
[INFO] [stdout]    |
[INFO] [stdout] 91 |         let mut sub_layout=Layout::new(
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:95:13
[INFO] [stdout]    |
[INFO] [stdout] 95 |         let mut fft_layout=Layout::new(
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:99:13
[INFO] [stdout]    |
[INFO] [stdout] 99 |         let mut playzone_layout=Layout::new(
[INFO] [stdout]    |             ----^^^^^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sample_rate`
[INFO] [stdout]   --> src/fft.rs:37:16
[INFO] [stdout]    |
[INFO] [stdout] 37 |     pub fn new(sample_rate: f32, fft_size: usize,sample_receiver: Receiver<f32>,music_tx: UnboundedSender<Vec<f32>>) -> Self {
[INFO] [stdout]    |                ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sample_rate`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fft_size`
[INFO] [stdout]   --> src/fft.rs:37:34
[INFO] [stdout]    |
[INFO] [stdout] 37 |     pub fn new(sample_rate: f32, fft_size: usize,sample_receiver: Receiver<f32>,music_tx: UnboundedSender<Vec<f32>>) -> Self {
[INFO] [stdout]    |                                  ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_fft_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: irrefutable `while let` pattern
[INFO] [stdout]   --> src/fft.rs:83:19
[INFO] [stdout]    |
[INFO] [stdout] 83 |             while let sample=self.sample_receive.recv().unwrap() {
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this pattern will always match, so the loop will never exit
[INFO] [stdout]    = help: consider instead using a `loop { ... }` with a `let` inside it
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `energy`
[INFO] [stdout]    --> src/fft.rs:129:18
[INFO] [stdout]     |
[INFO] [stdout] 129 |         for (i, &energy) in note_energies.iter().enumerate() {
[INFO] [stdout]     |                  ^^^^^^ help: if this is intentional, prefix it with an underscore: `_energy`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `note_name`
[INFO] [stdout]    --> src/fft.rs:130:17
[INFO] [stdout]     |
[INFO] [stdout] 130 |             let note_name = self.midi_number_to_note_name(i as i32 + 60); // C4开始
[INFO] [stdout]     |                 ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_note_name`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/musicplayer.rs:57:11
[INFO] [stdout]    |
[INFO] [stdout] 57 |       let mut source1 = Decoder::new(buf_reader1).unwrap().convert_samples::<f32>();
[INFO] [stdout]    |           ----^^^^^^^
[INFO] [stdout]    |           |
[INFO] [stdout]    |           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/musicplayer.rs:58:11
[INFO] [stdout]    |
[INFO] [stdout] 58 |       let mut my_source = MyCustomSource::new(source1, sample_sender);
[INFO] [stdout]    |           ----^^^^^^^^^
[INFO] [stdout]    |           |
[INFO] [stdout]    |           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/lyric.rs:28:13
[INFO] [stdout]    |
[INFO] [stdout] 28 |         let mut path=path;
[INFO] [stdout]    |             ----^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/lyric.rs:29:13
[INFO] [stdout]    |
[INFO] [stdout] 29 |         let mut lyric=vec![Lyric::new()];
[INFO] [stdout]    |             ----^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/lyric.rs:30:13
[INFO] [stdout]    |
[INFO] [stdout] 30 |         let mut time=String::new();
[INFO] [stdout]    |             ----^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/lyric.rs:31:13
[INFO] [stdout]    |
[INFO] [stdout] 31 |         let mut filestring=String::new();//歌词string
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `hanning_window` is never used
[INFO] [stdout]   --> src/main.rs:48:9
[INFO] [stdout]    |
[INFO] [stdout] 48 |      fn hanning_window(length: usize) -> Vec<f32> {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]  --> src/error.rs:9:13
[INFO] [stdout]   |
[INFO] [stdout] 9 |     IoError(std::io::Error),//打印失败
[INFO] [stdout]   |     ------- ^^^^^^^^^^^^^^
[INFO] [stdout]   |     |
[INFO] [stdout]   |     field in this variant
[INFO] [stdout]   |
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]   |
[INFO] [stdout] 9 |     IoError(()),//打印失败
[INFO] [stdout]   |             ~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/error.rs:10:15
[INFO] [stdout]    |
[INFO] [stdout] 10 |     JoinError(tokio::task::JoinError),
[INFO] [stdout]    |     --------- ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 10 |     JoinError(()),
[INFO] [stdout]    |               ~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/error.rs:12:20
[INFO] [stdout]    |
[INFO] [stdout] 12 |     TokioSendError(tokio::sync::mpsc::error::SendError<Action>),//线程发送失败
[INFO] [stdout]    |     -------------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 12 |     TokioSendError(()),//线程发送失败
[INFO] [stdout]    |                    ~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Init`, `Quit`, `Closed`, `Tick`, and `Render` are never constructed
[INFO] [stdout]   --> src/event.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub enum  Event{
[INFO] [stdout]    |           ----- variants in this enum
[INFO] [stdout] 18 |     Init,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 19 |     Quit,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 20 |     Error,
[INFO] [stdout] 21 |     Closed,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 22 |     Tick,//无事件时，渲染间隔控制
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 23 |     Render,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Event` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `event` is never read
[INFO] [stdout]   --> src/event.rs:33:9
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub struct EventHandler{
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] 33 |     pub event:Event,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `close` is never used
[INFO] [stdout]   --> src/event.rs:47:12
[INFO] [stdout]    |
[INFO] [stdout] 38 | impl  EventHandler {
[INFO] [stdout]    | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn close(&mut self) {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tick_test` is never used
[INFO] [stdout]    --> src/event.rs:125:15
[INFO] [stdout]     |
[INFO] [stdout] 125 | pub async  fn tick_test()->Result<(), MyError>{
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `start`, `exit`, `next`, `cancel`, and `reset` are never used
[INFO] [stdout]   --> src/tui.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl Tui{
[INFO] [stdout]    | -------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 25 |     pub fn start(&mut self)->Result<(),MyError>{
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 37 |     pub fn exit(&mut self)->Result<(),MyError>{
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub fn next(&mut self)->Result<(),MyError>{
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     pub fn cancel(&mut self)->Result<(),MyError>{
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 52 |     pub fn reset()->Result<(),MyError>{
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `init` and `register_action_handler` are never used
[INFO] [stdout]   --> src/components.rs:36:8
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub trait Component{
[INFO] [stdout]    |           --------- methods in this trait
[INFO] [stdout] ...
[INFO] [stdout] 36 |     fn init(&mut self) -> Result<(),MyError> {
[INFO] [stdout]    |        ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     fn register_action_handler(&mut self, tx: Sender<Action>) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `component_name`, `log`, and `action_tx` are never read
[INFO] [stdout]   --> src/components/home.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct Home {
[INFO] [stdout]    |            ---- fields in this struct
[INFO] [stdout] 15 |     component_name:String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 16 |     pub log:String,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 17 |     pub action_tx: Option<Sender<Action>>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/components/home.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl  Home{
[INFO] [stdout]    | ---------- associated function in this implementation
[INFO] [stdout] 20 |     pub fn new(log:String) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `component_name` is never read
[INFO] [stdout]   --> src/components/quit.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct Quit {
[INFO] [stdout]    |            ---- field in this struct
[INFO] [stdout] 13 |     component_name:String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Quit` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `vertical_scroll_state`, `horizontal_scroll_state`, `vertical_scroll`, `horizontal_scroll`, `action_tx`, and `liststate` are never read
[INFO] [stdout]   --> src/components/tracinglog.rs:20:9
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct TracingLogComponent{
[INFO] [stdout]    |            ------------------- fields in this struct
[INFO] [stdout] 19 |     pub logs: String,
[INFO] [stdout] 20 |     pub vertical_scroll_state: ScrollbarState,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 21 |     pub horizontal_scroll_state: ScrollbarState,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 22 |     pub vertical_scroll: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 23 |     pub horizontal_scroll: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 24 |     pub action_tx: Option<Sender<Action>>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 25 |     pub liststate:ListState,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TracingLogComponent` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `vertical_scroll`, `vertical_scroll_state`, and `action_tx` are never read
[INFO] [stdout]   --> src/components/filelist.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct FileListComponent {
[INFO] [stdout]    |            ----------------- fields in this struct
[INFO] [stdout] 17 |     pub sound_list:SoundsList,
[INFO] [stdout] 18 |     pub vertical_scroll:usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 19 |     pub vertical_scroll_state:ScrollbarState,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 20 |     pub action_tx: Option<Sender<Action>>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FileListComponent` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `action_sender` is never read
[INFO] [stdout]   --> src/components/analysis.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct Analysis{
[INFO] [stdout]    |            -------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 18 |     pub action_sender:Option<Sender<Action>>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Analysis` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `action_tx` is never read
[INFO] [stdout]   --> src/components/lyric.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct LyricZone{
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 21 |     pub action_tx: Option<Sender<Action>>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `LyricZone` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `title` is never read
[INFO] [stdout]   --> src/components/apptitle.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct AppTitle{
[INFO] [stdout]    |            -------- field in this struct
[INFO] [stdout] 14 |     pub title: String,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AppTitle` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `should_quit`, `tick_rate`, and `frame_rate` are never read
[INFO] [stdout]   --> src/app.rs:36:9
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub struct App{
[INFO] [stdout]    |            --- fields in this struct
[INFO] [stdout] 36 |     pub should_quit:bool,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 37 |     pub tick_rate: f64,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 38 |     pub frame_rate: f64,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `draw_component` and `get_soundlist` are never used
[INFO] [stdout]    --> src/app.rs:85:12
[INFO] [stdout]     |
[INFO] [stdout] 46  | impl App{
[INFO] [stdout]     | -------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 85  |     pub fn draw_component(&mut self, frame: &mut Frame){
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 142 |     pub fn get_soundlist(&self)->Vec<(usize,String)>{
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `action` is never read
[INFO] [stdout]   --> src/action.rs:62:9
[INFO] [stdout]    |
[INFO] [stdout] 61 | pub struct ActionReactor {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 62 |     pub action: Action,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `cancelation_token` and `task` are never read
[INFO] [stdout]   --> src/render.rs:27:9
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub struct Render {
[INFO] [stdout]    |            ------ fields in this struct
[INFO] [stdout] 27 |     pub cancelation_token: CancellationToken,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 30 |     pub task: JoinHandle<Result<(), MyError>>,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `cancel` is never used
[INFO] [stdout]    --> src/render.rs:165:12
[INFO] [stdout]     |
[INFO] [stdout] 33  | impl Render {
[INFO] [stdout]     | ----------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 165 |     pub fn cancel(&mut self){
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `logs` is never read
[INFO] [stdout]   --> src/tracing.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct TracingLog{
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] 20 |     //用通信来共享内存，而不是通过共享内存来通信
[INFO] [stdout] 21 |     pub logs: Vec<String>,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TracingLog` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `pause` and `stop` are never read
[INFO] [stdout]   --> src/fft.rs:23:9
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct FFTController
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] 22 | {
[INFO] [stdout] 23 |     pub pause: bool,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 24 |     pub stop: bool,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_pause` and `set_stop` are never used
[INFO] [stdout]   --> src/fft.rs:50:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | impl FFTController
[INFO] [stdout]    | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn set_pause(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn set_stop(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `stream` and `stream_handle` are never read
[INFO] [stdout]   --> src/musicplayer.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout] 7  | pub struct MusicPlayer
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 10 |     pub stream:rodio::OutputStream,// steam 不能drop 了，不然 handle 就没用了
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 11 |     pub stream_handle:OutputStreamHandle,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `lyric` and `time` are never read
[INFO] [stdout]   --> src/lyric.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct LyricController{
[INFO] [stdout]    |            --------------- fields in this struct
[INFO] [stdout] 15 |     pub filestring:String,
[INFO] [stdout] 16 |     pub lyric:Vec<Lyric>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 17 |     pub time:String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `LyricController` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `next_selected` is never read
[INFO] [stdout]   --> src/sounds.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct SoundsList{
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 14 |     pub next_selected: Option<usize>,//是否有最新选中,用下次预备播放
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SoundsList` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_sound_name_list` is never used
[INFO] [stdout]    --> src/sounds.rs:110:12
[INFO] [stdout]     |
[INFO] [stdout] 18  | impl SoundsList{
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub fn get_sound_name_list(&self)->Vec<(usize,String)>{
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `id`, `total_duration`, and `lyric` are never read
[INFO] [stdout]    --> src/sounds.rs:135:9
[INFO] [stdout]     |
[INFO] [stdout] 134 | pub struct Sound{
[INFO] [stdout]     |            ----- fields in this struct
[INFO] [stdout] 135 |     pub id:usize,
[INFO] [stdout]     |         ^^
[INFO] [stdout] 136 |     pub name:String,
[INFO] [stdout] 137 |     pub total_duration:Duration,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^
[INFO] [stdout] 138 |     pub lyric:Lyric,
[INFO] [stdout]     |         ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Sound` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_sound_path` is never used
[INFO] [stdout]    --> src/sounds.rs:174:8
[INFO] [stdout]     |
[INFO] [stdout] 142 | impl Sound{
[INFO] [stdout]     | ---------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 174 |     fn get_sound_path(&self)->String{
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` in tuple element 0 that must be used
[INFO] [stdout]    --> src/app.rs:233:3
[INFO] [stdout]     |
[INFO] [stdout] 233 | /   tokio::join!(
[INFO] [stdout] 234 | |         //   handler.run(),没有所有权了
[INFO] [stdout] 235 | |            react,
[INFO] [stdout] 236 | |            render1,
[INFO] [stdout] 237 | |            recv_handle,//异步获取tracing 日志
[INFO] [stdout] 238 | |            fft_result_set_handle,
[INFO] [stdout] 239 | |       );
[INFO] [stdout]     | |_______^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` on by default
[INFO] [stdout]     = note: this warning originates in the macro `$crate::join` which comes from the expansion of the macro `tokio::join` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` in tuple element 1 that must be used
[INFO] [stdout]    --> src/app.rs:233:3
[INFO] [stdout]     |
[INFO] [stdout] 233 | /   tokio::join!(
[INFO] [stdout] 234 | |         //   handler.run(),没有所有权了
[INFO] [stdout] 235 | |            react,
[INFO] [stdout] 236 | |            render1,
[INFO] [stdout] 237 | |            recv_handle,//异步获取tracing 日志
[INFO] [stdout] 238 | |            fft_result_set_handle,
[INFO] [stdout] 239 | |       );
[INFO] [stdout]     | |_______^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: this warning originates in the macro `$crate::join` which comes from the expansion of the macro `tokio::join` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` in tuple element 2 that must be used
[INFO] [stdout]    --> src/app.rs:233:3
[INFO] [stdout]     |
[INFO] [stdout] 233 | /   tokio::join!(
[INFO] [stdout] 234 | |         //   handler.run(),没有所有权了
[INFO] [stdout] 235 | |            react,
[INFO] [stdout] 236 | |            render1,
[INFO] [stdout] 237 | |            recv_handle,//异步获取tracing 日志
[INFO] [stdout] 238 | |            fft_result_set_handle,
[INFO] [stdout] 239 | |       );
[INFO] [stdout]     | |_______^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: this warning originates in the macro `$crate::join` which comes from the expansion of the macro `tokio::join` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: 225 warnings emitted
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 27.00s
[INFO] running `Command { std: "docker" "inspect" "05cd3f92909327ba13082040d40249faff3d91d67fd38254142e7a3bbed8ef63", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "05cd3f92909327ba13082040d40249faff3d91d67fd38254142e7a3bbed8ef63", kill_on_drop: false }`
[INFO] [stdout] 05cd3f92909327ba13082040d40249faff3d91d67fd38254142e7a3bbed8ef63
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:59a85a07ab18ca8720692f8e61effa1c651d9e2ca591e072c2b212bb91a6b8b5" "/opt/rustwide/cargo-home/bin/cargo" "+1871252fc8bb672d40787e67404e6eaae7059369" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 3df458bc14fab22fb6c92e2a0ab1a6435d3ab40adec44b78a14c5afaa6022342
[INFO] running `Command { std: "docker" "start" "-a" "3df458bc14fab22fb6c92e2a0ab1a6435d3ab40adec44b78a14c5afaa6022342", kill_on_drop: false }`
[INFO] [stderr]    Compiling ratatui_music v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `std::io::Error`
[INFO] [stdout]  --> src/error.rs:3:6
[INFO] [stdout]   |
[INFO] [stdout] 3 | use  std::io::Error;
[INFO] [stdout]   |      ^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `interval`
[INFO] [stdout]  --> src/event.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 |     time::{interval,Duration},
[INFO] [stdout]   |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::channel::oneshot::Cancellation`
[INFO] [stdout]   --> src/event.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use futures::channel::oneshot::Cancellation;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ok`, `select`
[INFO] [stdout]   --> src/event.rs:12:23
[INFO] [stdout]    |
[INFO] [stdout] 12 | use futures::future::{ok, select};
[INFO] [stdout]    |                       ^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::test`
[INFO] [stdout]    --> src/event.rs:164:9
[INFO] [stdout]     |
[INFO] [stdout] 164 |     use tokio::test;
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::event`
[INFO] [stdout]    --> src/event.rs:166:9
[INFO] [stdout]     |
[INFO] [stdout] 166 |     use crate::event;
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `CrosstermBackend`
[INFO] [stdout]  --> src/tui.rs:1:53
[INFO] [stdout]   |
[INFO] [stdout] 1 | use ratatui::backend::{CrosstermBackend as Backend, CrosstermBackend};
[INFO] [stdout]   |                                                     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `event`
[INFO] [stdout]  --> src/tui.rs:3:28
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::{error::MyError,event};
[INFO] [stdout]   |                            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `thread`
[INFO] [stdout]  --> src/tui.rs:4:11
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::{thread,io};
[INFO] [stdout]   |           ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/components.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stdout]  --> src/components.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::Mutex`
[INFO] [stdout]  --> src/components.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::Mutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]  --> src/components.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::app::App;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::tracing::TracingLog`
[INFO] [stdout]   --> src/components.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::tracing::TracingLog;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/components/home.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stdout]  --> src/components/home.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::Mutex`
[INFO] [stdout]  --> src/components/home.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::Mutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing::info`
[INFO] [stdout]  --> src/components/home.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tracing::info;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]  --> src/components/home.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::app::App;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::tracinglog::TracingLogComponent`
[INFO] [stdout]   --> src/components/home.rs:11:6
[INFO] [stdout]    |
[INFO] [stdout] 11 | use  crate::components::tracinglog::TracingLogComponent;
[INFO] [stdout]    |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::tracing::TracingLog`
[INFO] [stdout]   --> src/components/home.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use crate::tracing::TracingLog;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/components/quit.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::future::ok`
[INFO] [stdout]  --> src/components/quit.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use futures::future::ok;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::prelude::Direction::Vertical`
[INFO] [stdout]  --> src/components/quit.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use ratatui::prelude::Direction::Vertical;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::Mutex`
[INFO] [stdout]  --> src/components/quit.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::Mutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]  --> src/components/quit.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::app::App;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ptr::addr_of_mut`
[INFO] [stdout]  --> src/components/tracinglog.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::ptr::addr_of_mut;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/components/tracinglog.rs:2:17
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::runtime::Runtime`
[INFO] [stdout]  --> src/components/tracinglog.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::runtime::Runtime;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stdout]  --> src/components/tracinglog.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::Mutex`
[INFO] [stdout]  --> src/components/tracinglog.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::sync::Mutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Event`, `Level`, `Subscriber`, `event`, `info`, `warn`
[INFO] [stdout]   --> src/components/tracinglog.rs:11:15
[INFO] [stdout]    |
[INFO] [stdout] 11 | use tracing::{Subscriber, Event, event, Level, info, warn};
[INFO] [stdout]    |               ^^^^^^^^^^  ^^^^^  ^^^^^  ^^^^^  ^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]   --> src/components/tracinglog.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use crate::app::App;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::tracing::TracingLog`
[INFO] [stdout]   --> src/components/tracinglog.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::tracing::TracingLog;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::Path`
[INFO] [stdout]  --> src/components/filelist.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::path::Path;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc`, `Mutex`
[INFO] [stdout]  --> src/components/filelist.rs:2:17
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::fs`
[INFO] [stdout]  --> src/components/filelist.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::fs;
[INFO] [stdout]   |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]  --> src/components/filelist.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::app::App;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing_subscriber::field::display::Messages`
[INFO] [stdout]  --> src/components/playzone.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing_subscriber::field::display::Messages;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc`, `Mutex`
[INFO] [stdout]  --> src/components/analysis.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Receiver`
[INFO] [stdout]  --> src/components/analysis.rs:2:23
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::sync::mpsc::{Receiver, Sender};
[INFO] [stdout]   |                       ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]  --> src/components/analysis.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::thread;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `log::info`
[INFO] [stdout]  --> src/components/analysis.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use log::info;
[INFO] [stdout]   |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc`, `Mutex`
[INFO] [stdout]  --> src/components/musicprogress.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]  --> src/components/musicprogress.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::thread;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stdout]  --> src/components/lyric.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::text::Line`
[INFO] [stdout]  --> src/components/apptitle.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use ratatui::text::Line;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ops::DerefMut`
[INFO] [stdout]  --> src/app.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::ops::DerefMut;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `channel`
[INFO] [stdout]  --> src/app.rs:4:23
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::sync::mpsc::{channel, Sender};
[INFO] [stdout]   |                       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/app.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::channel::mpsc::unbounded`
[INFO] [stdout]  --> src/app.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use futures::channel::mpsc::unbounded;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::future::try_join`
[INFO] [stdout]  --> src/app.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use futures::future::try_join;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::time::Instant`
[INFO] [stdout]   --> src/app.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use tokio::time::Instant;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `runtime`, `try_join`
[INFO] [stdout]   --> src/app.rs:13:13
[INFO] [stdout]    |
[INFO] [stdout] 13 | use tokio::{runtime, try_join};
[INFO] [stdout]    |             ^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `UnboundedReceiver`, `UnboundedSender`
[INFO] [stdout]   --> src/app.rs:14:25
[INFO] [stdout]    |
[INFO] [stdout] 14 | use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender};
[INFO] [stdout]    |                         ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::task::JoinHandle`
[INFO] [stdout]   --> src/app.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use tokio::task::JoinHandle;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio_util::sync::CancellationToken`
[INFO] [stdout]   --> src/app.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use tokio_util::sync::CancellationToken;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing::info`
[INFO] [stdout]   --> src/app.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use tracing::info;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing_subscriber::fmt::writer::EitherWriter::A`
[INFO] [stdout]   --> src/app.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use tracing_subscriber::fmt::writer::EitherWriter::A;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Identity`, `SubscriberExt`
[INFO] [stdout]   --> src/app.rs:19:33
[INFO] [stdout]    |
[INFO] [stdout] 19 | use tracing_subscriber::layer::{Identity, SubscriberExt};
[INFO] [stdout]    |                                 ^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::home::Home`
[INFO] [stdout]   --> src/app.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use crate::components::home::Home;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `action`, `app`, `render`
[INFO] [stdout]   --> src/app.rs:24:13
[INFO] [stdout]    |
[INFO] [stdout] 24 | use crate::{action, app, event, render};
[INFO] [stdout]    |             ^^^^^^  ^^^         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::lyric::LyricController`
[INFO] [stdout]   --> src/app.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 | use crate::lyric::LyricController;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]    --> src/app.rs:200:69
[INFO] [stdout]     |
[INFO] [stdout] 200 |     let (sample_sender,sample_receiver)= std::sync::mpsc::channel();;//播放时，发送样本数据给fft
[INFO] [stdout]     |                                                                     ^ help: remove this semicolon
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(redundant_semicolons)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `fmt`, `string::ToString`
[INFO] [stdout]  --> src/action.rs:1:11
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::{fmt, string::ToString};
[INFO] [stdout]   |           ^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `KeyEvent`
[INFO] [stdout]  --> src/action.rs:4:33
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crossterm::event::{KeyCode, KeyEvent};
[INFO] [stdout]   |                                 ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `MutexGuard`, `mpsc`
[INFO] [stdout]  --> src/action.rs:5:19
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::{mpsc, MutexGuard,Mutex};
[INFO] [stdout]   |                   ^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `UnboundedReceiver`, `UnboundedSender`
[INFO] [stdout]  --> src/action.rs:6:25
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender};
[INFO] [stdout]   |                         ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::task::JoinHandle`
[INFO] [stdout]  --> src/action.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::task::JoinHandle;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio_util::sync::CancellationToken`
[INFO] [stdout]  --> src/action.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio_util::sync::CancellationToken;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Deserializer`, `Visitor`, `self`
[INFO] [stdout]   --> src/action.rs:11:10
[INFO] [stdout]    |
[INFO] [stdout] 11 |     de::{self, Deserializer, Visitor},
[INFO] [stdout]    |          ^^^^  ^^^^^^^^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::apptitle::AppTitle`
[INFO] [stdout]   --> src/action.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use crate::components::apptitle::AppTitle;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::filelist::FileListComponent`
[INFO] [stdout]   --> src/action.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | use crate::components::filelist::FileListComponent;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::event`
[INFO] [stdout]   --> src/action.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | use crate::event;
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::mpsc::Receiver`
[INFO] [stdout]  --> src/render.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::sync::mpsc::Receiver;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]  --> src/render.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::thread;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/render.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::Frame`
[INFO] [stdout]  --> src/render.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use ratatui::Frame;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Margin`
[INFO] [stdout]  --> src/render.rs:7:54
[INFO] [stdout]   |
[INFO] [stdout] 7 | use ratatui::layout::{Constraint, Direction, Layout, Margin};
[INFO] [stdout]   |                                                      ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `UnboundedReceiver`, `UnboundedSender`
[INFO] [stdout]  --> src/render.rs:8:25
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender};
[INFO] [stdout]   |                         ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `spawn`
[INFO] [stdout]   --> src/render.rs:10:31
[INFO] [stdout]    |
[INFO] [stdout] 10 | use tokio::task::{JoinHandle, spawn};
[INFO] [stdout]    |                               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing::info`
[INFO] [stdout]   --> src/render.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use tracing::info;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::action::Action`
[INFO] [stdout]   --> src/render.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use crate::action::Action;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::analysis::Analysis`
[INFO] [stdout]   --> src/render.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::components::analysis::Analysis;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::home::Home`
[INFO] [stdout]   --> src/render.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::components::home::Home;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::quit::Quit`
[INFO] [stdout]   --> src/render.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use crate::components::quit::Quit;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::lyric::Lyric`
[INFO] [stdout]   --> src/render.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use crate::lyric::Lyric;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::musicplayer::MusicPlayer`
[INFO] [stdout]   --> src/render.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | use crate::musicplayer::MusicPlayer;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/tracing.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::text::Text`
[INFO] [stdout]  --> src/tracing.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use ratatui::text::Text;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::time::timeout`
[INFO] [stdout]  --> src/tracing.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use tokio::time::timeout;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing::info`
[INFO] [stdout]   --> src/tracing.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use tracing::info;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing_subscriber::Registry`
[INFO] [stdout]   --> src/tracing.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use tracing_subscriber::Registry;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around type
[INFO] [stdout]   --> src/tracing.rs:71:86
[INFO] [stdout]    |
[INFO] [stdout] 71 | pub  fn recv_log(log_receiver:  UnboundedReceiver<String>, app:  Arc<Mutex<App>> ) ->(JoinHandle<()>) {
[INFO] [stdout]    |                                                                                      ^              ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 71 - pub  fn recv_log(log_receiver:  UnboundedReceiver<String>, app:  Arc<Mutex<App>> ) ->(JoinHandle<()>) {
[INFO] [stdout] 71 + pub  fn recv_log(log_receiver:  UnboundedReceiver<String>, app:  Arc<Mutex<App>> ) ->JoinHandle<()> {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::arch::x86_64::_addcarryx_u64`
[INFO] [stdout]  --> src/fft.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::arch::x86_64::_addcarryx_u64;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs::File`
[INFO] [stdout]  --> src/fft.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::fs::File;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]  --> src/fft.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::io::BufReader;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Sender`
[INFO] [stdout]  --> src/fft.rs:7:33
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::sync::mpsc::{Receiver, Sender};
[INFO] [stdout]   |                                 ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]  --> src/fft.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::thread;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TryFutureExt`
[INFO] [stdout]  --> src/fft.rs:9:24
[INFO] [stdout]   |
[INFO] [stdout] 9 | use futures::{SinkExt, TryFutureExt};
[INFO] [stdout]   |                        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Decoder`
[INFO] [stdout]   --> src/fft.rs:12:13
[INFO] [stdout]    |
[INFO] [stdout] 12 | use rodio::{Decoder, Source};
[INFO] [stdout]    |             ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::action::Action`
[INFO] [stdout]   --> src/fft.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::action::Action;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::MyError`
[INFO] [stdout]   --> src/fft.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use crate::error::MyError;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around type
[INFO] [stdout]    --> src/fft.rs:140:100
[INFO] [stdout]     |
[INFO] [stdout] 140 |  pub async fn get_fft_result(mut music_reciver:UnboundedReceiver<Vec<f32>>, app:Arc<Mutex<App>>) ->(JoinHandle<()>){
[INFO] [stdout]     |                                                                                                    ^              ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 140 -  pub async fn get_fft_result(mut music_reciver:UnboundedReceiver<Vec<f32>>, app:Arc<Mutex<App>>) ->(JoinHandle<()>){
[INFO] [stdout] 140 +  pub async fn get_fft_result(mut music_reciver:UnboundedReceiver<Vec<f32>>, app:Arc<Mutex<App>>) ->JoinHandle<()>{
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::Path`
[INFO] [stdout]  --> src/musicplayer.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::path::Path;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/musicplayer.rs:4:17
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Sample`
[INFO] [stdout]   --> src/musicplayer.rs:81:14
[INFO] [stdout]    |
[INFO] [stdout] 81 | use rodio::{ Sample};
[INFO] [stdout]    |              ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Receiver`, `channel`
[INFO] [stdout]   --> src/musicplayer.rs:82:23
[INFO] [stdout]    |
[INFO] [stdout] 82 | use std::sync::mpsc::{channel, Receiver, Sender};
[INFO] [stdout]    |                       ^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread::spawn`
[INFO] [stdout]   --> src/musicplayer.rs:83:5
[INFO] [stdout]    |
[INFO] [stdout] 83 | use std::thread::spawn;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Instant`
[INFO] [stdout]   --> src/musicplayer.rs:84:27
[INFO] [stdout]    |
[INFO] [stdout] 84 | use std::time::{Duration, Instant};
[INFO] [stdout]    |                           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]   --> src/musicplayer.rs:88:5
[INFO] [stdout]    |
[INFO] [stdout] 88 | use crate::app::App;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::MyError`
[INFO] [stdout]   --> src/musicplayer.rs:89:5
[INFO] [stdout]    |
[INFO] [stdout] 89 | use crate::error::MyError;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]    --> src/musicplayer.rs:146:9
[INFO] [stdout]     |
[INFO] [stdout] 146 |     use std::io::BufReader;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc`
[INFO] [stdout]    --> src/musicplayer.rs:148:9
[INFO] [stdout]     |
[INFO] [stdout] 148 |     use tokio::sync::mpsc;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]    --> src/musicplayer.rs:173:73
[INFO] [stdout]     |
[INFO] [stdout] 173 |         let (sample_sender,sample_receiver)= std::sync::mpsc::channel();;//播放时，发送样本数据给fft
[INFO] [stdout]     |                                                                         ^ help: remove this semicolon
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ffi::OsStr`
[INFO] [stdout]  --> src/lyric.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::ffi::OsStr;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs`
[INFO] [stdout]  --> src/lyric.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::fs;
[INFO] [stdout]   |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::MyError`
[INFO] [stdout]  --> src/lyric.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::error::MyError;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::future::ok`
[INFO] [stdout]  --> src/sounds.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use futures::future::ok;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs::File`
[INFO] [stdout]    --> src/sounds.rs:194:9
[INFO] [stdout]     |
[INFO] [stdout] 194 |     use std::fs::File;
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]    --> src/sounds.rs:195:9
[INFO] [stdout]     |
[INFO] [stdout] 195 |     use std::io::BufReader;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::event::Event`
[INFO] [stdout]    --> src/sounds.rs:196:9
[INFO] [stdout]     |
[INFO] [stdout] 196 |     use crate::event::Event;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::Component`
[INFO] [stdout]   --> src/main.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::components::Component;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::Write`
[INFO] [stdout]   --> src/main.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use std::io::Write;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `app::App`
[INFO] [stdout]   --> src/main.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | use app::App;
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Decoder`, `OutputStream`, `Sink`, `Source`
[INFO] [stdout]   --> src/main.rs:23:13
[INFO] [stdout]    |
[INFO] [stdout] 23 | use rodio::{Decoder, OutputStream, Sink, Source};
[INFO] [stdout]    |             ^^^^^^^  ^^^^^^^^^^^^  ^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rustfft::num_complex::Complex`
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 | use rustfft::num_complex::Complex;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rustfft::FftPlanner`
[INFO] [stdout]   --> src/main.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 | use rustfft::FftPlanner;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs::File`
[INFO] [stdout]   --> src/main.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 | use std::fs::File;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]   --> src/main.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 | use std::io::BufReader;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::Path`
[INFO] [stdout]   --> src/main.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | use std::path::Path;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc`, `Mutex`
[INFO] [stdout]   --> src/main.rs:29:17
[INFO] [stdout]    |
[INFO] [stdout] 29 | use std::sync::{Arc, Mutex};
[INFO] [stdout]    |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::mpsc::channel`
[INFO] [stdout]   --> src/main.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 | use std::sync::mpsc::channel;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]   --> src/main.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 | use std::thread;
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]   --> src/main.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 | use std::time::Duration;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rustfft::num_traits::ToPrimitive`
[INFO] [stdout]   --> src/main.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 | use rustfft::num_traits::ToPrimitive;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc`
[INFO] [stdout]   --> src/main.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 | use tokio::sync::mpsc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::fft::FFTController`
[INFO] [stdout]   --> src/main.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 | use crate::fft::FFTController;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::lyric::LyricController`
[INFO] [stdout]   --> src/main.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 | use crate::lyric::LyricController;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::musicplayer::MusicPlayer`
[INFO] [stdout]   --> src/main.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 | use crate::musicplayer::MusicPlayer;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::sounds::SoundsList`
[INFO] [stdout]   --> src/main.rs:38:5
[INFO] [stdout]    |
[INFO] [stdout] 38 | use crate::sounds::SoundsList;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `err`
[INFO] [stdout]   --> src/event.rs:77:38
[INFO] [stdout]    |
[INFO] [stdout] 77 | ...                   Some(Err(err)) => {
[INFO] [stdout]    |                                ^^^ help: if this is intentional, prefix it with an underscore: `_err`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/event.rs:128:9
[INFO] [stdout]     |
[INFO] [stdout] 128 |     let mut cancelation_token = CancellationToken::new();
[INFO] [stdout]     |         ----^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/render.rs:129:53
[INFO] [stdout]     |
[INFO] [stdout] 129 | ...                   let mut sub_layout=Layout::new(
[INFO] [stdout]     |                           ----^^^^^^^^^^
[INFO] [stdout]     |                           |
[INFO] [stdout]     |                           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/render.rs:133:53
[INFO] [stdout]     |
[INFO] [stdout] 133 | ...                   let mut fft_layout=Layout::new(
[INFO] [stdout]     |                           ----^^^^^^^^^^
[INFO] [stdout]     |                           |
[INFO] [stdout]     |                           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/render.rs:137:53
[INFO] [stdout]     |
[INFO] [stdout] 137 | ...                   let mut playzone_layout=Layout::new(
[INFO] [stdout]     |                           ----^^^^^^^^^^^^^^^
[INFO] [stdout]     |                           |
[INFO] [stdout]     |                           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: irrefutable `if let` pattern
[INFO] [stdout]    --> src/app.rs:218:16
[INFO] [stdout]     |
[INFO] [stdout] 218 |             if let (action,path) = action_receiver.recv().unwrap() {
[INFO] [stdout]     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this pattern will always match, so the `if let` is useless
[INFO] [stdout]     = help: consider replacing the `if let` with a `let`
[INFO] [stdout]     = note: `#[warn(irrefutable_let_patterns)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:153:9
[INFO] [stdout]     |
[INFO] [stdout] 153 |     let mut app=App::new();
[INFO] [stdout]     |         ----^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:158:11
[INFO] [stdout]     |
[INFO] [stdout] 158 |     let  (mut log,log_receiver) =TracingLog::new();
[INFO] [stdout]     |           ----^^^
[INFO] [stdout]     |           |
[INFO] [stdout]     |           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:165:25
[INFO] [stdout]     |
[INFO] [stdout] 165 |     let (action_sender, mut action_receiver) = std::sync::mpsc::channel();
[INFO] [stdout]     |                         ----^^^^^^^^^^^^^^^
[INFO] [stdout]     |                         |
[INFO] [stdout]     |                         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:168:9
[INFO] [stdout]     |
[INFO] [stdout] 168 |     let mut tui = Tui::new()?;
[INFO] [stdout]     |         ----^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: irrefutable `while let` pattern
[INFO] [stdout]    --> src/fft.rs:144:16
[INFO] [stdout]     |
[INFO] [stdout] 144 |          while let mut fft_result=music_reciver.recv().await.unwrap(){
[INFO] [stdout]     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this pattern will always match, so the loop will never exit
[INFO] [stdout]     = help: consider instead using a `loop { ... }` with a `let` inside it
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `name`
[INFO] [stdout]    --> src/fft.rs:147:20
[INFO] [stdout]     |
[INFO] [stdout] 147 |              for ((name, value), new_value) in fft_buffer_clone.lock().await.iter_mut().zip(fft_result.iter()) {
[INFO] [stdout]     |                    ^^^^ help: if this is intentional, prefix it with an underscore: `_name`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/fft.rs:143:13
[INFO] [stdout]     |
[INFO] [stdout] 143 |         let mut fft_buffer_clone=Arc::clone(&app.lock().await.fft_result);
[INFO] [stdout]     |             ----^^^^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/fft.rs:144:20
[INFO] [stdout]     |
[INFO] [stdout] 144 |          while let mut fft_result=music_reciver.recv().await.unwrap(){
[INFO] [stdout]     |                    ----^^^^^^^^^^
[INFO] [stdout]     |                    |
[INFO] [stdout]     |                    help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `FutureExt`
[INFO] [stdout]   --> src/action.rs:15:15
[INFO] [stdout]    |
[INFO] [stdout] 15 | use futures::{FutureExt, StreamExt};
[INFO] [stdout]    |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StreamExt`
[INFO] [stdout]   --> src/action.rs:15:26
[INFO] [stdout]    |
[INFO] [stdout] 15 | use futures::{FutureExt, StreamExt};
[INFO] [stdout]    |                          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rustfft::num_complex::ComplexFloat`
[INFO] [stdout]  --> src/tracing.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use rustfft::num_complex::ComplexFloat;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Source`
[INFO] [stdout]   --> src/fft.rs:12:22
[INFO] [stdout]    |
[INFO] [stdout] 12 | use rodio::{Decoder, Source};
[INFO] [stdout]    |                      ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SinkExt`
[INFO] [stdout]  --> src/fft.rs:9:15
[INFO] [stdout]   |
[INFO] [stdout] 9 | use futures::{SinkExt, TryFutureExt};
[INFO] [stdout]   |               ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/event.rs:120:9
[INFO] [stdout]     |
[INFO] [stdout] 120 |         _ => {}
[INFO] [stdout]     |         ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/home.rs:36:13
[INFO] [stdout]    |
[INFO] [stdout] 36 |         let mut sub_layout=Layout::new(
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/home.rs:58:26
[INFO] [stdout]    |
[INFO] [stdout] 58 |     fn update(& mut self,action:Option<Action>)->Result<(),MyError>{
[INFO] [stdout]    |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rect`
[INFO] [stdout]   --> src/components/quit.rs:24:43
[INFO] [stdout]    |
[INFO] [stdout] 24 |     fn draw(&mut self, f: &mut Frame<'_>, rect: Rect) -> Result<(), MyError> {
[INFO] [stdout]    |                                           ^^^^ help: if this is intentional, prefix it with an underscore: `_rect`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/quit.rs:39:25
[INFO] [stdout]    |
[INFO] [stdout] 39 |     fn update(&mut self,action:Option<Action>) -> Result<(), MyError> {
[INFO] [stdout]    |                         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/tracinglog.rs:36:13
[INFO] [stdout]    |
[INFO] [stdout] 36 |         let mut liststate=ListState::default();
[INFO] [stdout]    |             ----^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/tracinglog.rs:48:14
[INFO] [stdout]    |
[INFO] [stdout] 48 |          let mut list_item:Vec<ListItem>=lines.iter().rev().map(//rev（）是倒序
[INFO] [stdout]    |              ----^^^^^^^^^
[INFO] [stdout]    |              |
[INFO] [stdout]    |              help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/tracinglog.rs:75:27
[INFO] [stdout]    |
[INFO] [stdout] 75 |     fn update(& mut self, action: Option<Action>) ->Result<(),MyError>{
[INFO] [stdout]    |                           ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:26:13
[INFO] [stdout]    |
[INFO] [stdout] 26 |         let mut vertical_scroll=0;
[INFO] [stdout]    |             ----^^^^^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:27:13
[INFO] [stdout]    |
[INFO] [stdout] 27 |         let mut vertical_scroll_state=ratatui::widgets::ScrollbarState::new(20);
[INFO] [stdout]    |             ----^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:29:13
[INFO] [stdout]    |
[INFO] [stdout] 29 |         let mut action_tx=None;
[INFO] [stdout]    |             ----^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:74:13
[INFO] [stdout]    |
[INFO] [stdout] 74 |         let mut itemlist=self.sound_list.sounds.clone();
[INFO] [stdout]    |             ----^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:77:21
[INFO] [stdout]    |
[INFO] [stdout] 77 |                 let mut listitem=ListItem::new(fileitem.name).bg(Color::Black);
[INFO] [stdout]    |                     ----^^^^^^^^
[INFO] [stdout]    |                     |
[INFO] [stdout]    |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/playzone.rs:34:26
[INFO] [stdout]    |
[INFO] [stdout] 34 |     fn update(&mut self, action: Option<Action>) -> Result<(), MyError> {
[INFO] [stdout]    |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/analysis.rs:66:13
[INFO] [stdout]    |
[INFO] [stdout] 66 |         let mut newdata: Vec<_>=self.data.iter().map(|(barname,value)|{
[INFO] [stdout]    |             ----^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/analysis.rs:70:13
[INFO] [stdout]    |
[INFO] [stdout] 70 |         let mut group=BarGroup::default().bars(&newdata);
[INFO] [stdout]    |             ----^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]    --> src/components/lyric.rs:126:26
[INFO] [stdout]     |
[INFO] [stdout] 126 |     fn update(&mut self, action: Option<Action>) -> Result<(), MyError> {
[INFO] [stdout]     |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `seconds_with_decimals`
[INFO] [stdout]    --> src/components/lyric.rs:177:17
[INFO] [stdout]     |
[INFO] [stdout] 177 |             let seconds_with_decimals = time.1;
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_seconds_with_decimals`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `now_duration`
[INFO] [stdout]    --> src/components/lyric.rs:192:17
[INFO] [stdout]     |
[INFO] [stdout] 192 |             let now_duration = Duration::new(minutes * 60 + seconds, 0) + Duration::from_millis(decimals * 10);
[INFO] [stdout]     |                 ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_now_duration`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `block`
[INFO] [stdout]   --> src/components/apptitle.rs:27:13
[INFO] [stdout]    |
[INFO] [stdout] 27 |         let block=Block::new().borders(Borders::ALL).light_red().padding(Padding::new(0,0,0,0)).title("out");
[INFO] [stdout]    |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_block`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/apptitle.rs:41:26
[INFO] [stdout]    |
[INFO] [stdout] 41 |     fn update(&mut self, action: Option<Action>) -> Result<(), MyError> {
[INFO] [stdout]    |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tx`
[INFO] [stdout]   --> src/components.rs:40:43
[INFO] [stdout]    |
[INFO] [stdout] 40 |     fn register_action_handler(&mut self, tx: Sender<Action>) {
[INFO] [stdout]    |                                           ^^ help: if this is intentional, prefix it with an underscore: `_tx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:51:13
[INFO] [stdout]    |
[INFO] [stdout] 51 |         let mut log=vec![String::new()];
[INFO] [stdout]    |             ----^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:52:13
[INFO] [stdout]    |
[INFO] [stdout] 52 |         let mut sounds_list=SoundsList::set_path("music".to_string());
[INFO] [stdout]    |             ----^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:53:13
[INFO] [stdout]    |
[INFO] [stdout] 53 |         let mut fft_result=Arc::new(Mutex::new(
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action_sender`
[INFO] [stdout]   --> src/app.rs:72:38
[INFO] [stdout]    |
[INFO] [stdout] 72 |     pub fn init_component(&mut self, action_sender: Sender<(Action,Option<String>)>){
[INFO] [stdout]    |                                      ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_action_sender`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:91:13
[INFO] [stdout]    |
[INFO] [stdout] 91 |         let mut sub_layout=Layout::new(
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:95:13
[INFO] [stdout]    |
[INFO] [stdout] 95 |         let mut fft_layout=Layout::new(
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:99:13
[INFO] [stdout]    |
[INFO] [stdout] 99 |         let mut playzone_layout=Layout::new(
[INFO] [stdout]    |             ----^^^^^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sample_rate`
[INFO] [stdout]   --> src/fft.rs:37:16
[INFO] [stdout]    |
[INFO] [stdout] 37 |     pub fn new(sample_rate: f32, fft_size: usize,sample_receiver: Receiver<f32>,music_tx: UnboundedSender<Vec<f32>>) -> Self {
[INFO] [stdout]    |                ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sample_rate`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fft_size`
[INFO] [stdout]   --> src/fft.rs:37:34
[INFO] [stdout]    |
[INFO] [stdout] 37 |     pub fn new(sample_rate: f32, fft_size: usize,sample_receiver: Receiver<f32>,music_tx: UnboundedSender<Vec<f32>>) -> Self {
[INFO] [stdout]    |                                  ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_fft_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: irrefutable `while let` pattern
[INFO] [stdout]   --> src/fft.rs:83:19
[INFO] [stdout]    |
[INFO] [stdout] 83 |             while let sample=self.sample_receive.recv().unwrap() {
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this pattern will always match, so the loop will never exit
[INFO] [stdout]    = help: consider instead using a `loop { ... }` with a `let` inside it
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `energy`
[INFO] [stdout]    --> src/fft.rs:129:18
[INFO] [stdout]     |
[INFO] [stdout] 129 |         for (i, &energy) in note_energies.iter().enumerate() {
[INFO] [stdout]     |                  ^^^^^^ help: if this is intentional, prefix it with an underscore: `_energy`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `note_name`
[INFO] [stdout]    --> src/fft.rs:130:17
[INFO] [stdout]     |
[INFO] [stdout] 130 |             let note_name = self.midi_number_to_note_name(i as i32 + 60); // C4开始
[INFO] [stdout]     |                 ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_note_name`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/musicplayer.rs:57:11
[INFO] [stdout]    |
[INFO] [stdout] 57 |       let mut source1 = Decoder::new(buf_reader1).unwrap().convert_samples::<f32>();
[INFO] [stdout]    |           ----^^^^^^^
[INFO] [stdout]    |           |
[INFO] [stdout]    |           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/musicplayer.rs:58:11
[INFO] [stdout]    |
[INFO] [stdout] 58 |       let mut my_source = MyCustomSource::new(source1, sample_sender);
[INFO] [stdout]    |           ----^^^^^^^^^
[INFO] [stdout]    |           |
[INFO] [stdout]    |           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sample_receiver`
[INFO] [stdout]    --> src/musicplayer.rs:173:28
[INFO] [stdout]     |
[INFO] [stdout] 173 |         let (sample_sender,sample_receiver)= std::sync::mpsc::channel();;//播放时，发送样本数据给fft
[INFO] [stdout]     |                            ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sample_receiver`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: irrefutable `if let` pattern
[INFO] [stdout]    --> src/musicplayer.rs:179:20
[INFO] [stdout]     |
[INFO] [stdout] 179 |                 if let (action,_path) = action_receiver.recv().unwrap() {
[INFO] [stdout]     |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this pattern will always match, so the `if let` is useless
[INFO] [stdout]     = help: consider replacing the `if let` with a `let`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/musicplayer.rs:172:29
[INFO] [stdout]     |
[INFO] [stdout] 172 |         let (action_sender, mut action_receiver) = std::sync::mpsc::channel();
[INFO] [stdout]     |                             ----^^^^^^^^^^^^^^^
[INFO] [stdout]     |                             |
[INFO] [stdout]     |                             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/lyric.rs:28:13
[INFO] [stdout]    |
[INFO] [stdout] 28 |         let mut path=path;
[INFO] [stdout]    |             ----^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/lyric.rs:29:13
[INFO] [stdout]    |
[INFO] [stdout] 29 |         let mut lyric=vec![Lyric::new()];
[INFO] [stdout]    |             ----^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/lyric.rs:30:13
[INFO] [stdout]    |
[INFO] [stdout] 30 |         let mut time=String::new();
[INFO] [stdout]    |             ----^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/lyric.rs:31:13
[INFO] [stdout]    |
[INFO] [stdout] 31 |         let mut filestring=String::new();//歌词string
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]  --> src/error.rs:9:13
[INFO] [stdout]   |
[INFO] [stdout] 9 |     IoError(std::io::Error),//打印失败
[INFO] [stdout]   |     ------- ^^^^^^^^^^^^^^
[INFO] [stdout]   |     |
[INFO] [stdout]   |     field in this variant
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]   |
[INFO] [stdout] 9 |     IoError(()),//打印失败
[INFO] [stdout]   |             ~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/error.rs:10:15
[INFO] [stdout]    |
[INFO] [stdout] 10 |     JoinError(tokio::task::JoinError),
[INFO] [stdout]    |     --------- ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 10 |     JoinError(()),
[INFO] [stdout]    |               ~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/error.rs:12:20
[INFO] [stdout]    |
[INFO] [stdout] 12 |     TokioSendError(tokio::sync::mpsc::error::SendError<Action>),//线程发送失败
[INFO] [stdout]    |     -------------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 12 |     TokioSendError(()),//线程发送失败
[INFO] [stdout]    |                    ~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Init`, `Quit`, `Closed`, and `Render` are never constructed
[INFO] [stdout]   --> src/event.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub enum  Event{
[INFO] [stdout]    |           ----- variants in this enum
[INFO] [stdout] 18 |     Init,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 19 |     Quit,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 20 |     Error,
[INFO] [stdout] 21 |     Closed,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 22 |     Tick,//无事件时，渲染间隔控制
[INFO] [stdout] 23 |     Render,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Event` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `event` is never read
[INFO] [stdout]   --> src/event.rs:33:9
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub struct EventHandler{
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] 33 |     pub event:Event,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tick_test` is never used
[INFO] [stdout]    --> src/event.rs:125:15
[INFO] [stdout]     |
[INFO] [stdout] 125 | pub async  fn tick_test()->Result<(), MyError>{
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `start`, `exit`, `next`, `cancel`, and `reset` are never used
[INFO] [stdout]   --> src/tui.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl Tui{
[INFO] [stdout]    | -------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 25 |     pub fn start(&mut self)->Result<(),MyError>{
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 37 |     pub fn exit(&mut self)->Result<(),MyError>{
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub fn next(&mut self)->Result<(),MyError>{
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     pub fn cancel(&mut self)->Result<(),MyError>{
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 52 |     pub fn reset()->Result<(),MyError>{
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `init` and `register_action_handler` are never used
[INFO] [stdout]   --> src/components.rs:36:8
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub trait Component{
[INFO] [stdout]    |           --------- methods in this trait
[INFO] [stdout] ...
[INFO] [stdout] 36 |     fn init(&mut self) -> Result<(),MyError> {
[INFO] [stdout]    |        ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     fn register_action_handler(&mut self, tx: Sender<Action>) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `component_name`, `log`, and `action_tx` are never read
[INFO] [stdout]   --> src/components/home.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct Home {
[INFO] [stdout]    |            ---- fields in this struct
[INFO] [stdout] 15 |     component_name:String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 16 |     pub log:String,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 17 |     pub action_tx: Option<Sender<Action>>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/components/home.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl  Home{
[INFO] [stdout]    | ---------- associated function in this implementation
[INFO] [stdout] 20 |     pub fn new(log:String) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `component_name` is never read
[INFO] [stdout]   --> src/components/quit.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct Quit {
[INFO] [stdout]    |            ---- field in this struct
[INFO] [stdout] 13 |     component_name:String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Quit` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `vertical_scroll_state`, `horizontal_scroll_state`, `vertical_scroll`, `horizontal_scroll`, `action_tx`, and `liststate` are never read
[INFO] [stdout]   --> src/components/tracinglog.rs:20:9
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct TracingLogComponent{
[INFO] [stdout]    |            ------------------- fields in this struct
[INFO] [stdout] 19 |     pub logs: String,
[INFO] [stdout] 20 |     pub vertical_scroll_state: ScrollbarState,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 21 |     pub horizontal_scroll_state: ScrollbarState,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 22 |     pub vertical_scroll: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 23 |     pub horizontal_scroll: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 24 |     pub action_tx: Option<Sender<Action>>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 25 |     pub liststate:ListState,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TracingLogComponent` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `vertical_scroll`, `vertical_scroll_state`, and `action_tx` are never read
[INFO] [stdout]   --> src/components/filelist.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct FileListComponent {
[INFO] [stdout]    |            ----------------- fields in this struct
[INFO] [stdout] 17 |     pub sound_list:SoundsList,
[INFO] [stdout] 18 |     pub vertical_scroll:usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 19 |     pub vertical_scroll_state:ScrollbarState,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 20 |     pub action_tx: Option<Sender<Action>>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FileListComponent` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `action_sender` is never read
[INFO] [stdout]   --> src/components/analysis.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct Analysis{
[INFO] [stdout]    |            -------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 18 |     pub action_sender:Option<Sender<Action>>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Analysis` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `action_tx` is never read
[INFO] [stdout]   --> src/components/lyric.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct LyricZone{
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 21 |     pub action_tx: Option<Sender<Action>>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `LyricZone` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `title` is never read
[INFO] [stdout]   --> src/components/apptitle.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct AppTitle{
[INFO] [stdout]    |            -------- field in this struct
[INFO] [stdout] 14 |     pub title: String,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AppTitle` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `should_quit`, `tick_rate`, and `frame_rate` are never read
[INFO] [stdout]   --> src/app.rs:36:9
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub struct App{
[INFO] [stdout]    |            --- fields in this struct
[INFO] [stdout] 36 |     pub should_quit:bool,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 37 |     pub tick_rate: f64,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 38 |     pub frame_rate: f64,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `draw_component` and `get_soundlist` are never used
[INFO] [stdout]    --> src/app.rs:85:12
[INFO] [stdout]     |
[INFO] [stdout] 46  | impl App{
[INFO] [stdout]     | -------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 85  |     pub fn draw_component(&mut self, frame: &mut Frame){
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 142 |     pub fn get_soundlist(&self)->Vec<(usize,String)>{
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `action` is never read
[INFO] [stdout]   --> src/action.rs:62:9
[INFO] [stdout]    |
[INFO] [stdout] 61 | pub struct ActionReactor {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 62 |     pub action: Action,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `cancelation_token` and `task` are never read
[INFO] [stdout]   --> src/render.rs:27:9
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub struct Render {
[INFO] [stdout]    |            ------ fields in this struct
[INFO] [stdout] 27 |     pub cancelation_token: CancellationToken,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 30 |     pub task: JoinHandle<Result<(), MyError>>,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `cancel` is never used
[INFO] [stdout]    --> src/render.rs:165:12
[INFO] [stdout]     |
[INFO] [stdout] 33  | impl Render {
[INFO] [stdout]     | ----------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 165 |     pub fn cancel(&mut self){
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `logs` is never read
[INFO] [stdout]   --> src/tracing.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct TracingLog{
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] 20 |     //用通信来共享内存，而不是通过共享内存来通信
[INFO] [stdout] 21 |     pub logs: Vec<String>,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TracingLog` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `pause` and `stop` are never read
[INFO] [stdout]   --> src/fft.rs:23:9
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct FFTController
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] 22 | {
[INFO] [stdout] 23 |     pub pause: bool,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 24 |     pub stop: bool,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_pause` and `set_stop` are never used
[INFO] [stdout]   --> src/fft.rs:50:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | impl FFTController
[INFO] [stdout]    | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn set_pause(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn set_stop(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `stream` and `stream_handle` are never read
[INFO] [stdout]   --> src/musicplayer.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout] 7  | pub struct MusicPlayer
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 10 |     pub stream:rodio::OutputStream,// steam 不能drop 了，不然 handle 就没用了
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 11 |     pub stream_handle:OutputStreamHandle,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `lyric` and `time` are never read
[INFO] [stdout]   --> src/lyric.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct LyricController{
[INFO] [stdout]    |            --------------- fields in this struct
[INFO] [stdout] 15 |     pub filestring:String,
[INFO] [stdout] 16 |     pub lyric:Vec<Lyric>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 17 |     pub time:String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `LyricController` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `next_selected` is never read
[INFO] [stdout]   --> src/sounds.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct SoundsList{
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 14 |     pub next_selected: Option<usize>,//是否有最新选中,用下次预备播放
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SoundsList` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_sound_name_list` is never used
[INFO] [stdout]    --> src/sounds.rs:110:12
[INFO] [stdout]     |
[INFO] [stdout] 18  | impl SoundsList{
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub fn get_sound_name_list(&self)->Vec<(usize,String)>{
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `id`, `total_duration`, and `lyric` are never read
[INFO] [stdout]    --> src/sounds.rs:135:9
[INFO] [stdout]     |
[INFO] [stdout] 134 | pub struct Sound{
[INFO] [stdout]     |            ----- fields in this struct
[INFO] [stdout] 135 |     pub id:usize,
[INFO] [stdout]     |         ^^
[INFO] [stdout] 136 |     pub name:String,
[INFO] [stdout] 137 |     pub total_duration:Duration,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^
[INFO] [stdout] 138 |     pub lyric:Lyric,
[INFO] [stdout]     |         ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Sound` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_sound_path` is never used
[INFO] [stdout]    --> src/sounds.rs:174:8
[INFO] [stdout]     |
[INFO] [stdout] 142 | impl Sound{
[INFO] [stdout]     | ---------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 174 |     fn get_sound_path(&self)->String{
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` in tuple element 0 that must be used
[INFO] [stdout]    --> src/app.rs:233:3
[INFO] [stdout]     |
[INFO] [stdout] 233 | /   tokio::join!(
[INFO] [stdout] 234 | |         //   handler.run(),没有所有权了
[INFO] [stdout] 235 | |            react,
[INFO] [stdout] 236 | |            render1,
[INFO] [stdout] 237 | |            recv_handle,//异步获取tracing 日志
[INFO] [stdout] 238 | |            fft_result_set_handle,
[INFO] [stdout] 239 | |       );
[INFO] [stdout]     | |_______^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` on by default
[INFO] [stdout]     = note: this warning originates in the macro `$crate::join` which comes from the expansion of the macro `tokio::join` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` in tuple element 1 that must be used
[INFO] [stdout]    --> src/app.rs:233:3
[INFO] [stdout]     |
[INFO] [stdout] 233 | /   tokio::join!(
[INFO] [stdout] 234 | |         //   handler.run(),没有所有权了
[INFO] [stdout] 235 | |            react,
[INFO] [stdout] 236 | |            render1,
[INFO] [stdout] 237 | |            recv_handle,//异步获取tracing 日志
[INFO] [stdout] 238 | |            fft_result_set_handle,
[INFO] [stdout] 239 | |       );
[INFO] [stdout]     | |_______^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: this warning originates in the macro `$crate::join` which comes from the expansion of the macro `tokio::join` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` in tuple element 2 that must be used
[INFO] [stdout]    --> src/app.rs:233:3
[INFO] [stdout]     |
[INFO] [stdout] 233 | /   tokio::join!(
[INFO] [stdout] 234 | |         //   handler.run(),没有所有权了
[INFO] [stdout] 235 | |            react,
[INFO] [stdout] 236 | |            render1,
[INFO] [stdout] 237 | |            recv_handle,//异步获取tracing 日志
[INFO] [stdout] 238 | |            fft_result_set_handle,
[INFO] [stdout] 239 | |       );
[INFO] [stdout]     | |_______^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: this warning originates in the macro `$crate::join` which comes from the expansion of the macro `tokio::join` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: 236 warnings emitted
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 2.15s
[INFO] running `Command { std: "docker" "inspect" "3df458bc14fab22fb6c92e2a0ab1a6435d3ab40adec44b78a14c5afaa6022342", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "3df458bc14fab22fb6c92e2a0ab1a6435d3ab40adec44b78a14c5afaa6022342", kill_on_drop: false }`
[INFO] [stdout] 3df458bc14fab22fb6c92e2a0ab1a6435d3ab40adec44b78a14c5afaa6022342
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:59a85a07ab18ca8720692f8e61effa1c651d9e2ca591e072c2b212bb91a6b8b5" "/opt/rustwide/cargo-home/bin/cargo" "+1871252fc8bb672d40787e67404e6eaae7059369" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] cedb7b03b8b51feededf4c3f74c5de87f7c08577c3bb57cf53cc70f5bba9e1a1
[INFO] running `Command { std: "docker" "start" "-a" "cedb7b03b8b51feededf4c3f74c5de87f7c08577c3bb57cf53cc70f5bba9e1a1", kill_on_drop: false }`
[INFO] [stderr] warning: unused import: `std::io::Error`
[INFO] [stderr]  --> src/error.rs:3:6
[INFO] [stderr]   |
[INFO] [stderr] 3 | use  std::io::Error;
[INFO] [stderr]   |      ^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `interval`
[INFO] [stderr]  --> src/event.rs:8:12
[INFO] [stderr]   |
[INFO] [stderr] 8 |     time::{interval,Duration},
[INFO] [stderr]   |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `futures::channel::oneshot::Cancellation`
[INFO] [stderr]   --> src/event.rs:11:5
[INFO] [stderr]    |
[INFO] [stderr] 11 | use futures::channel::oneshot::Cancellation;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `ok`, `select`
[INFO] [stderr]   --> src/event.rs:12:23
[INFO] [stderr]    |
[INFO] [stderr] 12 | use futures::future::{ok, select};
[INFO] [stderr]    |                       ^^  ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::test`
[INFO] [stderr]    --> src/event.rs:164:9
[INFO] [stderr]     |
[INFO] [stderr] 164 |     use tokio::test;
[INFO] [stderr]     |         ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::event`
[INFO] [stderr]    --> src/event.rs:166:9
[INFO] [stderr]     |
[INFO] [stderr] 166 |     use crate::event;
[INFO] [stderr]     |         ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `CrosstermBackend`
[INFO] [stderr]  --> src/tui.rs:1:53
[INFO] [stderr]   |
[INFO] [stderr] 1 | use ratatui::backend::{CrosstermBackend as Backend, CrosstermBackend};
[INFO] [stderr]   |                                                     ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `event`
[INFO] [stderr]  --> src/tui.rs:3:28
[INFO] [stderr]   |
[INFO] [stderr] 3 | use crate::{error::MyError,event};
[INFO] [stderr]   |                            ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `thread`
[INFO] [stderr]  --> src/tui.rs:4:11
[INFO] [stderr]   |
[INFO] [stderr] 4 | use std::{thread,io};
[INFO] [stderr]   |           ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Arc`
[INFO] [stderr]  --> src/components.rs:1:17
[INFO] [stderr]   |
[INFO] [stderr] 1 | use std::sync::{Arc};
[INFO] [stderr]   |                 ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stderr]  --> src/components.rs:4:5
[INFO] [stderr]   |
[INFO] [stderr] 4 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::sync::Mutex`
[INFO] [stderr]  --> src/components.rs:5:5
[INFO] [stderr]   |
[INFO] [stderr] 5 | use tokio::sync::Mutex;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::app::App`
[INFO] [stderr]  --> src/components.rs:7:5
[INFO] [stderr]   |
[INFO] [stderr] 7 | use crate::app::App;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::tracing::TracingLog`
[INFO] [stderr]   --> src/components.rs:17:5
[INFO] [stderr]    |
[INFO] [stderr] 17 | use crate::tracing::TracingLog;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Arc`
[INFO] [stderr]  --> src/components/home.rs:1:17
[INFO] [stderr]   |
[INFO] [stderr] 1 | use std::sync::{Arc};
[INFO] [stderr]   |                 ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stderr]  --> src/components/home.rs:4:5
[INFO] [stderr]   |
[INFO] [stderr] 4 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::sync::Mutex`
[INFO] [stderr]  --> src/components/home.rs:5:5
[INFO] [stderr]   |
[INFO] [stderr] 5 | use tokio::sync::Mutex;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tracing::info`
[INFO] [stderr]  --> src/components/home.rs:6:5
[INFO] [stderr]   |
[INFO] [stderr] 6 | use tracing::info;
[INFO] [stderr]   |     ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::app::App`
[INFO] [stderr]  --> src/components/home.rs:8:5
[INFO] [stderr]   |
[INFO] [stderr] 8 | use crate::app::App;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::components::tracinglog::TracingLogComponent`
[INFO] [stderr]   --> src/components/home.rs:11:6
[INFO] [stderr]    |
[INFO] [stderr] 11 | use  crate::components::tracinglog::TracingLogComponent;
[INFO] [stderr]    |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::tracing::TracingLog`
[INFO] [stderr]   --> src/components/home.rs:12:5
[INFO] [stderr]    |
[INFO] [stderr] 12 | use crate::tracing::TracingLog;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Arc`
[INFO] [stderr]  --> src/components/quit.rs:1:17
[INFO] [stderr]   |
[INFO] [stderr] 1 | use std::sync::{Arc};
[INFO] [stderr]   |                 ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `futures::future::ok`
[INFO] [stderr]  --> src/components/quit.rs:2:5
[INFO] [stderr]   |
[INFO] [stderr] 2 | use futures::future::ok;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `ratatui::prelude::Direction::Vertical`
[INFO] [stderr]  --> src/components/quit.rs:4:5
[INFO] [stderr]   |
[INFO] [stderr] 4 | use ratatui::prelude::Direction::Vertical;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::sync::Mutex`
[INFO] [stderr]  --> src/components/quit.rs:5:5
[INFO] [stderr]   |
[INFO] [stderr] 5 | use tokio::sync::Mutex;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::app::App`
[INFO] [stderr]  --> src/components/quit.rs:7:5
[INFO] [stderr]   |
[INFO] [stderr] 7 | use crate::app::App;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::ptr::addr_of_mut`
[INFO] [stderr]  --> src/components/tracinglog.rs:1:5
[INFO] [stderr]   |
[INFO] [stderr] 1 | use std::ptr::addr_of_mut;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Arc`
[INFO] [stderr]  --> src/components/tracinglog.rs:2:17
[INFO] [stderr]   |
[INFO] [stderr] 2 | use std::sync::{Arc};
[INFO] [stderr]   |                 ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::runtime::Runtime`
[INFO] [stderr]  --> src/components/tracinglog.rs:5:5
[INFO] [stderr]   |
[INFO] [stderr] 5 | use tokio::runtime::Runtime;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stderr]  --> src/components/tracinglog.rs:6:5
[INFO] [stderr]   |
[INFO] [stderr] 6 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::sync::Mutex`
[INFO] [stderr]  --> src/components/tracinglog.rs:7:5
[INFO] [stderr]   |
[INFO] [stderr] 7 | use tokio::sync::Mutex;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Event`, `Level`, `Subscriber`, `event`, `info`, `warn`
[INFO] [stderr]   --> src/components/tracinglog.rs:11:15
[INFO] [stderr]    |
[INFO] [stderr] 11 | use tracing::{Subscriber, Event, event, Level, info, warn};
[INFO] [stderr]    |               ^^^^^^^^^^  ^^^^^  ^^^^^  ^^^^^  ^^^^  ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::app::App`
[INFO] [stderr]   --> src/components/tracinglog.rs:13:5
[INFO] [stderr]    |
[INFO] [stderr] 13 | use crate::app::App;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::tracing::TracingLog`
[INFO] [stderr]   --> src/components/tracinglog.rs:15:5
[INFO] [stderr]    |
[INFO] [stderr] 15 | use crate::tracing::TracingLog;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::path::Path`
[INFO] [stderr]  --> src/components/filelist.rs:1:5
[INFO] [stderr]   |
[INFO] [stderr] 1 | use std::path::Path;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Arc`, `Mutex`
[INFO] [stderr]  --> src/components/filelist.rs:2:17
[INFO] [stderr]   |
[INFO] [stderr] 2 | use std::sync::{Arc, Mutex};
[INFO] [stderr]   |                 ^^^  ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::fs`
[INFO] [stderr]  --> src/components/filelist.rs:7:5
[INFO] [stderr]   |
[INFO] [stderr] 7 | use tokio::fs;
[INFO] [stderr]   |     ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::app::App`
[INFO] [stderr]  --> src/components/filelist.rs:9:5
[INFO] [stderr]   |
[INFO] [stderr] 9 | use crate::app::App;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tracing_subscriber::field::display::Messages`
[INFO] [stderr]  --> src/components/playzone.rs:5:5
[INFO] [stderr]   |
[INFO] [stderr] 5 | use tracing_subscriber::field::display::Messages;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Arc`, `Mutex`
[INFO] [stderr]  --> src/components/analysis.rs:1:17
[INFO] [stderr]   |
[INFO] [stderr] 1 | use std::sync::{Arc, Mutex};
[INFO] [stderr]   |                 ^^^  ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Receiver`
[INFO] [stderr]  --> src/components/analysis.rs:2:23
[INFO] [stderr]   |
[INFO] [stderr] 2 | use std::sync::mpsc::{Receiver, Sender};
[INFO] [stderr]   |                       ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::thread`
[INFO] [stderr]  --> src/components/analysis.rs:3:5
[INFO] [stderr]   |
[INFO] [stderr] 3 | use std::thread;
[INFO] [stderr]   |     ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `log::info`
[INFO] [stderr]  --> src/components/analysis.rs:4:5
[INFO] [stderr]   |
[INFO] [stderr] 4 | use log::info;
[INFO] [stderr]   |     ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Arc`, `Mutex`
[INFO] [stderr]  --> src/components/musicprogress.rs:1:17
[INFO] [stderr]   |
[INFO] [stderr] 1 | use std::sync::{Arc, Mutex};
[INFO] [stderr]   |                 ^^^  ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::thread`
[INFO] [stderr]  --> src/components/musicprogress.rs:2:5
[INFO] [stderr]   |
[INFO] [stderr] 2 | use std::thread;
[INFO] [stderr]   |     ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stderr]  --> src/components/lyric.rs:8:5
[INFO] [stderr]   |
[INFO] [stderr] 8 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `ratatui::text::Line`
[INFO] [stderr]  --> src/components/apptitle.rs:5:5
[INFO] [stderr]   |
[INFO] [stderr] 5 | use ratatui::text::Line;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::ops::DerefMut`
[INFO] [stderr]  --> src/app.rs:2:5
[INFO] [stderr]   |
[INFO] [stderr] 2 | use std::ops::DerefMut;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `channel`
[INFO] [stderr]  --> src/app.rs:4:23
[INFO] [stderr]   |
[INFO] [stderr] 4 | use std::sync::mpsc::{channel, Sender};
[INFO] [stderr]   |                       ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::time::Duration`
[INFO] [stderr]  --> src/app.rs:6:5
[INFO] [stderr]   |
[INFO] [stderr] 6 | use std::time::Duration;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `futures::channel::mpsc::unbounded`
[INFO] [stderr]  --> src/app.rs:7:5
[INFO] [stderr]   |
[INFO] [stderr] 7 | use futures::channel::mpsc::unbounded;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `futures::future::try_join`
[INFO] [stderr]  --> src/app.rs:8:5
[INFO] [stderr]   |
[INFO] [stderr] 8 | use futures::future::try_join;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::time::Instant`
[INFO] [stderr]   --> src/app.rs:12:5
[INFO] [stderr]    |
[INFO] [stderr] 12 | use tokio::time::Instant;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `runtime`, `try_join`
[INFO] [stderr]   --> src/app.rs:13:13
[INFO] [stderr]    |
[INFO] [stderr] 13 | use tokio::{runtime, try_join};
[INFO] [stderr]    |             ^^^^^^^  ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `UnboundedReceiver`, `UnboundedSender`
[INFO] [stderr]   --> src/app.rs:14:25
[INFO] [stderr]    |
[INFO] [stderr] 14 | use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender};
[INFO] [stderr]    |                         ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::task::JoinHandle`
[INFO] [stderr]   --> src/app.rs:15:5
[INFO] [stderr]    |
[INFO] [stderr] 15 | use tokio::task::JoinHandle;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio_util::sync::CancellationToken`
[INFO] [stderr]   --> src/app.rs:16:5
[INFO] [stderr]    |
[INFO] [stderr] 16 | use tokio_util::sync::CancellationToken;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tracing::info`
[INFO] [stderr]   --> src/app.rs:17:5
[INFO] [stderr]    |
[INFO] [stderr] 17 | use tracing::info;
[INFO] [stderr]    |     ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tracing_subscriber::fmt::writer::EitherWriter::A`
[INFO] [stderr]   --> src/app.rs:18:5
[INFO] [stderr]    |
[INFO] [stderr] 18 | use tracing_subscriber::fmt::writer::EitherWriter::A;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Identity`, `SubscriberExt`
[INFO] [stderr]   --> src/app.rs:19:33
[INFO] [stderr]    |
[INFO] [stderr] 19 | use tracing_subscriber::layer::{Identity, SubscriberExt};
[INFO] [stderr]    |                                 ^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::components::home::Home`
[INFO] [stderr]   --> src/app.rs:22:5
[INFO] [stderr]    |
[INFO] [stderr] 22 | use crate::components::home::Home;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `action`, `app`, `render`
[INFO] [stderr]   --> src/app.rs:24:13
[INFO] [stderr]    |
[INFO] [stderr] 24 | use crate::{action, app, event, render};
[INFO] [stderr]    |             ^^^^^^  ^^^         ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::lyric::LyricController`
[INFO] [stderr]   --> src/app.rs:29:5
[INFO] [stderr]    |
[INFO] [stderr] 29 | use crate::lyric::LyricController;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary trailing semicolon
[INFO] [stderr]    --> src/app.rs:200:69
[INFO] [stderr]     |
[INFO] [stderr] 200 |     let (sample_sender,sample_receiver)= std::sync::mpsc::channel();;//播放时，发送样本数据给fft
[INFO] [stderr]     |                                                                     ^ help: remove this semicolon
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(redundant_semicolons)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `fmt`, `string::ToString`
[INFO] [stderr]  --> src/action.rs:1:11
[INFO] [stderr]   |
[INFO] [stderr] 1 | use std::{fmt, string::ToString};
[INFO] [stderr]   |           ^^^  ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `KeyEvent`
[INFO] [stderr]  --> src/action.rs:4:33
[INFO] [stderr]   |
[INFO] [stderr] 4 | use crossterm::event::{KeyCode, KeyEvent};
[INFO] [stderr]   |                                 ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `MutexGuard`, `mpsc`
[INFO] [stderr]  --> src/action.rs:5:19
[INFO] [stderr]   |
[INFO] [stderr] 5 | use tokio::sync::{mpsc, MutexGuard,Mutex};
[INFO] [stderr]   |                   ^^^^  ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `UnboundedReceiver`, `UnboundedSender`
[INFO] [stderr]  --> src/action.rs:6:25
[INFO] [stderr]   |
[INFO] [stderr] 6 | use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender};
[INFO] [stderr]   |                         ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::task::JoinHandle`
[INFO] [stderr]  --> src/action.rs:7:5
[INFO] [stderr]   |
[INFO] [stderr] 7 | use tokio::task::JoinHandle;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio_util::sync::CancellationToken`
[INFO] [stderr]  --> src/action.rs:8:5
[INFO] [stderr]   |
[INFO] [stderr] 8 | use tokio_util::sync::CancellationToken;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Deserializer`, `Visitor`, `self`
[INFO] [stderr]   --> src/action.rs:11:10
[INFO] [stderr]    |
[INFO] [stderr] 11 |     de::{self, Deserializer, Visitor},
[INFO] [stderr]    |          ^^^^  ^^^^^^^^^^^^  ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::components::apptitle::AppTitle`
[INFO] [stderr]   --> src/action.rs:18:5
[INFO] [stderr]    |
[INFO] [stderr] 18 | use crate::components::apptitle::AppTitle;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::components::filelist::FileListComponent`
[INFO] [stderr]   --> src/action.rs:20:5
[INFO] [stderr]    |
[INFO] [stderr] 20 | use crate::components::filelist::FileListComponent;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::event`
[INFO] [stderr]   --> src/action.rs:21:5
[INFO] [stderr]    |
[INFO] [stderr] 21 | use crate::event;
[INFO] [stderr]    |     ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::sync::mpsc::Receiver`
[INFO] [stderr]  --> src/render.rs:3:5
[INFO] [stderr]   |
[INFO] [stderr] 3 | use std::sync::mpsc::Receiver;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::thread`
[INFO] [stderr]  --> src/render.rs:4:5
[INFO] [stderr]   |
[INFO] [stderr] 4 | use std::thread;
[INFO] [stderr]   |     ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::time::Duration`
[INFO] [stderr]  --> src/render.rs:5:5
[INFO] [stderr]   |
[INFO] [stderr] 5 | use std::time::Duration;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `ratatui::Frame`
[INFO] [stderr]  --> src/render.rs:6:5
[INFO] [stderr]   |
[INFO] [stderr] 6 | use ratatui::Frame;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Margin`
[INFO] [stderr]  --> src/render.rs:7:54
[INFO] [stderr]   |
[INFO] [stderr] 7 | use ratatui::layout::{Constraint, Direction, Layout, Margin};
[INFO] [stderr]   |                                                      ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `UnboundedReceiver`, `UnboundedSender`
[INFO] [stderr]  --> src/render.rs:8:25
[INFO] [stderr]   |
[INFO] [stderr] 8 | use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender};
[INFO] [stderr]   |                         ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `spawn`
[INFO] [stderr]   --> src/render.rs:10:31
[INFO] [stderr]    |
[INFO] [stderr] 10 | use tokio::task::{JoinHandle, spawn};
[INFO] [stderr]    |                               ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tracing::info`
[INFO] [stderr]   --> src/render.rs:12:5
[INFO] [stderr]    |
[INFO] [stderr] 12 | use tracing::info;
[INFO] [stderr]    |     ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::action::Action`
[INFO] [stderr]   --> src/render.rs:13:5
[INFO] [stderr]    |
[INFO] [stderr] 13 | use crate::action::Action;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::components::analysis::Analysis`
[INFO] [stderr]   --> src/render.rs:15:5
[INFO] [stderr]    |
[INFO] [stderr] 15 | use crate::components::analysis::Analysis;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::components::home::Home`
[INFO] [stderr]   --> src/render.rs:17:5
[INFO] [stderr]    |
[INFO] [stderr] 17 | use crate::components::home::Home;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::components::quit::Quit`
[INFO] [stderr]   --> src/render.rs:19:5
[INFO] [stderr]    |
[INFO] [stderr] 19 | use crate::components::quit::Quit;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::lyric::Lyric`
[INFO] [stderr]   --> src/render.rs:22:5
[INFO] [stderr]    |
[INFO] [stderr] 22 | use crate::lyric::Lyric;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::musicplayer::MusicPlayer`
[INFO] [stderr]   --> src/render.rs:23:5
[INFO] [stderr]    |
[INFO] [stderr] 23 | use crate::musicplayer::MusicPlayer;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::time::Duration`
[INFO] [stderr]  --> src/tracing.rs:3:5
[INFO] [stderr]   |
[INFO] [stderr] 3 | use std::time::Duration;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `ratatui::text::Text`
[INFO] [stderr]  --> src/tracing.rs:4:5
[INFO] [stderr]   |
[INFO] [stderr] 4 | use ratatui::text::Text;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::time::timeout`
[INFO] [stderr]  --> src/tracing.rs:9:5
[INFO] [stderr]   |
[INFO] [stderr] 9 | use tokio::time::timeout;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tracing::info`
[INFO] [stderr]   --> src/tracing.rs:10:5
[INFO] [stderr]    |
[INFO] [stderr] 10 | use tracing::info;
[INFO] [stderr]    |     ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tracing_subscriber::Registry`
[INFO] [stderr]   --> src/tracing.rs:13:5
[INFO] [stderr]    |
[INFO] [stderr] 13 | use tracing_subscriber::Registry;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary parentheses around type
[INFO] [stderr]   --> src/tracing.rs:71:86
[INFO] [stderr]    |
[INFO] [stderr] 71 | pub  fn recv_log(log_receiver:  UnboundedReceiver<String>, app:  Arc<Mutex<App>> ) ->(JoinHandle<()>) {
[INFO] [stderr]    |                                                                                      ^              ^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_parens)]` on by default
[INFO] [stderr] help: remove these parentheses
[INFO] [stderr]    |
[INFO] [stderr] 71 - pub  fn recv_log(log_receiver:  UnboundedReceiver<String>, app:  Arc<Mutex<App>> ) ->(JoinHandle<()>) {
[INFO] [stderr] 71 + pub  fn recv_log(log_receiver:  UnboundedReceiver<String>, app:  Arc<Mutex<App>> ) ->JoinHandle<()> {
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::arch::x86_64::_addcarryx_u64`
[INFO] [stderr]  --> src/fft.rs:1:5
[INFO] [stderr]   |
[INFO] [stderr] 1 | use std::arch::x86_64::_addcarryx_u64;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::fs::File`
[INFO] [stderr]  --> src/fft.rs:2:5
[INFO] [stderr]   |
[INFO] [stderr] 2 | use std::fs::File;
[INFO] [stderr]   |     ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::io::BufReader`
[INFO] [stderr]  --> src/fft.rs:3:5
[INFO] [stderr]   |
[INFO] [stderr] 3 | use std::io::BufReader;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Sender`
[INFO] [stderr]  --> src/fft.rs:7:33
[INFO] [stderr]   |
[INFO] [stderr] 7 | use std::sync::mpsc::{Receiver, Sender};
[INFO] [stderr]   |                                 ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::thread`
[INFO] [stderr]  --> src/fft.rs:8:5
[INFO] [stderr]   |
[INFO] [stderr] 8 | use std::thread;
[INFO] [stderr]   |     ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `TryFutureExt`
[INFO] [stderr]  --> src/fft.rs:9:24
[INFO] [stderr]   |
[INFO] [stderr] 9 | use futures::{SinkExt, TryFutureExt};
[INFO] [stderr]   |                        ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Decoder`
[INFO] [stderr]   --> src/fft.rs:12:13
[INFO] [stderr]    |
[INFO] [stderr] 12 | use rodio::{Decoder, Source};
[INFO] [stderr]    |             ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::action::Action`
[INFO] [stderr]   --> src/fft.rs:17:5
[INFO] [stderr]    |
[INFO] [stderr] 17 | use crate::action::Action;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::error::MyError`
[INFO] [stderr]   --> src/fft.rs:19:5
[INFO] [stderr]    |
[INFO] [stderr] 19 | use crate::error::MyError;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary parentheses around type
[INFO] [stderr]    --> src/fft.rs:140:100
[INFO] [stderr]     |
[INFO] [stderr] 140 |  pub async fn get_fft_result(mut music_reciver:UnboundedReceiver<Vec<f32>>, app:Arc<Mutex<App>>) ->(JoinHandle<()>){
[INFO] [stderr]     |                                                                                                    ^              ^
[INFO] [stderr]     |
[INFO] [stderr] help: remove these parentheses
[INFO] [stderr]     |
[INFO] [stderr] 140 -  pub async fn get_fft_result(mut music_reciver:UnboundedReceiver<Vec<f32>>, app:Arc<Mutex<App>>) ->(JoinHandle<()>){
[INFO] [stderr] 140 +  pub async fn get_fft_result(mut music_reciver:UnboundedReceiver<Vec<f32>>, app:Arc<Mutex<App>>) ->JoinHandle<()>{
[INFO] [stderr]     |
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::path::Path`
[INFO] [stderr]  --> src/musicplayer.rs:3:5
[INFO] [stderr]   |
[INFO] [stderr] 3 | use std::path::Path;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Arc`
[INFO] [stderr]  --> src/musicplayer.rs:4:17
[INFO] [stderr]   |
[INFO] [stderr] 4 | use std::sync::{Arc};
[INFO] [stderr]   |                 ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Sample`
[INFO] [stderr]   --> src/musicplayer.rs:81:14
[INFO] [stderr]    |
[INFO] [stderr] 81 | use rodio::{ Sample};
[INFO] [stderr]    |              ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Receiver`, `channel`
[INFO] [stderr]   --> src/musicplayer.rs:82:23
[INFO] [stderr]    |
[INFO] [stderr] 82 | use std::sync::mpsc::{channel, Receiver, Sender};
[INFO] [stderr]    |                       ^^^^^^^  ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::thread::spawn`
[INFO] [stderr]   --> src/musicplayer.rs:83:5
[INFO] [stderr]    |
[INFO] [stderr] 83 | use std::thread::spawn;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Instant`
[INFO] [stderr]   --> src/musicplayer.rs:84:27
[INFO] [stderr]    |
[INFO] [stderr] 84 | use std::time::{Duration, Instant};
[INFO] [stderr]    |                           ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::app::App`
[INFO] [stderr]   --> src/musicplayer.rs:88:5
[INFO] [stderr]    |
[INFO] [stderr] 88 | use crate::app::App;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::error::MyError`
[INFO] [stderr]   --> src/musicplayer.rs:89:5
[INFO] [stderr]    |
[INFO] [stderr] 89 | use crate::error::MyError;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::io::BufReader`
[INFO] [stderr]    --> src/musicplayer.rs:146:9
[INFO] [stderr]     |
[INFO] [stderr] 146 |     use std::io::BufReader;
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::sync::mpsc`
[INFO] [stderr]    --> src/musicplayer.rs:148:9
[INFO] [stderr]     |
[INFO] [stderr] 148 |     use tokio::sync::mpsc;
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary trailing semicolon
[INFO] [stderr]    --> src/musicplayer.rs:173:73
[INFO] [stderr]     |
[INFO] [stderr] 173 |         let (sample_sender,sample_receiver)= std::sync::mpsc::channel();;//播放时，发送样本数据给fft
[INFO] [stderr]     |                                                                         ^ help: remove this semicolon
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::ffi::OsStr`
[INFO] [stderr]  --> src/lyric.rs:2:5
[INFO] [stderr]   |
[INFO] [stderr] 2 | use std::ffi::OsStr;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::fs`
[INFO] [stderr]  --> src/lyric.rs:3:5
[INFO] [stderr]   |
[INFO] [stderr] 3 | use std::fs;
[INFO] [stderr]   |     ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::error::MyError`
[INFO] [stderr]  --> src/lyric.rs:6:5
[INFO] [stderr]   |
[INFO] [stderr] 6 | use crate::error::MyError;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `futures::future::ok`
[INFO] [stderr]  --> src/sounds.rs:4:5
[INFO] [stderr]   |
[INFO] [stderr] 4 | use futures::future::ok;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::fs::File`
[INFO] [stderr]    --> src/sounds.rs:194:9
[INFO] [stderr]     |
[INFO] [stderr] 194 |     use std::fs::File;
[INFO] [stderr]     |         ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::io::BufReader`
[INFO] [stderr]    --> src/sounds.rs:195:9
[INFO] [stderr]     |
[INFO] [stderr] 195 |     use std::io::BufReader;
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::event::Event`
[INFO] [stderr]    --> src/sounds.rs:196:9
[INFO] [stderr]     |
[INFO] [stderr] 196 |     use crate::event::Event;
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::components::Component`
[INFO] [stderr]   --> src/main.rs:17:5
[INFO] [stderr]    |
[INFO] [stderr] 17 | use crate::components::Component;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::io::Write`
[INFO] [stderr]   --> src/main.rs:18:5
[INFO] [stderr]    |
[INFO] [stderr] 18 | use std::io::Write;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `app::App`
[INFO] [stderr]   --> src/main.rs:20:5
[INFO] [stderr]    |
[INFO] [stderr] 20 | use app::App;
[INFO] [stderr]    |     ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Decoder`, `OutputStream`, `Sink`, `Source`
[INFO] [stderr]   --> src/main.rs:23:13
[INFO] [stderr]    |
[INFO] [stderr] 23 | use rodio::{Decoder, OutputStream, Sink, Source};
[INFO] [stderr]    |             ^^^^^^^  ^^^^^^^^^^^^  ^^^^  ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `rustfft::num_complex::Complex`
[INFO] [stderr]   --> src/main.rs:24:5
[INFO] [stderr]    |
[INFO] [stderr] 24 | use rustfft::num_complex::Complex;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `rustfft::FftPlanner`
[INFO] [stderr]   --> src/main.rs:25:5
[INFO] [stderr]    |
[INFO] [stderr] 25 | use rustfft::FftPlanner;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::fs::File`
[INFO] [stderr]   --> src/main.rs:26:5
[INFO] [stderr]    |
[INFO] [stderr] 26 | use std::fs::File;
[INFO] [stderr]    |     ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::io::BufReader`
[INFO] [stderr]   --> src/main.rs:27:5
[INFO] [stderr]    |
[INFO] [stderr] 27 | use std::io::BufReader;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::path::Path`
[INFO] [stderr]   --> src/main.rs:28:5
[INFO] [stderr]    |
[INFO] [stderr] 28 | use std::path::Path;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Arc`, `Mutex`
[INFO] [stderr]   --> src/main.rs:29:17
[INFO] [stderr]    |
[INFO] [stderr] 29 | use std::sync::{Arc, Mutex};
[INFO] [stderr]    |                 ^^^  ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::sync::mpsc::channel`
[INFO] [stderr]   --> src/main.rs:30:5
[INFO] [stderr]    |
[INFO] [stderr] 30 | use std::sync::mpsc::channel;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::thread`
[INFO] [stderr]   --> src/main.rs:31:5
[INFO] [stderr]    |
[INFO] [stderr] 31 | use std::thread;
[INFO] [stderr]    |     ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::time::Duration`
[INFO] [stderr]   --> src/main.rs:32:5
[INFO] [stderr]    |
[INFO] [stderr] 32 | use std::time::Duration;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `rustfft::num_traits::ToPrimitive`
[INFO] [stderr]   --> src/main.rs:33:5
[INFO] [stderr]    |
[INFO] [stderr] 33 | use rustfft::num_traits::ToPrimitive;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tokio::sync::mpsc`
[INFO] [stderr]   --> src/main.rs:34:5
[INFO] [stderr]    |
[INFO] [stderr] 34 | use tokio::sync::mpsc;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::fft::FFTController`
[INFO] [stderr]   --> src/main.rs:35:5
[INFO] [stderr]    |
[INFO] [stderr] 35 | use crate::fft::FFTController;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::lyric::LyricController`
[INFO] [stderr]   --> src/main.rs:36:5
[INFO] [stderr]    |
[INFO] [stderr] 36 | use crate::lyric::LyricController;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::musicplayer::MusicPlayer`
[INFO] [stderr]   --> src/main.rs:37:5
[INFO] [stderr]    |
[INFO] [stderr] 37 | use crate::musicplayer::MusicPlayer;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::sounds::SoundsList`
[INFO] [stderr]   --> src/main.rs:38:5
[INFO] [stderr]    |
[INFO] [stderr] 38 | use crate::sounds::SoundsList;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `err`
[INFO] [stderr]   --> src/event.rs:77:38
[INFO] [stderr]    |
[INFO] [stderr] 77 | ...                   Some(Err(err)) => {
[INFO] [stderr]    |                                ^^^ help: if this is intentional, prefix it with an underscore: `_err`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_variables)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/event.rs:128:9
[INFO] [stderr]     |
[INFO] [stderr] 128 |     let mut cancelation_token = CancellationToken::new();
[INFO] [stderr]     |         ----^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |         |
[INFO] [stderr]     |         help: remove this `mut`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_mut)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/render.rs:129:53
[INFO] [stderr]     |
[INFO] [stderr] 129 | ...                   let mut sub_layout=Layout::new(
[INFO] [stderr]     |                           ----^^^^^^^^^^
[INFO] [stderr]     |                           |
[INFO] [stderr]     |                           help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/render.rs:133:53
[INFO] [stderr]     |
[INFO] [stderr] 133 | ...                   let mut fft_layout=Layout::new(
[INFO] [stderr]     |                           ----^^^^^^^^^^
[INFO] [stderr]     |                           |
[INFO] [stderr]     |                           help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/render.rs:137:53
[INFO] [stderr]     |
[INFO] [stderr] 137 | ...                   let mut playzone_layout=Layout::new(
[INFO] [stderr]     |                           ----^^^^^^^^^^^^^^^
[INFO] [stderr]     |                           |
[INFO] [stderr]     |                           help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: irrefutable `if let` pattern
[INFO] [stderr]    --> src/app.rs:218:16
[INFO] [stderr]     |
[INFO] [stderr] 218 |             if let (action,path) = action_receiver.recv().unwrap() {
[INFO] [stderr]     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this pattern will always match, so the `if let` is useless
[INFO] [stderr]     = help: consider replacing the `if let` with a `let`
[INFO] [stderr]     = note: `#[warn(irrefutable_let_patterns)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/app.rs:153:9
[INFO] [stderr]     |
[INFO] [stderr] 153 |     let mut app=App::new();
[INFO] [stderr]     |         ----^^^
[INFO] [stderr]     |         |
[INFO] [stderr]     |         help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/app.rs:158:11
[INFO] [stderr]     |
[INFO] [stderr] 158 |     let  (mut log,log_receiver) =TracingLog::new();
[INFO] [stderr]     |           ----^^^
[INFO] [stderr]     |           |
[INFO] [stderr]     |           help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/app.rs:165:25
[INFO] [stderr]     |
[INFO] [stderr] 165 |     let (action_sender, mut action_receiver) = std::sync::mpsc::channel();
[INFO] [stderr]     |                         ----^^^^^^^^^^^^^^^
[INFO] [stderr]     |                         |
[INFO] [stderr]     |                         help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/app.rs:168:9
[INFO] [stderr]     |
[INFO] [stderr] 168 |     let mut tui = Tui::new()?;
[INFO] [stderr]     |         ----^^^
[INFO] [stderr]     |         |
[INFO] [stderr]     |         help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: irrefutable `while let` pattern
[INFO] [stderr]    --> src/fft.rs:144:16
[INFO] [stderr]     |
[INFO] [stderr] 144 |          while let mut fft_result=music_reciver.recv().await.unwrap(){
[INFO] [stderr]     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this pattern will always match, so the loop will never exit
[INFO] [stderr]     = help: consider instead using a `loop { ... }` with a `let` inside it
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `name`
[INFO] [stderr]    --> src/fft.rs:147:20
[INFO] [stderr]     |
[INFO] [stderr] 147 |              for ((name, value), new_value) in fft_buffer_clone.lock().await.iter_mut().zip(fft_result.iter()) {
[INFO] [stderr]     |                    ^^^^ help: if this is intentional, prefix it with an underscore: `_name`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/fft.rs:143:13
[INFO] [stderr]     |
[INFO] [stderr] 143 |         let mut fft_buffer_clone=Arc::clone(&app.lock().await.fft_result);
[INFO] [stderr]     |             ----^^^^^^^^^^^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/fft.rs:144:20
[INFO] [stderr]     |
[INFO] [stderr] 144 |          while let mut fft_result=music_reciver.recv().await.unwrap(){
[INFO] [stderr]     |                    ----^^^^^^^^^^
[INFO] [stderr]     |                    |
[INFO] [stderr]     |                    help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `FutureExt`
[INFO] [stderr]   --> src/action.rs:15:15
[INFO] [stderr]    |
[INFO] [stderr] 15 | use futures::{FutureExt, StreamExt};
[INFO] [stderr]    |               ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `StreamExt`
[INFO] [stderr]   --> src/action.rs:15:26
[INFO] [stderr]    |
[INFO] [stderr] 15 | use futures::{FutureExt, StreamExt};
[INFO] [stderr]    |                          ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `rustfft::num_complex::ComplexFloat`
[INFO] [stderr]  --> src/tracing.rs:5:5
[INFO] [stderr]   |
[INFO] [stderr] 5 | use rustfft::num_complex::ComplexFloat;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Source`
[INFO] [stderr]   --> src/fft.rs:12:22
[INFO] [stderr]    |
[INFO] [stderr] 12 | use rodio::{Decoder, Source};
[INFO] [stderr]    |                      ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `SinkExt`
[INFO] [stderr]  --> src/fft.rs:9:15
[INFO] [stderr]   |
[INFO] [stderr] 9 | use futures::{SinkExt, TryFutureExt};
[INFO] [stderr]   |               ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unreachable pattern
[INFO] [stderr]    --> src/event.rs:120:9
[INFO] [stderr]     |
[INFO] [stderr] 120 |         _ => {}
[INFO] [stderr]     |         ^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unreachable_patterns)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/components/home.rs:36:13
[INFO] [stderr]    |
[INFO] [stderr] 36 |         let mut sub_layout=Layout::new(
[INFO] [stderr]    |             ----^^^^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `action`
[INFO] [stderr]   --> src/components/home.rs:58:26
[INFO] [stderr]    |
[INFO] [stderr] 58 |     fn update(& mut self,action:Option<Action>)->Result<(),MyError>{
[INFO] [stderr]    |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `rect`
[INFO] [stderr]   --> src/components/quit.rs:24:43
[INFO] [stderr]    |
[INFO] [stderr] 24 |     fn draw(&mut self, f: &mut Frame<'_>, rect: Rect) -> Result<(), MyError> {
[INFO] [stderr]    |                                           ^^^^ help: if this is intentional, prefix it with an underscore: `_rect`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `action`
[INFO] [stderr]   --> src/components/quit.rs:39:25
[INFO] [stderr]    |
[INFO] [stderr] 39 |     fn update(&mut self,action:Option<Action>) -> Result<(), MyError> {
[INFO] [stderr]    |                         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/components/tracinglog.rs:36:13
[INFO] [stderr]    |
[INFO] [stderr] 36 |         let mut liststate=ListState::default();
[INFO] [stderr]    |             ----^^^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/components/tracinglog.rs:48:14
[INFO] [stderr]    |
[INFO] [stderr] 48 |          let mut list_item:Vec<ListItem>=lines.iter().rev().map(//rev（）是倒序
[INFO] [stderr]    |              ----^^^^^^^^^
[INFO] [stderr]    |              |
[INFO] [stderr]    |              help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `action`
[INFO] [stderr]   --> src/components/tracinglog.rs:75:27
[INFO] [stderr]    |
[INFO] [stderr] 75 |     fn update(& mut self, action: Option<Action>) ->Result<(),MyError>{
[INFO] [stderr]    |                           ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/components/filelist.rs:26:13
[INFO] [stderr]    |
[INFO] [stderr] 26 |         let mut vertical_scroll=0;
[INFO] [stderr]    |             ----^^^^^^^^^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/components/filelist.rs:27:13
[INFO] [stderr]    |
[INFO] [stderr] 27 |         let mut vertical_scroll_state=ratatui::widgets::ScrollbarState::new(20);
[INFO] [stderr]    |             ----^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/components/filelist.rs:29:13
[INFO] [stderr]    |
[INFO] [stderr] 29 |         let mut action_tx=None;
[INFO] [stderr]    |             ----^^^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/components/filelist.rs:74:13
[INFO] [stderr]    |
[INFO] [stderr] 74 |         let mut itemlist=self.sound_list.sounds.clone();
[INFO] [stderr]    |             ----^^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/components/filelist.rs:77:21
[INFO] [stderr]    |
[INFO] [stderr] 77 |                 let mut listitem=ListItem::new(fileitem.name).bg(Color::Black);
[INFO] [stderr]    |                     ----^^^^^^^^
[INFO] [stderr]    |                     |
[INFO] [stderr]    |                     help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `action`
[INFO] [stderr]   --> src/components/playzone.rs:34:26
[INFO] [stderr]    |
[INFO] [stderr] 34 |     fn update(&mut self, action: Option<Action>) -> Result<(), MyError> {
[INFO] [stderr]    |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/components/analysis.rs:66:13
[INFO] [stderr]    |
[INFO] [stderr] 66 |         let mut newdata: Vec<_>=self.data.iter().map(|(barname,value)|{
[INFO] [stderr]    |             ----^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/components/analysis.rs:70:13
[INFO] [stderr]    |
[INFO] [stderr] 70 |         let mut group=BarGroup::default().bars(&newdata);
[INFO] [stderr]    |             ----^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `action`
[INFO] [stderr]    --> src/components/lyric.rs:126:26
[INFO] [stderr]     |
[INFO] [stderr] 126 |     fn update(&mut self, action: Option<Action>) -> Result<(), MyError> {
[INFO] [stderr]     |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `seconds_with_decimals`
[INFO] [stderr]    --> src/components/lyric.rs:177:17
[INFO] [stderr]     |
[INFO] [stderr] 177 |             let seconds_with_decimals = time.1;
[INFO] [stderr]     |                 ^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_seconds_with_decimals`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `now_duration`
[INFO] [stderr]    --> src/components/lyric.rs:192:17
[INFO] [stderr]     |
[INFO] [stderr] 192 |             let now_duration = Duration::new(minutes * 60 + seconds, 0) + Duration::from_millis(decimals * 10);
[INFO] [stderr]     |                 ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_now_duration`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `block`
[INFO] [stderr]   --> src/components/apptitle.rs:27:13
[INFO] [stderr]    |
[INFO] [stderr] 27 |         let block=Block::new().borders(Borders::ALL).light_red().padding(Padding::new(0,0,0,0)).title("out");
[INFO] [stderr]    |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_block`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `action`
[INFO] [stderr]   --> src/components/apptitle.rs:41:26
[INFO] [stderr]    |
[INFO] [stderr] 41 |     fn update(&mut self, action: Option<Action>) -> Result<(), MyError> {
[INFO] [stderr]    |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `tx`
[INFO] [stderr]   --> src/components.rs:40:43
[INFO] [stderr]    |
[INFO] [stderr] 40 |     fn register_action_handler(&mut self, tx: Sender<Action>) {
[INFO] [stderr]    |                                           ^^ help: if this is intentional, prefix it with an underscore: `_tx`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/app.rs:51:13
[INFO] [stderr]    |
[INFO] [stderr] 51 |         let mut log=vec![String::new()];
[INFO] [stderr]    |             ----^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/app.rs:52:13
[INFO] [stderr]    |
[INFO] [stderr] 52 |         let mut sounds_list=SoundsList::set_path("music".to_string());
[INFO] [stderr]    |             ----^^^^^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/app.rs:53:13
[INFO] [stderr]    |
[INFO] [stderr] 53 |         let mut fft_result=Arc::new(Mutex::new(
[INFO] [stderr]    |             ----^^^^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `action_sender`
[INFO] [stderr]   --> src/app.rs:72:38
[INFO] [stderr]    |
[INFO] [stderr] 72 |     pub fn init_component(&mut self, action_sender: Sender<(Action,Option<String>)>){
[INFO] [stderr]    |                                      ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_action_sender`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/app.rs:91:13
[INFO] [stderr]    |
[INFO] [stderr] 91 |         let mut sub_layout=Layout::new(
[INFO] [stderr]    |             ----^^^^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/app.rs:95:13
[INFO] [stderr]    |
[INFO] [stderr] 95 |         let mut fft_layout=Layout::new(
[INFO] [stderr]    |             ----^^^^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/app.rs:99:13
[INFO] [stderr]    |
[INFO] [stderr] 99 |         let mut playzone_layout=Layout::new(
[INFO] [stderr]    |             ----^^^^^^^^^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `sample_rate`
[INFO] [stderr]   --> src/fft.rs:37:16
[INFO] [stderr]    |
[INFO] [stderr] 37 |     pub fn new(sample_rate: f32, fft_size: usize,sample_receiver: Receiver<f32>,music_tx: UnboundedSender<Vec<f32>>) -> Self {
[INFO] [stderr]    |                ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sample_rate`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `fft_size`
[INFO] [stderr]   --> src/fft.rs:37:34
[INFO] [stderr]    |
[INFO] [stderr] 37 |     pub fn new(sample_rate: f32, fft_size: usize,sample_receiver: Receiver<f32>,music_tx: UnboundedSender<Vec<f32>>) -> Self {
[INFO] [stderr]    |                                  ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_fft_size`
[INFO] [stderr] 
[INFO] [stderr] warning: irrefutable `while let` pattern
[INFO] [stderr]   --> src/fft.rs:83:19
[INFO] [stderr]    |
[INFO] [stderr] 83 |             while let sample=self.sample_receive.recv().unwrap() {
[INFO] [stderr]    |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: this pattern will always match, so the loop will never exit
[INFO] [stderr]    = help: consider instead using a `loop { ... }` with a `let` inside it
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `energy`
[INFO] [stderr]    --> src/fft.rs:129:18
[INFO] [stderr]     |
[INFO] [stderr] 129 |         for (i, &energy) in note_energies.iter().enumerate() {
[INFO] [stderr]     |                  ^^^^^^ help: if this is intentional, prefix it with an underscore: `_energy`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `note_name`
[INFO] [stderr]    --> src/fft.rs:130:17
[INFO] [stderr]     |
[INFO] [stderr] 130 |             let note_name = self.midi_number_to_note_name(i as i32 + 60); // C4开始
[INFO] [stderr]     |                 ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_note_name`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/musicplayer.rs:57:11
[INFO] [stderr]    |
[INFO] [stderr] 57 |       let mut source1 = Decoder::new(buf_reader1).unwrap().convert_samples::<f32>();
[INFO] [stderr]    |           ----^^^^^^^
[INFO] [stderr]    |           |
[INFO] [stderr]    |           help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/musicplayer.rs:58:11
[INFO] [stderr]    |
[INFO] [stderr] 58 |       let mut my_source = MyCustomSource::new(source1, sample_sender);
[INFO] [stderr]    |           ----^^^^^^^^^
[INFO] [stderr]    |           |
[INFO] [stderr]    |           help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `sample_receiver`
[INFO] [stderr]    --> src/musicplayer.rs:173:28
[INFO] [stderr]     |
[INFO] [stderr] 173 |         let (sample_sender,sample_receiver)= std::sync::mpsc::channel();;//播放时，发送样本数据给fft
[INFO] [stderr]     |                            ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sample_receiver`
[INFO] [stderr] 
[INFO] [stderr] warning: irrefutable `if let` pattern
[INFO] [stderr]    --> src/musicplayer.rs:179:20
[INFO] [stderr]     |
[INFO] [stderr] 179 |                 if let (action,_path) = action_receiver.recv().unwrap() {
[INFO] [stderr]     |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this pattern will always match, so the `if let` is useless
[INFO] [stderr]     = help: consider replacing the `if let` with a `let`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/musicplayer.rs:172:29
[INFO] [stderr]     |
[INFO] [stderr] 172 |         let (action_sender, mut action_receiver) = std::sync::mpsc::channel();
[INFO] [stderr]     |                             ----^^^^^^^^^^^^^^^
[INFO] [stderr]     |                             |
[INFO] [stderr]     |                             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/lyric.rs:28:13
[INFO] [stderr]    |
[INFO] [stderr] 28 |         let mut path=path;
[INFO] [stderr]    |             ----^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/lyric.rs:29:13
[INFO] [stderr]    |
[INFO] [stderr] 29 |         let mut lyric=vec![Lyric::new()];
[INFO] [stderr]    |             ----^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/lyric.rs:30:13
[INFO] [stderr]    |
[INFO] [stderr] 30 |         let mut time=String::new();
[INFO] [stderr]    |             ----^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/lyric.rs:31:13
[INFO] [stderr]    |
[INFO] [stderr] 31 |         let mut filestring=String::new();//歌词string
[INFO] [stderr]    |             ----^^^^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: field `0` is never read
[INFO] [stderr]  --> src/error.rs:9:13
[INFO] [stderr]   |
[INFO] [stderr] 9 |     IoError(std::io::Error),//打印失败
[INFO] [stderr]   |     ------- ^^^^^^^^^^^^^^
[INFO] [stderr]   |     |
[INFO] [stderr]   |     field in this variant
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(dead_code)]` on by default
[INFO] [stderr] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stderr]   |
[INFO] [stderr] 9 |     IoError(()),//打印失败
[INFO] [stderr]   |             ~~
[INFO] [stderr] 
[INFO] [stderr] warning: field `0` is never read
[INFO] [stderr]   --> src/error.rs:10:15
[INFO] [stderr]    |
[INFO] [stderr] 10 |     JoinError(tokio::task::JoinError),
[INFO] [stderr]    |     --------- ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |     |
[INFO] [stderr]    |     field in this variant
[INFO] [stderr]    |
[INFO] [stderr] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stderr]    |
[INFO] [stderr] 10 |     JoinError(()),
[INFO] [stderr]    |               ~~
[INFO] [stderr] 
[INFO] [stderr] warning: field `0` is never read
[INFO] [stderr]   --> src/error.rs:12:20
[INFO] [stderr]    |
[INFO] [stderr] 12 |     TokioSendError(tokio::sync::mpsc::error::SendError<Action>),//线程发送失败
[INFO] [stderr]    |     -------------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |     |
[INFO] [stderr]    |     field in this variant
[INFO] [stderr]    |
[INFO] [stderr] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stderr]    |
[INFO] [stderr] 12 |     TokioSendError(()),//线程发送失败
[INFO] [stderr]    |                    ~~
[INFO] [stderr] 
[INFO] [stderr] warning: variants `Init`, `Quit`, `Closed`, and `Render` are never constructed
[INFO] [stderr]   --> src/event.rs:18:5
[INFO] [stderr]    |
[INFO] [stderr] 17 | pub enum  Event{
[INFO] [stderr]    |           ----- variants in this enum
[INFO] [stderr] 18 |     Init,
[INFO] [stderr]    |     ^^^^
[INFO] [stderr] 19 |     Quit,
[INFO] [stderr]    |     ^^^^
[INFO] [stderr] 20 |     Error,
[INFO] [stderr] 21 |     Closed,
[INFO] [stderr]    |     ^^^^^^
[INFO] [stderr] 22 |     Tick,//无事件时，渲染间隔控制
[INFO] [stderr] 23 |     Render,
[INFO] [stderr]    |     ^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `Event` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `event` is never read
[INFO] [stderr]   --> src/event.rs:33:9
[INFO] [stderr]    |
[INFO] [stderr] 32 | pub struct EventHandler{
[INFO] [stderr]    |            ------------ field in this struct
[INFO] [stderr] 33 |     pub event:Event,
[INFO] [stderr]    |         ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `tick_test` is never used
[INFO] [stderr]    --> src/event.rs:125:15
[INFO] [stderr]     |
[INFO] [stderr] 125 | pub async  fn tick_test()->Result<(), MyError>{
[INFO] [stderr]     |               ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `start`, `exit`, `next`, `cancel`, and `reset` are never used
[INFO] [stderr]   --> src/tui.rs:25:12
[INFO] [stderr]    |
[INFO] [stderr] 17 | impl Tui{
[INFO] [stderr]    | -------- associated items in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 25 |     pub fn start(&mut self)->Result<(),MyError>{
[INFO] [stderr]    |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 37 |     pub fn exit(&mut self)->Result<(),MyError>{
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 44 |     pub fn next(&mut self)->Result<(),MyError>{
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 48 |     pub fn cancel(&mut self)->Result<(),MyError>{
[INFO] [stderr]    |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 52 |     pub fn reset()->Result<(),MyError>{
[INFO] [stderr]    |            ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `init` and `register_action_handler` are never used
[INFO] [stderr]   --> src/components.rs:36:8
[INFO] [stderr]    |
[INFO] [stderr] 32 | pub trait Component{
[INFO] [stderr]    |           --------- methods in this trait
[INFO] [stderr] ...
[INFO] [stderr] 36 |     fn init(&mut self) -> Result<(),MyError> {
[INFO] [stderr]    |        ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 40 |     fn register_action_handler(&mut self, tx: Sender<Action>) {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `component_name`, `log`, and `action_tx` are never read
[INFO] [stderr]   --> src/components/home.rs:15:5
[INFO] [stderr]    |
[INFO] [stderr] 14 | pub struct Home {
[INFO] [stderr]    |            ---- fields in this struct
[INFO] [stderr] 15 |     component_name:String,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr] 16 |     pub log:String,
[INFO] [stderr]    |         ^^^
[INFO] [stderr] 17 |     pub action_tx: Option<Sender<Action>>,
[INFO] [stderr]    |         ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `new` is never used
[INFO] [stderr]   --> src/components/home.rs:20:12
[INFO] [stderr]    |
[INFO] [stderr] 19 | impl  Home{
[INFO] [stderr]    | ---------- associated function in this implementation
[INFO] [stderr] 20 |     pub fn new(log:String) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `component_name` is never read
[INFO] [stderr]   --> src/components/quit.rs:13:5
[INFO] [stderr]    |
[INFO] [stderr] 12 | pub struct Quit {
[INFO] [stderr]    |            ---- field in this struct
[INFO] [stderr] 13 |     component_name:String,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `Quit` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `vertical_scroll_state`, `horizontal_scroll_state`, `vertical_scroll`, `horizontal_scroll`, `action_tx`, and `liststate` are never read
[INFO] [stderr]   --> src/components/tracinglog.rs:20:9
[INFO] [stderr]    |
[INFO] [stderr] 18 | pub struct TracingLogComponent{
[INFO] [stderr]    |            ------------------- fields in this struct
[INFO] [stderr] 19 |     pub logs: String,
[INFO] [stderr] 20 |     pub vertical_scroll_state: ScrollbarState,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 21 |     pub horizontal_scroll_state: ScrollbarState,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 22 |     pub vertical_scroll: usize,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^
[INFO] [stderr] 23 |     pub horizontal_scroll: usize,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 24 |     pub action_tx: Option<Sender<Action>>,
[INFO] [stderr]    |         ^^^^^^^^^
[INFO] [stderr] 25 |     pub liststate:ListState,
[INFO] [stderr]    |         ^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `TracingLogComponent` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `vertical_scroll`, `vertical_scroll_state`, and `action_tx` are never read
[INFO] [stderr]   --> src/components/filelist.rs:18:9
[INFO] [stderr]    |
[INFO] [stderr] 16 | pub struct FileListComponent {
[INFO] [stderr]    |            ----------------- fields in this struct
[INFO] [stderr] 17 |     pub sound_list:SoundsList,
[INFO] [stderr] 18 |     pub vertical_scroll:usize,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^
[INFO] [stderr] 19 |     pub vertical_scroll_state:ScrollbarState,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 20 |     pub action_tx: Option<Sender<Action>>,
[INFO] [stderr]    |         ^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `FileListComponent` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `action_sender` is never read
[INFO] [stderr]   --> src/components/analysis.rs:18:9
[INFO] [stderr]    |
[INFO] [stderr] 15 | pub struct Analysis{
[INFO] [stderr]    |            -------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 18 |     pub action_sender:Option<Sender<Action>>,
[INFO] [stderr]    |         ^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `Analysis` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `action_tx` is never read
[INFO] [stderr]   --> src/components/lyric.rs:21:9
[INFO] [stderr]    |
[INFO] [stderr] 16 | pub struct LyricZone{
[INFO] [stderr]    |            --------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 21 |     pub action_tx: Option<Sender<Action>>,
[INFO] [stderr]    |         ^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `LyricZone` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `title` is never read
[INFO] [stderr]   --> src/components/apptitle.rs:14:9
[INFO] [stderr]    |
[INFO] [stderr] 13 | pub struct AppTitle{
[INFO] [stderr]    |            -------- field in this struct
[INFO] [stderr] 14 |     pub title: String,
[INFO] [stderr]    |         ^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `AppTitle` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `should_quit`, `tick_rate`, and `frame_rate` are never read
[INFO] [stderr]   --> src/app.rs:36:9
[INFO] [stderr]    |
[INFO] [stderr] 35 | pub struct App{
[INFO] [stderr]    |            --- fields in this struct
[INFO] [stderr] 36 |     pub should_quit:bool,
[INFO] [stderr]    |         ^^^^^^^^^^^
[INFO] [stderr] 37 |     pub tick_rate: f64,
[INFO] [stderr]    |         ^^^^^^^^^
[INFO] [stderr] 38 |     pub frame_rate: f64,
[INFO] [stderr]    |         ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `draw_component` and `get_soundlist` are never used
[INFO] [stderr]    --> src/app.rs:85:12
[INFO] [stderr]     |
[INFO] [stderr] 46  | impl App{
[INFO] [stderr]     | -------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 85  |     pub fn draw_component(&mut self, frame: &mut Frame){
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 142 |     pub fn get_soundlist(&self)->Vec<(usize,String)>{
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `action` is never read
[INFO] [stderr]   --> src/action.rs:62:9
[INFO] [stderr]    |
[INFO] [stderr] 61 | pub struct ActionReactor {
[INFO] [stderr]    |            ------------- field in this struct
[INFO] [stderr] 62 |     pub action: Action,
[INFO] [stderr]    |         ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `cancelation_token` and `task` are never read
[INFO] [stderr]   --> src/render.rs:27:9
[INFO] [stderr]    |
[INFO] [stderr] 26 | pub struct Render {
[INFO] [stderr]    |            ------ fields in this struct
[INFO] [stderr] 27 |     pub cancelation_token: CancellationToken,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 30 |     pub task: JoinHandle<Result<(), MyError>>,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `cancel` is never used
[INFO] [stderr]    --> src/render.rs:165:12
[INFO] [stderr]     |
[INFO] [stderr] 33  | impl Render {
[INFO] [stderr]     | ----------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 165 |     pub fn cancel(&mut self){
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `logs` is never read
[INFO] [stderr]   --> src/tracing.rs:21:9
[INFO] [stderr]    |
[INFO] [stderr] 19 | pub struct TracingLog{
[INFO] [stderr]    |            ---------- field in this struct
[INFO] [stderr] 20 |     //用通信来共享内存，而不是通过共享内存来通信
[INFO] [stderr] 21 |     pub logs: Vec<String>,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `TracingLog` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `pause` and `stop` are never read
[INFO] [stderr]   --> src/fft.rs:23:9
[INFO] [stderr]    |
[INFO] [stderr] 21 | pub struct FFTController
[INFO] [stderr]    |            ------------- fields in this struct
[INFO] [stderr] 22 | {
[INFO] [stderr] 23 |     pub pause: bool,
[INFO] [stderr]    |         ^^^^^
[INFO] [stderr] 24 |     pub stop: bool,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `set_pause` and `set_stop` are never used
[INFO] [stderr]   --> src/fft.rs:50:12
[INFO] [stderr]    |
[INFO] [stderr] 34 | impl FFTController
[INFO] [stderr]    | ------------------ methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 50 |     pub fn set_pause(&mut self) {
[INFO] [stderr]    |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 53 |     pub fn set_stop(&mut self) {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `stream` and `stream_handle` are never read
[INFO] [stderr]   --> src/musicplayer.rs:10:9
[INFO] [stderr]    |
[INFO] [stderr] 7  | pub struct MusicPlayer
[INFO] [stderr]    |            ----------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 10 |     pub stream:rodio::OutputStream,// steam 不能drop 了，不然 handle 就没用了
[INFO] [stderr]    |         ^^^^^^
[INFO] [stderr] 11 |     pub stream_handle:OutputStreamHandle,
[INFO] [stderr]    |         ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `lyric` and `time` are never read
[INFO] [stderr]   --> src/lyric.rs:16:9
[INFO] [stderr]    |
[INFO] [stderr] 14 | pub struct LyricController{
[INFO] [stderr]    |            --------------- fields in this struct
[INFO] [stderr] 15 |     pub filestring:String,
[INFO] [stderr] 16 |     pub lyric:Vec<Lyric>,
[INFO] [stderr]    |         ^^^^^
[INFO] [stderr] 17 |     pub time:String,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `LyricController` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `next_selected` is never read
[INFO] [stderr]   --> src/sounds.rs:14:9
[INFO] [stderr]    |
[INFO] [stderr] 10 | pub struct SoundsList{
[INFO] [stderr]    |            ---------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 14 |     pub next_selected: Option<usize>,//是否有最新选中,用下次预备播放
[INFO] [stderr]    |         ^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `SoundsList` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: method `get_sound_name_list` is never used
[INFO] [stderr]    --> src/sounds.rs:110:12
[INFO] [stderr]     |
[INFO] [stderr] 18  | impl SoundsList{
[INFO] [stderr]     | --------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 110 |     pub fn get_sound_name_list(&self)->Vec<(usize,String)>{
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `id`, `total_duration`, and `lyric` are never read
[INFO] [stderr]    --> src/sounds.rs:135:9
[INFO] [stderr]     |
[INFO] [stderr] 134 | pub struct Sound{
[INFO] [stderr]     |            ----- fields in this struct
[INFO] [stderr] 135 |     pub id:usize,
[INFO] [stderr]     |         ^^
[INFO] [stderr] 136 |     pub name:String,
[INFO] [stderr] 137 |     pub total_duration:Duration,
[INFO] [stderr]     |         ^^^^^^^^^^^^^^
[INFO] [stderr] 138 |     pub lyric:Lyric,
[INFO] [stderr]     |         ^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `Sound` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: method `get_sound_path` is never used
[INFO] [stderr]    --> src/sounds.rs:174:8
[INFO] [stderr]     |
[INFO] [stderr] 142 | impl Sound{
[INFO] [stderr]     | ---------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 174 |     fn get_sound_path(&self)->String{
[INFO] [stderr]     |        ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused `Result` in tuple element 0 that must be used
[INFO] [stderr]    --> src/app.rs:233:3
[INFO] [stderr]     |
[INFO] [stderr] 233 | /   tokio::join!(
[INFO] [stderr] 234 | |         //   handler.run(),没有所有权了
[INFO] [stderr] 235 | |            react,
[INFO] [stderr] 236 | |            render1,
[INFO] [stderr] 237 | |            recv_handle,//异步获取tracing 日志
[INFO] [stderr] 238 | |            fft_result_set_handle,
[INFO] [stderr] 239 | |       );
[INFO] [stderr]     | |_______^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stderr]     = note: `#[warn(unused_must_use)]` on by default
[INFO] [stderr]     = note: this warning originates in the macro `$crate::join` which comes from the expansion of the macro `tokio::join` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stderr] 
[INFO] [stderr] warning: unused `Result` in tuple element 1 that must be used
[INFO] [stderr]    --> src/app.rs:233:3
[INFO] [stderr]     |
[INFO] [stderr] 233 | /   tokio::join!(
[INFO] [stderr] 234 | |         //   handler.run(),没有所有权了
[INFO] [stderr] 235 | |            react,
[INFO] [stderr] 236 | |            render1,
[INFO] [stderr] 237 | |            recv_handle,//异步获取tracing 日志
[INFO] [stderr] 238 | |            fft_result_set_handle,
[INFO] [stderr] 239 | |       );
[INFO] [stderr]     | |_______^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stderr]     = note: this warning originates in the macro `$crate::join` which comes from the expansion of the macro `tokio::join` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stderr] 
[INFO] [stderr] warning: unused `Result` in tuple element 2 that must be used
[INFO] [stderr]    --> src/app.rs:233:3
[INFO] [stderr]     |
[INFO] [stderr] 233 | /   tokio::join!(
[INFO] [stderr] 234 | |         //   handler.run(),没有所有权了
[INFO] [stderr] 235 | |            react,
[INFO] [stderr] 236 | |            render1,
[INFO] [stderr] 237 | |            recv_handle,//异步获取tracing 日志
[INFO] [stderr] 238 | |            fft_result_set_handle,
[INFO] [stderr] 239 | |       );
[INFO] [stderr]     | |_______^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stderr]     = note: this warning originates in the macro `$crate::join` which comes from the expansion of the macro `tokio::join` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stderr] 
[INFO] [stderr] warning: `ratatui_music` (bin "ratatui_music" test) generated 236 warnings (run `cargo fix --bin "ratatui_music" --tests` to apply 172 suggestions)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.09s
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/ratatui_music-795d8a211de820bb)
[INFO] [stdout] 
[INFO] [stdout] running 6 tests
[INFO] [stdout] test musicplayer::tests::test_file_open ... ok
[INFO] [stdout] test musicplayer::tests::test_music_pause ... ok
[INFO] [stdout] test event::tests::test_event_handle ... ok
[INFO] [stdout] test components::lyric::tests::test_time_transform ... ok
[INFO] [stderr] ALSA lib confmisc.c:855:(parse_card) cannot find card '0'
[INFO] [stderr] ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_card_inum returned error: No such file or directory
[INFO] [stderr] ALSA lib confmisc.c:422:(snd_func_concat) error evaluating strings
[INFO] [stderr] ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
[INFO] [stderr] ALSA lib confmisc.c:1334:(snd_func_refer) error evaluating name
[INFO] [stderr] ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
[INFO] [stderr] ALSA lib conf.c:5701:(snd_config_expand) Evaluate error: No such file or directory
[INFO] [stderr] ALSA lib pcm.c:2664:(snd_pcm_open_noupdate) Unknown PCM default
[INFO] [stdout] test sounds::tests::test_sound_lyric_path ... FAILED
[INFO] [stdout] test event::tests::test_event_handler_run ... FAILED
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- sounds::tests::test_sound_lyric_path stdout ----
[INFO] [stdout] thread 'sounds::tests::test_sound_lyric_path' panicked at src/sounds.rs:204:17:
[INFO] [stdout] assertion `left == right` failed
[INFO] [stdout]   left: "music/国际歌-MusicEnc.lrc"
[INFO] [stdout]  right: "music/国际歌.lrc"
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x560bfcc65285 - std::backtrace_rs::backtrace::libunwind::trace::h59d96bdb08384354
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/../../backtrace/src/backtrace/libunwind.rs:105:5
[INFO] [stdout]    1:     0x560bfcc65285 - std::backtrace_rs::backtrace::trace_unsynchronized::h9cf5becacfc93fba
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
[INFO] [stdout]    2:     0x560bfcc65285 - std::sys_common::backtrace::_print_fmt::h10b76d10405dbd48
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/sys_common/backtrace.rs:68:5
[INFO] [stdout]    3:     0x560bfcc65285 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h6ed9e62a156d84e4
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/sys_common/backtrace.rs:44:22
[INFO] [stdout]    4:     0x560bfcc8cfbb - core::fmt::rt::Argument::fmt::h645c680983f03c9f
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/fmt/rt.rs:165:63
[INFO] [stdout]    5:     0x560bfcc8cfbb - core::fmt::write::h8bcd80919a02be29
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/fmt/mod.rs:1169:21
[INFO] [stdout]    6:     0x560bfcc61faf - std::io::Write::write_fmt::h8d0c47c662cad79c
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/io/mod.rs:1835:15
[INFO] [stdout]    7:     0x560bfcc6505e - std::sys_common::backtrace::_print::h6306f131a28d62b0
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/sys_common/backtrace.rs:47:5
[INFO] [stdout]    8:     0x560bfcc6505e - std::sys_common::backtrace::print::h7079288e0a26dfcc
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/sys_common/backtrace.rs:34:9
[INFO] [stdout]    9:     0x560bfcc66a89 - std::panicking::default_hook::{{closure}}::hb063ecec81a736ba
[INFO] [stdout]   10:     0x560bfcc6674e - std::panicking::default_hook::hd56ee406bf547b5c
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panicking.rs:295:9
[INFO] [stdout]   11:     0x560bfc976b2a - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::he5eacdef44c8728f
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/alloc/src/boxed.rs:2036:9
[INFO] [stdout]   12:     0x560bfc976b2a - test::test_main::{{closure}}::h0ec9aed229e79095
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/test/src/lib.rs:137:21
[INFO] [stdout]   13:     0x560bfcc6708b - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::hcbd0d80e1ad4e4f9
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/alloc/src/boxed.rs:2036:9
[INFO] [stdout]   14:     0x560bfcc6708b - std::panicking::rust_panic_with_hook::h624aa3ca42ebb8f2
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panicking.rs:799:13
[INFO] [stdout]   15:     0x560bfcc66e04 - std::panicking::begin_panic_handler::{{closure}}::hbc4e76194a5e287c
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panicking.rs:664:13
[INFO] [stdout]   16:     0x560bfcc65749 - std::sys_common::backtrace::__rust_end_short_backtrace::h847fedc9d1ff7b6d
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/sys_common/backtrace.rs:171:18
[INFO] [stdout]   17:     0x560bfcc66b37 - rust_begin_unwind
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panicking.rs:652:5
[INFO] [stdout]   18:     0x560bfc8a39e3 - core::panicking::panic_fmt::hec11a924b87ce965
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/panicking.rs:72:14
[INFO] [stdout]   19:     0x560bfc8a3dee - core::panicking::assert_failed_inner::h01c8f7f0c1caba58
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/panicking.rs:408:17
[INFO] [stdout]   20:     0x560bfc8e5982 - core::panicking::assert_failed::h853cbedb51c4e733
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/panicking.rs:363:5
[INFO] [stdout]   21:     0x560bfc8c63ce - ratatui_music::sounds::tests::test_sound_lyric_path::hc067362869205d79
[INFO] [stdout]                                at /opt/rustwide/workdir/src/sounds.rs:204:17
[INFO] [stdout]   22:     0x560bfc8c61a7 - ratatui_music::sounds::tests::test_sound_lyric_path::{{closure}}::h9722a8ed9116eac1
[INFO] [stdout]                                at /opt/rustwide/workdir/src/sounds.rs:200:31
[INFO] [stdout]   23:     0x560bfc8a9a66 - core::ops::function::FnOnce::call_once::he0069fe28ec21139
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   24:     0x560bfc97b50b - core::ops::function::FnOnce::call_once::h2e43a8f6f3d94b99
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   25:     0x560bfc97b50b - test::__rust_begin_short_backtrace::h214c9f2d2d3fee90
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/test/src/lib.rs:625:18
[INFO] [stdout]   26:     0x560bfc97ac11 - test::run_test_in_process::{{closure}}::h510b7ba7990692a5
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/test/src/lib.rs:648:60
[INFO] [stdout]   27:     0x560bfc97ac11 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::h4157186197a93871
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/panic/unwind_safe.rs:272:9
[INFO] [stdout]   28:     0x560bfc97ac11 - std::panicking::try::do_call::h1bf2463bccd4b28c
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panicking.rs:559:40
[INFO] [stdout]   29:     0x560bfc97ac11 - std::panicking::try::hd6d4808c9fab4fa5
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panicking.rs:523:19
[INFO] [stdout]   30:     0x560bfc97ac11 - std::panic::catch_unwind::hd5641d97d123f9f2
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panic.rs:149:14
[INFO] [stdout]   31:     0x560bfc97ac11 - test::run_test_in_process::hc273b71c8b878a4c
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/test/src/lib.rs:648:27
[INFO] [stdout]   32:     0x560bfc97ac11 - test::run_test::{{closure}}::h6838df834eb8467e
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/test/src/lib.rs:569:43
[INFO] [stdout]   33:     0x560bfc9435d4 - test::run_test::{{closure}}::h608b98ecff5665fb
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/test/src/lib.rs:599:41
[INFO] [stdout]   34:     0x560bfc9435d4 - std::sys_common::backtrace::__rust_begin_short_backtrace::hdc4182b97d1042e9
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/sys_common/backtrace.rs:155:18
[INFO] [stdout]   35:     0x560bfc948002 - std::thread::Builder::spawn_unchecked_::{{closure}}::{{closure}}::h571773fd21d674c8
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/thread/mod.rs:542:17
[INFO] [stdout]   36:     0x560bfc948002 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::hdcd384cf2fa70ba3
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/panic/unwind_safe.rs:272:9
[INFO] [stdout]   37:     0x560bfc948002 - std::panicking::try::do_call::h4f1a44bd81423be1
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panicking.rs:559:40
[INFO] [stdout]   38:     0x560bfc948002 - std::panicking::try::h5e02afcb81dcd361
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panicking.rs:523:19
[INFO] [stdout]   39:     0x560bfc948002 - std::panic::catch_unwind::h022f75775bfd8c45
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panic.rs:149:14
[INFO] [stdout]   40:     0x560bfc948002 - std::thread::Builder::spawn_unchecked_::{{closure}}::hf5a62e9e4e6df1f8
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/thread/mod.rs:541:30
[INFO] [stdout]   41:     0x560bfc948002 - core::ops::function::FnOnce::call_once{{vtable.shim}}::h6d56360aeb9509a7
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   42:     0x560bfcc6b9fb - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h7a343dc551c06baa
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/alloc/src/boxed.rs:2022:9
[INFO] [stdout]   43:     0x560bfcc6b9fb - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h30b8111cbaa644f3
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/alloc/src/boxed.rs:2022:9
[INFO] [stdout]   44:     0x560bfcc6b9fb - std::sys::pal::unix::thread::Thread::new::thread_start::h7404e134e61e7a11
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/sys/pal/unix/thread.rs:108:17
[INFO] [stdout]   45:     0x7fb9eaa3aac3 - <unknown>
[INFO] [stdout]   46:     0x7fb9eaacba04 - __clone
[INFO] [stdout]   47:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] ---- event::tests::test_event_handler_run stdout ----
[INFO] [stdout] thread 'event::tests::test_event_handler_run' panicked at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/crossterm-0.27.0/src/event/read.rs:39:30:
[INFO] [stdout] reader source not set
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x560bfcc65285 - std::backtrace_rs::backtrace::libunwind::trace::h59d96bdb08384354
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/../../backtrace/src/backtrace/libunwind.rs:105:5
[INFO] [stdout]    1:     0x560bfcc65285 - std::backtrace_rs::backtrace::trace_unsynchronized::h9cf5becacfc93fba
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
[INFO] [stdout]    2:     0x560bfcc65285 - std::sys_common::backtrace::_print_fmt::h10b76d10405dbd48
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/sys_common/backtrace.rs:68:5
[INFO] [stdout]    3:     0x560bfcc65285 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h6ed9e62a156d84e4
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/sys_common/backtrace.rs:44:22
[INFO] [stdout]    4:     0x560bfcc8cfbb - core::fmt::rt::Argument::fmt::h645c680983f03c9f
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/fmt/rt.rs:165:63
[INFO] [stdout]    5:     0x560bfcc8cfbb - core::fmt::write::h8bcd80919a02be29
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/fmt/mod.rs:1169:21
[INFO] [stdout]    6:     0x560bfcc61faf - std::io::Write::write_fmt::h8d0c47c662cad79c
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/io/mod.rs:1835:15
[INFO] [stdout]    7:     0x560bfcc6505e - std::sys_common::backtrace::_print::h6306f131a28d62b0
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/sys_common/backtrace.rs:47:5
[INFO] [stdout]    8:     0x560bfcc6505e - std::sys_common::backtrace::print::h7079288e0a26dfcc
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/sys_common/backtrace.rs:34:9
[INFO] [stdout]    9:     0x560bfcc66a89 - std::panicking::default_hook::{{closure}}::hb063ecec81a736ba
[INFO] [stdout]   10:     0x560bfcc6674e - std::panicking::default_hook::hd56ee406bf547b5c
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panicking.rs:295:9
[INFO] [stdout]   11:     0x560bfc976b2a - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::he5eacdef44c8728f
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/alloc/src/boxed.rs:2036:9
[INFO] [stdout]   12:     0x560bfc976b2a - test::test_main::{{closure}}::h0ec9aed229e79095
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/test/src/lib.rs:137:21
[INFO] [stdout]   13:     0x560bfcc6708b - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::hcbd0d80e1ad4e4f9
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/alloc/src/boxed.rs:2036:9
[INFO] [stdout]   14:     0x560bfcc6708b - std::panicking::rust_panic_with_hook::h624aa3ca42ebb8f2
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panicking.rs:799:13
[INFO] [stdout]   15:     0x560bfcc66e04 - std::panicking::begin_panic_handler::{{closure}}::hbc4e76194a5e287c
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panicking.rs:664:13
[INFO] [stdout]   16:     0x560bfcc65749 - std::sys_common::backtrace::__rust_end_short_backtrace::h847fedc9d1ff7b6d
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/sys_common/backtrace.rs:171:18
[INFO] [stdout]   17:     0x560bfcc66b37 - rust_begin_unwind
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panicking.rs:652:5
[INFO] [stdout]   18:     0x560bfc8a39e3 - core::panicking::panic_fmt::hec11a924b87ce965
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/panicking.rs:72:14
[INFO] [stdout]   19:     0x560bfcc8b40c - core::panicking::panic_display::h269ceaaee0e836fe
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/panicking.rs:262:5
[INFO] [stdout]   20:     0x560bfc8a39ac - core::option::expect_failed::h2224e5e9252b5b20
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/option.rs:1994:5
[INFO] [stdout]   21:     0x560bfcb60362 - core::option::Option<T>::expect::h1295733efc8718bc
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/option.rs:895:21
[INFO] [stdout]   22:     0x560bfcb48c5b - crossterm::event::read::InternalEventReader::waker::h5e3a594d82bbb873
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/crossterm-0.27.0/src/event/read.rs:39:9
[INFO] [stdout]   23:     0x560bfcb61039 - <crossterm::event::stream::EventStream as core::default::Default>::default::h7c188838ed5bf953
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/crossterm-0.27.0/src/event/stream.rs:62:34
[INFO] [stdout]   24:     0x560bfcb6147e - crossterm::event::stream::EventStream::new::ha76d11d0099d83d5
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/crossterm-0.27.0/src/event/stream.rs:73:9
[INFO] [stdout]   25:     0x560bfc8eefc7 - ratatui_music::event::select_task::{{closure}}::h6fd57a578979406b
[INFO] [stdout]                                at /opt/rustwide/workdir/src/event.rs:62:22
[INFO] [stdout]   26:     0x560bfc8ec664 - tokio::runtime::task::core::Core<T,S>::poll::{{closure}}::h67d4540853b2ff77
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/task/core.rs:328:17
[INFO] [stdout]   27:     0x560bfc8ec05d - tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut::h7892b56ec8aceb18
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/loom/std/unsafe_cell.rs:16:9
[INFO] [stdout]   28:     0x560bfc8ec05d - tokio::runtime::task::core::Core<T,S>::poll::h7ffd8745797c0c5e
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/task/core.rs:317:13
[INFO] [stdout]   29:     0x560bfc8b88aa - tokio::runtime::task::harness::poll_future::{{closure}}::h06b7d7483501c53a
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/task/harness.rs:485:19
[INFO] [stdout]   30:     0x560bfc8f8c60 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::h02d377d9660bd33a
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/panic/unwind_safe.rs:272:9
[INFO] [stdout]   31:     0x560bfc8c8468 - std::panicking::try::do_call::h6d073426e3b9a1f9
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panicking.rs:559:40
[INFO] [stdout]   32:     0x560bfc8cc7bb - __rust_try
[INFO] [stdout]   33:     0x560bfc8c7c96 - std::panicking::try::hf48ad44951c1a83e
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panicking.rs:523:19
[INFO] [stdout]   34:     0x560bfc8fd4dd - std::panic::catch_unwind::hb32de53d6ad4843c
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panic.rs:149:14
[INFO] [stdout]   35:     0x560bfc8b85ef - tokio::runtime::task::harness::poll_future::hfde8bf5f09f26242
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/task/harness.rs:473:18
[INFO] [stdout]   36:     0x560bfc8b9985 - tokio::runtime::task::harness::Harness<T,S>::poll_inner::hc3eccb09bec9df9e
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/task/harness.rs:208:27
[INFO] [stdout]   37:     0x560bfc8bae53 - tokio::runtime::task::harness::Harness<T,S>::poll::he9663a4678493c8b
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/task/harness.rs:153:15
[INFO] [stdout]   38:     0x560bfc8b630b - tokio::runtime::task::raw::poll::hd23356135ca297fe
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/task/raw.rs:271:5
[INFO] [stdout]   39:     0x560bfcba96d7 - tokio::runtime::task::raw::RawTask::poll::h2e0d66df142b0cb0
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/task/raw.rs:201:18
[INFO] [stdout]   40:     0x560bfc9109f1 - tokio::runtime::task::LocalNotified<S>::run::hed85aa760f65c330
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/task/mod.rs:427:9
[INFO] [stdout]   41:     0x560bfc8dae5a - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::{{closure}}::h9cd2445fbc18cf95
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:700:25
[INFO] [stdout]   42:     0x560bfc8d9ee9 - tokio::runtime::coop::with_budget::hb57341c10fac51d6
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/coop.rs:107:5
[INFO] [stdout]   43:     0x560bfc8d9ee9 - tokio::runtime::coop::budget::h2e24735bb1d3b179
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/coop.rs:73:5
[INFO] [stdout]   44:     0x560bfc8d9ee9 - tokio::runtime::scheduler::current_thread::Context::run_task::{{closure}}::h511ff90ad46a853e
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:343:43
[INFO] [stdout]   45:     0x560bfc8d9866 - tokio::runtime::scheduler::current_thread::Context::enter::h483263a2afd608fa
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:404:19
[INFO] [stdout]   46:     0x560bfc8d9d81 - tokio::runtime::scheduler::current_thread::Context::run_task::hdc47d7025818bdae
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:343:23
[INFO] [stdout]   47:     0x560bfc8dac15 - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::h61428f066d59781c
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:699:35
[INFO] [stdout]   48:     0x560bfc8da3a4 - tokio::runtime::scheduler::current_thread::CoreGuard::enter::{{closure}}::hc83f93197574a12f
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:737:68
[INFO] [stdout]   49:     0x560bfc93bd4b - tokio::runtime::context::scoped::Scoped<T>::set::hb8449a39af0af2a2
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/context/scoped.rs:40:9
[INFO] [stdout]   50:     0x560bfc8e62b9 - tokio::runtime::context::set_scheduler::{{closure}}::hf606e325bdc6ba79
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/context.rs:176:26
[INFO] [stdout]   51:     0x560bfc909450 - std::thread::local::LocalKey<T>::try_with::hf8845730db93e695
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/thread/local.rs:286:12
[INFO] [stdout]   52:     0x560bfc90801a - std::thread::local::LocalKey<T>::with::h316735a977f8ec82
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/thread/local.rs:262:9
[INFO] [stdout]   53:     0x560bfc8e626d - tokio::runtime::context::set_scheduler::he5e96676acca3168
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/context.rs:176:9
[INFO] [stdout]   54:     0x560bfc8da150 - tokio::runtime::scheduler::current_thread::CoreGuard::enter::h50cc816dd7080ef9
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:737:27
[INFO] [stdout]   55:     0x560bfc8da3c3 - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::hab86a19cc281aa0e
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:646:19
[INFO] [stdout]   56:     0x560bfc8d89dd - tokio::runtime::scheduler::current_thread::CurrentThread::block_on::{{closure}}::h145776a4c0aa6960
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:175:28
[INFO] [stdout]   57:     0x560bfc90b4e6 - tokio::runtime::context::runtime::enter_runtime::he5ccb3cad107fd4c
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/context/runtime.rs:65:16
[INFO] [stdout]   58:     0x560bfc8d88f1 - tokio::runtime::scheduler::current_thread::CurrentThread::block_on::hb0a6efb706f182e7
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:167:9
[INFO] [stdout]   59:     0x560bfc9148ed - tokio::runtime::runtime::Runtime::block_on::h676ef3d6c11fe310
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/runtime.rs:349:47
[INFO] [stdout]   60:     0x560bfc8f232e - ratatui_music::event::tests::test_event_handler_run::h43a9dadd9a26c8eb
[INFO] [stdout]                                at /opt/rustwide/workdir/src/event.rs:198:9
[INFO] [stdout]   61:     0x560bfc8f21d7 - ratatui_music::event::tests::test_event_handler_run::{{closure}}::ha36e6c379ad4a47f
[INFO] [stdout]                                at /opt/rustwide/workdir/src/event.rs:181:38
[INFO] [stdout]   62:     0x560bfc8a9926 - core::ops::function::FnOnce::call_once::hbb9a8da7b211d170
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   63:     0x560bfc97b50b - core::ops::function::FnOnce::call_once::h2e43a8f6f3d94b99
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   64:     0x560bfc97b50b - test::__rust_begin_short_backtrace::h214c9f2d2d3fee90
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/test/src/lib.rs:625:18
[INFO] [stdout]   65:     0x560bfc97ac11 - test::run_test_in_process::{{closure}}::h510b7ba7990692a5
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/test/src/lib.rs:648:60
[INFO] [stdout]   66:     0x560bfc97ac11 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::h4157186197a93871
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/panic/unwind_safe.rs:272:9
[INFO] [stdout]   67:     0x560bfc97ac11 - std::panicking::try::do_call::h1bf2463bccd4b28c
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panicking.rs:559:40
[INFO] [stdout]   68:     0x560bfc97ac11 - std::panicking::try::hd6d4808c9fab4fa5
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panicking.rs:523:19
[INFO] [stdout]   69:     0x560bfc97ac11 - std::panic::catch_unwind::hd5641d97d123f9f2
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panic.rs:149:14
[INFO] [stdout]   70:     0x560bfc97ac11 - test::run_test_in_process::hc273b71c8b878a4c
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/test/src/lib.rs:648:27
[INFO] [stdout]   71:     0x560bfc97ac11 - test::run_test::{{closure}}::h6838df834eb8467e
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/test/src/lib.rs:569:43
[INFO] [stdout]   72:     0x560bfc9435d4 - test::run_test::{{closure}}::h608b98ecff5665fb
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/test/src/lib.rs:599:41
[INFO] [stdout]   73:     0x560bfc9435d4 - std::sys_common::backtrace::__rust_begin_short_backtrace::hdc4182b97d1042e9
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/sys_common/backtrace.rs:155:18
[INFO] [stdout]   74:     0x560bfc948002 - std::thread::Builder::spawn_unchecked_::{{closure}}::{{closure}}::h571773fd21d674c8
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/thread/mod.rs:542:17
[INFO] [stdout]   75:     0x560bfc948002 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::hdcd384cf2fa70ba3
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/panic/unwind_safe.rs:272:9
[INFO] [stdout]   76:     0x560bfc948002 - std::panicking::try::do_call::h4f1a44bd81423be1
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panicking.rs:559:40
[INFO] [stdout]   77:     0x560bfc948002 - std::panicking::try::h5e02afcb81dcd361
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panicking.rs:523:19
[INFO] [stdout]   78:     0x560bfc948002 - std::panic::catch_unwind::h022f75775bfd8c45
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panic.rs:149:14
[INFO] [stdout]   79:     0x560bfc948002 - std::thread::Builder::spawn_unchecked_::{{closure}}::hf5a62e9e4e6df1f8
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/thread/mod.rs:541:30
[INFO] [stdout]   80:     0x560bfc948002 - core::ops::function::FnOnce::call_once{{vtable.shim}}::h6d56360aeb9509a7
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   81:     0x560bfcc6b9fb - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h7a343dc551c06baa
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/alloc/src/boxed.rs:2022:9
[INFO] [stdout]   82:     0x560bfcc6b9fb - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h30b8111cbaa644f3
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/alloc/src/boxed.rs:2022:9
[INFO] [stdout]   83:     0x560bfcc6b9fb - std::sys::pal::unix::thread::Thread::new::thread_start::h7404e134e61e7a11
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/sys/pal/unix/thread.rs:108:17
[INFO] [stdout]   84:     0x7fb9eaa3aac3 - <unknown>
[INFO] [stdout]   85:     0x7fb9eaacba04 - __clone
[INFO] [stdout]   86:                0x0 - <unknown>
[INFO] [stdout] thread 'event::tests::test_event_handler_run' panicked at src/event.rs:191:9:
[INFO] [stdout] 没有在预期时间内接收到事件
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x560bfcc65285 - std::backtrace_rs::backtrace::libunwind::trace::h59d96bdb08384354
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/../../backtrace/src/backtrace/libunwind.rs:105:5
[INFO] [stdout]    1:     0x560bfcc65285 - std::backtrace_rs::backtrace::trace_unsynchronized::h9cf5becacfc93fba
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
[INFO] [stdout]    2:     0x560bfcc65285 - std::sys_common::backtrace::_print_fmt::h10b76d10405dbd48
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/sys_common/backtrace.rs:68:5
[INFO] [stdout]    3:     0x560bfcc65285 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h6ed9e62a156d84e4
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/sys_common/backtrace.rs:44:22
[INFO] [stdout]    4:     0x560bfcc8cfbb - core::fmt::rt::Argument::fmt::h645c680983f03c9f
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/fmt/rt.rs:165:63
[INFO] [stdout]    5:     0x560bfcc8cfbb - core::fmt::write::h8bcd80919a02be29
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/fmt/mod.rs:1169:21
[INFO] [stdout]    6:     0x560bfcc61faf - std::io::Write::write_fmt::h8d0c47c662cad79c
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/io/mod.rs:1835:15
[INFO] [stdout]    7:     0x560bfcc6505e - std::sys_common::backtrace::_print::h6306f131a28d62b0
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/sys_common/backtrace.rs:47:5
[INFO] [stdout]    8:     0x560bfcc6505e - std::sys_common::backtrace::print::h7079288e0a26dfcc
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/sys_common/backtrace.rs:34:9
[INFO] [stdout]    9:     0x560bfcc66a89 - std::panicking::default_hook::{{closure}}::hb063ecec81a736ba
[INFO] [stdout]   10:     0x560bfcc6674e - std::panicking::default_hook::hd56ee406bf547b5c
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panicking.rs:295:9
[INFO] [stdout]   11:     0x560bfc976b2a - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::he5eacdef44c8728f
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/alloc/src/boxed.rs:2036:9
[INFO] [stdout]   12:     0x560bfc976b2a - test::test_main::{{closure}}::h0ec9aed229e79095
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/test/src/lib.rs:137:21
[INFO] [stdout]   13:     0x560bfcc6708b - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::hcbd0d80e1ad4e4f9
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/alloc/src/boxed.rs:2036:9
[INFO] [stdout]   14:     0x560bfcc6708b - std::panicking::rust_panic_with_hook::h624aa3ca42ebb8f2
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panicking.rs:799:13
[INFO] [stdout]   15:     0x560bfcc66dcb - std::panicking::begin_panic_handler::{{closure}}::hbc4e76194a5e287c
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panicking.rs:656:13
[INFO] [stdout]   16:     0x560bfcc65749 - std::sys_common::backtrace::__rust_end_short_backtrace::h847fedc9d1ff7b6d
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/sys_common/backtrace.rs:171:18
[INFO] [stdout]   17:     0x560bfcc66b37 - rust_begin_unwind
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panicking.rs:652:5
[INFO] [stdout]   18:     0x560bfc8a39e3 - core::panicking::panic_fmt::hec11a924b87ce965
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/panicking.rs:72:14
[INFO] [stdout]   19:     0x560bfc8f2835 - ratatui_music::event::tests::test_event_handler_run::{{closure}}::h932ab2192a805c88
[INFO] [stdout]                                at /opt/rustwide/workdir/src/event.rs:191:9
[INFO] [stdout]   20:     0x560bfc8ee4f2 - <core::pin::Pin<P> as core::future::future::Future>::poll::hf1534316c3d31cbb
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/future/future.rs:123:9
[INFO] [stdout]   21:     0x560bfc8ee4ad - <core::pin::Pin<P> as core::future::future::Future>::poll::hca1d07e72a275c58
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/future/future.rs:123:9
[INFO] [stdout]   22:     0x560bfc8dae8f - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::{{closure}}::{{closure}}::hd83977d3345f7654
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:659:57
[INFO] [stdout]   23:     0x560bfc8dadc5 - tokio::runtime::coop::with_budget::he0f9c196645a53e3
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/coop.rs:107:5
[INFO] [stdout]   24:     0x560bfc8dadc5 - tokio::runtime::coop::budget::hd39a34f28d12f11f
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/coop.rs:73:5
[INFO] [stdout]   25:     0x560bfc8dadc5 - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::{{closure}}::h76a9387252ce79ea
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:659:25
[INFO] [stdout]   26:     0x560bfc8d9b70 - tokio::runtime::scheduler::current_thread::Context::enter::h496a7423ca37b5c6
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:404:19
[INFO] [stdout]   27:     0x560bfc8da62e - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::{{closure}}::h61428f066d59781c
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:658:36
[INFO] [stdout]   28:     0x560bfc8da3a4 - tokio::runtime::scheduler::current_thread::CoreGuard::enter::{{closure}}::hc83f93197574a12f
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:737:68
[INFO] [stdout]   29:     0x560bfc93bd4b - tokio::runtime::context::scoped::Scoped<T>::set::hb8449a39af0af2a2
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/context/scoped.rs:40:9
[INFO] [stdout]   30:     0x560bfc8e62b9 - tokio::runtime::context::set_scheduler::{{closure}}::hf606e325bdc6ba79
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/context.rs:176:26
[INFO] [stdout]   31:     0x560bfc909450 - std::thread::local::LocalKey<T>::try_with::hf8845730db93e695
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/thread/local.rs:286:12
[INFO] [stdout]   32:     0x560bfc90801a - std::thread::local::LocalKey<T>::with::h316735a977f8ec82
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/thread/local.rs:262:9
[INFO] [stdout]   33:     0x560bfc8e626d - tokio::runtime::context::set_scheduler::he5e96676acca3168
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/context.rs:176:9
[INFO] [stdout]   34:     0x560bfc8da150 - tokio::runtime::scheduler::current_thread::CoreGuard::enter::h50cc816dd7080ef9
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:737:27
[INFO] [stdout]   35:     0x560bfc8da3c3 - tokio::runtime::scheduler::current_thread::CoreGuard::block_on::hab86a19cc281aa0e
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:646:19
[INFO] [stdout]   36:     0x560bfc8d89dd - tokio::runtime::scheduler::current_thread::CurrentThread::block_on::{{closure}}::h145776a4c0aa6960
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:175:28
[INFO] [stdout]   37:     0x560bfc90b4e6 - tokio::runtime::context::runtime::enter_runtime::he5ccb3cad107fd4c
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/context/runtime.rs:65:16
[INFO] [stdout]   38:     0x560bfc8d88f1 - tokio::runtime::scheduler::current_thread::CurrentThread::block_on::hb0a6efb706f182e7
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/scheduler/current_thread/mod.rs:167:9
[INFO] [stdout]   39:     0x560bfc9148ed - tokio::runtime::runtime::Runtime::block_on::h676ef3d6c11fe310
[INFO] [stdout]                                at /opt/rustwide/cargo-home/registry/src/index.crates.io-6f17d22bba15001f/tokio-1.37.0/src/runtime/runtime.rs:349:47
[INFO] [stdout]   40:     0x560bfc8f232e - ratatui_music::event::tests::test_event_handler_run::h43a9dadd9a26c8eb
[INFO] [stdout]                                at /opt/rustwide/workdir/src/event.rs:198:9
[INFO] [stdout]   41:     0x560bfc8f21d7 - ratatui_music::event::tests::test_event_handler_run::{{closure}}::ha36e6c379ad4a47f
[INFO] [stdout]                                at /opt/rustwide/workdir/src/event.rs:181:38
[INFO] [stdout]   42:     0x560bfc8a9926 - core::ops::function::FnOnce::call_once::hbb9a8da7b211d170
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   43:     0x560bfc97b50b - core::ops::function::FnOnce::call_once::h2e43a8f6f3d94b99
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   44:     0x560bfc97b50b - test::__rust_begin_short_backtrace::h214c9f2d2d3fee90
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/test/src/lib.rs:625:18
[INFO] [stdout]   45:     0x560bfc97ac11 - test::run_test_in_process::{{closure}}::h510b7ba7990692a5
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/test/src/lib.rs:648:60
[INFO] [stdout]   46:     0x560bfc97ac11 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::h4157186197a93871
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/panic/unwind_safe.rs:272:9
[INFO] [stdout]   47:     0x560bfc97ac11 - std::panicking::try::do_call::h1bf2463bccd4b28c
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panicking.rs:559:40
[INFO] [stdout]   48:     0x560bfc97ac11 - std::panicking::try::hd6d4808c9fab4fa5
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panicking.rs:523:19
[INFO] [stdout]   49:     0x560bfc97ac11 - std::panic::catch_unwind::hd5641d97d123f9f2
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panic.rs:149:14
[INFO] [stdout]   50:     0x560bfc97ac11 - test::run_test_in_process::hc273b71c8b878a4c
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/test/src/lib.rs:648:27
[INFO] [stdout]   51:     0x560bfc97ac11 - test::run_test::{{closure}}::h6838df834eb8467e
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/test/src/lib.rs:569:43
[INFO] [stdout]   52:     0x560bfc9435d4 - test::run_test::{{closure}}::h608b98ecff5665fb
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/test/src/lib.rs:599:41
[INFO] [stdout]   53:     0x560bfc9435d4 - std::sys_common::backtrace::__rust_begin_short_backtrace::hdc4182b97d1042e9
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/sys_common/backtrace.rs:155:18
[INFO] [stdout]   54:     0x560bfc948002 - std::thread::Builder::spawn_unchecked_::{{closure}}::{{closure}}::h571773fd21d674c8
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/thread/mod.rs:542:17
[INFO] [stdout]   55:     0x560bfc948002 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::hdcd384cf2fa70ba3
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/panic/unwind_safe.rs:272:9
[INFO] [stdout]   56:     0x560bfc948002 - std::panicking::try::do_call::h4f1a44bd81423be1
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panicking.rs:559:40
[INFO] [stdout]   57:     0x560bfc948002 - std::panicking::try::h5e02afcb81dcd361
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panicking.rs:523:19
[INFO] [stdout]   58:     0x560bfc948002 - std::panic::catch_unwind::h022f75775bfd8c45
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/panic.rs:149:14
[INFO] [stdout]   59:     0x560bfc948002 - std::thread::Builder::spawn_unchecked_::{{closure}}::hf5a62e9e4e6df1f8
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/thread/mod.rs:541:30
[INFO] [stdout]   60:     0x560bfc948002 - core::ops::function::FnOnce::call_once{{vtable.shim}}::h6d56360aeb9509a7
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   61:     0x560bfcc6b9fb - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h7a343dc551c06baa
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/alloc/src/boxed.rs:2022:9
[INFO] [stdout]   62:     0x560bfcc6b9fb - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h30b8111cbaa644f3
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/alloc/src/boxed.rs:2022:9
[INFO] [stdout]   63:     0x560bfcc6b9fb - std::sys::pal::unix::thread::Thread::new::thread_start::h7404e134e61e7a11
[INFO] [stdout]                                at /rustc/1871252fc8bb672d40787e67404e6eaae7059369/library/std/src/sys/pal/unix/thread.rs:108:17
[INFO] [stdout]   64:     0x7fb9eaa3aac3 - <unknown>
[INFO] [stdout]   65:     0x7fb9eaacba04 - __clone
[INFO] [stdout]   66:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     event::tests::test_event_handler_run
[INFO] [stdout]     sounds::tests::test_sound_lyric_path
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 4 passed; 2 failed; 0 ignored; 0 measured; 0 filtered out; finished in 10.00s
[INFO] [stdout] 
[INFO] [stderr] error: test failed, to rerun pass `--bin ratatui_music`
[INFO] running `Command { std: "docker" "inspect" "cedb7b03b8b51feededf4c3f74c5de87f7c08577c3bb57cf53cc70f5bba9e1a1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "cedb7b03b8b51feededf4c3f74c5de87f7c08577c3bb57cf53cc70f5bba9e1a1", kill_on_drop: false }`
[INFO] [stdout] cedb7b03b8b51feededf4c3f74c5de87f7c08577c3bb57cf53cc70f5bba9e1a1
[INFO] testing IKchen/ratatui_musicplayer against try#b642703cf9526da1e72c0b6755753b939a9c6b6d for pr-125151
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FIKchen%2Fratatui_musicplayer" "/workspace/builds/worker-2-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-2-tc2/source'...
[INFO] [stderr] done.
[INFO] validating manifest of git repo https://github.com/IKchen/ratatui_musicplayer on toolchain b642703cf9526da1e72c0b6755753b939a9c6b6d
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+b642703cf9526da1e72c0b6755753b939a9c6b6d" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] started tweaking git repo https://github.com/IKchen/ratatui_musicplayer
[INFO] finished tweaking git repo https://github.com/IKchen/ratatui_musicplayer
[INFO] tweaked toml for git repo https://github.com/IKchen/ratatui_musicplayer written to /workspace/builds/worker-2-tc2/source/Cargo.toml
[INFO] crate git repo https://github.com/IKchen/ratatui_musicplayer already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+b642703cf9526da1e72c0b6755753b939a9c6b6d" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:59a85a07ab18ca8720692f8e61effa1c651d9e2ca591e072c2b212bb91a6b8b5" "/opt/rustwide/cargo-home/bin/cargo" "+b642703cf9526da1e72c0b6755753b939a9c6b6d" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 7cee22cdfcd252957900e23b2bcc2e7c8d78e5ff0ad44864ad68b9ed8bb5c702
[INFO] running `Command { std: "docker" "start" "-a" "7cee22cdfcd252957900e23b2bcc2e7c8d78e5ff0ad44864ad68b9ed8bb5c702", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "7cee22cdfcd252957900e23b2bcc2e7c8d78e5ff0ad44864ad68b9ed8bb5c702", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "7cee22cdfcd252957900e23b2bcc2e7c8d78e5ff0ad44864ad68b9ed8bb5c702", kill_on_drop: false }`
[INFO] [stdout] 7cee22cdfcd252957900e23b2bcc2e7c8d78e5ff0ad44864ad68b9ed8bb5c702
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:59a85a07ab18ca8720692f8e61effa1c651d9e2ca591e072c2b212bb91a6b8b5" "/opt/rustwide/cargo-home/bin/cargo" "+b642703cf9526da1e72c0b6755753b939a9c6b6d" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 90837e9eb38e4c280d5f52a15bd9c787f8b8ff40cb39b719a1a4899dc41b484b
[INFO] running `Command { std: "docker" "start" "-a" "90837e9eb38e4c280d5f52a15bd9c787f8b8ff40cb39b719a1a4899dc41b484b", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.79
[INFO] [stderr]    Compiling autocfg v1.2.0
[INFO] [stderr]    Compiling libc v0.2.153
[INFO] [stderr]    Compiling log v0.4.21
[INFO] [stderr]    Compiling serde v1.0.197
[INFO] [stderr]    Compiling pkg-config v0.3.30
[INFO] [stderr]    Compiling ahash v0.8.11
[INFO] [stderr]    Compiling rustversion v1.0.15
[INFO] [stderr]    Compiling signal-hook v0.3.17
[INFO] [stderr]    Compiling arrayvec v0.7.4
[INFO] [stderr]    Compiling bytemuck v1.15.0
[INFO] [stderr]    Compiling lock_api v0.4.11
[INFO] [stderr]    Compiling num-traits v0.2.18
[INFO] [stderr]    Compiling slab v0.4.9
[INFO] [stderr]    Compiling symphonia-core v0.5.4
[INFO] [stderr]    Compiling alsa-sys v0.3.1
[INFO] [stderr]    Compiling encoding_rs v0.8.33
[INFO] [stderr]    Compiling quote v1.0.35
[INFO] [stderr]    Compiling syn v2.0.58
[INFO] [stderr]    Compiling signal-hook-registry v1.4.1
[INFO] [stderr]    Compiling mio v0.8.11
[INFO] [stderr]    Compiling parking_lot_core v0.9.9
[INFO] [stderr]    Compiling parking_lot v0.12.1
[INFO] [stderr]    Compiling num_cpus v1.16.0
[INFO] [stderr]    Compiling symphonia-metadata v0.5.4
[INFO] [stderr]    Compiling socket2 v0.5.6
[INFO] [stderr]    Compiling num-integer v0.1.46
[INFO] [stderr]    Compiling futures-channel v0.3.30
[INFO] [stderr]    Compiling tracing-core v0.1.32
[INFO] [stderr]    Compiling thiserror v1.0.58
[INFO] [stderr]    Compiling futures-io v0.3.30
[INFO] [stderr]    Compiling paste v1.0.14
[INFO] [stderr]    Compiling memchr v2.7.2
[INFO] [stderr]    Compiling cpal v0.15.3
[INFO] [stderr]    Compiling ogg v0.8.0
[INFO] [stderr]    Compiling hashbrown v0.14.3
[INFO] [stderr]    Compiling symphonia-bundle-mp3 v0.5.4
[INFO] [stderr]    Compiling syn v1.0.109
[INFO] [stderr]    Compiling signal-hook-mio v0.2.3
[INFO] [stderr]    Compiling rustfft v6.2.0
[INFO] [stderr]    Compiling dasp_sample v0.11.0
[INFO] [stderr]    Compiling either v1.10.0
[INFO] [stderr]    Compiling strength_reduce v0.2.4
[INFO] [stderr]    Compiling overload v0.1.1
[INFO] [stderr]    Compiling nu-ansi-term v0.46.0
[INFO] [stderr]    Compiling itertools v0.12.1
[INFO] [stderr]    Compiling lru v0.12.3
[INFO] [stderr]    Compiling symphonia v0.5.4
[INFO] [stderr]    Compiling transpose v0.2.3
[INFO] [stderr]    Compiling lewton v0.10.2
[INFO] [stderr]    Compiling tracing-log v0.2.0
[INFO] [stderr]    Compiling primal-check v0.3.3
[INFO] [stderr]    Compiling num-complex v0.4.5
[INFO] [stderr]    Compiling sharded-slab v0.1.7
[INFO] [stderr]    Compiling thread_local v1.1.8
[INFO] [stderr]    Compiling claxon v0.4.3
[INFO] [stderr]    Compiling indoc v2.0.5
[INFO] [stderr]    Compiling cassowary v0.3.0
[INFO] [stderr]    Compiling hound v3.5.1
[INFO] [stderr]    Compiling unicode-width v0.1.11
[INFO] [stderr]    Compiling unicode-segmentation v1.11.0
[INFO] [stderr]    Compiling tracing-subscriber v0.3.18
[INFO] [stderr]    Compiling serde_derive v1.0.197
[INFO] [stderr]    Compiling futures-macro v0.3.30
[INFO] [stderr]    Compiling tokio-macros v2.2.0
[INFO] [stderr]    Compiling strum_macros v0.25.3
[INFO] [stderr]    Compiling thiserror-impl v1.0.58
[INFO] [stderr]    Compiling stability v0.1.1
[INFO] [stderr]    Compiling futures-util v0.3.30
[INFO] [stderr]    Compiling tokio v1.37.0
[INFO] [stderr]    Compiling tracing-attributes v0.1.27
[INFO] [stderr]    Compiling mp3-duration v0.1.10
[INFO] [stderr]    Compiling strum v0.25.0
[INFO] [stderr]    Compiling tracing v0.1.40
[INFO] [stderr]    Compiling futures-executor v0.3.30
[INFO] [stderr]    Compiling futures v0.3.30
[INFO] [stderr]    Compiling tokio-stream v0.1.15
[INFO] [stderr]    Compiling tokio-util v0.7.10
[INFO] [stderr]    Compiling bitflags v2.5.0
[INFO] [stderr]    Compiling alsa v0.9.0
[INFO] [stderr]    Compiling crossterm v0.27.0
[INFO] [stderr]    Compiling ratatui v0.25.0
[INFO] [stderr]    Compiling rodio v0.17.3
[INFO] [stderr]    Compiling ratatui_music v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `std::io::Error`
[INFO] [stdout]  --> src/error.rs:3:6
[INFO] [stdout]   |
[INFO] [stdout] 3 | use  std::io::Error;
[INFO] [stdout]   |      ^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `interval`
[INFO] [stdout]  --> src/event.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 |     time::{interval,Duration},
[INFO] [stdout]   |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::channel::oneshot::Cancellation`
[INFO] [stdout]   --> src/event.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use futures::channel::oneshot::Cancellation;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ok`, `select`
[INFO] [stdout]   --> src/event.rs:12:23
[INFO] [stdout]    |
[INFO] [stdout] 12 | use futures::future::{ok, select};
[INFO] [stdout]    |                       ^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `CrosstermBackend`
[INFO] [stdout]  --> src/tui.rs:1:53
[INFO] [stdout]   |
[INFO] [stdout] 1 | use ratatui::backend::{CrosstermBackend as Backend, CrosstermBackend};
[INFO] [stdout]   |                                                     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `event`
[INFO] [stdout]  --> src/tui.rs:3:28
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::{error::MyError,event};
[INFO] [stdout]   |                            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `thread`
[INFO] [stdout]  --> src/tui.rs:4:11
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::{thread,io};
[INFO] [stdout]   |           ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/components.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stdout]  --> src/components.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::Mutex`
[INFO] [stdout]  --> src/components.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::Mutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]  --> src/components.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::app::App;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::tracing::TracingLog`
[INFO] [stdout]   --> src/components.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::tracing::TracingLog;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/components/home.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stdout]  --> src/components/home.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::Mutex`
[INFO] [stdout]  --> src/components/home.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::Mutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing::info`
[INFO] [stdout]  --> src/components/home.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tracing::info;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]  --> src/components/home.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::app::App;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::tracinglog::TracingLogComponent`
[INFO] [stdout]   --> src/components/home.rs:11:6
[INFO] [stdout]    |
[INFO] [stdout] 11 | use  crate::components::tracinglog::TracingLogComponent;
[INFO] [stdout]    |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::tracing::TracingLog`
[INFO] [stdout]   --> src/components/home.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use crate::tracing::TracingLog;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/components/quit.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::future::ok`
[INFO] [stdout]  --> src/components/quit.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use futures::future::ok;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::prelude::Direction::Vertical`
[INFO] [stdout]  --> src/components/quit.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use ratatui::prelude::Direction::Vertical;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::Mutex`
[INFO] [stdout]  --> src/components/quit.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::Mutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]  --> src/components/quit.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::app::App;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ptr::addr_of_mut`
[INFO] [stdout]  --> src/components/tracinglog.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::ptr::addr_of_mut;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/components/tracinglog.rs:2:17
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::runtime::Runtime`
[INFO] [stdout]  --> src/components/tracinglog.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::runtime::Runtime;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stdout]  --> src/components/tracinglog.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::Mutex`
[INFO] [stdout]  --> src/components/tracinglog.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::sync::Mutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Event`, `Level`, `Subscriber`, `event`, `info`, `warn`
[INFO] [stdout]   --> src/components/tracinglog.rs:11:15
[INFO] [stdout]    |
[INFO] [stdout] 11 | use tracing::{Subscriber, Event, event, Level, info, warn};
[INFO] [stdout]    |               ^^^^^^^^^^  ^^^^^  ^^^^^  ^^^^^  ^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]   --> src/components/tracinglog.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use crate::app::App;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::tracing::TracingLog`
[INFO] [stdout]   --> src/components/tracinglog.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::tracing::TracingLog;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::Path`
[INFO] [stdout]  --> src/components/filelist.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::path::Path;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc`, `Mutex`
[INFO] [stdout]  --> src/components/filelist.rs:2:17
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::fs`
[INFO] [stdout]  --> src/components/filelist.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::fs;
[INFO] [stdout]   |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]  --> src/components/filelist.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::app::App;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing_subscriber::field::display::Messages`
[INFO] [stdout]  --> src/components/playzone.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing_subscriber::field::display::Messages;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc`, `Mutex`
[INFO] [stdout]  --> src/components/analysis.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Receiver`
[INFO] [stdout]  --> src/components/analysis.rs:2:23
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::sync::mpsc::{Receiver, Sender};
[INFO] [stdout]   |                       ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]  --> src/components/analysis.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::thread;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `log::info`
[INFO] [stdout]  --> src/components/analysis.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use log::info;
[INFO] [stdout]   |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc`, `Mutex`
[INFO] [stdout]  --> src/components/musicprogress.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]  --> src/components/musicprogress.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::thread;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stdout]  --> src/components/lyric.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::text::Line`
[INFO] [stdout]  --> src/components/apptitle.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use ratatui::text::Line;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ops::DerefMut`
[INFO] [stdout]  --> src/app.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::ops::DerefMut;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `channel`
[INFO] [stdout]  --> src/app.rs:4:23
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::sync::mpsc::{channel, Sender};
[INFO] [stdout]   |                       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/app.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::channel::mpsc::unbounded`
[INFO] [stdout]  --> src/app.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use futures::channel::mpsc::unbounded;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::future::try_join`
[INFO] [stdout]  --> src/app.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use futures::future::try_join;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::time::Instant`
[INFO] [stdout]   --> src/app.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use tokio::time::Instant;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `runtime`, `try_join`
[INFO] [stdout]   --> src/app.rs:13:13
[INFO] [stdout]    |
[INFO] [stdout] 13 | use tokio::{runtime, try_join};
[INFO] [stdout]    |             ^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `UnboundedReceiver`, `UnboundedSender`
[INFO] [stdout]   --> src/app.rs:14:25
[INFO] [stdout]    |
[INFO] [stdout] 14 | use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender};
[INFO] [stdout]    |                         ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::task::JoinHandle`
[INFO] [stdout]   --> src/app.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use tokio::task::JoinHandle;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio_util::sync::CancellationToken`
[INFO] [stdout]   --> src/app.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use tokio_util::sync::CancellationToken;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing::info`
[INFO] [stdout]   --> src/app.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use tracing::info;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing_subscriber::fmt::writer::EitherWriter::A`
[INFO] [stdout]   --> src/app.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use tracing_subscriber::fmt::writer::EitherWriter::A;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Identity`, `SubscriberExt`
[INFO] [stdout]   --> src/app.rs:19:33
[INFO] [stdout]    |
[INFO] [stdout] 19 | use tracing_subscriber::layer::{Identity, SubscriberExt};
[INFO] [stdout]    |                                 ^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::home::Home`
[INFO] [stdout]   --> src/app.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use crate::components::home::Home;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `action`, `app`, `render`
[INFO] [stdout]   --> src/app.rs:24:13
[INFO] [stdout]    |
[INFO] [stdout] 24 | use crate::{action, app, event, render};
[INFO] [stdout]    |             ^^^^^^  ^^^         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::lyric::LyricController`
[INFO] [stdout]   --> src/app.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 | use crate::lyric::LyricController;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]    --> src/app.rs:200:69
[INFO] [stdout]     |
[INFO] [stdout] 200 |     let (sample_sender,sample_receiver)= std::sync::mpsc::channel();;//播放时，发送样本数据给fft
[INFO] [stdout]     |                                                                     ^ help: remove this semicolon
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(redundant_semicolons)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `fmt`, `string::ToString`
[INFO] [stdout]  --> src/action.rs:1:11
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::{fmt, string::ToString};
[INFO] [stdout]   |           ^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `KeyEvent`
[INFO] [stdout]  --> src/action.rs:4:33
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crossterm::event::{KeyCode, KeyEvent};
[INFO] [stdout]   |                                 ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `MutexGuard`, `mpsc`
[INFO] [stdout]  --> src/action.rs:5:19
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::{mpsc, MutexGuard,Mutex};
[INFO] [stdout]   |                   ^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `UnboundedReceiver`, `UnboundedSender`
[INFO] [stdout]  --> src/action.rs:6:25
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender};
[INFO] [stdout]   |                         ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::task::JoinHandle`
[INFO] [stdout]  --> src/action.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::task::JoinHandle;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio_util::sync::CancellationToken`
[INFO] [stdout]  --> src/action.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio_util::sync::CancellationToken;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Deserializer`, `Visitor`, `self`
[INFO] [stdout]   --> src/action.rs:11:10
[INFO] [stdout]    |
[INFO] [stdout] 11 |     de::{self, Deserializer, Visitor},
[INFO] [stdout]    |          ^^^^  ^^^^^^^^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::apptitle::AppTitle`
[INFO] [stdout]   --> src/action.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use crate::components::apptitle::AppTitle;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::filelist::FileListComponent`
[INFO] [stdout]   --> src/action.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | use crate::components::filelist::FileListComponent;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::event`
[INFO] [stdout]   --> src/action.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | use crate::event;
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::mpsc::Receiver`
[INFO] [stdout]  --> src/render.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::sync::mpsc::Receiver;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]  --> src/render.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::thread;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/render.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::Frame`
[INFO] [stdout]  --> src/render.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use ratatui::Frame;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Margin`
[INFO] [stdout]  --> src/render.rs:7:54
[INFO] [stdout]   |
[INFO] [stdout] 7 | use ratatui::layout::{Constraint, Direction, Layout, Margin};
[INFO] [stdout]   |                                                      ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `UnboundedReceiver`, `UnboundedSender`
[INFO] [stdout]  --> src/render.rs:8:25
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender};
[INFO] [stdout]   |                         ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `spawn`
[INFO] [stdout]   --> src/render.rs:10:31
[INFO] [stdout]    |
[INFO] [stdout] 10 | use tokio::task::{JoinHandle, spawn};
[INFO] [stdout]    |                               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing::info`
[INFO] [stdout]   --> src/render.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use tracing::info;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::action::Action`
[INFO] [stdout]   --> src/render.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use crate::action::Action;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::analysis::Analysis`
[INFO] [stdout]   --> src/render.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::components::analysis::Analysis;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::home::Home`
[INFO] [stdout]   --> src/render.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::components::home::Home;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::quit::Quit`
[INFO] [stdout]   --> src/render.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use crate::components::quit::Quit;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::lyric::Lyric`
[INFO] [stdout]   --> src/render.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use crate::lyric::Lyric;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::musicplayer::MusicPlayer`
[INFO] [stdout]   --> src/render.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | use crate::musicplayer::MusicPlayer;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/tracing.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::text::Text`
[INFO] [stdout]  --> src/tracing.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use ratatui::text::Text;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::time::timeout`
[INFO] [stdout]  --> src/tracing.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use tokio::time::timeout;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing::info`
[INFO] [stdout]   --> src/tracing.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use tracing::info;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing_subscriber::Registry`
[INFO] [stdout]   --> src/tracing.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use tracing_subscriber::Registry;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around type
[INFO] [stdout]   --> src/tracing.rs:71:86
[INFO] [stdout]    |
[INFO] [stdout] 71 | pub  fn recv_log(log_receiver:  UnboundedReceiver<String>, app:  Arc<Mutex<App>> ) ->(JoinHandle<()>) {
[INFO] [stdout]    |                                                                                      ^              ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 71 - pub  fn recv_log(log_receiver:  UnboundedReceiver<String>, app:  Arc<Mutex<App>> ) ->(JoinHandle<()>) {
[INFO] [stdout] 71 + pub  fn recv_log(log_receiver:  UnboundedReceiver<String>, app:  Arc<Mutex<App>> ) ->JoinHandle<()> {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::arch::x86_64::_addcarryx_u64`
[INFO] [stdout]  --> src/fft.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::arch::x86_64::_addcarryx_u64;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs::File`
[INFO] [stdout]  --> src/fft.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::fs::File;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]  --> src/fft.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::io::BufReader;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Sender`
[INFO] [stdout]  --> src/fft.rs:7:33
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::sync::mpsc::{Receiver, Sender};
[INFO] [stdout]   |                                 ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]  --> src/fft.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::thread;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TryFutureExt`
[INFO] [stdout]  --> src/fft.rs:9:24
[INFO] [stdout]   |
[INFO] [stdout] 9 | use futures::{SinkExt, TryFutureExt};
[INFO] [stdout]   |                        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Decoder`
[INFO] [stdout]   --> src/fft.rs:12:13
[INFO] [stdout]    |
[INFO] [stdout] 12 | use rodio::{Decoder, Source};
[INFO] [stdout]    |             ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::action::Action`
[INFO] [stdout]   --> src/fft.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::action::Action;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::MyError`
[INFO] [stdout]   --> src/fft.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use crate::error::MyError;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around type
[INFO] [stdout]    --> src/fft.rs:140:100
[INFO] [stdout]     |
[INFO] [stdout] 140 |  pub async fn get_fft_result(mut music_reciver:UnboundedReceiver<Vec<f32>>, app:Arc<Mutex<App>>) ->(JoinHandle<()>){
[INFO] [stdout]     |                                                                                                    ^              ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 140 -  pub async fn get_fft_result(mut music_reciver:UnboundedReceiver<Vec<f32>>, app:Arc<Mutex<App>>) ->(JoinHandle<()>){
[INFO] [stdout] 140 +  pub async fn get_fft_result(mut music_reciver:UnboundedReceiver<Vec<f32>>, app:Arc<Mutex<App>>) ->JoinHandle<()>{
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::Path`
[INFO] [stdout]  --> src/musicplayer.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::path::Path;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/musicplayer.rs:4:17
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Sample`
[INFO] [stdout]   --> src/musicplayer.rs:81:14
[INFO] [stdout]    |
[INFO] [stdout] 81 | use rodio::{ Sample};
[INFO] [stdout]    |              ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Receiver`, `channel`
[INFO] [stdout]   --> src/musicplayer.rs:82:23
[INFO] [stdout]    |
[INFO] [stdout] 82 | use std::sync::mpsc::{channel, Receiver, Sender};
[INFO] [stdout]    |                       ^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread::spawn`
[INFO] [stdout]   --> src/musicplayer.rs:83:5
[INFO] [stdout]    |
[INFO] [stdout] 83 | use std::thread::spawn;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Instant`
[INFO] [stdout]   --> src/musicplayer.rs:84:27
[INFO] [stdout]    |
[INFO] [stdout] 84 | use std::time::{Duration, Instant};
[INFO] [stdout]    |                           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]   --> src/musicplayer.rs:88:5
[INFO] [stdout]    |
[INFO] [stdout] 88 | use crate::app::App;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::MyError`
[INFO] [stdout]   --> src/musicplayer.rs:89:5
[INFO] [stdout]    |
[INFO] [stdout] 89 | use crate::error::MyError;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ffi::OsStr`
[INFO] [stdout]  --> src/lyric.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::ffi::OsStr;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs`
[INFO] [stdout]  --> src/lyric.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::fs;
[INFO] [stdout]   |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::MyError`
[INFO] [stdout]  --> src/lyric.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::error::MyError;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::future::ok`
[INFO] [stdout]  --> src/sounds.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use futures::future::ok;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::Component`
[INFO] [stdout]   --> src/main.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::components::Component;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::Write`
[INFO] [stdout]   --> src/main.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use std::io::Write;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `app::App`
[INFO] [stdout]   --> src/main.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | use app::App;
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Decoder`, `OutputStream`, `Sink`, `Source`
[INFO] [stdout]   --> src/main.rs:23:13
[INFO] [stdout]    |
[INFO] [stdout] 23 | use rodio::{Decoder, OutputStream, Sink, Source};
[INFO] [stdout]    |             ^^^^^^^  ^^^^^^^^^^^^  ^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rustfft::num_complex::Complex`
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 | use rustfft::num_complex::Complex;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rustfft::FftPlanner`
[INFO] [stdout]   --> src/main.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 | use rustfft::FftPlanner;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs::File`
[INFO] [stdout]   --> src/main.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 | use std::fs::File;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]   --> src/main.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 | use std::io::BufReader;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::Path`
[INFO] [stdout]   --> src/main.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | use std::path::Path;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc`, `Mutex`
[INFO] [stdout]   --> src/main.rs:29:17
[INFO] [stdout]    |
[INFO] [stdout] 29 | use std::sync::{Arc, Mutex};
[INFO] [stdout]    |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::mpsc::channel`
[INFO] [stdout]   --> src/main.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 | use std::sync::mpsc::channel;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]   --> src/main.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 | use std::thread;
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]   --> src/main.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 | use std::time::Duration;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rustfft::num_traits::ToPrimitive`
[INFO] [stdout]   --> src/main.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 | use rustfft::num_traits::ToPrimitive;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc`
[INFO] [stdout]   --> src/main.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 | use tokio::sync::mpsc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::fft::FFTController`
[INFO] [stdout]   --> src/main.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 | use crate::fft::FFTController;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::lyric::LyricController`
[INFO] [stdout]   --> src/main.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 | use crate::lyric::LyricController;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::musicplayer::MusicPlayer`
[INFO] [stdout]   --> src/main.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 | use crate::musicplayer::MusicPlayer;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::sounds::SoundsList`
[INFO] [stdout]   --> src/main.rs:38:5
[INFO] [stdout]    |
[INFO] [stdout] 38 | use crate::sounds::SoundsList;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `err`
[INFO] [stdout]   --> src/event.rs:77:38
[INFO] [stdout]    |
[INFO] [stdout] 77 | ...                   Some(Err(err)) => {
[INFO] [stdout]    |                                ^^^ help: if this is intentional, prefix it with an underscore: `_err`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/event.rs:128:9
[INFO] [stdout]     |
[INFO] [stdout] 128 |     let mut cancelation_token = CancellationToken::new();
[INFO] [stdout]     |         ----^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/render.rs:129:53
[INFO] [stdout]     |
[INFO] [stdout] 129 | ...                   let mut sub_layout=Layout::new(
[INFO] [stdout]     |                           ----^^^^^^^^^^
[INFO] [stdout]     |                           |
[INFO] [stdout]     |                           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/render.rs:133:53
[INFO] [stdout]     |
[INFO] [stdout] 133 | ...                   let mut fft_layout=Layout::new(
[INFO] [stdout]     |                           ----^^^^^^^^^^
[INFO] [stdout]     |                           |
[INFO] [stdout]     |                           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/render.rs:137:53
[INFO] [stdout]     |
[INFO] [stdout] 137 | ...                   let mut playzone_layout=Layout::new(
[INFO] [stdout]     |                           ----^^^^^^^^^^^^^^^
[INFO] [stdout]     |                           |
[INFO] [stdout]     |                           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: irrefutable `if let` pattern
[INFO] [stdout]    --> src/app.rs:218:16
[INFO] [stdout]     |
[INFO] [stdout] 218 |             if let (action,path) = action_receiver.recv().unwrap() {
[INFO] [stdout]     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this pattern will always match, so the `if let` is useless
[INFO] [stdout]     = help: consider replacing the `if let` with a `let`
[INFO] [stdout]     = note: `#[warn(irrefutable_let_patterns)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:153:9
[INFO] [stdout]     |
[INFO] [stdout] 153 |     let mut app=App::new();
[INFO] [stdout]     |         ----^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:158:11
[INFO] [stdout]     |
[INFO] [stdout] 158 |     let  (mut log,log_receiver) =TracingLog::new();
[INFO] [stdout]     |           ----^^^
[INFO] [stdout]     |           |
[INFO] [stdout]     |           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:165:25
[INFO] [stdout]     |
[INFO] [stdout] 165 |     let (action_sender, mut action_receiver) = std::sync::mpsc::channel();
[INFO] [stdout]     |                         ----^^^^^^^^^^^^^^^
[INFO] [stdout]     |                         |
[INFO] [stdout]     |                         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:168:9
[INFO] [stdout]     |
[INFO] [stdout] 168 |     let mut tui = Tui::new()?;
[INFO] [stdout]     |         ----^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: irrefutable `while let` pattern
[INFO] [stdout]    --> src/fft.rs:144:16
[INFO] [stdout]     |
[INFO] [stdout] 144 |          while let mut fft_result=music_reciver.recv().await.unwrap(){
[INFO] [stdout]     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this pattern will always match, so the loop will never exit
[INFO] [stdout]     = help: consider instead using a `loop { ... }` with a `let` inside it
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `name`
[INFO] [stdout]    --> src/fft.rs:147:20
[INFO] [stdout]     |
[INFO] [stdout] 147 |              for ((name, value), new_value) in fft_buffer_clone.lock().await.iter_mut().zip(fft_result.iter()) {
[INFO] [stdout]     |                    ^^^^ help: if this is intentional, prefix it with an underscore: `_name`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/fft.rs:143:13
[INFO] [stdout]     |
[INFO] [stdout] 143 |         let mut fft_buffer_clone=Arc::clone(&app.lock().await.fft_result);
[INFO] [stdout]     |             ----^^^^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/fft.rs:144:20
[INFO] [stdout]     |
[INFO] [stdout] 144 |          while let mut fft_result=music_reciver.recv().await.unwrap(){
[INFO] [stdout]     |                    ----^^^^^^^^^^
[INFO] [stdout]     |                    |
[INFO] [stdout]     |                    help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `FutureExt`
[INFO] [stdout]   --> src/action.rs:15:15
[INFO] [stdout]    |
[INFO] [stdout] 15 | use futures::{FutureExt, StreamExt};
[INFO] [stdout]    |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StreamExt`
[INFO] [stdout]   --> src/action.rs:15:26
[INFO] [stdout]    |
[INFO] [stdout] 15 | use futures::{FutureExt, StreamExt};
[INFO] [stdout]    |                          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rustfft::num_complex::ComplexFloat`
[INFO] [stdout]  --> src/tracing.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use rustfft::num_complex::ComplexFloat;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Source`
[INFO] [stdout]   --> src/fft.rs:12:22
[INFO] [stdout]    |
[INFO] [stdout] 12 | use rodio::{Decoder, Source};
[INFO] [stdout]    |                      ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SinkExt`
[INFO] [stdout]  --> src/fft.rs:9:15
[INFO] [stdout]   |
[INFO] [stdout] 9 | use futures::{SinkExt, TryFutureExt};
[INFO] [stdout]   |               ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/event.rs:120:9
[INFO] [stdout]     |
[INFO] [stdout] 120 |         _ => {}
[INFO] [stdout]     |         ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/home.rs:36:13
[INFO] [stdout]    |
[INFO] [stdout] 36 |         let mut sub_layout=Layout::new(
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/home.rs:58:26
[INFO] [stdout]    |
[INFO] [stdout] 58 |     fn update(& mut self,action:Option<Action>)->Result<(),MyError>{
[INFO] [stdout]    |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rect`
[INFO] [stdout]   --> src/components/quit.rs:24:43
[INFO] [stdout]    |
[INFO] [stdout] 24 |     fn draw(&mut self, f: &mut Frame<'_>, rect: Rect) -> Result<(), MyError> {
[INFO] [stdout]    |                                           ^^^^ help: if this is intentional, prefix it with an underscore: `_rect`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/quit.rs:39:25
[INFO] [stdout]    |
[INFO] [stdout] 39 |     fn update(&mut self,action:Option<Action>) -> Result<(), MyError> {
[INFO] [stdout]    |                         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/tracinglog.rs:36:13
[INFO] [stdout]    |
[INFO] [stdout] 36 |         let mut liststate=ListState::default();
[INFO] [stdout]    |             ----^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/tracinglog.rs:48:14
[INFO] [stdout]    |
[INFO] [stdout] 48 |          let mut list_item:Vec<ListItem>=lines.iter().rev().map(//rev（）是倒序
[INFO] [stdout]    |              ----^^^^^^^^^
[INFO] [stdout]    |              |
[INFO] [stdout]    |              help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/tracinglog.rs:75:27
[INFO] [stdout]    |
[INFO] [stdout] 75 |     fn update(& mut self, action: Option<Action>) ->Result<(),MyError>{
[INFO] [stdout]    |                           ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:26:13
[INFO] [stdout]    |
[INFO] [stdout] 26 |         let mut vertical_scroll=0;
[INFO] [stdout]    |             ----^^^^^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:27:13
[INFO] [stdout]    |
[INFO] [stdout] 27 |         let mut vertical_scroll_state=ratatui::widgets::ScrollbarState::new(20);
[INFO] [stdout]    |             ----^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:29:13
[INFO] [stdout]    |
[INFO] [stdout] 29 |         let mut action_tx=None;
[INFO] [stdout]    |             ----^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:74:13
[INFO] [stdout]    |
[INFO] [stdout] 74 |         let mut itemlist=self.sound_list.sounds.clone();
[INFO] [stdout]    |             ----^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:77:21
[INFO] [stdout]    |
[INFO] [stdout] 77 |                 let mut listitem=ListItem::new(fileitem.name).bg(Color::Black);
[INFO] [stdout]    |                     ----^^^^^^^^
[INFO] [stdout]    |                     |
[INFO] [stdout]    |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/playzone.rs:34:26
[INFO] [stdout]    |
[INFO] [stdout] 34 |     fn update(&mut self, action: Option<Action>) -> Result<(), MyError> {
[INFO] [stdout]    |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/analysis.rs:66:13
[INFO] [stdout]    |
[INFO] [stdout] 66 |         let mut newdata: Vec<_>=self.data.iter().map(|(barname,value)|{
[INFO] [stdout]    |             ----^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/analysis.rs:70:13
[INFO] [stdout]    |
[INFO] [stdout] 70 |         let mut group=BarGroup::default().bars(&newdata);
[INFO] [stdout]    |             ----^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]    --> src/components/lyric.rs:126:26
[INFO] [stdout]     |
[INFO] [stdout] 126 |     fn update(&mut self, action: Option<Action>) -> Result<(), MyError> {
[INFO] [stdout]     |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `block`
[INFO] [stdout]   --> src/components/apptitle.rs:27:13
[INFO] [stdout]    |
[INFO] [stdout] 27 |         let block=Block::new().borders(Borders::ALL).light_red().padding(Padding::new(0,0,0,0)).title("out");
[INFO] [stdout]    |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_block`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/apptitle.rs:41:26
[INFO] [stdout]    |
[INFO] [stdout] 41 |     fn update(&mut self, action: Option<Action>) -> Result<(), MyError> {
[INFO] [stdout]    |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tx`
[INFO] [stdout]   --> src/components.rs:40:43
[INFO] [stdout]    |
[INFO] [stdout] 40 |     fn register_action_handler(&mut self, tx: Sender<Action>) {
[INFO] [stdout]    |                                           ^^ help: if this is intentional, prefix it with an underscore: `_tx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:51:13
[INFO] [stdout]    |
[INFO] [stdout] 51 |         let mut log=vec![String::new()];
[INFO] [stdout]    |             ----^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:52:13
[INFO] [stdout]    |
[INFO] [stdout] 52 |         let mut sounds_list=SoundsList::set_path("music".to_string());
[INFO] [stdout]    |             ----^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:53:13
[INFO] [stdout]    |
[INFO] [stdout] 53 |         let mut fft_result=Arc::new(Mutex::new(
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action_sender`
[INFO] [stdout]   --> src/app.rs:72:38
[INFO] [stdout]    |
[INFO] [stdout] 72 |     pub fn init_component(&mut self, action_sender: Sender<(Action,Option<String>)>){
[INFO] [stdout]    |                                      ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_action_sender`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:91:13
[INFO] [stdout]    |
[INFO] [stdout] 91 |         let mut sub_layout=Layout::new(
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:95:13
[INFO] [stdout]    |
[INFO] [stdout] 95 |         let mut fft_layout=Layout::new(
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:99:13
[INFO] [stdout]    |
[INFO] [stdout] 99 |         let mut playzone_layout=Layout::new(
[INFO] [stdout]    |             ----^^^^^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sample_rate`
[INFO] [stdout]   --> src/fft.rs:37:16
[INFO] [stdout]    |
[INFO] [stdout] 37 |     pub fn new(sample_rate: f32, fft_size: usize,sample_receiver: Receiver<f32>,music_tx: UnboundedSender<Vec<f32>>) -> Self {
[INFO] [stdout]    |                ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sample_rate`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fft_size`
[INFO] [stdout]   --> src/fft.rs:37:34
[INFO] [stdout]    |
[INFO] [stdout] 37 |     pub fn new(sample_rate: f32, fft_size: usize,sample_receiver: Receiver<f32>,music_tx: UnboundedSender<Vec<f32>>) -> Self {
[INFO] [stdout]    |                                  ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_fft_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: irrefutable `while let` pattern
[INFO] [stdout]   --> src/fft.rs:83:19
[INFO] [stdout]    |
[INFO] [stdout] 83 |             while let sample=self.sample_receive.recv().unwrap() {
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this pattern will always match, so the loop will never exit
[INFO] [stdout]    = help: consider instead using a `loop { ... }` with a `let` inside it
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `energy`
[INFO] [stdout]    --> src/fft.rs:129:18
[INFO] [stdout]     |
[INFO] [stdout] 129 |         for (i, &energy) in note_energies.iter().enumerate() {
[INFO] [stdout]     |                  ^^^^^^ help: if this is intentional, prefix it with an underscore: `_energy`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `note_name`
[INFO] [stdout]    --> src/fft.rs:130:17
[INFO] [stdout]     |
[INFO] [stdout] 130 |             let note_name = self.midi_number_to_note_name(i as i32 + 60); // C4开始
[INFO] [stdout]     |                 ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_note_name`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/musicplayer.rs:57:11
[INFO] [stdout]    |
[INFO] [stdout] 57 |       let mut source1 = Decoder::new(buf_reader1).unwrap().convert_samples::<f32>();
[INFO] [stdout]    |           ----^^^^^^^
[INFO] [stdout]    |           |
[INFO] [stdout]    |           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/musicplayer.rs:58:11
[INFO] [stdout]    |
[INFO] [stdout] 58 |       let mut my_source = MyCustomSource::new(source1, sample_sender);
[INFO] [stdout]    |           ----^^^^^^^^^
[INFO] [stdout]    |           |
[INFO] [stdout]    |           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/lyric.rs:28:13
[INFO] [stdout]    |
[INFO] [stdout] 28 |         let mut path=path;
[INFO] [stdout]    |             ----^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/lyric.rs:29:13
[INFO] [stdout]    |
[INFO] [stdout] 29 |         let mut lyric=vec![Lyric::new()];
[INFO] [stdout]    |             ----^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/lyric.rs:30:13
[INFO] [stdout]    |
[INFO] [stdout] 30 |         let mut time=String::new();
[INFO] [stdout]    |             ----^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/lyric.rs:31:13
[INFO] [stdout]    |
[INFO] [stdout] 31 |         let mut filestring=String::new();//歌词string
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `hanning_window` is never used
[INFO] [stdout]   --> src/main.rs:48:9
[INFO] [stdout]    |
[INFO] [stdout] 48 |      fn hanning_window(length: usize) -> Vec<f32> {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]  --> src/error.rs:9:13
[INFO] [stdout]   |
[INFO] [stdout] 9 |     IoError(std::io::Error),//打印失败
[INFO] [stdout]   |     ------- ^^^^^^^^^^^^^^
[INFO] [stdout]   |     |
[INFO] [stdout]   |     field in this variant
[INFO] [stdout]   |
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]   |
[INFO] [stdout] 9 |     IoError(()),//打印失败
[INFO] [stdout]   |             ~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/error.rs:10:15
[INFO] [stdout]    |
[INFO] [stdout] 10 |     JoinError(tokio::task::JoinError),
[INFO] [stdout]    |     --------- ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 10 |     JoinError(()),
[INFO] [stdout]    |               ~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/error.rs:12:20
[INFO] [stdout]    |
[INFO] [stdout] 12 |     TokioSendError(tokio::sync::mpsc::error::SendError<Action>),//线程发送失败
[INFO] [stdout]    |     -------------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 12 |     TokioSendError(()),//线程发送失败
[INFO] [stdout]    |                    ~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Init`, `Quit`, `Closed`, `Tick`, and `Render` are never constructed
[INFO] [stdout]   --> src/event.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub enum  Event{
[INFO] [stdout]    |           ----- variants in this enum
[INFO] [stdout] 18 |     Init,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 19 |     Quit,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 20 |     Error,
[INFO] [stdout] 21 |     Closed,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 22 |     Tick,//无事件时，渲染间隔控制
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 23 |     Render,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Event` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `event` is never read
[INFO] [stdout]   --> src/event.rs:33:9
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub struct EventHandler{
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] 33 |     pub event:Event,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `close` is never used
[INFO] [stdout]   --> src/event.rs:47:12
[INFO] [stdout]    |
[INFO] [stdout] 38 | impl  EventHandler {
[INFO] [stdout]    | ------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn close(&mut self) {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tick_test` is never used
[INFO] [stdout]    --> src/event.rs:125:15
[INFO] [stdout]     |
[INFO] [stdout] 125 | pub async  fn tick_test()->Result<(), MyError>{
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `start`, `exit`, `next`, `cancel`, and `reset` are never used
[INFO] [stdout]   --> src/tui.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl Tui{
[INFO] [stdout]    | -------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 25 |     pub fn start(&mut self)->Result<(),MyError>{
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 37 |     pub fn exit(&mut self)->Result<(),MyError>{
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub fn next(&mut self)->Result<(),MyError>{
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     pub fn cancel(&mut self)->Result<(),MyError>{
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 52 |     pub fn reset()->Result<(),MyError>{
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `init` and `register_action_handler` are never used
[INFO] [stdout]   --> src/components.rs:36:8
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub trait Component{
[INFO] [stdout]    |           --------- methods in this trait
[INFO] [stdout] ...
[INFO] [stdout] 36 |     fn init(&mut self) -> Result<(),MyError> {
[INFO] [stdout]    |        ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     fn register_action_handler(&mut self, tx: Sender<Action>) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `component_name`, `log`, and `action_tx` are never read
[INFO] [stdout]   --> src/components/home.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct Home {
[INFO] [stdout]    |            ---- fields in this struct
[INFO] [stdout] 15 |     component_name:String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 16 |     pub log:String,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 17 |     pub action_tx: Option<Sender<Action>>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/components/home.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl  Home{
[INFO] [stdout]    | ---------- associated function in this implementation
[INFO] [stdout] 20 |     pub fn new(log:String) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `component_name` is never read
[INFO] [stdout]   --> src/components/quit.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct Quit {
[INFO] [stdout]    |            ---- field in this struct
[INFO] [stdout] 13 |     component_name:String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Quit` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `vertical_scroll_state`, `horizontal_scroll_state`, `vertical_scroll`, `horizontal_scroll`, `action_tx`, and `liststate` are never read
[INFO] [stdout]   --> src/components/tracinglog.rs:20:9
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct TracingLogComponent{
[INFO] [stdout]    |            ------------------- fields in this struct
[INFO] [stdout] 19 |     pub logs: String,
[INFO] [stdout] 20 |     pub vertical_scroll_state: ScrollbarState,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 21 |     pub horizontal_scroll_state: ScrollbarState,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 22 |     pub vertical_scroll: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 23 |     pub horizontal_scroll: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 24 |     pub action_tx: Option<Sender<Action>>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 25 |     pub liststate:ListState,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TracingLogComponent` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `vertical_scroll`, `vertical_scroll_state`, and `action_tx` are never read
[INFO] [stdout]   --> src/components/filelist.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct FileListComponent {
[INFO] [stdout]    |            ----------------- fields in this struct
[INFO] [stdout] 17 |     pub sound_list:SoundsList,
[INFO] [stdout] 18 |     pub vertical_scroll:usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 19 |     pub vertical_scroll_state:ScrollbarState,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 20 |     pub action_tx: Option<Sender<Action>>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FileListComponent` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `action_sender` is never read
[INFO] [stdout]   --> src/components/analysis.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct Analysis{
[INFO] [stdout]    |            -------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 18 |     pub action_sender:Option<Sender<Action>>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Analysis` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `action_tx` is never read
[INFO] [stdout]   --> src/components/lyric.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct LyricZone{
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 21 |     pub action_tx: Option<Sender<Action>>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `LyricZone` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `title` is never read
[INFO] [stdout]   --> src/components/apptitle.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct AppTitle{
[INFO] [stdout]    |            -------- field in this struct
[INFO] [stdout] 14 |     pub title: String,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AppTitle` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `should_quit`, `tick_rate`, and `frame_rate` are never read
[INFO] [stdout]   --> src/app.rs:36:9
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub struct App{
[INFO] [stdout]    |            --- fields in this struct
[INFO] [stdout] 36 |     pub should_quit:bool,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 37 |     pub tick_rate: f64,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 38 |     pub frame_rate: f64,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `draw_component` and `get_soundlist` are never used
[INFO] [stdout]    --> src/app.rs:85:12
[INFO] [stdout]     |
[INFO] [stdout] 46  | impl App{
[INFO] [stdout]     | -------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 85  |     pub fn draw_component(&mut self, frame: &mut Frame){
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 142 |     pub fn get_soundlist(&self)->Vec<(usize,String)>{
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `action` is never read
[INFO] [stdout]   --> src/action.rs:62:9
[INFO] [stdout]    |
[INFO] [stdout] 61 | pub struct ActionReactor {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 62 |     pub action: Action,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `cancelation_token` and `task` are never read
[INFO] [stdout]   --> src/render.rs:27:9
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub struct Render {
[INFO] [stdout]    |            ------ fields in this struct
[INFO] [stdout] 27 |     pub cancelation_token: CancellationToken,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 30 |     pub task: JoinHandle<Result<(), MyError>>,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `cancel` is never used
[INFO] [stdout]    --> src/render.rs:165:12
[INFO] [stdout]     |
[INFO] [stdout] 33  | impl Render {
[INFO] [stdout]     | ----------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 165 |     pub fn cancel(&mut self){
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `logs` is never read
[INFO] [stdout]   --> src/tracing.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct TracingLog{
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] 20 |     //用通信来共享内存，而不是通过共享内存来通信
[INFO] [stdout] 21 |     pub logs: Vec<String>,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TracingLog` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `pause` and `stop` are never read
[INFO] [stdout]   --> src/fft.rs:23:9
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct FFTController
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] 22 | {
[INFO] [stdout] 23 |     pub pause: bool,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 24 |     pub stop: bool,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_pause` and `set_stop` are never used
[INFO] [stdout]   --> src/fft.rs:50:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | impl FFTController
[INFO] [stdout]    | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn set_pause(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn set_stop(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `stream` and `stream_handle` are never read
[INFO] [stdout]   --> src/musicplayer.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout] 7  | pub struct MusicPlayer
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 10 |     pub stream:rodio::OutputStream,// steam 不能drop 了，不然 handle 就没用了
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 11 |     pub stream_handle:OutputStreamHandle,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `lyric` and `time` are never read
[INFO] [stdout]   --> src/lyric.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct LyricController{
[INFO] [stdout]    |            --------------- fields in this struct
[INFO] [stdout] 15 |     pub filestring:String,
[INFO] [stdout] 16 |     pub lyric:Vec<Lyric>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 17 |     pub time:String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `LyricController` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `next_selected` is never read
[INFO] [stdout]   --> src/sounds.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct SoundsList{
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 14 |     pub next_selected: Option<usize>,//是否有最新选中,用下次预备播放
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SoundsList` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_sound_name_list` is never used
[INFO] [stdout]    --> src/sounds.rs:110:12
[INFO] [stdout]     |
[INFO] [stdout] 18  | impl SoundsList{
[INFO] [stdout]     | --------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub fn get_sound_name_list(&self)->Vec<(usize,String)>{
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `id`, `total_duration`, and `lyric` are never read
[INFO] [stdout]    --> src/sounds.rs:135:9
[INFO] [stdout]     |
[INFO] [stdout] 134 | pub struct Sound{
[INFO] [stdout]     |            ----- fields in this struct
[INFO] [stdout] 135 |     pub id:usize,
[INFO] [stdout]     |         ^^
[INFO] [stdout] 136 |     pub name:String,
[INFO] [stdout] 137 |     pub total_duration:Duration,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^
[INFO] [stdout] 138 |     pub lyric:Lyric,
[INFO] [stdout]     |         ^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `Sound` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_sound_path` is never used
[INFO] [stdout]    --> src/sounds.rs:174:8
[INFO] [stdout]     |
[INFO] [stdout] 142 | impl Sound{
[INFO] [stdout]     | ---------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 174 |     fn get_sound_path(&self)->String{
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` in tuple element 0 that must be used
[INFO] [stdout]    --> src/app.rs:233:3
[INFO] [stdout]     |
[INFO] [stdout] 233 | /   tokio::join!(
[INFO] [stdout] 234 | |         //   handler.run(),没有所有权了
[INFO] [stdout] 235 | |            react,
[INFO] [stdout] 236 | |            render1,
[INFO] [stdout] 237 | |            recv_handle,//异步获取tracing 日志
[INFO] [stdout] 238 | |            fft_result_set_handle,
[INFO] [stdout] 239 | |       );
[INFO] [stdout]     | |_______^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` on by default
[INFO] [stdout]     = note: this warning originates in the macro `$crate::join` which comes from the expansion of the macro `tokio::join` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` in tuple element 1 that must be used
[INFO] [stdout]    --> src/app.rs:233:3
[INFO] [stdout]     |
[INFO] [stdout] 233 | /   tokio::join!(
[INFO] [stdout] 234 | |         //   handler.run(),没有所有权了
[INFO] [stdout] 235 | |            react,
[INFO] [stdout] 236 | |            render1,
[INFO] [stdout] 237 | |            recv_handle,//异步获取tracing 日志
[INFO] [stdout] 238 | |            fft_result_set_handle,
[INFO] [stdout] 239 | |       );
[INFO] [stdout]     | |_______^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: this warning originates in the macro `$crate::join` which comes from the expansion of the macro `tokio::join` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` in tuple element 2 that must be used
[INFO] [stdout]    --> src/app.rs:233:3
[INFO] [stdout]     |
[INFO] [stdout] 233 | /   tokio::join!(
[INFO] [stdout] 234 | |         //   handler.run(),没有所有权了
[INFO] [stdout] 235 | |            react,
[INFO] [stdout] 236 | |            render1,
[INFO] [stdout] 237 | |            recv_handle,//异步获取tracing 日志
[INFO] [stdout] 238 | |            fft_result_set_handle,
[INFO] [stdout] 239 | |       );
[INFO] [stdout]     | |_______^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: this warning originates in the macro `$crate::join` which comes from the expansion of the macro `tokio::join` (in Nightly builds, run with -Z macro-backtrace for more info)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: 225 warnings emitted
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 33.77s
[INFO] running `Command { std: "docker" "inspect" "90837e9eb38e4c280d5f52a15bd9c787f8b8ff40cb39b719a1a4899dc41b484b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "90837e9eb38e4c280d5f52a15bd9c787f8b8ff40cb39b719a1a4899dc41b484b", kill_on_drop: false }`
[INFO] [stdout] 90837e9eb38e4c280d5f52a15bd9c787f8b8ff40cb39b719a1a4899dc41b484b
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:59a85a07ab18ca8720692f8e61effa1c651d9e2ca591e072c2b212bb91a6b8b5" "/opt/rustwide/cargo-home/bin/cargo" "+b642703cf9526da1e72c0b6755753b939a9c6b6d" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 96c211e385a25b85887d6573bf2cc5457be8ed786a49274cf87e1e5672d2074e
[INFO] running `Command { std: "docker" "start" "-a" "96c211e385a25b85887d6573bf2cc5457be8ed786a49274cf87e1e5672d2074e", kill_on_drop: false }`
[INFO] [stderr]    Compiling ratatui_music v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `std::io::Error`
[INFO] [stdout]  --> src/error.rs:3:6
[INFO] [stdout]   |
[INFO] [stdout] 3 | use  std::io::Error;
[INFO] [stdout]   |      ^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `interval`
[INFO] [stdout]  --> src/event.rs:8:12
[INFO] [stdout]   |
[INFO] [stdout] 8 |     time::{interval,Duration},
[INFO] [stdout]   |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::channel::oneshot::Cancellation`
[INFO] [stdout]   --> src/event.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use futures::channel::oneshot::Cancellation;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ok`, `select`
[INFO] [stdout]   --> src/event.rs:12:23
[INFO] [stdout]    |
[INFO] [stdout] 12 | use futures::future::{ok, select};
[INFO] [stdout]    |                       ^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::test`
[INFO] [stdout]    --> src/event.rs:164:9
[INFO] [stdout]     |
[INFO] [stdout] 164 |     use tokio::test;
[INFO] [stdout]     |         ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::event`
[INFO] [stdout]    --> src/event.rs:166:9
[INFO] [stdout]     |
[INFO] [stdout] 166 |     use crate::event;
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `CrosstermBackend`
[INFO] [stdout]  --> src/tui.rs:1:53
[INFO] [stdout]   |
[INFO] [stdout] 1 | use ratatui::backend::{CrosstermBackend as Backend, CrosstermBackend};
[INFO] [stdout]   |                                                     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `event`
[INFO] [stdout]  --> src/tui.rs:3:28
[INFO] [stdout]   |
[INFO] [stdout] 3 | use crate::{error::MyError,event};
[INFO] [stdout]   |                            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `thread`
[INFO] [stdout]  --> src/tui.rs:4:11
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::{thread,io};
[INFO] [stdout]   |           ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/components.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stdout]  --> src/components.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::Mutex`
[INFO] [stdout]  --> src/components.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::Mutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]  --> src/components.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::app::App;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::tracing::TracingLog`
[INFO] [stdout]   --> src/components.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::tracing::TracingLog;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/components/home.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stdout]  --> src/components/home.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::Mutex`
[INFO] [stdout]  --> src/components/home.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::Mutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing::info`
[INFO] [stdout]  --> src/components/home.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tracing::info;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]  --> src/components/home.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::app::App;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::tracinglog::TracingLogComponent`
[INFO] [stdout]   --> src/components/home.rs:11:6
[INFO] [stdout]    |
[INFO] [stdout] 11 | use  crate::components::tracinglog::TracingLogComponent;
[INFO] [stdout]    |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::tracing::TracingLog`
[INFO] [stdout]   --> src/components/home.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use crate::tracing::TracingLog;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/components/quit.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::future::ok`
[INFO] [stdout]  --> src/components/quit.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use futures::future::ok;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::prelude::Direction::Vertical`
[INFO] [stdout]  --> src/components/quit.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use ratatui::prelude::Direction::Vertical;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::Mutex`
[INFO] [stdout]  --> src/components/quit.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::Mutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]  --> src/components/quit.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::app::App;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ptr::addr_of_mut`
[INFO] [stdout]  --> src/components/tracinglog.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::ptr::addr_of_mut;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/components/tracinglog.rs:2:17
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::runtime::Runtime`
[INFO] [stdout]  --> src/components/tracinglog.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::runtime::Runtime;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stdout]  --> src/components/tracinglog.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::Mutex`
[INFO] [stdout]  --> src/components/tracinglog.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::sync::Mutex;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Event`, `Level`, `Subscriber`, `event`, `info`, `warn`
[INFO] [stdout]   --> src/components/tracinglog.rs:11:15
[INFO] [stdout]    |
[INFO] [stdout] 11 | use tracing::{Subscriber, Event, event, Level, info, warn};
[INFO] [stdout]    |               ^^^^^^^^^^  ^^^^^  ^^^^^  ^^^^^  ^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]   --> src/components/tracinglog.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use crate::app::App;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::tracing::TracingLog`
[INFO] [stdout]   --> src/components/tracinglog.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::tracing::TracingLog;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::Path`
[INFO] [stdout]  --> src/components/filelist.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::path::Path;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc`, `Mutex`
[INFO] [stdout]  --> src/components/filelist.rs:2:17
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::fs`
[INFO] [stdout]  --> src/components/filelist.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::fs;
[INFO] [stdout]   |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]  --> src/components/filelist.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::app::App;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing_subscriber::field::display::Messages`
[INFO] [stdout]  --> src/components/playzone.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tracing_subscriber::field::display::Messages;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc`, `Mutex`
[INFO] [stdout]  --> src/components/analysis.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Receiver`
[INFO] [stdout]  --> src/components/analysis.rs:2:23
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::sync::mpsc::{Receiver, Sender};
[INFO] [stdout]   |                       ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]  --> src/components/analysis.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::thread;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `log::info`
[INFO] [stdout]  --> src/components/analysis.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use log::info;
[INFO] [stdout]   |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc`, `Mutex`
[INFO] [stdout]  --> src/components/musicprogress.rs:1:17
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::sync::{Arc, Mutex};
[INFO] [stdout]   |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]  --> src/components/musicprogress.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::thread;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc::UnboundedSender`
[INFO] [stdout]  --> src/components/lyric.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio::sync::mpsc::UnboundedSender;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::text::Line`
[INFO] [stdout]  --> src/components/apptitle.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use ratatui::text::Line;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ops::DerefMut`
[INFO] [stdout]  --> src/app.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::ops::DerefMut;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `channel`
[INFO] [stdout]  --> src/app.rs:4:23
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::sync::mpsc::{channel, Sender};
[INFO] [stdout]   |                       ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/app.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::channel::mpsc::unbounded`
[INFO] [stdout]  --> src/app.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use futures::channel::mpsc::unbounded;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::future::try_join`
[INFO] [stdout]  --> src/app.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use futures::future::try_join;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::time::Instant`
[INFO] [stdout]   --> src/app.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use tokio::time::Instant;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `runtime`, `try_join`
[INFO] [stdout]   --> src/app.rs:13:13
[INFO] [stdout]    |
[INFO] [stdout] 13 | use tokio::{runtime, try_join};
[INFO] [stdout]    |             ^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `UnboundedReceiver`, `UnboundedSender`
[INFO] [stdout]   --> src/app.rs:14:25
[INFO] [stdout]    |
[INFO] [stdout] 14 | use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender};
[INFO] [stdout]    |                         ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::task::JoinHandle`
[INFO] [stdout]   --> src/app.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use tokio::task::JoinHandle;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio_util::sync::CancellationToken`
[INFO] [stdout]   --> src/app.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use tokio_util::sync::CancellationToken;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing::info`
[INFO] [stdout]   --> src/app.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use tracing::info;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing_subscriber::fmt::writer::EitherWriter::A`
[INFO] [stdout]   --> src/app.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use tracing_subscriber::fmt::writer::EitherWriter::A;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Identity`, `SubscriberExt`
[INFO] [stdout]   --> src/app.rs:19:33
[INFO] [stdout]    |
[INFO] [stdout] 19 | use tracing_subscriber::layer::{Identity, SubscriberExt};
[INFO] [stdout]    |                                 ^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::home::Home`
[INFO] [stdout]   --> src/app.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use crate::components::home::Home;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `action`, `app`, `render`
[INFO] [stdout]   --> src/app.rs:24:13
[INFO] [stdout]    |
[INFO] [stdout] 24 | use crate::{action, app, event, render};
[INFO] [stdout]    |             ^^^^^^  ^^^         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::lyric::LyricController`
[INFO] [stdout]   --> src/app.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 | use crate::lyric::LyricController;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]    --> src/app.rs:200:69
[INFO] [stdout]     |
[INFO] [stdout] 200 |     let (sample_sender,sample_receiver)= std::sync::mpsc::channel();;//播放时，发送样本数据给fft
[INFO] [stdout]     |                                                                     ^ help: remove this semicolon
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(redundant_semicolons)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `fmt`, `string::ToString`
[INFO] [stdout]  --> src/action.rs:1:11
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::{fmt, string::ToString};
[INFO] [stdout]   |           ^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `KeyEvent`
[INFO] [stdout]  --> src/action.rs:4:33
[INFO] [stdout]   |
[INFO] [stdout] 4 | use crossterm::event::{KeyCode, KeyEvent};
[INFO] [stdout]   |                                 ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `MutexGuard`, `mpsc`
[INFO] [stdout]  --> src/action.rs:5:19
[INFO] [stdout]   |
[INFO] [stdout] 5 | use tokio::sync::{mpsc, MutexGuard,Mutex};
[INFO] [stdout]   |                   ^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `UnboundedReceiver`, `UnboundedSender`
[INFO] [stdout]  --> src/action.rs:6:25
[INFO] [stdout]   |
[INFO] [stdout] 6 | use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender};
[INFO] [stdout]   |                         ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::task::JoinHandle`
[INFO] [stdout]  --> src/action.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use tokio::task::JoinHandle;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio_util::sync::CancellationToken`
[INFO] [stdout]  --> src/action.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio_util::sync::CancellationToken;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Deserializer`, `Visitor`, `self`
[INFO] [stdout]   --> src/action.rs:11:10
[INFO] [stdout]    |
[INFO] [stdout] 11 |     de::{self, Deserializer, Visitor},
[INFO] [stdout]    |          ^^^^  ^^^^^^^^^^^^  ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::apptitle::AppTitle`
[INFO] [stdout]   --> src/action.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use crate::components::apptitle::AppTitle;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::filelist::FileListComponent`
[INFO] [stdout]   --> src/action.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | use crate::components::filelist::FileListComponent;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::event`
[INFO] [stdout]   --> src/action.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | use crate::event;
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::mpsc::Receiver`
[INFO] [stdout]  --> src/render.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::sync::mpsc::Receiver;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]  --> src/render.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::thread;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/render.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::Frame`
[INFO] [stdout]  --> src/render.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use ratatui::Frame;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Margin`
[INFO] [stdout]  --> src/render.rs:7:54
[INFO] [stdout]   |
[INFO] [stdout] 7 | use ratatui::layout::{Constraint, Direction, Layout, Margin};
[INFO] [stdout]   |                                                      ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `UnboundedReceiver`, `UnboundedSender`
[INFO] [stdout]  --> src/render.rs:8:25
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender};
[INFO] [stdout]   |                         ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `spawn`
[INFO] [stdout]   --> src/render.rs:10:31
[INFO] [stdout]    |
[INFO] [stdout] 10 | use tokio::task::{JoinHandle, spawn};
[INFO] [stdout]    |                               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing::info`
[INFO] [stdout]   --> src/render.rs:12:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | use tracing::info;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::action::Action`
[INFO] [stdout]   --> src/render.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use crate::action::Action;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::analysis::Analysis`
[INFO] [stdout]   --> src/render.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | use crate::components::analysis::Analysis;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::home::Home`
[INFO] [stdout]   --> src/render.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::components::home::Home;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::quit::Quit`
[INFO] [stdout]   --> src/render.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use crate::components::quit::Quit;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::lyric::Lyric`
[INFO] [stdout]   --> src/render.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use crate::lyric::Lyric;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::musicplayer::MusicPlayer`
[INFO] [stdout]   --> src/render.rs:23:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | use crate::musicplayer::MusicPlayer;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]  --> src/tracing.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::time::Duration;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ratatui::text::Text`
[INFO] [stdout]  --> src/tracing.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use ratatui::text::Text;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::time::timeout`
[INFO] [stdout]  --> src/tracing.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use tokio::time::timeout;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing::info`
[INFO] [stdout]   --> src/tracing.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use tracing::info;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tracing_subscriber::Registry`
[INFO] [stdout]   --> src/tracing.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | use tracing_subscriber::Registry;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around type
[INFO] [stdout]   --> src/tracing.rs:71:86
[INFO] [stdout]    |
[INFO] [stdout] 71 | pub  fn recv_log(log_receiver:  UnboundedReceiver<String>, app:  Arc<Mutex<App>> ) ->(JoinHandle<()>) {
[INFO] [stdout]    |                                                                                      ^              ^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 71 - pub  fn recv_log(log_receiver:  UnboundedReceiver<String>, app:  Arc<Mutex<App>> ) ->(JoinHandle<()>) {
[INFO] [stdout] 71 + pub  fn recv_log(log_receiver:  UnboundedReceiver<String>, app:  Arc<Mutex<App>> ) ->JoinHandle<()> {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::arch::x86_64::_addcarryx_u64`
[INFO] [stdout]  --> src/fft.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::arch::x86_64::_addcarryx_u64;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs::File`
[INFO] [stdout]  --> src/fft.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::fs::File;
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]  --> src/fft.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::io::BufReader;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Sender`
[INFO] [stdout]  --> src/fft.rs:7:33
[INFO] [stdout]   |
[INFO] [stdout] 7 | use std::sync::mpsc::{Receiver, Sender};
[INFO] [stdout]   |                                 ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]  --> src/fft.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use std::thread;
[INFO] [stdout]   |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `TryFutureExt`
[INFO] [stdout]  --> src/fft.rs:9:24
[INFO] [stdout]   |
[INFO] [stdout] 9 | use futures::{SinkExt, TryFutureExt};
[INFO] [stdout]   |                        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Decoder`
[INFO] [stdout]   --> src/fft.rs:12:13
[INFO] [stdout]    |
[INFO] [stdout] 12 | use rodio::{Decoder, Source};
[INFO] [stdout]    |             ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::action::Action`
[INFO] [stdout]   --> src/fft.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::action::Action;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::MyError`
[INFO] [stdout]   --> src/fft.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use crate::error::MyError;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around type
[INFO] [stdout]    --> src/fft.rs:140:100
[INFO] [stdout]     |
[INFO] [stdout] 140 |  pub async fn get_fft_result(mut music_reciver:UnboundedReceiver<Vec<f32>>, app:Arc<Mutex<App>>) ->(JoinHandle<()>){
[INFO] [stdout]     |                                                                                                    ^              ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 140 -  pub async fn get_fft_result(mut music_reciver:UnboundedReceiver<Vec<f32>>, app:Arc<Mutex<App>>) ->(JoinHandle<()>){
[INFO] [stdout] 140 +  pub async fn get_fft_result(mut music_reciver:UnboundedReceiver<Vec<f32>>, app:Arc<Mutex<App>>) ->JoinHandle<()>{
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::Path`
[INFO] [stdout]  --> src/musicplayer.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::path::Path;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Arc`
[INFO] [stdout]  --> src/musicplayer.rs:4:17
[INFO] [stdout]   |
[INFO] [stdout] 4 | use std::sync::{Arc};
[INFO] [stdout]   |                 ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Sample`
[INFO] [stdout]   --> src/musicplayer.rs:81:14
[INFO] [stdout]    |
[INFO] [stdout] 81 | use rodio::{ Sample};
[INFO] [stdout]    |              ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Receiver`, `channel`
[INFO] [stdout]   --> src/musicplayer.rs:82:23
[INFO] [stdout]    |
[INFO] [stdout] 82 | use std::sync::mpsc::{channel, Receiver, Sender};
[INFO] [stdout]    |                       ^^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread::spawn`
[INFO] [stdout]   --> src/musicplayer.rs:83:5
[INFO] [stdout]    |
[INFO] [stdout] 83 | use std::thread::spawn;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Instant`
[INFO] [stdout]   --> src/musicplayer.rs:84:27
[INFO] [stdout]    |
[INFO] [stdout] 84 | use std::time::{Duration, Instant};
[INFO] [stdout]    |                           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::app::App`
[INFO] [stdout]   --> src/musicplayer.rs:88:5
[INFO] [stdout]    |
[INFO] [stdout] 88 | use crate::app::App;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::MyError`
[INFO] [stdout]   --> src/musicplayer.rs:89:5
[INFO] [stdout]    |
[INFO] [stdout] 89 | use crate::error::MyError;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]    --> src/musicplayer.rs:146:9
[INFO] [stdout]     |
[INFO] [stdout] 146 |     use std::io::BufReader;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc`
[INFO] [stdout]    --> src/musicplayer.rs:148:9
[INFO] [stdout]     |
[INFO] [stdout] 148 |     use tokio::sync::mpsc;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary trailing semicolon
[INFO] [stdout]    --> src/musicplayer.rs:173:73
[INFO] [stdout]     |
[INFO] [stdout] 173 |         let (sample_sender,sample_receiver)= std::sync::mpsc::channel();;//播放时，发送样本数据给fft
[INFO] [stdout]     |                                                                         ^ help: remove this semicolon
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::ffi::OsStr`
[INFO] [stdout]  --> src/lyric.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use std::ffi::OsStr;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs`
[INFO] [stdout]  --> src/lyric.rs:3:5
[INFO] [stdout]   |
[INFO] [stdout] 3 | use std::fs;
[INFO] [stdout]   |     ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::MyError`
[INFO] [stdout]  --> src/lyric.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::error::MyError;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `futures::future::ok`
[INFO] [stdout]  --> src/sounds.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use futures::future::ok;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs::File`
[INFO] [stdout]    --> src/sounds.rs:194:9
[INFO] [stdout]     |
[INFO] [stdout] 194 |     use std::fs::File;
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]    --> src/sounds.rs:195:9
[INFO] [stdout]     |
[INFO] [stdout] 195 |     use std::io::BufReader;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::event::Event`
[INFO] [stdout]    --> src/sounds.rs:196:9
[INFO] [stdout]     |
[INFO] [stdout] 196 |     use crate::event::Event;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::Component`
[INFO] [stdout]   --> src/main.rs:17:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::components::Component;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::Write`
[INFO] [stdout]   --> src/main.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use std::io::Write;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `app::App`
[INFO] [stdout]   --> src/main.rs:20:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | use app::App;
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Decoder`, `OutputStream`, `Sink`, `Source`
[INFO] [stdout]   --> src/main.rs:23:13
[INFO] [stdout]    |
[INFO] [stdout] 23 | use rodio::{Decoder, OutputStream, Sink, Source};
[INFO] [stdout]    |             ^^^^^^^  ^^^^^^^^^^^^  ^^^^  ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rustfft::num_complex::Complex`
[INFO] [stdout]   --> src/main.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 | use rustfft::num_complex::Complex;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rustfft::FftPlanner`
[INFO] [stdout]   --> src/main.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 | use rustfft::FftPlanner;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::fs::File`
[INFO] [stdout]   --> src/main.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 | use std::fs::File;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::BufReader`
[INFO] [stdout]   --> src/main.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 | use std::io::BufReader;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::path::Path`
[INFO] [stdout]   --> src/main.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | use std::path::Path;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Arc`, `Mutex`
[INFO] [stdout]   --> src/main.rs:29:17
[INFO] [stdout]    |
[INFO] [stdout] 29 | use std::sync::{Arc, Mutex};
[INFO] [stdout]    |                 ^^^  ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::mpsc::channel`
[INFO] [stdout]   --> src/main.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 | use std::sync::mpsc::channel;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::thread`
[INFO] [stdout]   --> src/main.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 | use std::thread;
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::time::Duration`
[INFO] [stdout]   --> src/main.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 | use std::time::Duration;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rustfft::num_traits::ToPrimitive`
[INFO] [stdout]   --> src/main.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 | use rustfft::num_traits::ToPrimitive;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tokio::sync::mpsc`
[INFO] [stdout]   --> src/main.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 | use tokio::sync::mpsc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::fft::FFTController`
[INFO] [stdout]   --> src/main.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 | use crate::fft::FFTController;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::lyric::LyricController`
[INFO] [stdout]   --> src/main.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 | use crate::lyric::LyricController;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::musicplayer::MusicPlayer`
[INFO] [stdout]   --> src/main.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 | use crate::musicplayer::MusicPlayer;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::sounds::SoundsList`
[INFO] [stdout]   --> src/main.rs:38:5
[INFO] [stdout]    |
[INFO] [stdout] 38 | use crate::sounds::SoundsList;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `err`
[INFO] [stdout]   --> src/event.rs:77:38
[INFO] [stdout]    |
[INFO] [stdout] 77 | ...                   Some(Err(err)) => {
[INFO] [stdout]    |                                ^^^ help: if this is intentional, prefix it with an underscore: `_err`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/event.rs:128:9
[INFO] [stdout]     |
[INFO] [stdout] 128 |     let mut cancelation_token = CancellationToken::new();
[INFO] [stdout]     |         ----^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/render.rs:129:53
[INFO] [stdout]     |
[INFO] [stdout] 129 | ...                   let mut sub_layout=Layout::new(
[INFO] [stdout]     |                           ----^^^^^^^^^^
[INFO] [stdout]     |                           |
[INFO] [stdout]     |                           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/render.rs:133:53
[INFO] [stdout]     |
[INFO] [stdout] 133 | ...                   let mut fft_layout=Layout::new(
[INFO] [stdout]     |                           ----^^^^^^^^^^
[INFO] [stdout]     |                           |
[INFO] [stdout]     |                           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/render.rs:137:53
[INFO] [stdout]     |
[INFO] [stdout] 137 | ...                   let mut playzone_layout=Layout::new(
[INFO] [stdout]     |                           ----^^^^^^^^^^^^^^^
[INFO] [stdout]     |                           |
[INFO] [stdout]     |                           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: irrefutable `if let` pattern
[INFO] [stdout]    --> src/app.rs:218:16
[INFO] [stdout]     |
[INFO] [stdout] 218 |             if let (action,path) = action_receiver.recv().unwrap() {
[INFO] [stdout]     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this pattern will always match, so the `if let` is useless
[INFO] [stdout]     = help: consider replacing the `if let` with a `let`
[INFO] [stdout]     = note: `#[warn(irrefutable_let_patterns)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:153:9
[INFO] [stdout]     |
[INFO] [stdout] 153 |     let mut app=App::new();
[INFO] [stdout]     |         ----^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:158:11
[INFO] [stdout]     |
[INFO] [stdout] 158 |     let  (mut log,log_receiver) =TracingLog::new();
[INFO] [stdout]     |           ----^^^
[INFO] [stdout]     |           |
[INFO] [stdout]     |           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:165:25
[INFO] [stdout]     |
[INFO] [stdout] 165 |     let (action_sender, mut action_receiver) = std::sync::mpsc::channel();
[INFO] [stdout]     |                         ----^^^^^^^^^^^^^^^
[INFO] [stdout]     |                         |
[INFO] [stdout]     |                         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:168:9
[INFO] [stdout]     |
[INFO] [stdout] 168 |     let mut tui = Tui::new()?;
[INFO] [stdout]     |         ----^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: irrefutable `while let` pattern
[INFO] [stdout]    --> src/fft.rs:144:16
[INFO] [stdout]     |
[INFO] [stdout] 144 |          while let mut fft_result=music_reciver.recv().await.unwrap(){
[INFO] [stdout]     |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this pattern will always match, so the loop will never exit
[INFO] [stdout]     = help: consider instead using a `loop { ... }` with a `let` inside it
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `name`
[INFO] [stdout]    --> src/fft.rs:147:20
[INFO] [stdout]     |
[INFO] [stdout] 147 |              for ((name, value), new_value) in fft_buffer_clone.lock().await.iter_mut().zip(fft_result.iter()) {
[INFO] [stdout]     |                    ^^^^ help: if this is intentional, prefix it with an underscore: `_name`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/fft.rs:143:13
[INFO] [stdout]     |
[INFO] [stdout] 143 |         let mut fft_buffer_clone=Arc::clone(&app.lock().await.fft_result);
[INFO] [stdout]     |             ----^^^^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/fft.rs:144:20
[INFO] [stdout]     |
[INFO] [stdout] 144 |          while let mut fft_result=music_reciver.recv().await.unwrap(){
[INFO] [stdout]     |                    ----^^^^^^^^^^
[INFO] [stdout]     |                    |
[INFO] [stdout]     |                    help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `FutureExt`
[INFO] [stdout]   --> src/action.rs:15:15
[INFO] [stdout]    |
[INFO] [stdout] 15 | use futures::{FutureExt, StreamExt};
[INFO] [stdout]    |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StreamExt`
[INFO] [stdout]   --> src/action.rs:15:26
[INFO] [stdout]    |
[INFO] [stdout] 15 | use futures::{FutureExt, StreamExt};
[INFO] [stdout]    |                          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rustfft::num_complex::ComplexFloat`
[INFO] [stdout]  --> src/tracing.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use rustfft::num_complex::ComplexFloat;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Source`
[INFO] [stdout]   --> src/fft.rs:12:22
[INFO] [stdout]    |
[INFO] [stdout] 12 | use rodio::{Decoder, Source};
[INFO] [stdout]    |                      ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `SinkExt`
[INFO] [stdout]  --> src/fft.rs:9:15
[INFO] [stdout]   |
[INFO] [stdout] 9 | use futures::{SinkExt, TryFutureExt};
[INFO] [stdout]   |               ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/event.rs:120:9
[INFO] [stdout]     |
[INFO] [stdout] 120 |         _ => {}
[INFO] [stdout]     |         ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/home.rs:36:13
[INFO] [stdout]    |
[INFO] [stdout] 36 |         let mut sub_layout=Layout::new(
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/home.rs:58:26
[INFO] [stdout]    |
[INFO] [stdout] 58 |     fn update(& mut self,action:Option<Action>)->Result<(),MyError>{
[INFO] [stdout]    |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `rect`
[INFO] [stdout]   --> src/components/quit.rs:24:43
[INFO] [stdout]    |
[INFO] [stdout] 24 |     fn draw(&mut self, f: &mut Frame<'_>, rect: Rect) -> Result<(), MyError> {
[INFO] [stdout]    |                                           ^^^^ help: if this is intentional, prefix it with an underscore: `_rect`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/quit.rs:39:25
[INFO] [stdout]    |
[INFO] [stdout] 39 |     fn update(&mut self,action:Option<Action>) -> Result<(), MyError> {
[INFO] [stdout]    |                         ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/tracinglog.rs:36:13
[INFO] [stdout]    |
[INFO] [stdout] 36 |         let mut liststate=ListState::default();
[INFO] [stdout]    |             ----^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/tracinglog.rs:48:14
[INFO] [stdout]    |
[INFO] [stdout] 48 |          let mut list_item:Vec<ListItem>=lines.iter().rev().map(//rev（）是倒序
[INFO] [stdout]    |              ----^^^^^^^^^
[INFO] [stdout]    |              |
[INFO] [stdout]    |              help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/tracinglog.rs:75:27
[INFO] [stdout]    |
[INFO] [stdout] 75 |     fn update(& mut self, action: Option<Action>) ->Result<(),MyError>{
[INFO] [stdout]    |                           ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:26:13
[INFO] [stdout]    |
[INFO] [stdout] 26 |         let mut vertical_scroll=0;
[INFO] [stdout]    |             ----^^^^^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:27:13
[INFO] [stdout]    |
[INFO] [stdout] 27 |         let mut vertical_scroll_state=ratatui::widgets::ScrollbarState::new(20);
[INFO] [stdout]    |             ----^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:29:13
[INFO] [stdout]    |
[INFO] [stdout] 29 |         let mut action_tx=None;
[INFO] [stdout]    |             ----^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:74:13
[INFO] [stdout]    |
[INFO] [stdout] 74 |         let mut itemlist=self.sound_list.sounds.clone();
[INFO] [stdout]    |             ----^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/filelist.rs:77:21
[INFO] [stdout]    |
[INFO] [stdout] 77 |                 let mut listitem=ListItem::new(fileitem.name).bg(Color::Black);
[INFO] [stdout]    |                     ----^^^^^^^^
[INFO] [stdout]    |                     |
[INFO] [stdout]    |                     help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/playzone.rs:34:26
[INFO] [stdout]    |
[INFO] [stdout] 34 |     fn update(&mut self, action: Option<Action>) -> Result<(), MyError> {
[INFO] [stdout]    |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/analysis.rs:66:13
[INFO] [stdout]    |
[INFO] [stdout] 66 |         let mut newdata: Vec<_>=self.data.iter().map(|(barname,value)|{
[INFO] [stdout]    |             ----^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/components/analysis.rs:70:13
[INFO] [stdout]    |
[INFO] [stdout] 70 |         let mut group=BarGroup::default().bars(&newdata);
[INFO] [stdout]    |             ----^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]    --> src/components/lyric.rs:126:26
[INFO] [stdout]     |
[INFO] [stdout] 126 |     fn update(&mut self, action: Option<Action>) -> Result<(), MyError> {
[INFO] [stdout]     |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `seconds_with_decimals`
[INFO] [stdout]    --> src/components/lyric.rs:177:17
[INFO] [stdout]     |
[INFO] [stdout] 177 |             let seconds_with_decimals = time.1;
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_seconds_with_decimals`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `now_duration`
[INFO] [stdout]    --> src/components/lyric.rs:192:17
[INFO] [stdout]     |
[INFO] [stdout] 192 |             let now_duration = Duration::new(minutes * 60 + seconds, 0) + Duration::from_millis(decimals * 10);
[INFO] [stdout]     |                 ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_now_duration`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `block`
[INFO] [stdout]   --> src/components/apptitle.rs:27:13
[INFO] [stdout]    |
[INFO] [stdout] 27 |         let block=Block::new().borders(Borders::ALL).light_red().padding(Padding::new(0,0,0,0)).title("out");
[INFO] [stdout]    |             ^^^^^ help: if this is intentional, prefix it with an underscore: `_block`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action`
[INFO] [stdout]   --> src/components/apptitle.rs:41:26
[INFO] [stdout]    |
[INFO] [stdout] 41 |     fn update(&mut self, action: Option<Action>) -> Result<(), MyError> {
[INFO] [stdout]    |                          ^^^^^^ help: if this is intentional, prefix it with an underscore: `_action`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `tx`
[INFO] [stdout]   --> src/components.rs:40:43
[INFO] [stdout]    |
[INFO] [stdout] 40 |     fn register_action_handler(&mut self, tx: Sender<Action>) {
[INFO] [stdout]    |                                           ^^ help: if this is intentional, prefix it with an underscore: `_tx`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:51:13
[INFO] [stdout]    |
[INFO] [stdout] 51 |         let mut log=vec![String::new()];
[INFO] [stdout]    |             ----^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:52:13
[INFO] [stdout]    |
[INFO] [stdout] 52 |         let mut sounds_list=SoundsList::set_path("music".to_string());
[INFO] [stdout]    |             ----^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:53:13
[INFO] [stdout]    |
[INFO] [stdout] 53 |         let mut fft_result=Arc::new(Mutex::new(
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `action_sender`
[INFO] [stdout]   --> src/app.rs:72:38
[INFO] [stdout]    |
[INFO] [stdout] 72 |     pub fn init_component(&mut self, action_sender: Sender<(Action,Option<String>)>){
[INFO] [stdout]    |                                      ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_action_sender`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:91:13
[INFO] [stdout]    |
[INFO] [stdout] 91 |         let mut sub_layout=Layout::new(
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:95:13
[INFO] [stdout]    |
[INFO] [stdout] 95 |         let mut fft_layout=Layout::new(
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/app.rs:99:13
[INFO] [stdout]    |
[INFO] [stdout] 99 |         let mut playzone_layout=Layout::new(
[INFO] [stdout]    |             ----^^^^^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sample_rate`
[INFO] [stdout]   --> src/fft.rs:37:16
[INFO] [stdout]    |
[INFO] [stdout] 37 |     pub fn new(sample_rate: f32, fft_size: usize,sample_receiver: Receiver<f32>,music_tx: UnboundedSender<Vec<f32>>) -> Self {
[INFO] [stdout]    |                ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sample_rate`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fft_size`
[INFO] [stdout]   --> src/fft.rs:37:34
[INFO] [stdout]    |
[INFO] [stdout] 37 |     pub fn new(sample_rate: f32, fft_size: usize,sample_receiver: Receiver<f32>,music_tx: UnboundedSender<Vec<f32>>) -> Self {
[INFO] [stdout]    |                                  ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_fft_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: irrefutable `while let` pattern
[INFO] [stdout]   --> src/fft.rs:83:19
[INFO] [stdout]    |
[INFO] [stdout] 83 |             while let sample=self.sample_receive.recv().unwrap() {
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: this pattern will always match, so the loop will never exit
[INFO] [stdout]    = help: consider instead using a `loop { ... }` with a `let` inside it
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `energy`
[INFO] [stdout]    --> src/fft.rs:129:18
[INFO] [stdout]     |
[INFO] [stdout] 129 |         for (i, &energy) in note_energies.iter().enumerate() {
[INFO] [stdout]     |                  ^^^^^^ help: if this is intentional, prefix it with an underscore: `_energy`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `note_name`
[INFO] [stdout]    --> src/fft.rs:130:17
[INFO] [stdout]     |
[INFO] [stdout] 130 |             let note_name = self.midi_number_to_note_name(i as i32 + 60); // C4开始
[INFO] [stdout]     |                 ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_note_name`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/musicplayer.rs:57:11
[INFO] [stdout]    |
[INFO] [stdout] 57 |       let mut source1 = Decoder::new(buf_reader1).unwrap().convert_samples::<f32>();
[INFO] [stdout]    |           ----^^^^^^^
[INFO] [stdout]    |           |
[INFO] [stdout]    |           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/musicplayer.rs:58:11
[INFO] [stdout]    |
[INFO] [stdout] 58 |       let mut my_source = MyCustomSource::new(source1, sample_sender);
[INFO] [stdout]    |           ----^^^^^^^^^
[INFO] [stdout]    |           |
[INFO] [stdout]    |           help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `sample_receiver`
[INFO] [stdout]    --> src/musicplayer.rs:173:28
[INFO] [stdout]     |
[INFO] [stdout] 173 |         let (sample_sender,sample_receiver)= std::sync::mpsc::channel();;//播放时，发送样本数据给fft
[INFO] [stdout]     |                            ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_sample_receiver`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: irrefutable `if let` pattern
[INFO] [stdout]    --> src/musicplayer.rs:179:20
[INFO] [stdout]     |
[INFO] [stdout] 179 |                 if let (action,_path) = action_receiver.recv().unwrap() {
[INFO] [stdout]     |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this pattern will always match, so the `if let` is useless
[INFO] [stdout]     = help: consider replacing the `if let` with a `let`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/musicplayer.rs:172:29
[INFO] [stdout]     |
[INFO] [stdout] 172 |         let (action_sender, mut action_receiver) = std::sync::mpsc::channel();
[INFO] [stdout]     |                             ----^^^^^^^^^^^^^^^
[INFO] [stdout]     |                             |
[INFO] [stdout]     |                             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/lyric.rs:28:13
[INFO] [stdout]    |
[INFO] [stdout] 28 |         let mut path=path;
[INFO] [stdout]    |             ----^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/lyric.rs:29:13
[INFO] [stdout]    |
[INFO] [stdout] 29 |         let mut lyric=vec![Lyric::new()];
[INFO] [stdout]    |             ----^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/lyric.rs:30:13
[INFO] [stdout]    |
[INFO] [stdout] 30 |         let mut time=String::new();
[INFO] [stdout]    |             ----^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/lyric.rs:31:13
[INFO] [stdout]    |
[INFO] [stdout] 31 |         let mut filestring=String::new();//歌词string
[INFO] [stdout]    |             ----^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]  --> src/error.rs:9:13
[INFO] [stdout]   |
[INFO] [stdout] 9 |     IoError(std::io::Error),//打印失败
[INFO] [stdout]   |     ------- ^^^^^^^^^^^^^^
[INFO] [stdout]   |     |
[INFO] [stdout]   |     field in this variant
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]   |
[INFO] [stdout] 9 |     IoError(()),//打印失败
[INFO] [stdout]   |             ~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/error.rs:10:15
[INFO] [stdout]    |
[INFO] [stdout] 10 |     JoinError(tokio::task::JoinError),
[INFO] [stdout]    |     --------- ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 10 |     JoinError(()),
[INFO] [stdout]    |               ~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/error.rs:12:20
[INFO] [stdout]    |
[INFO] [stdout] 12 |     TokioSendError(tokio::sync::mpsc::error::SendError<Action>),//线程发送失败
[INFO] [stdout]    |     -------------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 12 |     TokioSendError(()),//线程发送失败
[INFO] [stdout]    |                    ~~
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Init`, `Quit`, `Closed`, and `Render` are never constructed
[INFO] [stdout]   --> src/event.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub enum  Event{
[INFO] [stdout]    |           ----- variants in this enum
[INFO] [stdout] 18 |     Init,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 19 |     Quit,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 20 |     Error,
[INFO] [stdout] 21 |     Closed,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 22 |     Tick,//无事件时，渲染间隔控制
[INFO] [stdout] 23 |     Render,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Event` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `event` is never read
[INFO] [stdout]   --> src/event.rs:33:9
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub struct EventHandler{
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] 33 |     pub event:Event,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `tick_test` is never used
[INFO] [stdout]    --> src/event.rs:125:15
[INFO] [stdout]     |
[INFO] [stdout] 125 | pub async  fn tick_test()->Result<(), MyError>{
[INFO] [stdout]     |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `start`, `exit`, `next`, `cancel`, and `reset` are never used
[INFO] [stdout]   --> src/tui.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl Tui{
[INFO] [stdout]    | -------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 25 |     pub fn start(&mut self)->Result<(),MyError>{
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 37 |     pub fn exit(&mut self)->Result<(),MyError>{
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub fn next(&mut self)->Result<(),MyError>{
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     pub fn cancel(&mut self)->Result<(),MyError>{
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 52 |     pub fn reset()->Result<(),MyError>{
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `init` and `register_action_handler` are never used
[INFO] [stdout]   --> src/components.rs:36:8
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub trait Component{
[INFO] [stdout]    |           --------- methods in this trait
[INFO] [stdout] ...
[INFO] [stdout] 36 |     fn init(&mut self) -> Result<(),MyError> {
[INFO] [stdout]    |        ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     fn register_action_handler(&mut self, tx: Sender<Action>) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `component_name`, `log`, and `action_tx` are never read
[INFO] [stdout]   --> src/components/home.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct Home {
[INFO] [stdout]    |            ---- fields in this struct
[INFO] [stdout] 15 |     component_name:String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 16 |     pub log:String,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 17 |     pub action_tx: Option<Sender<Action>>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/components/home.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl  Home{
[INFO] [stdout]    | ---------- associated function in this implementation
[INFO] [stdout] 20 |     pub fn new(log:String) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `component_name` is never read
[INFO] [stdout]   --> src/components/quit.rs:13:5
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct Quit {
[INFO] [stdout]    |            ---- field in this struct
[INFO] [stdout] 13 |     component_name:String,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Quit` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `vertical_scroll_state`, `horizontal_scroll_state`, `vertical_scroll`, `horizontal_scroll`, `action_tx`, and `liststate` are never read
[INFO] [stdout]   --> src/components/tracinglog.rs:20:9
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct TracingLogComponent{
[INFO] [stdout]    |            ------------------- fields in this struct
[INFO] [stdout] 19 |     pub logs: String,
[INFO] [stdout] 20 |     pub vertical_scroll_state: ScrollbarState,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 21 |     pub horizontal_scroll_state: ScrollbarState,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 22 |     pub vertical_scroll: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 23 |     pub horizontal_scroll: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 24 |     pub action_tx: Option<Sender<Action>>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 25 |     pub liststate:ListState,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TracingLogComponent` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `vertical_scroll`, `vertical_scroll_state`, and `action_tx` are never read
[INFO] [stdout]   --> src/components/filelist.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct FileListComponent {
[INFO] [stdout]    |            ----------------- fields in this struct
[INFO] [stdout] 17 |     pub sound_list:SoundsList,
[INFO] [stdout] 18 |     pub vertical_scroll:usize,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 19 |     pub vertical_scroll_state:ScrollbarState,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 20 |     pub action_tx: Option<Sender<Action>>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FileListComponent` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `action_sender` is never read
[INFO] [stdout]   --> src/components/analysis.rs:18:9
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub struct Analysis{
[INFO] [stdout]    |            -------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 18 |     pub action_sender:Option<Sender<Action>>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Analysis` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `action_tx` is never read
[INFO] [stdout]   --> src/components/lyric.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct LyricZone{
[INFO] [stdout]    |            --------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 21 |     pub action_tx: Option<Sender<Action>>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `LyricZone` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `title` is never read
[INFO] [stdout]   --> src/components/apptitle.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct AppTitle{
[INFO] [stdout]    |            -------- field in this struct
[INFO] [stdout] 14 |     pub title: String,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AppTitle` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `should_quit`, `tick_rate`, and `frame_rate` are never read
[INFO] [stdout]   --> src/app.rs:36:9
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub struct App{
[INFO] [stdout]    |            --- fields in this struct
[INFO] [stdout] 36 |     pub should_quit:bool,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 37 |     pub tick_rate: f64,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 38 |     pub frame_rate: f64,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `draw_component` and `get_soundlist` are never used
[INFO] [stdout]    --> src/app.rs:85:12
[INFO] [stdout]     |
[INFO] [stdout] 46  | impl App{
[INFO] [stdout]     | -------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 85  |     pub fn draw_component(&mut self, frame: &mut Frame){
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 142 |     pub fn get_soundlist(&self)->Vec<(usize,String)>{
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `action` is never read
[INFO] [stdout]   --> src/action.rs:62:9
[INFO] [stdout]    |
[INFO] [stdout] 61 | pub struct ActionReactor {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 62 |     pub action: Action,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `cancelation_token` and `task` are never read
[INFO] [stdout]   --> src/render.rs:27:9
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub struct Render {
[INFO] [stdout]    |            ------ fields in this struct
[INFO] [stdout] 27 |     pub cancelation_token: CancellationToken,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 30 |     pub task: JoinHandle<Result<(), MyError>>,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `cancel` is never used
[INFO] [stdout]    --> src/render.rs:165:12
[INFO] [stdout]     |
[INFO] [stdout] 33  | impl Render {
[INFO] [stdout]     | ----------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 165 |     pub fn cancel(&mut self){
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `logs` is never read
[INFO] [stdout]   --> src/tracing.rs:21:9
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct TracingLog{
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] 20 |     //用通信来共享内存，而不是通过共享内存来通信
[INFO] [stdout] 21 |     pub logs: Vec<String>,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TracingLog` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `pause` and `stop` are never read
[INFO] [stdout]   --> src/fft.rs:23:9
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct FFTController
[INFO] [stdout]    |            ------------- fields in this struct
[INFO] [stdout] 22 | {
[INFO] [stdout] 23 |     pub pause: bool,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 24 |     pub stop: bool,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_pause` and `set_stop` are never used
[INFO] [stdout]   --> src/fft.rs:50:12
[INFO] [stdout]    |
[INFO] [stdout] 34 | impl FFTController
[INFO] [stdout]    | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn set_pause(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn set_stop(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `stream` and `stream_handle` are never read
[INFO] [stdout]   --> src/musicplayer.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout] 7  | pub struct MusicPlayer
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 10 |     pub stream:rodio::OutputStream,// steam 不能drop 了，不然 handle 就没用了
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 11 |     pub stream_handle:OutputStreamHandle,
[INFO] [stdout]    |         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `lyric` and `time` are never read
[INFO] [stdout]   --> src/lyric.rs:16:9
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct LyricController{
[INFO] [stdout]    |            --------------- fields in this struct
[INFO] [stdout] 15 |     pub filestring:String,
[INFO] [stdout] 16 |     pub lyric:Vec<Lyric>,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 17 |     pub time:String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `LyricController` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `next_selected` is never read
[INFO] [stdout]   --> src/sounds.rs:14:9
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct SoundsList{
[WARN] too many lines in the log, truncating it
