Commit Graph

1914 Commits (a55c61a3ba63cdbb6dad64ada146e6640515d25e)

Author SHA1 Message Date
Scott Nonnenberg 9a0a87ab40 Last seen indicator: dismissed only on open and send
It can be moved if you're not scrolled to the bottom of of the window
or the window doesn't have focus when a new message comes in. Other than
that, it marches up the window until you close and reopen the
conversation, or send a message.

Note that we do NOT mark messages as read if they come in when you are
scrolled up. But we do mark the entire conversation as read if you
switch away from the app and back.

FREEBIE
8 years ago
Scott Nonnenberg eb1a4b3ac6 loadAttachments: Handle the zero -> some attachments case
FREEBIE
8 years ago
Scott Nonnenberg 0e1b534d3c Make MessageView.render() idempotent
Re-renders happen when we re-fetch messages from the database, and our
previous technique for loading attachments resulted in a new attachment
view added for every call to render()

This change ensures that a second call to render() does not add any more
attachment views.

FREEBIE
8 years ago
Scott Nonnenberg 25ebcc3131 Fix broken reference to i18n string 'mediaMessage'
FREEBIE
8 years ago
Scott Nonnenberg 0b6d5de753 Update the scroll position when 'fetch more messages' is complete
FREEBIE
8 years ago
lilia 3dbb21c53c Fix being re-added to a group you previously left
Negate the flag marking the group as left. Fixes #1207.

// FREEBIE
8 years ago
Scott Nonnenberg 13a91eece8 MessageListView.measureScrollPosition: reuse variables 8 years ago
Scott Nonnenberg c5530b7235 Increase wiggle room to 30 px, which should ensure text cut off
FREEBIE
8 years ago
Scott Nonnenberg 84397a2ef4 20px at bottom of conversation considered 'at the bottom'
So users who are 'close enough' at the bottom of the conversation won't
get marooned in history.

FREEBIE
8 years ago
Scott Nonnenberg 09791ab7d9 Make last seen indicator more stable, with less forced removal
FREEBIE
8 years ago
Scott Nonnenberg c3dc9732ef Fix: Don't scroll to last seen indicator on focus
FREEBIE
8 years ago
Scott Nonnenberg 10c2874d19 Fix race condition: Pull from database after add to conversation
Also add some console logs to help us determine whether this ever
happens to people in the wild.

FREEBIE
8 years ago
Scott Nonnenberg 9de384f3b8 Reset last seen indicator timing on focus of window
FREEBIE
8 years ago
Scott Nonnenberg 01918049b4 Keep last seen indicator around for five seconds
Helps calm the user experience a little more, makes it easier to
understand what's happening when messages are coming in quickly.

FREEBIE
8 years ago
Scott Nonnenberg 4e9e811d12 Last seen indicator: Keep scroll position when window loses focus
FREEBIE
8 years ago
Scott Nonnenberg 3beecce94e fetchConversation: Minimize scans across loaded messages
FREEBIE
8 years ago
Scott Nonnenberg d5d1d58cc2 Exclude Backbone-sourced method from jscs checks
FREEBIE
8 years ago
Scott Nonnenberg 3ceb3a049e Override Message.fetch to ensure that db data overrides local
FREEBIE
8 years ago
Scott Nonnenberg 2c81539042 A guard to prevent infinite loops in fetching of conversation
FREEBIE
8 years ago
r-clancy 66b19d5cf7 Add support for opening the inbox via a shortcut - fixes #1134. 8 years ago
Scott Nonnenberg fdf04f6229 Ensure that we never show last seen indicator if count is zero
FREEBIE
8 years ago
Scott Nonnenberg e023c58883 Update last seen indicator even if window doesn't have focus
FREEBIE
8 years ago
lilia 72019eb79c Reuse a variable
FREEBIE
8 years ago
lilia 176339ffe6 Add log to see if we ever fetch while fetching
// FREEBIE
8 years ago
lilia 16f3717824 Move refresh prekeys out of SignalProtocolStore
Use an event/listener instead

// FREEBIE
8 years ago
lilia 017bb56cca Fix some corner casese with last seen indicator
* Remove increment behavior
* Dismiss when new messages arrive but the window is focused
* Update the indicator when window becomes focused.

// FREEBIE
8 years ago
Scott Nonnenberg bb468e7b01 Wait for scroll before deciding whether to add scroll down button
FREEBIE
8 years ago
Scott Nonnenberg 30b7bf23db Recursively fetch messages until we've loaded all unread
FREEBIE
8 years ago
Scott Nonnenberg 8b4402e8a5 Only show scroll down button if we're not at bottom of convo
FREEBIE
8 years ago
Scott Nonnenberg 4c7bfbe9ff Scroll down button: when scrolled up, or new non-visible message
FREEBIE
8 years ago
Scott Nonnenberg 3cfac58d78 Eliminate all console errors during test run
FREEBIE
8 years ago
Scott Nonnenberg 3e01d78c89 MessageListView remove unused reset-scroll event
FREEBIE
8 years ago
Scott Nonnenberg 73f2a4a0fb Simplify MessageListView.resetScrollPosition: no translation math
FREEBIE
8 years ago
Scott Nonnenberg bfdb8254a4 Scroll on new message only if we were already at bottom
FREEBIE
8 years ago
Scott Nonnenberg fed26c36ca Add new Last Seen Indicator with unread count, scroll to it
This is to ensure that when there are a lot of unread messages, the user
is given the chance to see all of them by being scrolled to the oldest
new message.

When a new message comes in, the indicator will be incremented.

When the user sends a message or switches away from the conversation,
the last seen indicator will be removed.

FREEBIE
8 years ago
lilia 3f1d8ee2b8 Fix display name for ios voice messages
iOS populates a filename for voice messages which was overruling our check for
the voice message flag when choosing the display name.

// FREEBIE
8 years ago
lilia 89a7875747 Remove unused function
This was supposed to solve the problem of losing group state after a reinstall
by inspecting member registration ids and pre-emptively sending group updates to
those who appear newly re-registered, but it has been unused since 6123c419.

Nowadays there's a protocol for requesting lost group state from other members.

// FREEBIE
8 years ago
lilia 80bfe18f02 Mark groups left on synced "You left the group"
When leaving a group on mobile, we sync the group quit message to desktop, but
we weren't marking the conversation left.

// FREEBIE
8 years ago
lilia 4842ef6153 Sync end session messages
// FREEBIE
8 years ago
lilia cfe0c77243 Conversation view blocks sending to left groups
Instead of attempting to send, which will throw an 'Unknown group' exception,
show a toast.

// FREEBIE
8 years ago
lilia 3ea5c0435b Update attachment style
Add names and sizes for all attachments except images, and (as with
arbitrary attachments), clicking on the text will open a save dialog.
In the absence of a filename, choose something that makes sense.

Display different icons for different media types, including distinct icons
for voice notes and audio files.

In iOS theme, audio, video, voice, and files are all encapsulated in bubbles.

Closes #804
Closes #842
Closes #836

// FREEBIE
8 years ago
lilia 6c53605dfd Flag voice note attachment protos as such
// FREEBIE
8 years ago
lilia 8bd7280673 Early read receipts should start expiration timers
Check for early read receipts for an incoming messages *after*
processing the expireTimer on that message. Then we can set
expirationStartTime appropriately if an early receipt is found.

Closes #950

// FREEBIE
8 years ago
Scott Nonnenberg 0496518af4 Bulletproof getCountOfAllMatches against non-global regex input
FREEBIE
8 years ago
Scott Nonnenberg 423a0fef67 Jumbomoji support matching Android support
FREEBIE
8 years ago
lilia aed5735620 Improve keychange notice reliability/perf
Bind a single listener to keychange events from the storage interface,
which then looks up relevant conversations and adds notices to them,
with tests.

Previously we would need to instantiate a conversation model in order to
start listening to its key change events. In practice this usually
happens at startup but we shouldn't rely on it, and it incurs higher
overhead since it creates a different listener for each conversation.

// FREEBIE
8 years ago
lilia 787c393e1b Log key change advisory creation
// FREEBIE
8 years ago
lilia 8aa2f771a7 Remove self-listener in conversation model
Since there is the only source/listener on this event, it can be called
directly.

// FREEBIE
8 years ago
Scott Nonnenberg ee00ad0e15 File attachments: show file size, bold filename, make icon bigger
FREEBIE
8 years ago
Scott Nonnenberg 2a04fa02df Introduce new filesize dependency
FREEBIE
8 years ago
lilia a5a9118c5c Fix empty bubble on accepting a new key
// FREEBIE
8 years ago
r-clancy 499ca5537a Increase max GIF size to match Signal-Android.
Signal-Android had the max GIF size changed to 25MB in
WhisperSystems/Android@ad0f283

This change brings parity to the two projects and fixed #1116.
8 years ago
lilia 7a8f2f0fec Allow sending arbitrary files 8 years ago
lilia 40af226a4a Move Whisper.events out of views and tests 8 years ago
lilia bab9580c3a Don't fallback to file view for images
Also lengthen the timeout a bit.

// FREEBIE
8 years ago
lilia 267f1f5d93 Use ISO format in log message 8 years ago
lilia 6b531ad342 Fix attachment size
This is already a number.

// FREEBIE
8 years ago
lilia c98ec91cab Fix tests again 8 years ago
lilia a2f0d6c739 Fix tests 8 years ago
lilia c9b4ae6e80 Save 'video/quicktime' files as .mov
Sometimes .mov files arrive with content type video/quicktime, but must
be saved to .mov in order for osx to recognize them as videos and open
the appropriate default program, display thumbnails, etc...

// FREEBIE
8 years ago
lilia a27ea20f3e Improve unsupported file type handling
Make arbitrary files look nicer and display the filename.

If an audio or video element fails to load for any reason, timeout after
a few seconds and render it as an arbitrary file. Also short circuit to
this treatment for common audio and video file types that we know are
going to fail, e.g., proprietary formats from apple.

// FREEBIE
8 years ago
lilia 27a1c9f18a Populate attachment file size
// FREEBIE
8 years ago
lilia fc514aa96f Add support for attachment file names
Send, receive, and save attachment filenames. Use them as suggested
names when saving files.

// FREEBIE
8 years ago
lilia a256f17e19 Cleanup attachment attributes
Convert attachment ids from longs to strings, and byte buffers to
arrays.

// FREEBIE
8 years ago
lilia b68f438cee Use appendChild instead of append
`append` is only supported in Chrome > 54

Fixes #1127

// FREEBIE
8 years ago
lilia dcfc4701c2 Tweak socket event logging 8 years ago
lilia 44a4ff3b52 Refactor install view
Let install view manage the connection to the provisioning socket as
well as cleaning up the window on completion, simplifying options.js.
Call `remove` so that the view stops listening when the window closes.
Move view script and template to background page.
Adds ability to hide nav if this isn't our first run.

// FREEBIE
8 years ago
lilia df65585e71 Network status listens to some global events
Listen for reconnectTimer to display reconnection info. Listen for
unauthorized to update network status immediately after a failed login,
rather than waiting for the normal 5s interval to time out.

// FREEBIE
8 years ago
lilia d3492960a6 Display info in network status when unlinked
When we can't connect due to being unlinked, network status indicator
will show an appropriate informational message and a button to open the
installer window to relink.

// FREEBIE
8 years ago
lilia 587e5265c5 Only re-render network status when it changes
// FREEBIE
8 years ago
lilia 3f05c8ff87 Rename window.events to Whisper events
// FREEBIE
8 years ago
lilia fcff07df98 Remove some global refs to window.events
// FREEBIE
8 years ago
lilia 510a5cb7fe Namespace global listeners to Whisper 8 years ago
lilia 3c2b7c8cbd Log missing signed prekey ids
// FREEBIE
8 years ago
lilia 26d97e621b Update libsignal-protocol 8 years ago
lilia cce1fe5c4b Simplify openConversation
Now that the InboxView is initialized in the background page context, we
can manipulate it more directly, without going through a global function
on the foreground window.

// FREEBIE
8 years ago
lilia 06e53871b2 Fix blank window after unlink
Don't wait for background init before rendering inbox.

If the client detects that it has become unlinked, it will not call
`init()`, never fire the deferredInit, and never render the inbox,
but we want to allow users access to their local messages even if they
have (perhaps temporarily) unlinked the desktop client.

Also, prefer not to extend Backbone.Model until/unless we really need
it.

// FREEBIE
8 years ago
Sam Vevang ed4991974b set up a new view for displaying the network status
// FREEBIE
8 years ago
Sam Vevang e4a21d1a53 move main application view over to messageReceiver namespace
The goal here is to allow synchronous property lookup between objects
and mvc/backbone semantics.

// FREEBIE
8 years ago
alecglassford ef4b4da2a3 Make search clear button ("x") persist w/o hover
This makes the "x" in the search bar always visible when there is
text in the search box, even if the mouse is not hovering, hopefully
making for a clearer UI around search and resolving issue #741

The implementation adds the "x.svg" as a background image to the search
box when it is classed with .active, in addition to the
-webkit-search-cancel-button, which is still there for the actual
functionality but only appears on mouse hover (one tiny snag is that
coloring appears slightly different on hover, at least on my screen -
don't know if this is a problem).

I accounted for both ltr and rtl text-direction by using
getComputedStyle(...).direction to detect from the input's dir="auto"
- if there's a more elegant way to do this, please suggest. An ideal
solution would use the :dir pseudo-class but it's not implemented
in Chrome yet - https://developer.mozilla.org/en-US/docs/Web/CSS/:dir

For now, I added the direction-checking to inbox_view.js. I see that
input.search is also used in new_group_update_view.js and
recipient_input_view.js but neither of these views seem to be in use (?)
and they don't set the .active class anyway, so I ignored them.

Update: Amended version a few hours later - fixed and manually tested
color and spacing for iOS and Android Dark themes. Also made some new
SASS variables to make things DRYer and fixed my tab size.
8 years ago
lilia a72c2968f2 Handle unknown request types
// FREEBIE
8 years ago
lilia d1114edcd4 Update libsignal-protocol-javascript 1.1.10
// FREEBIE
8 years ago
lilia 611bbaef35 Don't hardcode the attachment server url
There may come a day when we may need to change this url from the server
side. On that day, clients should continue to operate normally. The
service should be able to change attachment server locations without
requiring a client update.

// FREEBIE
8 years ago
lilia 43de0cc2ec Add attachment digests
// FREEBIE
8 years ago
lilia f1a1a819ba Stop parsing attachment ids from attachment urls
See 2111294

Attachment ids are now available in string form from the server
response to `putAttachment`.

// FREEBIE
8 years ago
lilia 4c945acb76 Remove unused object store reference
// FREEBIE
8 years ago
lilia 58d2f71e09 Add migration to clean up old expiring messages
Expiring messages received before 0.31.0 may not have an expires_at time
populated. Loading these messages once will update their expires_at if
it wasn't already set. To avoid loading too many messages into memory,
add them individually, and remove them from the collection as soon as
they are added, allowing them to be garbage collected immediately.

// FREEBIE
8 years ago
lilia 25ee61d3cb Fix timers after suspend/resume/pause
We use timers to decide when to query and delete expired messages or
when to perform signed key rotations.

Internally, timers are counters that get updated when the CPU ticks, so
if the CPU sleeps, the timer will stop counting, and start again after
it wakes up, ignoring the intervening passage of wall clock time.

To fix this, without having to query the database or other potentially
high overhead operations too often, use an interval to frequently check
the wall clock time. If time jumps forward, trigger a global event so
other listeners can update their possibly-inaccurate timers.

https://stackoverflow.com/questions/6346849/what-happens-to-settimeout-when-the-computer-goes-to-sleep
https://stackoverflow.com/questions/4079115/can-any-desktop-browsers-detect-when-the-computer-resumes-from-sleep

// FREEBIE
8 years ago
lilia 886557a2aa Drop chrome.runtime.onMessage events
We can use Backbone.Events instead.

// FREEBIE
8 years ago
lilia bba25b22e2 Log session deletions 8 years ago
lilia 527e7878a8 Fix unresolved promise in removeSession
Previously if there was no session to remove, the promise returned from
removeSession would never resolve, potentially blocking sending for that
recipient until restart.

// FREEBIE
8 years ago
lilia e4b9c51f88 Rework expiring messages management
// FREEBIE
8 years ago
lilia 08e8c00329 Restore setting lastMessage in handleDataMessage 8 years ago
lilia 0e31644c28 Remove spurious update to conversation on delivery receipts
Previously this would trigger the conversation to refresh it's last
message.

// FREEBIE
8 years ago
lilia b7fac17ec8 Avoid querying groups on delivery receipts if possible 8 years ago
lilia ace59147ab Reduce unnecessary updates on conversations at startup 8 years ago
lilia 280f7a74b1 Fix key change errors while retrying key change errors 8 years ago
lilia e1662f8537 Drop unneeded binds
There are no references to `this` in these functions.

// FREEBIE
8 years ago
lilia 7cbaac5590 Provisioning socket events don't block AccountManager tasks
// FREEBIE
8 years ago
lilia 38a830c561 Fixup account manager task queue
Such that it still pumps tasks if one of them throws/rejects.

// FREEBIE
8 years ago
lilia 51131df23b Update libsignal-protocol-javascript 1.1.9
// FREEBIE
8 years ago
lilia 6509646bdb Set expireTimer to null to unset
// FREEBIE
8 years ago
lilia 0fac2e1d68 Log when we see a 0 registrationId
Most likely an indicator that the device we're dealing with is a 3rd
party client.

// FREEBIE
8 years ago
lilia da9b6c5245 Add logging for install and update events
// FREEBIE
8 years ago
lilia 54b856139a Fix fetchExpiring 8 years ago
lilia e648a4b095 Revert "Remove unregistered group members"
This reverts commit a768b94471.

d2ddfc7 was enough to fix #989. Removing unregistered members from the
group (as opposed to silently ignorning them) creates greater potential
for getting out of sync with the member lists on other devices.

// FREEBIE
8 years ago
lilia dfe9ee9679 Remove dead code 8 years ago
lilia 536dd7b951 Add signed key rotation scheduler
Rotate signed prekey every 48hrs, waiting for online access if
necessary. After a rotation attempt is made, schedule the next run for
48hrs in the future.

We use a timeout to "wake up" and handle the rotation. This timeout gets
set on startup and whenever the next rotation time is changed. For
paranoia's sake, always clear the current timeout before setting the
next one.

Since new registrations necessarily upload new signed keys, we reset the
scheduled time to T+48hrs on `registration_done` events.

// FREEBIE
8 years ago
lilia b92dd45a22 Add signed key rotation and deletion routines
// FREEBIE
8 years ago
lilia cd0fe7037b Add replayable error for signed key failure
Disable message sending if signed key updates fail too many times, but
allow the user to retry sending.

// FREEBIE
8 years ago
lilia e0fd188d42 Add loadSignedPreKeys to SignalProtocolStore 8 years ago
lilia 37ad742ccf Support for server endpoint to set signed key 8 years ago
lilia 54536360ff Return created_at and keyId with signed prekeys
Use `.get()` rather than `attributes.property` access because created_at
may not be present for old keys

// FREEBIE
8 years ago
lilia 829d147d19 Add creation timestamps to signed keys 8 years ago
lilia dfc292ac70 Serialize prekey refreshes & other account mgmt
Fixes #1060

// FREEBIE
8 years ago
lilia f0f6bbb8c0 Update libsignal-protocol 1.1.8
// FREEBIE
8 years ago
lilia 819ba8ee74 Support for undefined preKey 8 years ago
haffenloher a768b94471 Remove unregistered group members
Locally remove unregistered users from group membership lists.

Fixes #989
Related to Whispersystems/Signal-Android#6175
Closes #1052

// FREEBIE
8 years ago
haffenloher d2ddfc72e4 Throw UnregisteredUserErrors in getKeysForNumber() 8 years ago
haffenloher e8de2f0c52 Increase image constraints to 6 MB / 4096 px
Matches WhisperSystems/Signal-Android@d2be49af

Closes #1055

// FREEBIE
8 years ago
lilia 053bf20185 Group updates never have body or attachments
Why would they? And group.added isn't used anywhere else.

// FREEBIE
8 years ago
haffenloher 04f0142b23 Ignore missing members in incoming group updates
Previously, updateNumbers would throw an Error, so the whole group
update was discarded.

Signal-Android handles this the same way in
GroupMessageProcessor.handleGroupUpdate().

Closes #1056
8 years ago
beejaygee 76c165a10a Add copy and paste for images
Switch comparison operator to ===

Move to stricter parsing of clipboard items
8 years ago
Blake Griffith 1e498294e0 Add attachment_views_test.js tests 8 years ago
lilia aa55b6a538 Confirm device name with enter key
Use form and submit elements for their built in mouse and keyboard event
handlers.

// FREEBIE
8 years ago
lilia 4230b11f82 Support future compatibility for new timer options
If some future client ever sends us an arbitrary timer value which we do
not currently support, present it as a duration in seconds in timer
update messages and ui, where we would otherwise have rendered nothing,
e.g., "You set the timer to ."

// FREEBIE
8 years ago
lilia 7e06e014c4 Add debug logging for #1030
// FREEBIE
8 years ago
karissa eb5c95e287 Add a few missing translatable strings to conversation search view 8 years ago
Asa Ayers bda0430805 Add an option to play audio notifications 8 years ago
Bernhard Steindl e2cb45c1da Push picture max edge to 2048 and max size to 4 MB
Closes #1032 and catches up with Android
8 years ago
Thomas Guillet 400313f749 Prevent expiration timer update on group update
It occurs when a message with a different expiration time is received.

The issue report highlights the scenario of a member leaving a group
(group update [quit] sent with expiration time = 0).

Fix https://github.com/WhisperSystems/Signal-Android/issues/5996
Fix https://github.com/WhisperSystems/Signal-iOS/issues/1566
8 years ago
lilia 9ef61d43f4 Update conversation lastMessage from database
Don't set lastMessage, let it update itself as needed, such as when
first rendering a conversation list item, and when its messages are
sent, received, or destroyed.
8 years ago
lilia 6253269d19 Tweak key change advisory insertion
Let received_at be the current time for keychanges. This avoids them
being inserted in the wrong place in the thread.

Use the newmessage event to trigger frontend listeners to add them to
the conversation view if it is open.
8 years ago
lilia a623f909f2 Move key change advisory content to the model
Return this content from a helper method so it can be used to populate
the last message on conversations.
8 years ago
lilia 260f50c104 Add id attr to key change advisory elements
The id attribute is needed to ensure that message elements are inserted
in the correct place in the DOM
8 years ago
lilia 5be5f985fc Lint 8 years ago
lilia 41216f1378 Add timestamps to attachment filenames 8 years ago
lilia d2c1e6df27 Fix wrong variable name
Fix potentially setting expiration timeouts more than once.
8 years ago
lilia d7f241ddee Use correct type on timer updates 8 years ago
lilia 05ed7c3822 Merge timer update functions 8 years ago
lilia f2bdafc7e9 Validate/reformat phone numbers in contact syncs
Turns out there's no garauntee that Android will send us contact info
with phone numbers in e164 format. When that happens, we fail to update
the correct contact. Fix by performing validation on the incoming number
before attempting to merge changes to the name, avatar, or color.

Fixes #903
8 years ago
Ikarulus 53cd3af78b Added a dark theme
I added a dark theme in order to solve #328.
This may fix #328 at least partially.
9 years ago
lilia a8468dae28 Reduce load from delivery receipt processing
Add a special type of collection just for retrieving group ids, which
doesn't incur the overhead of initializing a conversation model along
with all its group members.
9 years ago
lilia 0854b19371 Revert "Don't load group contacts unnecessarily"
This reverts commit 6699571910.

Not quite ready for primetime.
9 years ago
lilia 6699571910 Don't load group contacts unnecessarily
There are some cases when we want to initialize a group object without
loading its contacts, such as while processing delivery receipts. We
really only need to load the contacts for a group/convo when we are
rendering it, so let the front end handle those cases (which most of
them do already).
9 years ago
lilia 65072d8e03 Update libphonenumber 9 years ago
lilia 35270dbbb4 Use timeout-based animation for hourglasses
CSS animations are convenient but costly if you have hundreds of them.

Fixes #945
9 years ago
Benedikt Constantin Radtke 520be3d5db Fixed bubble timestamp update timer breakdown
TimestampView's getRelativeTimeSpanString called moment() twice while
calculating the timeout. If there was a minute/hour/day wrap between
these 2 calls, the calculated delay was 0 and thus no timer was
scheduled, since if (this.delay) evaluated to false.

Fixes: #857, #460

// FREEBIE
9 years ago
Benedikt Constantin Radtke add159dde9 Localized the message detail view's timestamps
Momentjs will now format the timestamps depending on the locale.

Fixes: #954

// FREEBIE
9 years ago
lilia e86142d07c Hide verification QR code
The scannable fingerprint format has changed, leaving our qr codes out
of date and thus unscannable.
9 years ago
lilia 03c5d12edd Fix necrobumping convos on key change
When inserting key change advisories, use the current conversation
timestamp to avoid pushing lots of old groups to the top of the
conversation list.
9 years ago
lilia b5f5c4604c Fix missing hourglass on some expiring messages
Resolves a race condition between marking messages read and
loading/rendering those messages in the frontend.

Fixes #942
9 years ago
lilia 657fa2725f Adjust hourglass vertical alignment 9 years ago
lilia 15a9423a17 Change Identity to Safety Numbers in conversation menu
Fixes #935
9 years ago
2-4601 669338c717 i18n 'Theme'
// FREEBIE
9 years ago
paolo.ingls@gmail.com d4f7b9984b Fixed bug920
//FREEBIE
9 years ago
lilia 51e902c26f Remove dead code 9 years ago
lilia 674eeb8313 Remove refs to appWindow
We only need the regular window, not the AppWindow interface, which is
specific to chrome apps.
9 years ago
lilia 9da4cdefd7 Style fix 9 years ago
Paolo Inglese 7cd45714a5 Font size should be adjustable
//FREEBIE
9 years ago
lilia fcffcd35af DRY 9 years ago
2-4601 81e1b84129 Fix 2nd person conjugation in exp. timer messages
// FREEBIE
9 years ago
lilia f8a3ae158c Remove log message 9 years ago
lilia 34888160bb Fix re-appearing disappearing message ui
Fix a bug where entering the message detail view and then going back
would cause the timer menu to appear.
9 years ago
lilia 94c1ac6f09 Fix message insertion for the first element inserted 9 years ago
lilia d3a2f5c838 Ignore expireTimer on session reset messages 9 years ago
lilia 4ee2652367 Fix wrong contact in some timer updates
Mistakenly showed 'You' for timer updates inferred from incoming
messages.
9 years ago
lilia 73e69fe5eb Update libsignal-protocol 1.1.7 9 years ago
lilia 7c81e4ed2e Delete extra space 9 years ago
lilia 790407d42e Add qr codes 9 years ago
lilia f05d693994 Switch from fingerprints to safety numbers 9 years ago
lilia 7fe708d195 Insert keychange advisories
On click, these open a verification panel for the relevant contact,
within this conversation.

// FREEBIE
9 years ago
lilia 1f0a93bf70 Ensure new installs default to non-blocking
// FREEBIE
9 years ago
lilia 1fe90ecdcb Add frontend for safety numbers approval setting
Adds the checkbox under settings.

// FREEBIE
9 years ago
lilia aa42139477 Implement non blocking option
// FREEBIE
9 years ago
lilia ce315f3f8e Add Events to SignalProtocolStore
Allows triggering and listening for events.

// FREEBIE
9 years ago
lilia 5899654ea5 Remove log message 9 years ago
lilia de744a6c55 Fix messages being inserted in the wrong place
Usually new elements are inserted in a predictable order relative to the
sort order of the models/collection, but it's not garaunteed. This fixes
up message element insertion to handle the general case where elements
can be added in any order and must be displayed in correct order as
determined by the collection's sort function. In the worst case, we'll
have to iterate over the entire list of elements to find the right spot,
but in practice most of the time we can short circuit based on the index
of the model or by looking for the predecessor or successor of the
element in question.
9 years ago
lilia 009098f8dd Insert inferred timer updates before the corresponding message 9 years ago
lilia d52050d43f Fix group timer updates 9 years ago
lilia 0bba096510 Use 'You' instead of your own phone number 9 years ago
lilia 1da44c847b Fix handling sent messages sans expirationStartTimestamp 9 years ago
lilia a12569e356 Fix destination on synced timer updates 9 years ago
lilia 86dbbc9f29 Allow null expireTimer in sendmessage 9 years ago
lilia 7eea88a545 Convert expirationStartTimestamp to number 9 years ago
lilia 56aee5e8ef Update conversation snippets automatically
Fixes stale snippets after the message has expired
9 years ago
lilia 8d16bfb65e Populate conversation snippet for timer updates 9 years ago
lilia e488c19889 Do not trigger notifications for timer updates 9 years ago
lilia 7a26cf79ee Insert timer update messages when inferring timer changes 9 years ago
lilia ad2174e279 Sync expirationStartTimestamp on outgoing messages
Linked devices need to know when to start the clock.
9 years ago
lilia 6074a29046 Send timer update messages when changing the timer 9 years ago
lilia 824b7417e9 Apply expireTimer to outgoing messages 9 years ago
lilia 2b2c6ab040 Frontend for timer updates and timer indicator 9 years ago
lilia 448835e4d5 Bail early when processing timer updates
Also let expireTimer default to 0.
9 years ago
lilia 4cd2c03687 Add clock svg style 9 years ago
lilia 7331d967d2 Add support for expiration timer updates messages 9 years ago
lilia e809a0cf8b Breakout timer rendering into its own view
Make width and height constant.
9 years ago
lilia bd713352e3 Hourglass can start at any percentage
This breaks the css-purity of our mixin but is necessary in order to
apply the initial offset of the hourglass animation dynamically, since
jquery can't manipulate arbitrary css on psuedo elements.
9 years ago
lilia 5f92ccd524 Render animated hourglass when messages are expiring 9 years ago
lilia 1383dc141f Ensure that expired messages are removed from the frontend 9 years ago
lilia 02ea4f2475 Use read receipt envelope to infer startExpirationTime
Avoids display of phantom messages that are only received and marked
read locally long after they have expired on another linked device.
9 years ago
lilia 96fd017890 Support for incoming expiring messages
When initialized, or when expiration-related attributes change, expiring
messages will set timers to self-destruct. On self-destruct they trigger
'expired' events so that frontend listeners can clean up any collections
and views referencing them.

At startup, load all messages pending expiration so they can start their
timers even if they haven't been loaded in the frontend yet.

Todo: Remove expired conversation snippets from the left pane.
9 years ago
lilia b888e01044 Add an index on message.expireTimer
This allows us to query all expiring messages on startup.
9 years ago
lilia b3e932dce8 Add protocol support for disappearing messages 9 years ago
lilia 5b5a430114 Support i18n with multiple links
We can now pass a variable number of hrefs into i18n_with_links rather
than just one.
9 years ago
lilia 9b645f90c8 Remove Android requirement from install flow
// FREEBIE
9 years ago
lilia b0c59233f3 Add test fixtures
Test page loads fixtures and renders the inbox view. This may be useful
for smoke testing style changes or generating screenshots with
pseudo-realistic data.

Includes a couple small changes to get rendering working outside the
app.
9 years ago
lilia c16e80c5e4 Let key verification view lazy-load keys
// FREEBIE
9 years ago
lilia fe209a2f41 Upgrade libsignal-protocol v1.1.6 9 years ago
lilia 7b3b01bdf6 Refactor registration event
Make AccountManager into an event target for better separation between
app and service-library handling of registration events.
9 years ago
lilia 6dcff46e26 Move chrome-specific calls to chromium.js
// FREEBIE
9 years ago
lilia b1afb79a14 Set theme based on master device userAgent
// FREEBIE
9 years ago
lilia 2b210b3fcd Fix undefined websocket port
Fixes #889

// FREEBIE
9 years ago
lilia edd6f58539 Update display when contact colors change
// FREEBIE
9 years ago
lilia 9db13310b4 Add port 80
// FREEBIE
9 years ago
lilia 384598fbcc Log websocket urls
// FREEBIE
9 years ago
lilia 0487fa3cd1 Add server fallback port 8443
// FREEBIE
9 years ago
lilia 487f75dd27 Fix lint
// FREEBIE
9 years ago
lilia f610233ef6 Add support for syncing blocked numbers
// FREEBIE
9 years ago
lilia 53f20640af Add support for syncing colors
// FREEBIE
9 years ago
lilia 141cdef2a4 Generalize toast view template
// FREEBIE
9 years ago
lilia ff490994ab Render emoji in group name in group updates
// FREEBIE
9 years ago
lilia baff77c509 Revert "Remove Android requirement from install flow"
This reverts commit 4b9f7d518e.
Put this back when iOS desktop support is ready for general release.
9 years ago
lilia 1d5471c318 Fix search tests
// FREEBIE
9 years ago
lilia 7e0df07e88 Fix tests
// FREEBIE
9 years ago
lilia 9deaa95e8c Strip unicode null from deviceNames
Not sure how or why but sometimes deviceNames arrive on the server
containing a null char.

// FREEBIE
9 years ago
lilia 43ca465eb9 Remove unused code
// FREEBIE
9 years ago
lilia 1c89142752 Customize emoji conversion
Use image tags with :emoji: in a title attribute for an optimal
copy/paste ux.

// FREEBIE
9 years ago
lilia f042378a37 Upgrade emoji support and switch to apple emoji
Use emojijs for replacing unicode with image tags for display. We were
already using it to replace colons with unicode. Additionally it has
a companion data repo that is kept up to date with images from all
the common image sets.

// FREEBIE
9 years ago
lilia 4b9f7d518e Remove Android requirement from install flow
// FREEBIE
9 years ago
lilia b5191e78c3 More themeing
Restyle message input and welcome screen
Cleanup search, headers

// FREEBIE
9 years ago
lilia 5333f89d9d Fix svg icon colors
// FREEBIE
9 years ago
lilia 6c05a71424 Tune up ios bubble style
// FREEBIE
9 years ago
lilia 8fbb0d05f5 Add settings ui for theme
// FREEBIE
9 years ago
lilia 7b9894d688 Refactor css to support theming
Move away from inline style attributes for setting contact colors.
Apply colors by name via css classes instead. Also lays groundwork
for syncing contact colors.

// FREEBIE
9 years ago
lilia 3531667207 Fix closing recorder when clicking away
// FREEBIE
9 years ago
lilia 87f4029210 Fix lint
// FREEBIE
9 years ago
lilia 3aa72d2244 Address large font size edge cases
Fix some visual bugs occuring at large font size:
  * Contact names break onto the next line after their avatars in
    message detail screen
  * Settings menu font-size failed to scale
  * Handle Content overflow in modals.

// FREEBIE
9 years ago
lilia b330b80484 Change font size on ctrl+scroll
Fixes #864

// FREEBIE
9 years ago
lilia 9fa7e7f462 Remove unused view
// FREEBIE
9 years ago
lilia 645e05c2b9 Add support for new fingerprint format
This will be ready to roll whenever Android/iOS is.

// FREEBIE
9 years ago
lilia 254b6621c2 Update libsignal-protocol v1.1.5
// FREEBIE
9 years ago
lilia 4f46a164ba Add voice notes
// FREEBIE
9 years ago
lilia d11f9fd538 Update libsignal-protocol v1.1.4
// FREEBIE
9 years ago
lilia 9ab64ec44d Allow localization of month-day format string
The short month-day format ex: 'Aug 8', is not built-in to momentjs, so
we need to localize it.

// FREEBIE
9 years ago
lilia e5b54d9b6a Bubble up InvalidStateErrors and log them
These may be indicative of a potentially fatal lack of disk space.

// FREEBIE
9 years ago
lilia 83629df560 Log on failure to fetch storage
// FREEBIE
9 years ago
lilia 67c7a06c28 Use momentjs for timestamp localization
Let momentjs handle proper pluralization of relative times. This comes
at the sacrifice of displaying 'minutes' in the conversation list
timestamp rather than 'min'. Note that we don't use moment's fromNow
instance method so as to preserve the rounding logic that matches the
Android client.

// FREEBIE
9 years ago
lilia 78b8fbc836 Update momentjs
// FREEBIE
9 years ago
lilia 4d9b6917d7 Fix timestamp tests
These were failing because chrome's i18n functions aren't available in
test.

// FREEBIE
9 years ago
lilia 688b297050 Move window.chrome reference to chromium.js
// FREEBIE
9 years ago
lilia fed8f62617 Remove untranslatable strings from locale file
// FREEBIE
9 years ago
lilia 6a3a724dc4 Add momentjs locales
// FREEBIE
9 years ago
Benedikt Radtke e836bfd3f7 Added basic localization for timestamps
This commit implements basic localization for the timestamps in conversations and the conversation list.

// FREEBIE
9 years ago
lilia e07616e2ef Only create notifications for unread messages
In some cases, we have already received a read receipt for an incoming
message by the time we go to create a notification about it. In this
case, we should skip the notification.

// FREEBIE
9 years ago
lilia 8939c61c7c Log on notification removal
// FREEBIE
9 years ago
lilia 4c0ed76909 Update libsignal-protocol v1.1.3
// FREEBIE
9 years ago
lilia 186c597e24 Use port 4433 on staging
Now with over 9000% more CA-signed cert!

// FREEBIE
9 years ago
lilia 3a50a892dc Don't sort if already sorted
// FREEBIE
9 years ago
lilia 2cea499736 Reduce log noise from prekey messages
// FREEBIE
9 years ago
lilia 7efdfc95ee Log when updating notifications
// FREEBIE
9 years ago
lilia c39d6687e5 Reduce log noise from delivery receipts
Stop logging envelope messages on receipts since we log the same info as
a receipt in background.js.

// FREEBIE
9 years ago
lilia 748215e285 Fix style
// FREEBIE
9 years ago
Benedikt Constantin Radtke 2870c1fff2 Fixed fastforwarding closing videos' fullscreen mode
This commit stops the MessageView from adding the attachment more than once. Previously an attachment was appended to the MessageView every time an update
event was emitted, which happens when forwarding.

// FREEBIE
9 years ago
lilia 8a153e942e Fix lightbox
// FREEBIE
9 years ago
lilia 5bff1d2cab Scope media pausing to the open conversation
// FREEBIE
9 years ago
Benedikt Radtke d5b003a15e Fixed media pausing behaviour when clicking the conversation list
This commit changes the inbox to stop video and audio elements when selecting a new conversation, and to not stop such elements when the same
conversation was selected (fixes #391).

// FREEBIE
9 years ago
lilia 005444d09a Update libsignal-protocol v1.1.2
// FREEBIE
9 years ago
lilia f670061669 Pressing escape closes the lightbox
// FREEBIE
9 years ago
lilia a069939f65 Refactor attachment saving for DRYness
// FREEBIE
9 years ago
Benedikt Radtke a1345c52b4 Added Save-As dialog for unsupported filetypes
Despite the "click to save"-description of unsupported file types, clicking them did not save them.
This commit implements a Save-As dialog instead of opening the file in chrome.

// FREEBIE
9 years ago
lilia 0a7f203565 Log on session save failure
// FREEBIE
9 years ago
lilia 5059fd237a Disable keepalive logging
// FREEBIE
9 years ago
lilia 80c6a2802f Handle sync request where no groups are sent
If a user has no groups, no group sync message is sent. This is a normal
result that should result in a success event rather than a timeout.

// FREEBIE
9 years ago
lilia 5fcf2ea66f Update libsignal-protocol v1.1.1
// FREEBIE
9 years ago
lilia 9091233950 Open images in a lightbox
Adds file-write permission for saving to disk from lightbox.

Fixes #810

// FREEBIE
9 years ago
lilia 8e1d884a10 Add button for re-importing contacts from phone
Add a section under settings for performing a contact sync from your
mobile device. This just re-runs the same import operation that occurs
at install/link time.

// FREEBIE
9 years ago
lilia 167f19153c Update libsignal-protocol v1.1.0
Moves padding operations to the service library.

// FREEBIE
9 years ago
lilia b8fddfbbdd Update libsignal-protocol v1.0.0
// FREEBIE
9 years ago
lilia d89c3e8e86 Remove devices with no keys
// FREEBIE
9 years ago
lilia 7caecc564d Process all incoming conflicts before outgoing ones
Fixes a session management problem where, after resolving a conflict
with some contact, that contact would get bad mac as a result of us
sending them a new prekey message before processing a pending conflicted
prekey message received from them earlier.

Fixes #806

// FREEBIE
9 years ago
lilia 3cd80d3f1e Remove tool tip from unregistered user errors
// FREEBIE
9 years ago
lilia 58c3fe047e Make error messages clickable
// FREEBIE
9 years ago
lilia b2f07984df i18n unregistered user errors
// FREEBIE
9 years ago
lilia b6f785737c Restyle error icons, move them outside the bubble 9 years ago
lilia 89d3b772d5 Define UnregisteredUserError class
// FREEBIE
9 years ago
lilia 81dfdd959f Don't allow retry on unregistered user errors
// FREEBIE
9 years ago
lilia 292260d973 Remove timestamp logging
// FREEBIE
9 years ago
lilia 331ca46d75 Fix websocket event name
Fixes #798

// FREEBIE
9 years ago
lilia 15e964de81 Update libsignal-protocol v0.13.0
* libsignal.Curve is now a synchronous interface.
* libsignal.Curve.async is now the asynchronous interface.
* Fixes bugs in session management.

// FREEBIE
9 years ago
lilia f216262298 Update libsignal-protocol v0.12.0
Moves version byte check to protocol lib.

// FREEBIE
9 years ago
lilia 055c0c323e Remove unneeded property from device object
// FREEBIE
9 years ago
lilia f8e176fd40 Dedupe methods
Define textsecure.crypto in terms of libsignal.crypto.

// FREEBIE
9 years ago
lilia 58452066aa Move device storage methods to outgoing message
This is the only place they are called.

// FREEBIE
9 years ago
lilia daae664965 Remove unused function
// FREEBIE
9 years ago
lilia d32a352d8a Use deviceIds/addresses instead of encodedNumbers
The getDeviceObjectsForNumber method returns device objects that contain
nothing but the encodedNumber property. Instead, just deal in deviceIds
until a SignalProtocolAddress is constructed to manage both the number
and deviceId.

// FREEBIE
9 years ago
lilia 95935f70ee Remove relay check from sendmessage
We don't currently store any relay information about devices,
and

// FREEBIE
9 years ago
lilia f16803018c Update libsignal-protocol v0.11.0
* Changes return type from decryption functions
* Update components

// FREEBIE
9 years ago
lilia 148bd32671 Update libsignal-protocol v0.10.0
* Changes policy for old session deletion
* Renames putIdentityKey to saveIdentity
* Remove device messages

// FREEBIE
9 years ago
lilia ffa702c934 Update libsignal-protocol v0.9.0
* Exposes crypto APIs.
* Move worker methods to libsigna.worker.
* Move ProvisioningCipher to libtextsecure.
9 years ago