[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] 2955a9012f263e6910563bd8bcbc81c48e55e181
[INFO] checking IKchen/ratatui_musicplayer against master#bca37a20bd376ce3fd138e7cdee7fe704e0f8814 for pr-139493-3
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FIKchen%2Fratatui_musicplayer" "/workspace/builds/worker-5-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc1/source'...
[INFO] [stderr] done.
[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-5-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/IKchen/ratatui_musicplayer on toolchain bca37a20bd376ce3fd138e7cdee7fe704e0f8814
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+bca37a20bd376ce3fd138e7cdee7fe704e0f8814" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[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" "+bca37a20bd376ce3fd138e7cdee7fe704e0f8814" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded primal-check v0.3.3
[INFO] [stderr]   Downloaded mp3-duration v0.1.10
[INFO] [stderr]   Downloaded indoc v2.0.5
[INFO] [stderr]   Downloaded strength_reduce v0.2.4
[INFO] [stderr]   Downloaded rustversion v1.0.15
[INFO] [stderr]   Downloaded symphonia-bundle-mp3 v0.5.4
[INFO] [stderr]   Downloaded rustfft v6.2.0
[INFO] [stderr]   Downloaded transpose v0.2.3
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-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:aa71247004a7fa38d13ec170f48f06cdedf5bc50b2a8645e56ed7e992e6fa513" "/opt/rustwide/cargo-home/bin/cargo" "+bca37a20bd376ce3fd138e7cdee7fe704e0f8814" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 80f7c42c32e66331adf8993318b6b62edc96889101c8ebd3c2ea626735c5afde
[INFO] running `Command { std: "docker" "start" "-a" "80f7c42c32e66331adf8993318b6b62edc96889101c8ebd3c2ea626735c5afde", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "80f7c42c32e66331adf8993318b6b62edc96889101c8ebd3c2ea626735c5afde", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "80f7c42c32e66331adf8993318b6b62edc96889101c8ebd3c2ea626735c5afde", kill_on_drop: false }`
[INFO] [stdout] 80f7c42c32e66331adf8993318b6b62edc96889101c8ebd3c2ea626735c5afde
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-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:aa71247004a7fa38d13ec170f48f06cdedf5bc50b2a8645e56ed7e992e6fa513" "/opt/rustwide/cargo-home/bin/cargo" "+bca37a20bd376ce3fd138e7cdee7fe704e0f8814" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] c807defb4046579490f6b33eec87feb40414606d56c530a1fd541496363ba66d
[INFO] running `Command { std: "docker" "start" "-a" "c807defb4046579490f6b33eec87feb40414606d56c530a1fd541496363ba66d", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.79
[INFO] [stderr]    Compiling unicode-ident v1.0.12
[INFO] [stderr]    Compiling autocfg v1.2.0
[INFO] [stderr]    Compiling libc v0.2.153
[INFO] [stderr]     Checking log v0.4.21
[INFO] [stderr]     Checking once_cell v1.19.0
[INFO] [stderr]    Compiling serde v1.0.197
[INFO] [stderr]     Checking futures-core v0.3.30
[INFO] [stderr]     Checking smallvec v1.13.2
[INFO] [stderr]    Compiling parking_lot_core v0.9.9
[INFO] [stderr]     Checking scopeguard v1.2.0
[INFO] [stderr]     Checking pin-project-lite v0.2.14
[INFO] [stderr]    Compiling pkg-config v0.3.30
[INFO] [stderr]    Compiling ahash v0.8.11
[INFO] [stderr]     Checking arrayvec v0.7.4
[INFO] [stderr]     Checking bytemuck v1.15.0
[INFO] [stderr]    Compiling signal-hook v0.3.17
[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 rustversion v1.0.15
[INFO] [stderr]     Checking futures-sink v0.3.30
[INFO] [stderr]     Checking symphonia-core v0.5.4
[INFO] [stderr]     Checking encoding_rs v0.8.33
[INFO] [stderr]    Compiling quote v1.0.35
[INFO] [stderr]    Compiling alsa-sys v0.3.1
[INFO] [stderr]    Compiling syn v1.0.109
[INFO] [stderr]     Checking signal-hook-registry v1.4.1
[INFO] [stderr]     Checking mio v0.8.11
[INFO] [stderr]     Checking parking_lot v0.12.1
[INFO] [stderr]    Compiling syn v2.0.58
[INFO] [stderr]     Checking zerocopy v0.7.32
[INFO] [stderr]     Checking socket2 v0.5.6
[INFO] [stderr]     Checking num_cpus v1.16.0
[INFO] [stderr]     Checking futures-channel v0.3.30
[INFO] [stderr]     Checking tracing-core v0.1.32
[INFO] [stderr]    Compiling thiserror v1.0.58
[INFO] [stderr]     Checking memchr v2.7.2
[INFO] [stderr]    Compiling heck v0.4.1
[INFO] [stderr]     Checking futures-io v0.3.30
[INFO] [stderr]     Checking byteorder v1.5.0
[INFO] [stderr]     Checking num-integer v0.1.46
[INFO] [stderr]     Checking allocator-api2 v0.2.16
[INFO] [stderr]    Compiling paste v1.0.14
[INFO] [stderr]     Checking futures-task v0.3.30
[INFO] [stderr]    Compiling cpal v0.15.3
[INFO] [stderr]     Checking bytes v1.6.0
[INFO] [stderr]     Checking hashbrown v0.14.3
[INFO] [stderr]     Checking symphonia-metadata v0.5.4
[INFO] [stderr]     Checking tinyvec v1.6.0
[INFO] [stderr]     Checking ogg v0.8.0
[INFO] [stderr]     Checking signal-hook-mio v0.2.3
[INFO] [stderr]     Checking symphonia-bundle-mp3 v0.5.4
[INFO] [stderr]    Compiling rustfft v6.2.0
[INFO] [stderr]     Checking dasp_sample v0.11.0
[INFO] [stderr]     Checking either v1.10.0
[INFO] [stderr]     Checking strength_reduce v0.2.4
[INFO] [stderr]     Checking overload v0.1.1
[INFO] [stderr]     Checking nu-ansi-term v0.46.0
[INFO] [stderr]     Checking transpose v0.2.3
[INFO] [stderr]     Checking itertools v0.12.1
[INFO] [stderr]     Checking lru v0.12.3
[INFO] [stderr]     Checking primal-check v0.3.3
[INFO] [stderr]     Checking tracing-log v0.2.0
[INFO] [stderr]     Checking num-complex v0.4.5
[INFO] [stderr]     Checking symphonia v0.5.4
[INFO] [stderr]     Checking sharded-slab v0.1.7
[INFO] [stderr]     Checking thread_local v1.1.8
[INFO] [stderr]     Checking hound v3.5.1
[INFO] [stderr]    Compiling indoc v2.0.5
[INFO] [stderr]     Checking lewton v0.10.2
[INFO] [stderr]     Checking claxon v0.4.3
[INFO] [stderr]     Checking cassowary v0.3.0
[INFO] [stderr]     Checking unicode-segmentation v1.11.0
[INFO] [stderr]     Checking unicode-width v0.1.11
[INFO] [stderr]     Checking tracing-subscriber v0.3.18
[INFO] [stderr]    Compiling stability v0.1.1
[INFO] [stderr]    Compiling serde_derive v1.0.197
[INFO] [stderr]    Compiling tokio-macros v2.2.0
[INFO] [stderr]    Compiling futures-macro v0.3.30
[INFO] [stderr]    Compiling thiserror-impl v1.0.58
[INFO] [stderr]    Compiling strum_macros v0.25.3
[INFO] [stderr]    Compiling tracing-attributes v0.1.27
[INFO] [stderr]     Checking tokio v1.37.0
[INFO] [stderr]     Checking futures-util v0.3.30
[INFO] [stderr]     Checking mp3-duration v0.1.10
[INFO] [stderr]     Checking tracing v0.1.40
[INFO] [stderr]     Checking strum v0.25.0
[INFO] [stderr]     Checking futures-executor v0.3.30
[INFO] [stderr]     Checking futures v0.3.30
[INFO] [stderr]     Checking bitflags v2.5.0
[INFO] [stderr]     Checking alsa v0.9.0
[INFO] [stderr]     Checking crossterm v0.27.0
[INFO] [stderr]     Checking tokio-stream v0.1.15
[INFO] [stderr]     Checking tokio-util v0.7.10
[INFO] [stderr]     Checking ratatui v0.25.0
[INFO] [stderr]     Checking rodio v0.17.3
[INFO] [stderr]     Checking 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)]` (part of `#[warn(unused)]`) 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` and `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`, and `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` and `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` and `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` and `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` and `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` and `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` and `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`, and `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:210:69
[INFO] [stdout]     |
[INFO] [stdout] 210 |     let (sample_sender,sample_receiver)= std::sync::mpsc::channel();;//播放时，发送样本数据给fft
[INFO] [stdout]     |                                                                     ^ help: remove this semicolon
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(redundant_semicolons)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `fmt` and `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` and `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` and `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`, and `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::home::Home`
[INFO] [stdout]   --> src/action.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use crate::components::home::Home;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::apptitle::AppTitle`
[INFO] [stdout]   --> src/action.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | 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:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | use crate::components::filelist::FileListComponent;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::event`
[INFO] [stdout]   --> src/action.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | 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` and `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)]` (part of `#[warn(unused)]`) 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::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)]` (part of `#[warn(unused)]`) on by default
[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: `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: `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: `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 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` and `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 imports: `ok` and `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: `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: `std::f32::consts::PI`
[INFO] [stdout]   --> src/main.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use std::f32::consts::PI;
[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`, and `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` and `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: `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: `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: `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`
[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: `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: `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 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`, and `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` and `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` and `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` and `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` and `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` and `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` and `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`, and `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:210:69
[INFO] [stdout]     |
[INFO] [stdout] 210 |     let (sample_sender,sample_receiver)= std::sync::mpsc::channel();;//播放时，发送样本数据给fft
[INFO] [stdout]     |                                                                     ^ help: remove this semicolon
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(redundant_semicolons)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `fmt` and `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` and `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` and `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`, and `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::home::Home`
[INFO] [stdout]   --> src/action.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use crate::components::home::Home;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::components::apptitle::AppTitle`
[INFO] [stdout]   --> src/action.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | 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:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | use crate::components::filelist::FileListComponent;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::event`
[INFO] [stdout]   --> src/action.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | 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` and `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)]` (part of `#[warn(unused)]`) 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` and `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: `std::f32::consts::PI`
[INFO] [stdout]   --> src/main.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use std::f32::consts::PI;
[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`, and `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` and `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: 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)]` (part of `#[warn(unused)]`) 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)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: irrefutable `if let` pattern
[INFO] [stdout]    --> src/app.rs:228:16
[INFO] [stdout]     |
[INFO] [stdout] 228 |             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: irrefutable `if let` pattern
[INFO] [stdout]    --> src/app.rs:228:16
[INFO] [stdout]     |
[INFO] [stdout] 228 |             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/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: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:162:9
[INFO] [stdout]     |
[INFO] [stdout] 162 |     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:167:11
[INFO] [stdout]     |
[INFO] [stdout] 167 |     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:174:25
[INFO] [stdout]     |
[INFO] [stdout] 174 |     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: 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: 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: 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: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:162:9
[INFO] [stdout]     |
[INFO] [stdout] 162 |     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:167:11
[INFO] [stdout]     |
[INFO] [stdout] 167 |     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:174:25
[INFO] [stdout]     |
[INFO] [stdout] 174 |     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: 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: 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:16:15
[INFO] [stdout]    |
[INFO] [stdout] 16 | use futures::{FutureExt, StreamExt};
[INFO] [stdout]    |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StreamExt`
[INFO] [stdout]   --> src/action.rs:16:26
[INFO] [stdout]    |
[INFO] [stdout] 16 | 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: 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)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/event.rs:120:9
[INFO] [stdout]     |
[INFO] [stdout] 120 |         _ => {}
[INFO] [stdout]     |         ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/event.rs:120:9
[INFO] [stdout]     |
[INFO] [stdout]  98 |         CrosstermEvent::Key(key) => {
[INFO] [stdout]     |         ------------------------ matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 105 |         CrosstermEvent::Mouse(mouse) => {
[INFO] [stdout]     |         ---------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 108 |         CrosstermEvent::Resize(x, y) => {
[INFO] [stdout]     |         ---------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 111 |         CrosstermEvent::FocusLost => {
[INFO] [stdout]     |         ------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 120 |         _ => {}
[INFO] [stdout]     |         ^ ...and 2 other patterns collectively make this unreachable
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) 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 import: `FutureExt`
[INFO] [stdout]   --> src/action.rs:16:15
[INFO] [stdout]    |
[INFO] [stdout] 16 | use futures::{FutureExt, StreamExt};
[INFO] [stdout]    |               ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `StreamExt`
[INFO] [stdout]   --> src/action.rs:16:26
[INFO] [stdout]    |
[INFO] [stdout] 16 | 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 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 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: 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:60:13
[INFO] [stdout]    |
[INFO] [stdout] 60 |         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:61:13
[INFO] [stdout]    |
[INFO] [stdout] 61 |         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:62:13
[INFO] [stdout]    |
[INFO] [stdout] 62 |         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:81:38
[INFO] [stdout]    |
[INFO] [stdout] 81 |     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: 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)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/app.rs:100:13
[INFO] [stdout]     |
[INFO] [stdout] 100 |         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:104:13
[INFO] [stdout]     |
[INFO] [stdout] 104 |         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:108:13
[INFO] [stdout]     |
[INFO] [stdout] 108 |         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: `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: unreachable pattern
[INFO] [stdout]    --> src/event.rs:120:9
[INFO] [stdout]     |
[INFO] [stdout] 120 |         _ => {}
[INFO] [stdout]     |         ^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout] note: multiple earlier patterns match some of the same values
[INFO] [stdout]    --> src/event.rs:120:9
[INFO] [stdout]     |
[INFO] [stdout]  98 |         CrosstermEvent::Key(key) => {
[INFO] [stdout]     |         ------------------------ matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 105 |         CrosstermEvent::Mouse(mouse) => {
[INFO] [stdout]     |         ---------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 108 |         CrosstermEvent::Resize(x, y) => {
[INFO] [stdout]     |         ---------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 111 |         CrosstermEvent::FocusLost => {
[INFO] [stdout]     |         ------------------------- matches some of the same values
[INFO] [stdout] ...
[INFO] [stdout] 120 |         _ => {}
[INFO] [stdout]     |         ^ ...and 2 other patterns collectively make this unreachable
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) 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: `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: `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: `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: 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:60:13
[INFO] [stdout]    |
[INFO] [stdout] 60 |         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:61:13
[INFO] [stdout]    |
[INFO] [stdout] 61 |         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:62:13
[INFO] [stdout]    |
[INFO] [stdout] 62 |         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:81:38
[INFO] [stdout]    |
[INFO] [stdout] 81 |     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:100:13
[INFO] [stdout]     |
[INFO] [stdout] 100 |         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:104:13
[INFO] [stdout]     |
[INFO] [stdout] 104 |         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:108:13
[INFO] [stdout]     |
[INFO] [stdout] 108 |         let mut playzone_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/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: 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: 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: `MyError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) 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(std::io::Error),//打印失败
[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]    = note: `MyError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[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(tokio::task::JoinError),
[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]    = note: `MyError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[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(tokio::sync::mpsc::error::SendError<Action>),//线程发送失败
[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: methods `next` and `cancel` are never used
[INFO] [stdout]   --> src/tui.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl Tui{
[INFO] [stdout]    | -------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub fn next(&mut self)->Result<(),MyError>{
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn cancel(&mut self)->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: struct `Home` is never constructed
[INFO] [stdout]   --> src/components/home.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct Home {
[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: variants `Play`, `Pause`, and `Quit` are never constructed
[INFO] [stdout]   --> src/app.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub enum AppState{
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout] 36 |     Home,
[INFO] [stdout] 37 |     Play,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 38 |     Pause,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 39 |     Quit,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `appstate`, `tick_rate`, and `frame_rate` are never read
[INFO] [stdout]   --> src/app.rs:44:9
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub struct App{
[INFO] [stdout]    |            --- fields in this struct
[INFO] [stdout] 43 |     pub should_quit:bool,//判断是否推出程序
[INFO] [stdout] 44 |     pub appstate:AppState,//这个action没用它，用的is——quiting
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 45 |     pub tick_rate: f64,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 46 |     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:94:12
[INFO] [stdout]     |
[INFO] [stdout]  54 | impl App{
[INFO] [stdout]     | -------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  94 |     pub fn draw_component(&mut self, frame: &mut Frame){
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 151 |     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:63:9
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub struct ActionReactor {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 63 |     pub action: Action,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `task` is never read
[INFO] [stdout]   --> src/render.rs:30:9
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub struct Render {
[INFO] [stdout]    |            ------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 30 |     pub task: JoinHandle<Result<(), MyError>>,
[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` that must be used
[INFO] [stdout]    --> src/app.rs:178:5
[INFO] [stdout]     |
[INFO] [stdout] 178 |     tui.start();
[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)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 178 |     let _ = tui.start();
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` in tuple element 0 that must be used
[INFO] [stdout]    --> src/app.rs:263:5
[INFO] [stdout]     |
[INFO] [stdout] 263 | /     tokio::join!(
[INFO] [stdout] 264 | |         //   handler.run(),没有所有权了
[INFO] [stdout] 265 | |            react,
[INFO] [stdout] 266 | |            render1,
[INFO] [stdout] 267 | |            recv_handle,//异步获取tracing 日志
[INFO] [stdout] 268 | |            fft_result_set_handle,
[INFO] [stdout] 269 | |       );
[INFO] [stdout]     | |_______^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` in tuple element 1 that must be used
[INFO] [stdout]    --> src/app.rs:263:5
[INFO] [stdout]     |
[INFO] [stdout] 263 | /     tokio::join!(
[INFO] [stdout] 264 | |         //   handler.run(),没有所有权了
[INFO] [stdout] 265 | |            react,
[INFO] [stdout] 266 | |            render1,
[INFO] [stdout] 267 | |            recv_handle,//异步获取tracing 日志
[INFO] [stdout] 268 | |            fft_result_set_handle,
[INFO] [stdout] 269 | |       );
[INFO] [stdout]     | |_______^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` in tuple element 2 that must be used
[INFO] [stdout]    --> src/app.rs:263:5
[INFO] [stdout]     |
[INFO] [stdout] 263 | /     tokio::join!(
[INFO] [stdout] 264 | |         //   handler.run(),没有所有权了
[INFO] [stdout] 265 | |            react,
[INFO] [stdout] 266 | |            render1,
[INFO] [stdout] 267 | |            recv_handle,//异步获取tracing 日志
[INFO] [stdout] 268 | |            fft_result_set_handle,
[INFO] [stdout] 269 | |       );
[INFO] [stdout]     | |_______^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[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: 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: 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: 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: `MyError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) 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(std::io::Error),//打印失败
[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]    = note: `MyError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[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(tokio::task::JoinError),
[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]    = note: `MyError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[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(tokio::sync::mpsc::error::SendError<Action>),//线程发送失败
[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: methods `next` and `cancel` are never used
[INFO] [stdout]   --> src/tui.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl Tui{
[INFO] [stdout]    | -------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub fn next(&mut self)->Result<(),MyError>{
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn cancel(&mut self)->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: struct `Home` is never constructed
[INFO] [stdout]   --> src/components/home.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct Home {
[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: variants `Play`, `Pause`, and `Quit` are never constructed
[INFO] [stdout]   --> src/app.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub enum AppState{
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout] 36 |     Home,
[INFO] [stdout] 37 |     Play,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 38 |     Pause,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 39 |     Quit,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `appstate`, `tick_rate`, and `frame_rate` are never read
[INFO] [stdout]   --> src/app.rs:44:9
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub struct App{
[INFO] [stdout]    |            --- fields in this struct
[INFO] [stdout] 43 |     pub should_quit:bool,//判断是否推出程序
[INFO] [stdout] 44 |     pub appstate:AppState,//这个action没用它，用的is——quiting
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 45 |     pub tick_rate: f64,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 46 |     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:94:12
[INFO] [stdout]     |
[INFO] [stdout]  54 | impl App{
[INFO] [stdout]     | -------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  94 |     pub fn draw_component(&mut self, frame: &mut Frame){
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 151 |     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:63:9
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub struct ActionReactor {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 63 |     pub action: Action,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `task` is never read
[INFO] [stdout]   --> src/render.rs:30:9
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub struct Render {
[INFO] [stdout]    |            ------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 30 |     pub task: JoinHandle<Result<(), MyError>>,
[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` that must be used
[INFO] [stdout]    --> src/app.rs:178:5
[INFO] [stdout]     |
[INFO] [stdout] 178 |     tui.start();
[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)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 178 |     let _ = tui.start();
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` in tuple element 0 that must be used
[INFO] [stdout]    --> src/app.rs:263:5
[INFO] [stdout]     |
[INFO] [stdout] 263 | /     tokio::join!(
[INFO] [stdout] 264 | |         //   handler.run(),没有所有权了
[INFO] [stdout] 265 | |            react,
[INFO] [stdout] 266 | |            render1,
[INFO] [stdout] 267 | |            recv_handle,//异步获取tracing 日志
[INFO] [stdout] 268 | |            fft_result_set_handle,
[INFO] [stdout] 269 | |       );
[INFO] [stdout]     | |_______^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` in tuple element 1 that must be used
[INFO] [stdout]    --> src/app.rs:263:5
[INFO] [stdout]     |
[INFO] [stdout] 263 | /     tokio::join!(
[INFO] [stdout] 264 | |         //   handler.run(),没有所有权了
[INFO] [stdout] 265 | |            react,
[INFO] [stdout] 266 | |            render1,
[INFO] [stdout] 267 | |            recv_handle,//异步获取tracing 日志
[INFO] [stdout] 268 | |            fft_result_set_handle,
[INFO] [stdout] 269 | |       );
[INFO] [stdout]     | |_______^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` in tuple element 2 that must be used
[INFO] [stdout]    --> src/app.rs:263:5
[INFO] [stdout]     |
[INFO] [stdout] 263 | /     tokio::join!(
[INFO] [stdout] 264 | |         //   handler.run(),没有所有权了
[INFO] [stdout] 265 | |            react,
[INFO] [stdout] 266 | |            render1,
[INFO] [stdout] 267 | |            recv_handle,//异步获取tracing 日志
[INFO] [stdout] 268 | |            fft_result_set_handle,
[INFO] [stdout] 269 | |       );
[INFO] [stdout]     | |_______^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 57.91s
[INFO] running `Command { std: "docker" "inspect" "c807defb4046579490f6b33eec87feb40414606d56c530a1fd541496363ba66d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "c807defb4046579490f6b33eec87feb40414606d56c530a1fd541496363ba66d", kill_on_drop: false }`
[INFO] [stdout] c807defb4046579490f6b33eec87feb40414606d56c530a1fd541496363ba66d
