From 8aef9b3775c8f7aab13e12e8f86497c7c59be4b4 Mon Sep 17 00:00:00 2001 From: Erik Kundt Date: Wed, 12 Jul 2023 15:02:59 +0200 Subject: [PATCH] Implement patch browser context on home page --- src/app/page.rs | 4 ++-- src/ui/context.rs | 8 ++++++++ src/ui/widget/patch.rs | 35 +++++++++++++++++++++++++++++------ 3 files changed, 39 insertions(+), 8 deletions(-) diff --git a/src/app/page.rs b/src/app/page.rs index 61d154f8..e5654dbd 100644 --- a/src/app/page.rs +++ b/src/app/page.rs @@ -130,7 +130,7 @@ impl HomeView { let state = app.state(&Cid::Home(HomeCid::IssueBrowser))?; let progress = match state { State::Tup2((StateValue::Usize(step), StateValue::Usize(total))) => { - Progress::Step(step, total) + Progress::Step(step.saturating_add(1), total) } _ => Progress::None, }; @@ -141,7 +141,7 @@ impl HomeView { let state = app.state(&Cid::Home(HomeCid::PatchBrowser))?; let progress = match state { State::Tup2((StateValue::Usize(step), StateValue::Usize(total))) => { - Progress::Step(step, total) + Progress::Step(step.saturating_add(1), total) } _ => Progress::None, }; diff --git a/src/ui/context.rs b/src/ui/context.rs index f9e2a6c1..d396596c 100644 --- a/src/ui/context.rs +++ b/src/ui/context.rs @@ -1,4 +1,5 @@ use radicle::cob::issue::{Issue, IssueId}; +use radicle::cob::patch::{Patch, PatchId}; use radicle::prelude::{Id, Project}; use radicle::Profile; @@ -10,12 +11,14 @@ pub struct Context { project: Project, repository: Repository, issues: Vec<(IssueId, Issue)>, + patches: Vec<(PatchId, Patch)>, } impl Context { pub fn new(profile: Profile, id: Id, project: Project) -> Self { let repository = profile.storage.repository(id).unwrap(); let issues = crate::cob::issue::all(&repository).unwrap_or_default(); + let patches = crate::cob::patch::all(&repository).unwrap_or_default(); Self { id, @@ -23,6 +26,7 @@ impl Context { project, repository, issues, + patches, } } @@ -45,4 +49,8 @@ impl Context { pub fn issues(&self) -> &Vec<(IssueId, Issue)> { &self.issues } + + pub fn patches(&self) -> &Vec<(PatchId, Patch)> { + &self.patches + } } diff --git a/src/ui/widget/patch.rs b/src/ui/widget/patch.rs index 5df3ab73..f593f140 100644 --- a/src/ui/widget/patch.rs +++ b/src/ui/widget/patch.rs @@ -116,10 +116,33 @@ pub fn context(context: &Context, theme: &Theme, patch: (PatchId, Patch)) -> Wid common::context::bar(theme, "Patch", &id, title, &author, &comments.to_string()) } -pub fn browse_context( - _context: &Context, - theme: &Theme, - _progress: Progress, -) -> Widget { - common::context::bar(theme, "Browse", "", "", "", "") +pub fn browse_context(context: &Context, theme: &Theme, progress: Progress) -> Widget { + use radicle::cob::patch::State; + + let patches = context.patches(); + let mut draft = 0; + let mut open = 0; + let mut archived = 0; + let mut merged = 0; + + for (_, patch) in patches { + match patch.state() { + State::Draft => draft += 1, + State::Open { conflicts: _ } => open += 1, + State::Archived => archived += 1, + State::Merged { + commit: _, + revision: _, + } => merged += 1, + } + } + + common::context::bar( + theme, + "Browse", + "", + "", + &format!("{draft} draft | {open} open | {archived} archived | {merged} merged"), + &progress.to_string(), + ) }