update
This commit is contained in:
@@ -32,25 +32,25 @@ mod settings_dialog;
|
||||
|
||||
use self::onboarding_dialog::OnboardingState;
|
||||
|
||||
/// Left-dock panel with navigation entries. Entries open content panels in
|
||||
/// the dock area.
|
||||
/// Left-dock panel with navigation entries.
|
||||
/// Entries open content panels in the dock area.
|
||||
pub struct SidebarPanel {
|
||||
focus_handle: FocusHandle,
|
||||
dock_area: WeakEntity<DockArea>,
|
||||
explore: Option<WeakEntity<RepoListView>>,
|
||||
logged_in: bool,
|
||||
/// Repositories announced by the current user, listed under
|
||||
/// "All Repositories". Recreated when the signer changes.
|
||||
/// Repositories the current user announced, listed under the All Repositories heading.
|
||||
/// Recreated when the signer changes.
|
||||
my_repos: Option<Entity<RepoListStore>>,
|
||||
/// Observes the current user's repo store so the list re-renders.
|
||||
my_repos_subscription: Option<Subscription>,
|
||||
/// Banner artwork shown behind the sign-in screen,
|
||||
/// picked at random from the bundled `backgrounds/` assets.
|
||||
/// Banner artwork behind the sign-in screen.
|
||||
/// Picked at random from the bundled `backgrounds/` assets.
|
||||
banner: SharedString,
|
||||
/// Observes the local-repository scan so new discoveries re-render.
|
||||
_local_repos_subscription: Subscription,
|
||||
/// Observes the checkouts store, whose ready-to-push statuses feed the
|
||||
/// badges on the user's repository rows.
|
||||
/// Observes the checkouts store.
|
||||
/// Its ready-to-push statuses feed the badges on the user's repo rows.
|
||||
_checkouts_subscription: Subscription,
|
||||
_subscription: Subscription,
|
||||
}
|
||||
@@ -107,8 +107,8 @@ impl SidebarPanel {
|
||||
panel
|
||||
}
|
||||
|
||||
/// (Re)create the store listing the current user's repositories,
|
||||
/// and watch each of them for unpushed local work.
|
||||
/// Recreate the store listing the current user's repositories.
|
||||
/// Watch each repository for unpushed local work.
|
||||
fn refresh_my_repos(&mut self, cx: &mut Context<Self>) {
|
||||
self.my_repos_subscription = None;
|
||||
|
||||
@@ -119,9 +119,9 @@ impl SidebarPanel {
|
||||
if let Some(store) = self.my_repos.as_ref() {
|
||||
self.my_repos_subscription = Some(cx.observe(store, |_this, store, cx| {
|
||||
cx.notify();
|
||||
// These are the signed-in user's own repositories; request
|
||||
// their ready-to-push statuses (deduplicated per repo) so
|
||||
// the rows carry a badge while local work is unpushed.
|
||||
// These are the signed-in user's own repositories.
|
||||
// Request their ready-to-push statuses, deduplicated per repository.
|
||||
// The rows carry a badge while local work is unpushed.
|
||||
let addrs: Vec<_> = store
|
||||
.read(cx)
|
||||
.announcements
|
||||
@@ -138,8 +138,8 @@ impl SidebarPanel {
|
||||
}
|
||||
}
|
||||
|
||||
/// Open the Explore (repository list) panel in the center of the dock
|
||||
/// area. No-op if it's already open.
|
||||
/// Open the Explore repository list panel in the dock area's center.
|
||||
/// No-op if it is already open.
|
||||
pub fn open_explore(&mut self, window: &mut Window, cx: &mut Context<Self>) {
|
||||
if self
|
||||
.explore
|
||||
@@ -191,8 +191,8 @@ impl SidebarPanel {
|
||||
open_repo_panel(&self.dock_area, announcement, window, &mut *cx);
|
||||
}
|
||||
|
||||
/// Open a local repository's detail view in the dock's center; the
|
||||
/// detail view offers to publish it to NIP-34.
|
||||
/// Open a local repository's detail view in the dock's center.
|
||||
/// The detail view offers to publish it to NIP-34.
|
||||
fn open_local_repo(&mut self, path: PathBuf, window: &mut Window, cx: &mut Context<Self>) {
|
||||
let detail =
|
||||
cx.new(|cx| RepoDetailView::new_local(self.dock_area.clone(), path, window, cx));
|
||||
@@ -208,10 +208,10 @@ impl SidebarPanel {
|
||||
});
|
||||
}
|
||||
|
||||
/// The "All Repositories" section: header with the create button and
|
||||
/// the current user's repositories below it, lazily rendered through a
|
||||
/// [`uniform_list`], followed by the local git repositories discovered
|
||||
/// by the startup scan.
|
||||
/// The All Repositories section of the sidebar.
|
||||
/// A header with the create button above the current user's repositories.
|
||||
/// Rendered lazily through a [`uniform_list`].
|
||||
/// Followed by local git repositories from the startup scan.
|
||||
fn render_my_repos(&self, cx: &mut Context<Self>) -> impl IntoElement {
|
||||
let store = self.my_repos.as_ref();
|
||||
let local = LocalReposStore::global(cx);
|
||||
@@ -265,11 +265,10 @@ impl SidebarPanel {
|
||||
)
|
||||
.when_some(store, |builder, store| {
|
||||
let announcements = store.read(cx).announcements.clone();
|
||||
// Local repositories that have already been published to
|
||||
// NIP-34 are listed among the user's repositories above;
|
||||
// hide them from the local section (matched by the
|
||||
// identifier derived from the directory name, like the
|
||||
// init dialog's default name).
|
||||
// Local repositories already published to NIP-34 appear above.
|
||||
// Hide them from the local section here.
|
||||
// Matched by the identifier derived from the directory name.
|
||||
// Same derivation as the init dialog's default name.
|
||||
let announced_ids: HashSet<String> =
|
||||
announcements.iter().map(|a| a.id.clone()).collect();
|
||||
let local_repos: Vec<PathBuf> = local_repos
|
||||
@@ -282,8 +281,8 @@ impl SidebarPanel {
|
||||
})
|
||||
.cloned()
|
||||
.collect();
|
||||
// One merged list: the user's NIP-34 repositories first,
|
||||
// then the local repositories discovered by the scan.
|
||||
// One merged list, the user's NIP-34 repositories first.
|
||||
// Local repositories discovered by the scan follow.
|
||||
let total = announcements.len() + local_repos.len();
|
||||
|
||||
if total == 0 {
|
||||
@@ -326,8 +325,7 @@ impl SidebarPanel {
|
||||
})
|
||||
}
|
||||
|
||||
/// One row of the merged sidebar list: a NIP-34 repository or a local
|
||||
/// repository.
|
||||
/// One row of the merged sidebar list, a NIP-34 or a local repository.
|
||||
fn render_repo_row_at(
|
||||
&self,
|
||||
announcements: &[Announcement],
|
||||
@@ -358,8 +356,8 @@ impl SidebarPanel {
|
||||
.unwrap_or_else(|| SharedString::from(announcement.id.clone()));
|
||||
let avatar = PixelAvatar::new(format!("{}:{}", announcement.owner, announcement.id));
|
||||
|
||||
// A small badge with the unpushed commit count of the repository's
|
||||
// local checkouts (ready to push to the grasp servers).
|
||||
// Badge with the unpushed commit count of the repository's local checkouts.
|
||||
// The commits are ready to push to the grasp servers.
|
||||
let unpushed: usize = CheckoutsStore::global(cx)
|
||||
.read(cx)
|
||||
.push_statuses_of(&announcement.addr())
|
||||
@@ -379,10 +377,9 @@ impl SidebarPanel {
|
||||
)
|
||||
}
|
||||
|
||||
/// One local repository row: a deterministic pixel avatar seeded from
|
||||
/// the path, the directory name, and a warning suffix marking it as
|
||||
/// not yet set up for NIP-34. Clicking it opens the repository's
|
||||
/// detail view, which offers to initialize it.
|
||||
/// One local repository row, a deterministic pixel avatar seeded from the path.
|
||||
/// The directory name and a warning suffix, the repo is not yet set up for NIP-34.
|
||||
/// Clicking opens the detail view, which offers to initialize it.
|
||||
fn render_local_row(&self, path: &Path, cx: &mut Context<Self>) -> impl IntoElement {
|
||||
let name = path
|
||||
.file_name()
|
||||
@@ -410,7 +407,7 @@ impl SidebarPanel {
|
||||
import_dialog::open(window, cx);
|
||||
}
|
||||
|
||||
/// Render the user avatar and name in the sidebar, wrapped in the window titlebar drag area.
|
||||
/// Render the user avatar and name in the sidebar, inside the titlebar drag area.
|
||||
fn render_user(
|
||||
&self,
|
||||
profile: &Profile,
|
||||
@@ -440,8 +437,8 @@ impl SidebarPanel {
|
||||
)
|
||||
}
|
||||
|
||||
/// Sign-in placeholder shown while logged out: banner artwork behind a
|
||||
/// scrim so the CTA buttons stay readable in both themes.
|
||||
/// Sign-in placeholder shown while logged out.
|
||||
/// Banner artwork behind a scrim keeps the CTA buttons readable in both themes.
|
||||
fn render_sign_in(&self, window: &mut Window, cx: &mut Context<Self>) -> Div {
|
||||
v_flex()
|
||||
.size_full()
|
||||
|
||||
Reference in New Issue
Block a user