If `activeSectionId` does point to section that is not restored
correctly (by any reason), then the app will crash. That's becasue code
assumes there is always an active section set and it will try to
reference null item in this case.
fixes: #8785
HTML doesn't know about TextEdit's wrapMode line count so
when text was a quote it was seeing it as single line thus
painting a singleline height quoteline.
Closes#8109
Fixes#7643
This adds the backend to resend. It then hooks the button to it.
This also adds a visual state for when we are sending. This gives a good indication that a message was sent.
Fixes#7512
The problem was twofold.
1. We didn't try to fetch the messages when we re-joined, since the cursor was not reseted
2. The messages are not longer in the DB since they get deleted on joining.
I fixed 1. by reseting the cursor on leave and calling fetch on spectate
I fixed 2. in the status-go PR so that we no longer delete the messages when leaving.
banner
@John-44 requested that we show the banner only for when messages are indeed
imported into the database, not necessarily already when the torrent data is being downloaded.
This commit ensures Desktop processes the newly introduced
`ImportingHistoryArchiveMessages` signal to render the banner introduced
in d5db1e6356
This needs: https://github.com/status-im/status-go/pull/2998
Status allows for importing communities via their private keys.
There's a requested feature that users should be able to import a community via
its public key as well.
This will behave differently as private keys won't give users ownership
of the communities. When importing via a (compressed) public key, Status
will try to fetch information about the community from the network. If it
finds such information, it'll load it into the app and create
a communitiy view from which users can then request access.
If it can't find a community or community information in the network,
the user will get a dedicated error message.
This commit also refactors the `ImportCommunityPopup` such that it uses
`StatusDialog` and updates the copy accordingly since importing via
public key is now possible as well.
Closes#8339
- rework the way social links are displayed/editted; we now only allow to
enter a so called "handle" and then substitute that in the final URL
template
- move the "icon" model role to NIM backend
This has several advantages:
- we display only the "handle" and don't have to elide some long URL
- we won't let users enter random URLs into their profile and spoof the
viewing part into clicking it
Additionally, make the social link "button" clickable -> navigate to the
target URL, and make the tooltip behave as "usual" (on mouse hover).
It may happen `asyncLoadMoreMessagesForChat` is called many times in a
row. Previously it did not check whether there is any pending fetch for
a given chat, which resulted in many same cursors fetches from status-go.
Furthermore, in this case, `lastUsedMsgCursor` ended up with the same
value as `msgCursor` resulting in wrong state where there are no more
messages to fetch.
- Simplified message loading code by introducing MessageCursor helper
type
- Ensured messages are not loaded twice for the same cursor
fixes: #8602
Fixes#4943
The custom OS notifications we have in place make it possible to click
the notification and go to the right place in the app, but it causes a
big issue in Windows; it breaks the tray icon, it becomes no longer
clickable.
The easy fix I did here is the go back to using the QML sendMessage
function. It works fine to send the notif and the tray icon keeps
working. The only downside is we lose context when clicking on the
notification, so it doesn't navigate to the chat.
IMO, this is a good tradeoff.
- 01: Keycard settings menu labelling - fixed in this commit
- 02: Modal title renaming - not developed yet
- 03: Additional decision diamond and flow - not developed yet
- 04: Modal title renaming - not developed yet
- 05: Modal title renaming - done in issue #7035
- 06: Copy change - fixed in this commit
Fixes: #8458
Fixes#8553
The torrent port was clashing with the release app since both of them have it on by default now. That was causing the messenger to fail on start.
This new PORT_SHIFT env var can be used to shift the port of the torrent service and wakuV2. No more need to use WAKUV2_PORT.
we can also add more ports that need shifting.
This enables opening multiple instances of the app very easily. Just increase PORT_SHIFT by one
Old `state_factory` logic is splitted in two more files. Now it represents only
an interface, but implementation logic is placed in the following two files:
- `state_factory_general_implementation.nim`
- `state_factory_state_implementation.nim`
remove the dialog that asks users if they would like to open a link in
Status Desktop's browser and always open them in the user's external
browser
Fixes#8568
Fixes#8401
Threads in Nim are very bad and when the app closes, the thread doesn't close until it is done. That means that the 20 minute timer needs to finish before it can be closed.
This adds support for receiving copied images from the clipboard
and pasting it into the chat input.
After pasting, chat input will recognize the image and render a preview
similar to how it would do it when selecting images via the file dialog.
**Also important to note**:
At the time of this PR, it seems that desktop only supports sending
jpegs to status-go. I'm not sure if this was deliberately done this way
because the protocol says it supports jpg, png, webp and gif.
Because of this, pasting for example pngs will work, however
transparency will be lost (which is also most likely the cause of #8820)
This PR operates on that assumption. So while it adds support for
copy/pasting images, it does not address the lack of file type support.
Closes#3395
We were ignoring the `removedChats` in the messenger response and
therefore never processed deleted community chats in the client.
This commit adds `removedChats` to `handleCommunityUpdates()` and
ensures that the community channel's ID is used when emitting a signal
to the app.
This needs: https://github.com/status-im/status-go/pull/2973Closes#8000
Enabling the community archive protocol could fail when another app is
using the same port that is specified as torrent client port.
This would cause the app to crash.
With these changes we:
1. No longer crash the app but output an error in the logs
2. We popup a dialog telling the user that the specified pord is in use
Closes#7328
Adds a networks proxy model to be used with the original source model
for visualization and independent selection of isEnabled (as isActive) for a custom
purpose.
Use the proxy in the receive modal dialog for selection of networks
to be included in the address. This way the view follows the original
model but allows independent selection of networks.
Closes: #8180
Quick integration of fetching balance in the current chart view.
The proper implementation requires refactoring the QML views to separate
price chart, that depends only on the token and chain, from balance that
depends on token, chain and address.
Closes: #7662
Also
- added debugging test for `checkRecentHistory` from the attempt to
use transactions to restore balance
- small improvements that might clarify better the issues reported about
running under linux issues (didn't test them)
- fix issues found while reviewing the code.
- add support for custom infura token to be used in development
Updates #7662
Since tertiary action for the keycard popup module is always used to cancel/invalidate
the current flow, it's renamed now to cancel action (avoids confusion this way and it
seems more intuitive. It doesn't set any state. It should be defined if it's possible to cancel
the flow from the current state.
Previously we had only a single command which may be triggered for any state and
it was triggered before the state was set as an active state. Now we are able to set
custom command which may be triggered either before or after the state is set.
Changes:
- old `executeBackCommand` is now `executePreBackStateCommand`
- old `executePrimaryCommand` is now `executePrePrimaryStateCommand`
- old `executeSecondaryCommand` is now `executePreSecondaryStateCommand`
- old `executeTertiaryCommand` is now `executePreTertiaryStateCommand`
- added `executePostBackStateCommand` command
- added `executePostPrimaryStateCommand` command
- added `executePostSecondaryStateCommand` command
- added `executePostTertiaryStateCommand` command
Alright this was very painful to figure out.
Because desktop didn't know about the notification type for
`ContactVerification`, the signal processing for incoming contact
verifications would fail.
At the same time, the new message content type was missing a type
variant for content verification as well, which would cause the app to
crash at runtime for both, sender and receiver of verification requests.
Fixes#8205
Fixes#7791
Adds the retractContactRequest status-go api call. Calling it when removing a contact makes sure to send a signal to that other user so they can understand that we are no longer mutual contacts or don't have a request anymore
There's a bug in determining pending incoming contact requests where we
don't honor already rejected ones.
Simply checking if a contact in question `hasAddedUs` isn't enough
because that only tells us if the contact has sent us a request in the
past. It doesn't tell is whether the request was rejected already.
As a result, rejected contact requests keep popping up in the UI after
restarting the app. See #8156 for more information.
This commit introduces a `ContactRequestState` enum in Status Desktop,
similar to how it exists in status-go. Using this as `requestState`
on `ContactDto`, we can easily figure out what's the request state for
any given contact.
Notices that this only makes use of `ContactRequestState` to check for
whether a request was rejected.
We probably want to consider using this for all other states as well
(instead of relying on system tags).
Closes#8156
There was a requested design change where no longer wanted to have
checkboxes to decide which files will be included for a discord import,
but rather have an "X" button that enables users to remove items.
This commit implements this refactor.
In addition, it ensures that the already loaded discord categories and
channels that have been extracted from validation, are kept in sync as
well.
Meaning, if a user removes a file from the file list, the corresponding
channel will be removed as well.
If there's not channel in a given category, the category will be removed
as well.
Closes#8125#8126
If any but the `RpcException` was thrown while handling remote procedures responses
app crash happened. Fixed in this by accepting more general exception objects.
An issue with adding wallet account was happening only for a new user,
the reason for that was incorrectly set keystore path and keystore file couldn't
be found on the statusgo side because of that.
DB password for a Keycard user is now `publicKey` of encryption derivation.
kdf iterations for keycard users are set to 256000 so it's the same as we have
for regular users.
Fixes: #8066
The underlying API was mistakenly removed in status-go, then
reintroduced, but as `getLatestVerficiationRequestFrom`.
This commit fixes the RPC call.
Needs https://github.com/status-im/status-go/pull/2934
Messages are parsed to transform markdown to something that can be
rendered in a formatted way.
When this happens, the parsed text is applied to a message's `text`
property inside desktop.
There was no formatted message support for imported discord messages,
so we were relying purely on `discordMessage.content`.
However, now formatting support is pending in status-go here: https://github.com/status-im/status-go/pull/2933
This means, once this lands, we can simply rely on `messsageItem.text`.
I'm adding this guard here such that this will continue to work without
the feature in status-go, but once the feature in status-go lands,
desktop will automatically adapt.
Closes#8086
- fill the senderId just like other messages
- add some checks in Utils since the "publicKey" (ID) coming Discord
isn't in the format we'd normally expect
Closes#6678
Cleanups in deep links - removing not needed links handlers
Improve `open community` and `open channel` deep links - spectate community if not a member
Fix#7892
New community that appears through community update signal can also
be the community we are already members of, in that case we need
to emit SIGNAL_COMMUNITY_JOINED, so that it appears on the side bar.
Keycard settings view - UI - developed in a way that list of keycards is displayed
if there is at least one keycard set up. If the a keycard is locked or gets locked it
will be correctly marked in red. Selecting keycard from the list, its details may be
seen and additional flows may be run for it (so far only unlock flow is developed).
Fixes: #7025
This includes a fix in message signals that would otherwise break Desktop's
signal encoding.
See: https://github.com/status-im/status-desktop/pull/7888
Hence, it reverts the now unnecessary fix introduced in:
Revert "fix(signals_manager): ensure `savedAddresses` event has `JNull` check"
This reverts commit 013e226c66.
There's something off with the `savedAddresses` signal data, which
causes it to be `JNull` instead of an empty array (`JArray`) and breaks
signal decoding.
Ultimately this should be fixed in status-go, but this unblocks Desktop.
Main changes:
- Bump status-go to include the sync saved addresses implementation
- Use saved addresses modifier API from messaging instead of wallet
in order to have incremental sync
- Update saved addresses model on sync changes for saved addresses
Closes#7229
Enabled restart info popup after language is changed --> Workaround to temporary resolve the crash we have when language is changed (`startupModule` is null and some qml bindings are still calling this dead pointer) so, change language will not retranslate and instead, also on mac and win, the app will need a restart to apply the new language.
Disabled retranslations for all os on the corresponding service.
Will temporary fix#7709
- user is able to see community without being a member
- invitation bubble always display "Go to Community"
- join community buttons are displayed in community view
main part of: #7072
There was an issue where imported messages from third-party services
would cause super laggy scroll behaviour in the chat view.
The reason for that is that on scroll, the app keeps calling
`getVerificationRequestFrom()` on the chatkey of the community.
Typically the results of these requests are cached so that it should
perform the call only once, but because there's no actual verification
request/contact for the community chat key (all third-party messages are
signed by the community), the call keeps on happening over and over.
This commit adds a flag to `getContactDetailsAsJson` and `isEnsVerified`
to control whether or not the call to `getVerificationRequestFrom`
should in fact be made (which should not be the case for imported
messages).
The result of this is a smoother scrolling experience.
Fixes#7767
This adds the UI plus all necessary models and signal handling to render
discord import progress in the desktop application.
It also introduces message handling for discord chat message types.
Requires status-im/status-go#2826 to function
Co-authored with @caybro
Actually this is not a signing transaction, but rather authenticating logged in
user when he wants to send a transaction. An authentication is done by entering
password(regular user) or pin(keycard user).
A real signing transaction feature will be (hopefully) added in a near future where
we're going to sign a transaction on a keycard which corresponds to a certain
account, a user wants to send a transaction from.
To sum up... this change just removes password from the send modal and introduces
`Authenticate` flow instead.
Fixes: #7510
User should see `pending` state after he `join`s the community, even if
that community does not require explicit admin approval. That's because
currently, each member has to be accepted by admin, either automatically
or manually. That means, if admin is gone, no one will be ever joined to
community, even if this community states it does not require request to
join.
InvitationBubbleView.qml:
- rework view to use layouts properly
- add missing community identicon
Backend:
- remove local community requests on community join
- propagate SIGNAL_COMMUNITY_MY_REQUEST_ADDED to UI
fixes: #7139
This was never implemented, eventhough a similar approach is used with
the global AppSearch. Expose the method `scrollToMessage(messageId)` so
that it can be called from QML directly.
Fixes#7375
A new rule introduced which should provide easier tracking/maintainig
later. The rule says:
- popup contains up to 3 action buttons and one back button (optional)
- if 3 buttons are displayed in the popup then the most left button, but
not back button, always triggers tertiary action, middle button always
triggers secondary action and the most right button always triggers primary
action
- if 2 buttons are displayed, then:
- if one of them is "Cancel" (left button) it should trigger tertiary action
and the other one (right button) should trigger primary action
- if non of them is "Cancel" then the left button triggers secondary action
and the right button triggers primary action
- if single button is displayed, then:
- if it's "Cancel" it triggers tertiary action
- if it is not "Cancel" it triggers primary action
- tertiary action always reffers to the cancel action until otherwise set
- tertiary action will be always triggered by closing popup via keybord
(esc key) or clicking on top right `x` button on the popup
- Added `Authenticate` flow
- `Setup a new Keycard with an existing account` updated so it includes `Authenticate` flow
from the point where is needed (when migrating a profile keypair)
- We are missing `Unlock Keycard` flow for this one, will be added once it is developed
Depends on statug-go favourite flag extension and merging of `favourites`
with `saved_address` tables and API
Additional changes:
- Remove duplicate name instead of ESN
Closes: #6546
An explanation why we keep track of `timestamp` and `localTimestamp` here,
introduction of those two actually fixes the following issues:
- https://github.com/status-im/status-desktop/issues/6004
- https://github.com/status-im/status-desktop/issues/7058
We should always refer to `whisperTimestamp` as it is set for a message by the network
in order they are sent (that solves the issue #6004), but another issue #7058 is happening
cause `whisperTimestamp` has one second accuracy (which is a very big timeframe for messages).
That further means that all messsages sent by user A within 1000ms will be received with the
same `whisperTimestamp` value on the side of user B, in that case to differ the order of
those message we're using localy set `timestamp` on the sender side which is received unchanged
on the receiver side.
Now a question why don't we use only locally set `timestamp` may araise... the answer is...
because of issue #6004, cause it can be that users A and B send a message in almost the same
time in that case message sent by user A will be immediatelly added to the message list, while
message sent by user B will arrive like a less then a second later and in that case user A may
see user B message before or after his message and the same for user B, depends on local time
of those 2 users which is set for `timestamp` time in the moment they sent a message.
If we anyhow find a way to have here accutacy higher than 1 second, then we can go on only
with `whisperTimestamp`
3f987cc565/protocol/messenger.go (L3726)Fixes: #7058
- `Setup a new Keycard with an existing account` flow improved
- code review comments applied
- Qml part updated due to the latest `StatusListItem` changes in `StatusQ`
Changes done within this commit were required by the latest keycard
library change, where we gave up of sending few signals when we're
running/resuming flow, which were sent before (those were signal notifying
about unplugged reader, card not inserted and card inserted, they are sent
by the keycard lib now only if that is really needed).
- Added flow which covers `Setup a new Keycard with an existing account` from
the keycard settings part (though two sub-flows there are missing, `Unlock Keycard`
and `Authentication` cause we don't have them yet).
- Updated factory reset flow (part of shared module) that it can read and display metadata
from a keycard if they are set, with this update this flow is almost complete, we are missing
`Unlock Keycard` flow for it as well.
New procs added:
- accounts service `createAccountFromMnemonic`
- accounts service `convertToKeycardAccount`
- accounts service `verifyPassword`
- wallet service `fetchBalanceForAddress`
Keycard library from this commit brings new changes in terms of
signals being sent by the lib in case of reader is not plugged in,
card is not inserted, card is inserted, that means the following
signals are sent only when it's really needed:
`"{\"type\":\"keycard.flow-result\",\"event\":{\"error\":\"connection-error\"}}"`
`"{\"type\":\"keycard.action.insert-card\",\"event\":{\"error\":\"connection-error\"}}"`
`"{\"type\":\"keycard.action.card-inserted\",\"event\":{}}"`