moment/TODO.md

286 lines
9.9 KiB
Markdown
Raw Normal View History

# TODO
- Long-press-drag to select multiple messages on touch
- Drag to select multiple messages on non-touch
- Drag-scrolling in room pane a tiny bit activates the delegates
2020-03-25 02:26:17 +11:00
## Goals before 0.5.0
2020-03-21 05:11:47 +11:00
- Redacting messages
- Download progress bar for file events, "Save as..."
- Make rooms fully manageable within Mirage: settings, permissions, kick, etc
2020-03-22 06:42:27 +11:00
- Add AppImage metadata file
2020-03-22 10:14:07 +11:00
- Pillow now bundle image libraries?
Update AppImage building script and INSTALL.md
2020-03-27 09:54:31 +11:00
- Publish on Flathub and AppImageHub
2020-03-11 12:28:32 +11:00
## Refactoring
2020-03-11 12:28:32 +11:00
- Put keybindings in the components they belong to instead of shoving them
all in one central file
2020-03-11 12:28:32 +11:00
- Rewrite account settings using `HTabbedContainer`
- Get rid of all `currentSpacing` stuff
2019-12-14 08:30:58 +11:00
- Use new default/reset controls system
2020-03-11 12:28:32 +11:00
- Display name field text should be colored
- Split `HScrollableTextArea` into `HTextArea` and `HScrollView` components
- Refactor `Composer`
- Make sure we don't store any state in delegates
2020-03-21 05:11:47 +11:00
- Drop the `HBox` `buttonModel`/`buttonCallbacks` `HBox` approach,
be more declarative
- Look into Kirigami for QML
## Issues
2020-03-24 09:15:51 +11:00
- If names are mentioned with a different case, they look like normal links
2020-03-22 10:47:52 +11:00
- When zooming in enough, "Mirage <version>" label overflows
2020-03-14 04:04:36 +11:00
- Catch server 5xx errors when sending message and retry
2020-03-11 12:28:32 +11:00
- Popups and room settings can't be scrolled when not enough height to show all
2020-03-11 12:28:32 +11:00
- Handle cases where a known account's access token is invalid
- If an account is gone from the user's config, discard UI state last page
2020-03-11 12:28:32 +11:00
- First sent message in E2E room is sometimes undecryptable
(can be fixed by logging out and in again) (still valid?)
2020-03-11 12:28:32 +11:00
- After forgetting a room, it comes back because of the "you left" event
2020-03-11 12:28:32 +11:00
- `code` and links in quote ("> http://example.com") aren't properly colored
in room "last message" subtitle
2020-03-21 05:11:47 +11:00
- `Timer` and `Animation` are bound to framerate
- Terrible performance using `QT_QPA_PLATFORM=wayland-egl`, must use `xcb`
2019-12-18 09:50:21 +11:00
- Can't use `QQmlApplicationEngine`, problem with QApplication?
See https://bugreports.qt.io/browse/QTBUG-50992
2020-03-11 12:28:32 +11:00
- [HTML <hr> not rendered](https://bugreports.qt.io/browse/QTBUG-74342)
- Pausing uploads doesn't work well, servers ends up dropping the connection
(no real solution possible?)
## Interface
Bump version to v0.4.1 Changelogs: Added: - `hideMembershipEvents` setting in config file, controls whether events such as "x joined the room" are shown in the timeline - `hideProfileChangeEvents` setting in config file, controls whether display name and avatar change events are shown in the timeline - Compact mode to make accounts, rooms, messages and room members take only one line as well as reducing vertical spacing between them. Set by the new `compactMode` setting in config file, and can also be toggled with the `keys.toggleCompactMode` keybind which defaults to Alt+Ctrl+C - `keys.focusRoomAtIndex` in config file, a `{"<index>": "<keybind>"}` mapping which by default binds Alt+1-9 and Alt-0 to focus room 1 to 10 in the current account - User ID, display names, room ID and room aliases are now automatically transformed to matrix.to links and will be rendered as mentions by clients. In Mirage, this results in user ID/names being colored with the same color seen when they send messages - Track the number of times your user was mentioned in rooms. The visual counter is not yet displayed, since there currently is no way to mark messages as read and make the counter go down Fixed: - Python exceptions occuring in the asyncio loop not being printed in the terminal - Extra newline shown after code blocks in messages - Constant CPU usage due to button loading animations still being rendered while uneeded and invisible Theme changes: - Added `controls.avatar.compactSize` property - Added `.mention` class styling to `chat.message.styleSheet`
2020-03-24 05:45:38 +11:00
- Make clicking on user/room mentions open relevant UI instead of matrix.to
URL in browser
- Labeled text area component, use it for room creation/settings topic
- Linkify URLs in topic text areas
2020-03-11 12:28:32 +11:00
- Expand the room pane if it's currently too small to show room settings
- Use a loader for items not in view for the `HTabContainer`'s `SwipeView`
- Make "Cancel" buttons consistent, and able to cancel running Backend
coroutines. Set `disabledWhileLoading` to `false` for all "OK" buttons where
it makes sense.
- Add missing room keybindings (e.g. to open the invite members popup)
- Room pane keybindings
- Remember the previously focused item in page for ctrl+tab
2019-12-15 04:50:21 +11:00
- https://doc.qt.io/qt-5/qml-qtquick-smoothedanimation.html for progress bars
2019-12-16 06:10:50 +11:00
- Improve when HDrawer should collapse when the ui is zoomed
2020-03-11 12:28:32 +11:00
- Make room invite/left banner buttons look better
2020-03-11 12:28:32 +11:00
- Choose a better easing types for animations
- Make HListView scrollbars more visible
- In messages, remove the HTML lists excess left margin
- Improve UI for very small window heights
- In room creation, click avatar to set the future room's avatar
- In join room page, show the matching room's avatar when typing
2020-03-11 12:28:32 +11:00
- In direct chat page, show the matching user's avatar when typing
- Combine events so they take less space
2020-03-23 03:06:25 +11:00
- After combining is implemented,
no need to hide profile changes by default anymore
2020-03-11 12:28:32 +11:00
- Animate `DayBreak` apparition
- Device settings
- Replies
- Messages editing and redaction
- Code highlighting
- Adapt shortcuts flicking speed to font size
2020-03-11 12:28:32 +11:00
- Accept drag and drop to upload files or set a new avatar
- Improve room tooltips, e.g. show last messages
- Warn user when connection is lost or 429s happen
- "Rejoin" LeftBanner button if room is public
- Daybreak color
- Conversation breaks: show time of first new msg after break instead of big
blank space
2020-03-11 12:28:32 +11:00
- `MainPane`:
- Animate when logging out last account and sidepane turns invisible
- Server selection
2020-03-11 12:28:32 +11:00
- Implement Register/Reset pages
- Theming
2020-03-11 12:28:32 +11:00
- Use a standard file format
- icons.preferredPack: accept multiple values
- Find icon packs in user data dir
- See [Text.fontSizeMode](https://doc.qt.io/qt-5/qml-qtquick-text.html#fontSizeMode-prop)
- Settings page
- Notifications
- Opening links with keyboard
- Better `<pre>`
2020-03-11 12:28:32 +11:00
- Replace the rubbish default filepicker on Linux
## Media-related
- Add upload keybindings (close failed upload, pause, resume)
- Handle errors when setting an avatar
- Show confirmation box when picking file to upload or uploading from clipboard
- Show proper progress ring for mxc thumbnails loading
- Sentinel function to report local file paths for already downloaded media,
without having to click and try downloading first
- EventFile "Save as..." context menu entry
- UI for download progress (using `Transfer` like for uploads)
- Show a reason or HTTP error code for thumbnails that fail to load
- Support `m.file` thumbnails
- Generate video thumbnails
- Display GIF static thumbnails while the real GIF is loading
- Audio/video player
- Can GIFs use it?
- `EventLink` for client-side URL previews
- Special UI for matrix.to URLs
- Prevent using upload keybindings in rooms where user doesn't have permission
to upload
## Backend
- Saving the room settings
- Optimize Model item replacement
- Refetch profile after manual profile change, don't wait for a room event
2020-03-11 12:28:32 +11:00
- Better config file format
- Prevent starting multiple client instances, causes problems with E2E DB
- Check if username exists on login screen
- [Soft logouts](https://github.com/poljar/matrix-nio/commit/aba10)
2020-03-11 12:28:32 +11:00
- Logout previous session when adding an account that's already connected
2020-03-11 12:28:32 +11:00
- Startup improvements:
- Initial sync filter to get more events on first sync
- Lazy loading members
2020-03-11 12:28:32 +11:00
- Cache and restore profiles, room events and states
- Use AsyncClient `store_sync_tokens`
- Make sure to all members are fetched before sending an E2E message
- Fetch all members when using the filter members bar
2020-03-11 12:28:32 +11:00
- Properly handle direct chats
- Live-reloading accounts.json
- E2E
- Device verification
- Edit/delete own devices
- Request room keys from own other devices
- Auto-trust accounts within the same client
- Provide help when undecryptable messages occur, including:
- Trigger `nio.AsyncClient.request_room_key`
- Option to export-logout-login-import to fix one-time key problems
- Read receipts
- Status message and presence
## Nio contributions
- Streaming download & decrypt
2019-12-14 01:14:54 +11:00
- Running blocking DB function calls in executor (WIP)
- `AsyncClient.share_group_session`: send device batches concurrently (WIP)
- Dedicated error for invalid password on key import
2019-12-14 01:14:54 +11:00
- `RoomMessageMedia` and `RoomAvatarEvent` info attributes
- Handle `m.room.aliases` events
- Support "Empty room (was ...)" after peer left
2019-12-14 01:14:54 +11:00
- Left room events after client reboot
- Previewing room without joining
- Add the `resume()` account "login" method
2020-03-11 12:28:32 +11:00
## Distribution and dependencies
2020-03-11 12:28:32 +11:00
- Update to Mistune v2.0
## Notable changes for future Qt version upgrade
### [Qt 5.13](https://wiki.qt.io/New_Features_in_Qt_5.13)
- Added `SplitView`
- Added `cache` property to icon
### [Qt 5.14](https://wiki.qt.io/New_Features_in_Qt_5.14)
- Applications can now opt-in to use non-integer scale factors.
Use `QGuiApplication::highDpiScaleFactorRoundingPolicy`.
- Added `qmlRegisterSingletonInstance` function.
This allows to expose a QObject as a singleton to QML, without having to
create a factory function as required by `qmlRegisterSingletonType`.
It is meant as a type safe replacement of `setContextProperty`.
- Added `qmlRegisterAnonymousType` as a replacement for `qmlRegisterType`.
It allows to specify the URI and major version for better tooling support.
- qmllint gained an experimental -U option. If run with it, it warns about
about accesses to unqualified identifiers
- `Text` and `TextEdit` now support Markdown format
(CommonMark and GitHub dialects) as an alternative to HTML.
Includes the GitHub checklist extension, such that you can click to toggle
checkboxes in a `TextEdit`.
- `TextEdit` uses an I-beam cursor by default, and a pointing-hand cursor when
hovering a checkbox or a link
- Added `WheelHandler`, an Event Handler for the mouse wheel, and optionally
for emulated mouse wheel events coming from a trackpad.
- Added `BoundaryRule` in Qt.labs.animation: a `PropertyValueInterceptor` that
restricts the range of values a numeric property can have, applies
"resistance" when the value is overshooting, and provides the ability to
animate it back within range. It's particularly useful in combination with
`WheelHandler`, to provide similar physics as Flickable has.
- `Image` and `BorderImage` now have the same `currentFrame` and `frameCount`
properties that `AnimatedImage` has; this allows choosing an individual icon
from an .ICO file that contains multiple icons, for example.
In the future it's intended to support other multi-page formats such as
PDF, TIFF and WEBP.
2020-03-09 20:55:57 +11:00
2020-03-11 12:28:32 +11:00
- `Binding.restoreMode`: This property can be used to describe if and how the
original value should be restored when the binding is disabled.
2020-03-09 20:55:57 +11:00
### [Qt 5.15](https://wiki.qt.io/New_Features_in_Qt_5.15)
- Introduced inline components
(ability to declare multiple QML components in the same file)
- Introduced `required` properties
- Added a declarative way of registering types to QML
- Added support for the Nullish Coalescing Operator (`??`)
- Added `qmlformat` tool which automatically formats any QML file according to
the QML Coding Conventions.
- Added `cursorShape` property to pointer handlers. Most pointer handlers
(e.g. `DragHandler`) will change the cursor when the active state is true.
`HoverHandler` will change it when the mouse is hovering over the `Item` that
contains the `HoverHandler`.