Skip to content

Commit a433448

Browse files
authored
Merge pull request #14 from tsirysndr/fix/now-playing-not-updated
fix 'now playing' not updated
2 parents 0646f0c + fe38540 commit a433448

File tree

8 files changed

+190
-239
lines changed

8 files changed

+190
-239
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,18 @@ license = "MIT"
88
name = "tunein-cli"
99
readme = "README.md"
1010
repository = "https://github.com/tsirysndr/tunein-cli"
11-
version = "0.2.1"
11+
version = "0.2.2"
1212

1313
[[bin]]
1414
name = "tunein"
1515
path = "src/main.rs"
1616

17+
[workspace.metadata.cross.target.aarch64-unknown-linux-gnu]
18+
pre-build = [
19+
"dpkg --add-architecture $CROSS_DEB_ARCH",
20+
"apt-get update && apt-get --assume-yes install libasound2-dev libasound2-dev:$CROSS_DEB_ARCH protobuf-compiler"
21+
]
22+
1723
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
1824

1925
[dependencies]

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ nix profile install --experimental-features "nix-command flakes" github:tsirysnd
6969
Or download the latest release for your platform [here](https://github.com/tsirysndr/tunein-cli/releases).
7070

7171
## 📦 Downloads
72-
- `Mac`: arm64: [tunein_v0.2.1_aarch64-apple-darwin.tar.gz](https://github.com/tsirysndr/tunein-cli/releases/download/v0.2.1/tunein_v0.2.1_aarch64-apple-darwin.tar.gz) intel: [tunein_v0.2.1_x86_64-apple-darwin.tar.gz](https://github.com/tsirysndr/tunein-cli/releases/download/v0.2.1/tunein_v0.2.1_x86_64-apple-darwin.tar.gz)
73-
- `Linux`: [tunein_v0.2.1_x86_64-unknown-linux-gnu.tar.gz](https://github.com/tsirysndr/tunein-cli/releases/download/v0.2.1/tunein_v0.2.1_x86_64-unknown-linux-gnu.tar.gz)
72+
- `Mac`: arm64: [tunein_v0.2.2_aarch64-apple-darwin.tar.gz](https://github.com/tsirysndr/tunein-cli/releases/download/v0.2.2/tunein_v0.2.2_aarch64-apple-darwin.tar.gz) intel: [tunein_v0.2.2_x86_64-apple-darwin.tar.gz](https://github.com/tsirysndr/tunein-cli/releases/download/v0.2.2/tunein_v0.2.2_x86_64-apple-darwin.tar.gz)
73+
- `Linux`: [tunein_v0.2.2_x86_64-unknown-linux-gnu.tar.gz](https://github.com/tsirysndr/tunein-cli/releases/download/v0.2.2/tunein_v0.2.2_x86_64-unknown-linux-gnu.tar.gz)
7474
## 🚀 Usage
7575
```
7676
USAGE:

src/api/tunein.v1alpha1.rs

Lines changed: 117 additions & 199 deletions
Large diffs are not rendered by default.

src/app.rs

Lines changed: 59 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
1-
use std::{io, time::Duration};
2-
31
use crossterm::event::{self, Event, KeyCode, KeyEvent, KeyEventKind, KeyModifiers};
42
use ratatui::{
53
prelude::*,
64
widgets::{block::*, *},
75
};
6+
use std::{io, process, thread, time::Duration};
87
use tokio::sync::mpsc::UnboundedReceiver;
98

109
use crate::{extract::get_currently_playing, tui};
1110

12-
#[derive(Debug, Default, Clone)]
11+
#[derive(Debug, Default)]
1312
pub struct State {
1413
pub name: String,
1514
pub now_playing: String,
@@ -20,14 +19,24 @@ pub struct State {
2019

2120
#[derive(Debug, Default)]
2221
pub struct App {
23-
pub state: State,
22+
name: String,
23+
now_playing: String,
24+
genre: String,
25+
description: String,
26+
br: String,
2427
exit: bool,
2528
}
2629

2730
impl App {
2831
pub fn new() -> Self {
29-
let state = State::default();
30-
Self { state, exit: false }
32+
Self {
33+
name: "".to_string(),
34+
now_playing: "".to_string(),
35+
genre: "".to_string(),
36+
description: "".to_string(),
37+
br: "".to_string(),
38+
exit: false,
39+
}
3140
}
3241
}
3342

@@ -38,25 +47,51 @@ impl App {
3847
terminal: &mut tui::Tui,
3948
mut cmd_rx: UnboundedReceiver<State>,
4049
id: &str,
41-
) -> anyhow::Result<()> {
50+
) {
4251
let new_state = cmd_rx.recv().await.unwrap();
43-
44-
while !self.exit {
45-
self.state = new_state.clone();
46-
52+
self.name = new_state.name;
53+
self.genre = new_state.genre;
54+
self.description = new_state.description;
55+
self.br = new_state.br;
56+
57+
thread::spawn(|| loop {
58+
match event::read().unwrap() {
59+
// it's important to check that the event is a key press event as
60+
// crossterm also emits key release and repeat events on Windows.
61+
Event::Key(key_event) if key_event.kind == KeyEventKind::Press => {
62+
match key_event.code {
63+
KeyCode::Char('q') => {
64+
let _ = tui::restore();
65+
process::exit(0);
66+
},
67+
KeyCode::Char('d')
68+
if key_event.modifiers.contains(KeyModifiers::CONTROL) =>
69+
{
70+
let _ = tui::restore();
71+
process::exit(0);
72+
}
73+
KeyCode::Char('c')
74+
if key_event.modifiers.contains(KeyModifiers::CONTROL) =>
75+
{
76+
let _ = tui::restore();
77+
process::exit(0);
78+
}
79+
_ => {}
80+
}
81+
}
82+
_ => {}
83+
};
84+
});
85+
86+
loop {
4787
// Get current playing if available, otherwise use state's value
48-
let now_playing = get_currently_playing(id)
49-
.await
50-
.unwrap_or_else(|_| self.state.now_playing.clone());
88+
let now_playing = get_currently_playing(id).await.unwrap_or_default();
5189

5290
// Update state with current playing
53-
self.state.now_playing = now_playing;
54-
55-
terminal.draw(|frame| self.render_frame(frame))?;
56-
self.handle_events()?;
91+
self.now_playing = now_playing;
92+
terminal.draw(|frame| self.render_frame(frame)).unwrap();
5793
std::thread::sleep(Duration::from_millis(500));
5894
}
59-
Ok(())
6095
}
6196

6297
fn render_frame(&self, frame: &mut Frame) {
@@ -81,16 +116,11 @@ impl App {
81116
areas[0],
82117
);
83118

84-
self.render_line("Station ", &self.state.name, areas[1], frame);
85-
self.render_line("Now Playing ", &self.state.now_playing, areas[2], frame);
86-
self.render_line("Genre ", &self.state.genre, areas[3], frame);
87-
self.render_line("Description ", &self.state.description, areas[4], frame);
88-
self.render_line(
89-
"Bitrate ",
90-
&format!("{} kbps", &self.state.br),
91-
areas[5],
92-
frame,
93-
);
119+
self.render_line("Station ", &self.name, areas[1], frame);
120+
self.render_line("Now Playing ", &self.now_playing, areas[2], frame);
121+
self.render_line("Genre ", &self.genre, areas[3], frame);
122+
self.render_line("Description ", &self.description, areas[4], frame);
123+
self.render_line("Bitrate ", &format!("{} kbps", &self.br), areas[5], frame);
94124
}
95125

96126
fn render_line(&self, label: &str, value: &str, area: Rect, frame: &mut Frame) {

src/play.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ pub async fn exec(name_or_id: &str) -> Result<(), Error> {
116116
});
117117

118118
let mut terminal = tui::init()?;
119-
let app_result = app.run(&mut terminal, cmd_rx, &id).await;
119+
app.run(&mut terminal, cmd_rx, &id).await;
120120
tui::restore()?;
121-
app_result
121+
Ok(())
122122
}

src/player.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use std::{
33
sync::{Arc, Mutex},
44
task::{Context, Poll},
55
thread,
6-
time::{Duration},
6+
time::Duration,
77
};
88

99
use anyhow::Error;

src/server/browse.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
use std::str::FromStr;
22

3-
use tunein::{
4-
types,
5-
TuneInClient,
6-
};
3+
use tunein::{types, TuneInClient};
74
use tunein_cli::api::{
85
objects::v1alpha1::{Category, StationLinkDetails},
96
tunein::v1alpha1::{

0 commit comments

Comments
 (0)