allow to init new repo in existing dir and improve dir picker view
Dependencies
- [2]
PKJCFSBMtheme improvements - [3]
YRGDFHABproject dir picker - [4]
LPSUBGUBadd projects picker - [5]
MORKDJUEuse allowed actions binding for key subs - [6]
5BAPU7K6dir picker key navigation - [7]
TMDH7GPVdir picker scrollables handling + confirmation - [8]
J3AD2D2Jimprove push and pull keys - [9]
IOXNOVX2allow to initiate a new repo - [10]
LA45PKNRimprove hierachical selection highlighting - [11]
MYGIBRRHwip custom theme - [*]
23SFYK4Qbig view refactor into a new crate - [*]
EJPSD5XOshared allowed actions conditions between update and view - [*]
6YZAVBWUInitial commit
Change contents
- replacement in inflorescence_view/src/view.rs at line 165
theme::Container::Bordered,theme::Container::FadedBorder, - edit in inflorescence_view/src/view.rs at line 171
theme::Text::SlightlyFaded, - replacement in inflorescence_view/src/theme.rs at line 102
Bordered,FadedBorder, - replacement in inflorescence_view/src/theme.rs at line 265
Container::Bordered => container::Style {Container::FadedBorder => container::Style { - replacement in inflorescence_view/src/theme.rs at line 267
color: Color { a: 0.3, ..TURQOISE },color: TEXT_COLOR_FADED, - edit in inflorescence_model/src/action.rs at line 310
current_kind, - replacement in inflorescence_model/src/action.rs at line 404[5.172698]→[7.56:128](∅→∅),[7.128]→[8.45299:45336](∅→∅),[8.45336]→[7.165:260](∅→∅),[7.165]→[7.165:260](∅→∅),[7.260]→[8.45337:45382](∅→∅),[8.45382]→[7.305:495](∅→∅),[7.305]→[7.305:495](∅→∅),[7.495]→[8.45383:45432](∅→∅)
push_if(matches!(selection, dir_picker::Selection::Input),|| confirm("confirm input"),ma,);push_if(matches!(selection, dir_picker::Selection::SubDir(_)),|| confirm("confirm dir selection"),ma,);push_if(matches!(selection,dir_picker::Selection::ProjectPijul(_)| dir_picker::Selection::ProjectGit(_)),|| confirm("confirm project selection"),push(|| {confirm(match current_kind {Some(dir_picker::RepoKind::Pijul) => "open Pijul repository",Some(dir_picker::RepoKind::Git) => "import from Git",None => "initialize new repository",})}, - replacement in inflorescence_iced_widget/src/dir_picker.rs at line 14
use std::collections::VecDeque;use std::collections::{BTreeSet, VecDeque}; - edit in inflorescence_iced_widget/src/dir_picker.rs at line 25
pub current_kind: Option<RepoKind>,/// Absolute paths with the child directories of the `current_dir` - edit in inflorescence_iced_widget/src/dir_picker.rs at line 28
/// Relative paths with the child directories of the `current_dir` matching/// current `input` - edit in inflorescence_iced_widget/src/dir_picker.rs at line 63
FindReposDirsDone, - edit in inflorescence_iced_widget/src/dir_picker.rs at line 93
let mut state = State {left_nav: nav_scrollable::State::default(),right_nav: nav_scrollable::State::default(),input: String::default(),current_dir,current_kind: None,child_dirs: vec![],matched_child_dirs: vec![],found_repos_dirs_pijul: vec![],found_repos_dirs_git: vec![],find_child_dirs_handle,find_repos_handle,matcher: Matcher::default(),selection: Selection::default(),};update_current_kind(&mut state); - replacement in inflorescence_iced_widget/src/dir_picker.rs at line 110[3.2436]→[3.2436:2894](∅→∅),[3.2894]→[6.6472:6517](∅→∅),[6.6517]→[3.2894:2905](∅→∅),[3.2894]→[3.2894:2905](∅→∅)
State {left_nav: nav_scrollable::State::default(),right_nav: nav_scrollable::State::default(),input: String::default(),current_dir,child_dirs: vec![],matched_child_dirs: vec![],found_repos_dirs_pijul: vec![],found_repos_dirs_git: vec![],find_child_dirs_handle,find_repos_handle,matcher: Matcher::default(),selection: Selection::default(),},state, - edit in inflorescence_iced_widget/src/dir_picker.rs at line 185
- edit in inflorescence_iced_widget/src/dir_picker.rs at line 218
state.find_child_dirs_handle = None; - edit in inflorescence_iced_widget/src/dir_picker.rs at line 233
Msg::FindReposDirsDone => {state.find_repos_handle = None;Task::none()} - edit in inflorescence_iced_widget/src/dir_picker.rs at line 243
update_current_kind(state); - edit in inflorescence_iced_widget/src/dir_picker.rs at line 552
update_current_kind(state); - edit in inflorescence_iced_widget/src/dir_picker.rs at line 641
text_class_decorative: <Theme as text::Catalog>::Class<'a>, - edit in inflorescence_iced_widget/src/dir_picker.rs at line 652
<Theme as text::Catalog>::Class<'a>: Copy, - edit in inflorescence_iced_widget/src/dir_picker.rs at line 669
current_kind: _, - replacement in inflorescence_iced_widget/src/dir_picker.rs at line 741
.shaping(text::Shaping::Advanced),.shaping(text::Shaping::Advanced).class(text_class_decorative), - replacement in inflorescence_iced_widget/src/dir_picker.rs at line 779
.shaping(text::Shaping::Advanced),.shaping(text::Shaping::Advanced).class(text_class_decorative), - replacement in inflorescence_iced_widget/src/dir_picker.rs at line 927
let mut child_dirs = vec![];let mut child_dirs = BTreeSet::new(); - replacement in inflorescence_iced_widget/src/dir_picker.rs at line 932
child_dirs.push(path);child_dirs.insert(path); - replacement in inflorescence_iced_widget/src/dir_picker.rs at line 935
Ok(child_dirs)Ok(child_dirs.into_iter().collect()) - replacement in inflorescence_iced_widget/src/dir_picker.rs at line 963
yield (path, RepoKind::Pijul);yield Some((path, RepoKind::Pijul)); - replacement in inflorescence_iced_widget/src/dir_picker.rs at line 966
yield (path, RepoKind::Git);yield Some((path, RepoKind::Git)); - edit in inflorescence_iced_widget/src/dir_picker.rs at line 973
yield None - replacement in inflorescence_iced_widget/src/dir_picker.rs at line 978
Ok((dir, kind)) => Msg::FindReposDirsSuccess((dir, kind)),Ok(Some((dir, kind))) => Msg::FindReposDirsSuccess((dir, kind)),Ok(None) => Msg::FindReposDirsDone, - edit in inflorescence_iced_widget/src/dir_picker.rs at line 1010
fn update_current_kind(state: &mut State) {let path_to_check = match &state.selection {Selection::Input => {Some(state.current_dir.join(&state.input).into_path_buf())}Selection::SubDir(ix) => {Some(if !state.matched_child_dirs.is_empty() {let subdir = state.matched_child_dirs.get(*ix).unwrap();state.current_dir.join(subdir).into_path_buf()} else {state.child_dirs.get(*ix).unwrap().clone()})}Selection::ProjectPijul(_) => {state.current_kind = Some(RepoKind::Pijul);None}Selection::ProjectGit(_) => {state.current_kind = Some(RepoKind::Git);None}};if let Some(path) = path_to_check {if is_pijul(path.as_path()) {state.current_kind = Some(RepoKind::Pijul);} else if is_git(path.as_path()) {state.current_kind = Some(RepoKind::Git);} else {state.current_kind = None;}}} - replacement in inflorescence/src/main.rs at line 784
// If it contains Pijul repo, init ManagingRepo state// TODO: If it contains Git, offer to migrate it// TODO: Otherwise, offer to init Pijul from scratchlet project = store::Project {last_closed_time: cmp::Reverse(None),path: dir.clone(),};let store_project_task =if repo::is_pijul(&project.path) {Task::perform(async move {store::upsert_project(project).await},Msg::UpsertProjectResult,)} else {Task::none()if repo::is_pijul(&dir) {// If it contains Pijul repo, init ManagingRepo// statelet project = store::Project {last_closed_time: cmp::Reverse(None),path: dir.clone(), - replacement in inflorescence/src/main.rs at line 791
let (sub, managing_repo, managing_repo_task) =init_managing_repo(dir, report);new_state = Some((sub, managing_repo));Task::batch([managing_repo_task, store_project_task])let store_project_task = Task::perform(async move { store::upsert_project(project).await },Msg::UpsertProjectResult,);let (sub, managing_repo, managing_repo_task) =init_managing_repo(dir, report);new_state = Some((sub, managing_repo));Task::batch([managing_repo_task,store_project_task,])} else {if repo::is_git(&dir) {// Allow to import from Git or init new Pijul// history TODO// *sub_menu = Some(model::SubMenu::InitRepo {// path: dir.clone(),// });} else {// If it's not Git repo either, allow to// initialize Pijul*sub_menu = Some(model::SubMenu::InitRepo {path: dir.clone(),});}Task::none()}