Commit Graph

779 Commits (ba347744ff0895c055ef2e631be22268624149c1)

Author SHA1 Message Date
Scott Nonnenberg ba347744ff
Import: choice on first startup, workflow, ported to Node.js fs API
FREEBIE
8 years ago
Scott Nonnenberg f37af04818
AppView.createInbox() - set this.inboxView immediately to be ready
If the 'empty' event is fired between the updateInbox() call and the
new InboxView() call afterwards, then the loading screen will never go
away. We fix that by immediately creating the InboxView but only adding
it to the DOM when the backing data is ready.

FREEBIE
8 years ago
Scott Nonnenberg eaf31705cc
A number of fixes for loading screen, recent rebase
FREEBIE
8 years ago
lilia 854374dc7c
Remove the old debug log menu item 8 years ago
lilia 11633d7d87
Make debug log available from the installer
Move debug log from inbox view to app view so it can be opened regardless of
whether we are showing the inbox view or the installer.

// FREEBIE
8 years ago
lilia 02df917f3a
Fix $name$ in confirmation dialogs
Our i18n shim supports multiple substitutions if you give it an array of strings
to use as replacements.

// FREEBIE
8 years ago
Scott Nonnenberg 8f0b0b121a
Add missing comma in ConversationView event list
FREEBIE
8 years ago
lilia a2b2bd4bf3
Fix relative paths
// FREEBIE
8 years ago
lilia 26cece71c6
Prepopulate phone number on standalone page 8 years ago
lilia 7c6da5a157
Make 'Restart Signal' actually restart Signal
Previously it would just reload the page.

// FREEBIE
8 years ago
lilia 29b07950a3
Fix scroll reset after clicking on a notification 8 years ago
lilia 2528acc717
Remove platform-specific links from install flow
Mostly to satisfy the mac app store.

// FREEBIE
8 years ago
lilia 4d981c439a
Remove number validation from install view
Allows our special cased test numbers to link desktop clients.

// FREEBIE
8 years ago
lilia d2179b2c3f
Conversation view handles drag n drop events
By forwarding them to its file input.

// FREEBIE
8 years ago
Scott Nonnenberg 601081c1b8
More refactoring to reduce global event dependencies
All Whisper.events listeners are now defined and bound in background.js,
and we no longer need global methods for opening the inbox and
conversation views, as those are handled by AppView or internally by
InboxView.

// FREEBIE
8 years ago
lilia 8d32a3bebd
Remove dead code
This view doesn't contain any elements with class openInbox.

// FREEBIE
8 years ago
lilia 4b96722d52
Hide initially empty error in standalone view
// FREEBIE
8 years ago
lilia 008e978b8a
Make standalone registration more accessible
Add buttons for switching between the linking flow and the standalone
registration flow. The button and standalone registration are only
availble in a development environment.

// FREEBIE
8 years ago
lilia a2e0fa59c1
Collect references to Whisper.events
Fixup

// FREEBIE
8 years ago
lilia f7c7e2251d
Remove unused method
This is now handled in AppView

// FREEBIE
8 years ago
lilia 6b70aecf29
Fix opening a conversation from notification 8 years ago
lilia b6e5439860
Fix saving attachments
// FREEBIE
8 years ago
lilia de3816b094
Get standalone registration working in development
Whisper.events.trigger('openStandalone') to open the standalone
registration view.

// FREEBIE
8 years ago
lilia e4e41140c4
Refactor app view
Introduce a top level view for navigating between the inbox and the
installer, enabling an in-window relink flow. Navigation is driven
through the openInbox and openInstaller global events.

// FREEBIE
8 years ago
lilia 5650748961
Fix pre-populated device name 8 years ago
lilia 25b0fbd949
Fix exceptions on window close
The stopListening function was being passed the close event as an
argument, which caused it to throw.

// FREEBIE
8 years ago
lilia 49cdc98386
Fix lightbox 8 years ago
lilia acd19fd759
Fix inbox styles 8 years ago
lilia 88893079d2
Fix restart 8 years ago
lilia 6686621b0b
Fix file dialog 8 years ago
lilia 859d49b3f4
Use relative paths
// FREEBIE
8 years ago
Scott Nonnenberg 00e1a6a36a Export: Improve usability - timing expectations, install button (#1474)
Because export might take a couple minutes, we now set expectations
that it might take 'several minutes' instead of just 'please wait.'

We also promote 'Install new Signal Desktop' from a text link in the
instructions to a button. This is important on the 'Completed' screen
because it is bigger and to the left of the 'Export Again' button, which
previously drew primary focus on that screen.

Lastly, we also remove the title-specific element of the support link,
so we're resilient to title changes in the future.

FREEBIE
8 years ago
Scott Nonnenberg e3bada1f4a
MessageView.updateColor: Call getAvatar on convo, not message
FREEBIE
8 years ago
Scott Nonnenberg 4009a0119e MessageView: Handle change of color to null, call getColor() (#1438)
When we relied on the actual value of the color property to be supplied
to the updateColor change event listener, sometimes it would be null.
Then the conversation bubbles would have no color at all, making the
text hard to read.

FREEBIE
8 years ago
Scott Nonnenberg d8ce198f55 Fetch conversations once, clean up ConversationController API (#1420)
* Fetch conversations once, clean up ConversationController API

Race conditions around re-fetching have caused some problems recently,
so this removes the need to re-fetch conversations. They are fetched
once or saved once, and that is it. All interaction goes through the
ConversationController, which is the central source of truth.

We have two rules for Conversations:

1. If a conversation is in the ConversationController it doesn't need
   to be fetched, but its initial fetch/save might be in progress. You
   can wait for that fetch/save with conversation.initialPromise.
2. If a conversation is not already in the ConversationController, it's
   not yet in the database. It needs to be added to the
   ConversationController and saved to the database.

FREEBIE

* Remove Conversation.fetch() call in Message.handleDataMessage()

FREEBIE

* ConversationController.API cleanup: Fix two missing spots

FREEBIE
8 years ago
Scott Nonnenberg 548586b934 Chrome export fixes: too-long names, redact group ids (#1402)
* On export, don't print out entire group id, just last three chars

FREEBIE

* Export: Limit conversation dirs to 30 characters of original name

FREEBIE

* Redact groups ids on import as well

FREEBIE

* InboxView: Protect against nonexistent loading screen

FREEBIE
8 years ago
Scott Nonnenberg 3d8aa3b8a2
Export: Handle synchronous 'shutdown-complete' event (already offline)
FREEBIE
8 years ago
Scott Nonnenberg c0cd733139 Full export, migration banner, and full migration workflow - behind flag (#1342)
* Add support for backup and restore

This first pass works for all stores except messages, pending some scaling
improvements.

// FREEBIE

* Import of messages and attachments

Properly sanitize filenames. Logging information that will help with
debugging but won't threaten privacy (no contact or group names),
where the on-disk directories have this information to make things
human-readable

FREEBIE

* First fully operational single-action export and import!

FREEBIE

* Add migration export flow

A banner alert leads to a blocking ui for the migration. We close the socket and
wait for incoming messages to drain before starting the export.

FREEBIE

* A number of updates for the export flow

1. We don't immediately pop the directory selection dialog box, instead
  showing an explicit 'choose directory' button after explaining what is
  about to happen
2. We show a 'submit debug log' button on most steps of the process
3. We handle export errors and encourage the user to double-check their
  filesystem then submit their log
4. We are resilient to restarts during the process
5. We handle the user cancelling out of the directory selection dialog
  differently from other errors.
6. The export process is now serialized: non-messages, then messages.
7. After successful export, show where the data is on disk

FREEBUE

* Put migration behind a flag

FREEBIE

* Shut down websocket before proceeding with export

FREEBIE

* Add MigrationView to test/index.html to fix test

FREEBIE

* Remove 'Submit Debug Log' button when the export process is complete

FREEBIE

* Create a 'Signal Export' directory below user-chosen dir

This cleans things up a bit so we don't litter the user's target
directory with lots of stuff.

FREEBIE

* Clarify MessageReceiver.drain() method comments

FREEBIE

* A couple updates for clarity - event names, else handling

Also the removal of wait(), which wasn't used anywhere.

FREEBIE

* A number of wording updates for the export flow

FREEBIE

* Export complete: put dir on its own line, make text selectable

FREEBIE
8 years ago
Scott Nonnenberg 675d41843e Re-enable message box if enter pressed with no text/files
Previously the message would stay disabled until the user clicked with
the mouse.

FREEBIE
8 years ago
Scott Nonnenberg 680f7d8b57 Additional logging for perf analysis and cross-device debuging
- How long it takes to get a message through the pre-send checks
- How long it takes to open a conversation for the first time
- The timestamp of any message we send to corellate with other logs
- Add conversation ID to 'decrypt old identity key errors' start/end

FREEBIE
8 years ago
Scott Nonnenberg 241e26dc17 Don't revoke convo avatar URL on unload - we will need it again
FREEBIE
8 years ago
Scott Nonnenberg 8700112f6d Decrypt any IncomingIdentityKeyError still sticking around
FREEBIE
8 years ago
Scott Nonnenberg 67cb9bdf54 Disable message box between send request and final send begin
Because we do a number of async checks before allowing the real send to
begin, on a slow matchine or when doing a lot of work (like receiving a
lot of messages) there can be a noticeable delay between hitting Enter
and the clearing of the text in the message box. In fact, newly-typed
text can be added to the previous message if the delay is long enough.

This prevents any interaction with the message box until the send has
either been prevented or has started.

FREEBIE
8 years ago
Scott Nonnenberg e57f155403 Handle rejections from protocol layer (due to missing records)
isVerified and isUntrusted both went to the protocol layer, but were not
prepared for rejected promises resulting from missing records. This
prevented send in large groups where there has never been a message
exchanged with one of the members.

FREEBIE
8 years ago
Scott Nonnenberg 6caf88c404 Key verification error popup: Remove cancel, empty resolve()
FREEBIE
8 years ago
Scott Nonnenberg 82b2a611e3 MessageView: Always remove errors on re-render to prevent doubles
FREEBIE
8 years ago
Scott Nonnenberg 78c02f1154 Restore 'cancel' button on delete message confirmation dialog
FREEBIE
8 years ago
Scott Nonnenberg ec70170829 ConversationView.unload: Add ability to provide reason for logging
FREEBIE
8 years ago
Scott Nonnenberg c0f8812f9b ConversationView: when windows are closed, call unload()
Anyway, unload() is a more comprehensive method for doing what the close
handler was trying to do before.

FREEBIE
8 years ago
Scott Nonnenberg 65283d2794 Unload conversations and old messages every half-hour
FREEBIE
8 years ago