Skip to content

Network, peers, and sync status UI #51

@bertob

Description

@bertob

Goals

Information we need to expose

  • am I currently connected to other peers?
    • if so, who?
  • am i discovering peers via network, Bluetooth?
  • am i syncing via USB?
  • do I have the latest version of the document?
    • if not, how many changes need to be synced?
  • if i'm offline, how many changes are going to be synced later?

Features

  • User list
    • pseudonymous name/identity
    • sync status (?)
    • last seen (?)
    • show peers who have access but aren't online?
  • Up/download status
    • how much do i still need to up/download
    • who am i up/downloading from/to (?)
  • discovery mode
    • network/bluetooth/offline

Questions

  • do we expose all of these network status-related things in the same place?
    • e.g. a single menu with discovery mode, user list, upload status
  • which of these things need to be visible at a glance?

Relevant Art

Hedgedoc

  • Only two states: offline and online (since it's not local-first)
  • In online state, the button opens a list of users, can be logged in or not
  • Color of people's edits is shown in the list

Offline:

Image

Online:

Image

Muse

  • Really tries to avoid spinners (except initial setup)
  • Circle is gray when nothing is happening, pulsates when network traffic is happening

Image

Clicking the circle opens this popover, with three states

  • Live (online, but not syncing)
  • Syncing
  • Offline with local edits
    • size of local changes to be synced when you're online next time is visualized

Image

Image

Image

Receiving side while syncing:

Image

Offline state with closed menu:

Image

Right-clicking the dot opens this debug menu:

Image


@adz's notes on p2panda events:

💥 User: Enter document id -> join document t
➡️ Subscribe to data stream concerning document t
➡️ Find peers who are interested in the same document t
🔔 Discovered peer p being interested in document t
➡️ Connect to available peers, exchange latest document state with each of them. We sync with each discovered peer max. once (except when failed, then we re-attempt x times before giving up).
🔔 Sync started with peer p on document t
🔔 Received data (in our case it's state-based CRDTs / "snapshots") via sync from peer p on document t
➡️ Join gossip overlay via peer p (bootstrap)
🔔 Joined gossip overlay on topic t
🔔 Gossip neighbor up / down
🔔 Received data (in our case it's delta-based CRDTs / "patches") via gossip from peer p on document t

💥 = user action
➡️ = p2panda action (internal)
🔔 = p2panda event (can be subscribed)

Metadata

Metadata

Assignees

No one assigned

    Labels

    frontendGTK, User Interface, UX, etc.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions