Skip to content

Architecture

Lena edited this page Jul 12, 2024 · 19 revisions

All the classes in the Squello-Core package have the prefix SPB (for Squello Project Board).

Basic structures

SPBLandingPage provides the user interface for authenticating with GitHub, managing local boards, and opening remote boards. SPBBoardSaver stores saved local boards. SPBBoard is the orchestrating class for most features, it manages the construction (holds all toolbuilder methods) and it is together with the SPBSidebar the model behind the runtime structure. A board has multiple SPBColumns, each of which have multiple SPBCards (until now: only GitHub issues added to the specific project).
Columns only have a title; cards have title, description, and SPBLabels (with color and name) and SPBAssignees (GitHub users with their name).

GitHub connection & authentication

Board, columns and cards all communicate with their remote via subclasses of SPBAbstractBoardProvider that abstract away the differences between different kinds of boards. GitHub boards use SPBNewGithubBoardProvider, local boards SPBLocalBoardProvider. SPBGithubBoardProvider is legacy code for old GitHub projects that were sunset on August 23rd 2024. Board providers use a corresponding API class (SPBNewGithubAPI and SPBGithubAPI) to send requests to their remote and convert the responses into domain objects. Objects do not communicate with their API classes directly, but only via the BoardProvider. While the API returns JsonObjects, the Board Provider should return domain objects. For real-time updates, an SPBGithubChangeProvider is used to communicate with a ruby script written by us that is set up to receive and manage all relevant board events provided by GitHub using webhooks.
If no user is signed in or necessary Authorization is missing, an SPBAuthenticator is used to prompt for GitHub username and access token. It also checks for the token scopes (see README).

Visual elements

SPBIndicatorDetection and its subclasses are transparent dummy morphs laying over cards and lanes to catch mouse drag events. They are used to show an indicator (orange line) where a card is going to be dropped while dragging. When moving columns, an SPBGhostColumn is used to represent the column's future position.
The whole UI (window with lane area and sidebar) is built by MorphicToolBuilder which required some additional ToolBuilderSpecs (the remaining classes).

Clone this wiki locally