-
Notifications
You must be signed in to change notification settings - Fork 3
Priorization
This page details all tasks that should be priorized in order to reach a state of MVP.
The steps that should be taken are described in order below:
Those steps are common to app Prose app platforms, therefore they are defined there, in the common client library.
π Note that those steps are tracked as individual issues in the Prose App MVP project.
-
Improve login (to its final state)
- Description: The login form could not be implemented to 100% state due to missing server feature.
β οΈ Concerns:- We need to implement a way for tokens to be generated by the server (pretty much like most modern REST APIs work). A token should be revocable from any connected application, eg. if the user lost their device. Not sure a XEP exists for that, in any case we may need to create a Prosody module as well;
- Find a clean way to protect account credentials (JID + password) w/ an additional TOTP token (there should be a XEP for that, we also need to look for a Prosody module);
-
Connect using session tokens
- Description: Re-using the session tokens generated by the server (not possible ATM, see concerns above).
-
Ability to logout and destroy session tokens
- Description: Ability for the user to remove an account from the Prose app, which would need to destroy the session tokens from the server (not possible ATM, see concerns above).
-
Implement fetching of roster (and refresh the local store w/ added, updated, removed contacts)
- Description: Roster groups need to be supported, for which we can reserve group name "team" + "others" for "Team members" and "Other contacts". Other group names should be displayed as-is as sections.
- XEPs:
- RFC3921: Roster Management β https://xmpp.org/rfcs/rfc3921.html#roster
- XEP-0237: Roster Versioning β https://xmpp.org/extensions/xep-0237.html
- XEP-0162: Best Practices for Roster and Subscription Management β https://xmpp.org/extensions/xep-0162.html
-
Handle live roster updates from the server when connected (roster pushes)
- Description: The server may push roster changes whenever the server-side roster gets updated (eg. by another connected Prose app). The local roster store should be updated.
- XEPs:
- RFC3921: Roster Management β https://xmpp.org/rfcs/rfc3921.html#roster
-
Implement a simple popup to start a new conversation with a target JID (a single JID for now)
- Description: This comes handy to test messaging w/ different contacts and later test user-info fetching for same-server and federated contacts.
-
Show logged-in user avatar
- Description: Use User Avatar over PubSub/PEP (the server might not be compatible), do not use vcard-temp with avatars over vcard at all since it's been deprecated for 10+ years even if still widely used by XMPP clients.
- XEPs:
- XEP-0084: User Avatar β https://xmpp.org/extensions/xep-0084.html
-
Show logged-in user presence
- Description: Subscribe to the presence for the local user resource (user@server.tld/resource) and reflect its value in the presence badge shown in the UI.
- XEPs:
- RFC3921: Exchanging Presence Information β https://xmpp.org/rfcs/rfc3921.html#presence
-
Grey out the top-left call button
- Description: Calls will be implemented later.
-
Grey out groups in the roster
- Description: MUCs will be implemented soon.
-
Grey out the spotlight section
- Description: Will be implemented soon.
- Timeline: whenever we implement this, here's the order:
- People and groups (backed by the server)
- Unread stack (backed from local store after receiving pending messages from the server)
- DMs (filtered from local store after fetching all recent MAM)
- Replies (filtered from local store after fetching all recent MAM)
-
Grey out account switcher
- Description: Multi-workspace capabilities TBD, as they may require some extra work on the core-client library.
-
Integrate the messaging Web view from the prose-core-views
- Description: The messaging Web view is ready, include it w/ static data
-
Pass store data to the messaging Web view
- Description: Pass store data from Swift to the JS runtime. We should find a way to spawn a single WebKit background process and re-use the same view again and again when the user switches conversation, by simply updating the VueJS store in the view (this avoids re-parsing the JS everytime).
-
Ability to send simple text messages and receive them from the network
- Description: Send messages w/ the
chat
type over XMPP, and receivechat
messages back. - XEPs:
- RFC3921: Exchanging Messages β https://xmpp.org/rfcs/rfc3921.html#messaging
- XEP-0308: Last Message Correction β https://xmpp.org/extensions/xep-0308.html
- XEP-0085: Chat State Notifications β https://xmpp.org/extensions/xep-0085.html
- XEP-0280: Message Carbons β https://xmpp.org/extensions/xep-0280.html
- Description: Send messages w/ the
-
Fetch messaging history from the server using MAM (if the server supports MAM) and populate the store
- Description: Do this upon opening the conversation for the first time since connection broke.
- XEPs:
- XEP-0313: Message Archive Management β https://xmpp.org/extensions/xep-0313.html
- XEP-0441: Message Archive Management Preferences β https://xmpp.org/extensions/xep-0441.html
-
Account offline error banner
- Description: Whenever the connection broke or is reconnecting (eg. re-opening laptop, waiting for WiFi, server down), show the offline banner (see Sketch designs, will need to be implemented). Still, we should show the offline reason (especially eg. if the server is down and thus we cannot connect at the TCP level).
-
Account error popup
- Description: Whenever the account cannot be connected-to (eg. invalid password, revoked session token), with a way to recover from this state (eg. try to login again).
-
Grey out messaging edition features
- Description: The messaging edition features will be implemented later (right after the first MVP is done).
- Features:
- Message formatting controls
- Attach a file
- Send a smiley
-
Grey out messaging top bar controls
- Description: Some messaging top bar controls will be implemented later (right after the first MVP is done).
- Features:
- Search field
- Call button
- Verified icon next to JID (needs to implement OMEMO et al for that; later)
- Navigation shortcut buttons (backwards, forwards, history)
-
Grey out user information
- Description: The user information right sidebar will be implemented later (right after the first MVP is done).
- Features:
- (prevent the whole user information bar from being shown, or show it but w/ placeholder data)
- Implement account management
- Description: Ability to add a new account, remove account, see connection status, server features, etc.
- XEPs:
- XEP-0115: Entity Capabilities β https://xmpp.org/extensions/xep-0115.html
- Grey out all preferences except account management
- Description: Those preferences will come later, as we need them, and as we figure out whether we should store Prose app preferences somewhere on the server (which is possible), or locally only (eg. dark mode switcher, etc.).
- Implement auto-replies within the core client library to some common IQs stanza requests
- Description: Some IQ stanzas are commonly used by all XMPP clients and servers to query an XMPP client for some information, eg. its local time, ping it, etc. They should be implemented as silent handlers in the library (ie. they do not manipulate the store). Note that they are already implemented in the first version of the core client library, so the source code for this may simply be copy-pasted and adapted to the final library.
- XEPs:
- XEP-0092: Software Version β https://xmpp.org/extensions/xep-0092.html
- XEP-0012: Last Activity β https://xmpp.org/extensions/xep-0012.html
- XEP-0202: Entity Time β https://xmpp.org/extensions/xep-0202.html
- XEP-0199: XMPP Ping β https://xmpp.org/extensions/xep-0199.html
- XEP-0030: Service Discovery β https://xmpp.org/extensions/xep-0030.html