Skip to content

Commit

Permalink
Merge pull request #36 from dantleech/logging
Browse files Browse the repository at this point in the history
Logging
  • Loading branch information
dantleech committed Sep 23, 2023
2 parents a3e1790 + b910f40 commit 44a1355
Show file tree
Hide file tree
Showing 15 changed files with 230 additions and 28 deletions.
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,19 @@ CHANGELOG

## master

Bug fixes:

- Fixed incorrect polyline scaling

Improvements:

- Refactored views to use traits.
- Show only shortcuts relevant to current view.

Features:

- Log view

## 0.0.5

Features:
Expand Down
66 changes: 66 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,4 @@ tui-input = "0.8.0"
confy = "0.5.1"
hyper-rustls = "0.24.1"
sqlx = { version = "0.7.1", features = ["sqlx-sqlite", "sqlite", "runtime-tokio", "chrono"] }
tui-logger = { version = "0.9.6", features = ["ratatui", "ratatui-support"] }
3 changes: 3 additions & 0 deletions sqlx-data.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"db": "SQLite"
}
40 changes: 33 additions & 7 deletions src/app.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,17 @@ use std::{
time::{Duration, SystemTime},
};

use log::info;
use tokio::sync::mpsc::{Receiver, Sender};
use tui::{
backend::{Backend, CrosstermBackend},
widgets::TableState, Terminal,
};
use tui_input::Input;
use tui_logger::TuiWidgetState;

use crate::{
component::{activity_list, unit_formatter::UnitFormatter},
component::{activity_list, unit_formatter::UnitFormatter, log_view::LogView},
event::keymap::KeyMap,
store::activity::Activity,
ui,
Expand Down Expand Up @@ -77,10 +79,10 @@ impl Display for Notification {

pub struct App<'a> {
pub quit: bool,
pub active_page: ActivePage,
pub previous_page: Option<ActivePage>,
pub unit_formatter: UnitFormatter,
pub activity_list: ActivityListState,
pub activity_view: ActivityViewState,
pub activity_view_state: ActivityViewState,
pub filters: ActivityFilters,
pub ranking: RankOptions,

Expand All @@ -89,6 +91,8 @@ pub struct App<'a> {
pub activity_anchored: Option<Activity>,
pub activities: Activities,

pub log_view_state: TuiWidgetState,

pub info_message: Option<Notification>,
pub error_message: Option<Notification>,
pub key_map: KeyMap,
Expand All @@ -98,12 +102,15 @@ pub struct App<'a> {
event_sender: EventSender,

event_queue: Vec<InputEvent>,
active_page: ActivePage,
sync_sender: Sender<bool>,
}

#[derive(Clone, Copy)]
pub enum ActivePage {
ActivityList,
Activity,
LogView,
}

impl App<'_> {
Expand All @@ -116,6 +123,7 @@ impl App<'_> {
App {
quit: false,
active_page: ActivePage::ActivityList,
previous_page: None,
unit_formatter: UnitFormatter::imperial(),
activity_list: ActivityListState {
mode: activity_list::ActivityListMode::Normal,
Expand All @@ -126,10 +134,11 @@ impl App<'_> {
sort_dialog: false,
rank_dialog: false,
},
activity_view: ActivityViewState {
activity_view_state: ActivityViewState {
pace_table_state: TableState::default(),
selected_split: None,
},
log_view_state: TuiWidgetState::default().set_default_display_level(log::LevelFilter::Debug),
filters: ActivityFilters {
sort_by: SortBy::Date,
sort_order: SortOrder::Desc,
Expand Down Expand Up @@ -168,10 +177,9 @@ impl App<'_> {
let mut view: Box<dyn View> = match self.active_page {
ActivePage::ActivityList => Box::new(ActivityList::new()),
ActivePage::Activity => Box::new(ActivityView{}),
ActivePage::LogView => Box::new(LogView::new())
};

self.render(terminal, view.as_mut())?;

if let Some(message) = &self.info_message {
if message.has_expired() {
self.info_message = None
Expand All @@ -184,12 +192,18 @@ impl App<'_> {
}

while self.event_queue.len() > 1 {
let event = self.event_queue.pop().unwrap();
info!("Sending event: {:?}", event);
self.event_sender
.send(self.event_queue.pop().unwrap())
.send(event)
.await?;
}

if let Some(event) = self.event_receiver.recv().await {
match InputEvent::Tick {
InputEvent::Tick => (),
_ => info!("Recieving event: {:?}", event),
}
match event {
InputEvent::Input(k) => {
let key = self.key_map.map_key(k);
Expand All @@ -206,6 +220,7 @@ impl App<'_> {
InputEvent::Sync => self.sync_sender.send(true).await?,
}
}
self.render(terminal, view.as_mut())?;
}
Ok(())
}
Expand Down Expand Up @@ -297,4 +312,15 @@ impl App<'_> {
terminal.backend_mut().flush()?;
Ok(())
}

pub(crate) fn switch_to(&mut self, view: ActivePage) {
self.previous_page = Some(self.active_page);
self.active_page = view;
}

pub(crate) fn switch_to_previous(&mut self) {
let current_page = Some(self.active_page);
self.active_page = self.previous_page.unwrap_or(ActivePage::ActivityList);
self.previous_page = current_page;
}
}
5 changes: 4 additions & 1 deletion src/component/activity_list/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ use tui_input::backend::crossterm::EventHandler;
use tui_input::Input;

use crate::{
app::App,
app::{App, ActivePage},
event::{
input::InputEvent,
keymap::{MappedKey, StravaEvent},
Expand Down Expand Up @@ -105,6 +105,9 @@ impl View for ActivityList {
app.anchor_selected();
app.send(InputEvent::Reload);
}
StravaEvent::ToggleLogView => {
app.switch_to(ActivePage::LogView);
}
_ => (),
}
}
Expand Down
20 changes: 12 additions & 8 deletions src/component/activity_view.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,30 +31,33 @@ impl View for ActivityView {
StravaEvent::ToggleUnitSystem => {
app.unit_formatter = app.unit_formatter.toggle();
}
StravaEvent::Quit => app.active_page = ActivePage::ActivityList,
StravaEvent::Enter => app.active_page = ActivePage::ActivityList,
StravaEvent::Quit => app.switch_to(ActivePage::ActivityList),
StravaEvent::Enter => app.switch_to(ActivePage::ActivityList),
StravaEvent::Down => {
app.next_activity();
}
StravaEvent::Up => {
app.previous_activity();
}
StravaEvent::Next => {
table_state_next(&mut app.activity_view.pace_table_state, split_len, true);
if let Some(selected) = app.activity_view.pace_table_state.selected() {
app.activity_view.select_split(selected as i64);
table_state_next(&mut app.activity_view_state.pace_table_state, split_len, true);
if let Some(selected) = app.activity_view_state.pace_table_state.selected() {
app.activity_view_state.select_split(selected as i64);
}
}
StravaEvent::Previous => {
table_state_prev(&mut app.activity_view.pace_table_state, split_len, true);
if let Some(selected) = app.activity_view.pace_table_state.selected() {
app.activity_view.select_split(selected as i64);
table_state_prev(&mut app.activity_view_state.pace_table_state, split_len, true);
if let Some(selected) = app.activity_view_state.pace_table_state.selected() {
app.activity_view_state.select_split(selected as i64);
}
}
StravaEvent::Anchor => {
app.anchor_selected();
app.send(InputEvent::Reload);
}
StravaEvent::ToggleLogView => {
app.switch_to(ActivePage::LogView);
}
_ => (),
}
}
Expand All @@ -67,6 +70,7 @@ impl View for ActivityView {
StravaEvent::Next,
StravaEvent::Previous,
StravaEvent::Enter,
StravaEvent::ToggleLogView,
StravaEvent::Quit,
]
}
Expand Down

0 comments on commit 44a1355

Please sign in to comment.