Scott Nonnenberg
4e5c8965ff
Move to react for newlines, emoji, and links in message body
7 years ago
Scott Nonnenberg
c00c939148
Update link handling
7 years ago
Scott Nonnenberg
b1a54c416f
Notifications: All calls are debounced except for shutdown clear
7 years ago
Scott Nonnenberg
18a76ffb49
Debounce notifications so we don't orphan them
...
Creating/destroying notifications too quickly in testing on macOS would
result in them sticking around forever, requiring manual user dismissal.
We want to dismiss them for the user when we close or our window is
activated. So now we debounce() calls to our notifications code.
7 years ago
Daniel Gasienica
24002149f6
Log read sync reception and remove notification
7 years ago
Daniel Gasienica
d434262540
Remove last notification before creating new one
7 years ago
Scott Nonnenberg
80b069e9b6
Move phone number format/parse into ts/types/PhoneNumber
7 years ago
Scott Nonnenberg
93d3abbf8d
Use contact name when updating last message for a conversation
7 years ago
Scott Nonnenberg
aa13a2c6f7
Parse phone numbers into e164 as part of schema upgrade
7 years ago
Scott Nonnenberg
d2293d9592
parseAndWriteAvatar: Do shallow copy before omit() call
...
Otherwise, we get all prototype props/functions, which we can't save in IndexedDB
7 years ago
Daniel Gasienica
3bf8a8966a
Notification improvements
...
- Remove on read, on focus, and on exit.
- Show multi-message notifications like '5 new messages'.
7 years ago
Daniel Gasienica
e723484498
Simplify closing emoji panel on escape key down
7 years ago
tommypacker
48708d5738
Close emoji panel on escape press
7 years ago
Daniel Gasienica
16bc1d34c6
Message schema 6: Change classification of media and documents
...
For an easier implementation, we change our original definition of
`initializeAttachmentMetadata`. This means we have to re-run it marked as
version 6 and mark schema version 5 as deprecated as its definition has changed.
7 years ago
Daniel Gasienica
101041f106
Derive `Message.CURRENT_SCHEMA_VERSION`
7 years ago
Scott Nonnenberg
26be658892
Remove 'Contact' from 'Contact.*' properties, clean->parse
7 years ago
Scott Nonnenberg
cda326ca45
Use protobuf enum values to eliminate magic numbers
7 years ago
Scott Nonnenberg
adbe989949
validateContact: Return error instead of logging
7 years ago
Scott Nonnenberg
bb01218e83
MessageView: Get rid of 'let' for hasSignalAccount
7 years ago
Scott Nonnenberg
d0efccd121
A couple renames in contact.js
7 years ago
Scott Nonnenberg
420f81ebcd
Move contact migrate code from message.js to contact.js
7 years ago
Scott Nonnenberg
8beeef4d10
Show contact name when you reply to message with a contact
7 years ago
Scott Nonnenberg
9d1847a7e5
Pull all setup in preload.js into signal.js. goal: webpackable
7 years ago
Scott Nonnenberg
37821e5a1b
Wire up all contact behaviors, refactor Contact type/selector
7 years ago
Scott Nonnenberg
41be7f126b
Visuals for embedded contacts as well as contact detail screen
7 years ago
Scott Nonnenberg
3ea3e4e256
Contact sharing: protos and data pipeline
...
As of this commit: 82b76ccf37
7 years ago
Scott Nonnenberg
b6a585a646
MessageView: Add id from database to DOM for outgoing messages ( #2350 )
7 years ago
Daniel Gasienica
38f3ad6518
Use `SignalService` vs `textsecure` for protobuf
7 years ago
Daniel Gasienica
a0ddab669b
Organize `global`s
7 years ago
Daniel Gasienica
a86056630f
Use `Attachment.isVoiceMessage`
7 years ago
Daniel Gasienica
0121dc7a5a
Log notification grouping support
7 years ago
Daniel Gasienica
c2407c8906
Disable notification grouping on Windows 7
7 years ago
Daniel Gasienica
13f1ec2e51
Use structured logs
...
Easier to search for static prefix and fields are named.
7 years ago
Daniel Gasienica
0ce56eed87
Use structured log
7 years ago
Daniel Gasienica
5c8f734e67
Remove newlines from group IDs
7 years ago
Daniel Gasienica
ae7d6aa900
Log `Conversation::updateLastMessage`
7 years ago
Daniel Gasienica
a102016ed8
Port `Settings` and `OS` to TypeScript
7 years ago
Daniel Gasienica
c591c3ca55
Use native notifications on all platforms
7 years ago
Daniel Gasienica
4e6a03a91c
Log whether OS supports native notifications
7 years ago
Daniel Gasienica
1f2a2e1d52
Use `Notifications.getStatus`
7 years ago
Daniel Gasienica
5fe5320760
Rename `SETTINGS` to `SettingNames`
7 years ago
Daniel Gasienica
0701768fd7
Declare globals for `drawAttention` and `isFocused`
7 years ago
Daniel Gasienica
06e3f09732
ESLint: Add `js/notifications`
7 years ago
Daniel Gasienica
b510916ef5
Split `global`s into third-party and own
7 years ago
Daniel Gasienica
c40bd7e235
Remove unused `retryDescription` localized string
7 years ago
Scott Nonnenberg
754d65ae2e
Let's make it all pretty, shall we?
...
We missed a couple directories with previous attempts to turn this on
globally: app/ and libtextsecure/
Not to mention files in places we didn't expect: ts files that weren't
in the ts directory!
This turns prettier on for every file we care about (js, ts, tsx, md)
everywhere in the project but for a few key parts.
7 years ago
Daniel Gasienica
6eca5ee940
Document that JPEG auto-orient strips EXIF metadata
7 years ago
Daniel Gasienica
95321e5d3e
Remove Vim mode lines
7 years ago
Daniel Gasienica
822850433e
Apply manual fixes for ESLint errors
7 years ago
Daniel Gasienica
1dd87ad197
Format all source code using Prettier
7 years ago
Daniel Gasienica
e4baf27fa7
Increase migration conversion speed by a factor of 3x
7 years ago
Daniel Gasienica
50a0048bf2
Skip attachment migration for new users
7 years ago
Daniel Gasienica
6671228028
🎨 Format using ESLint
7 years ago
Daniel Gasienica
d5fdf50fae
Remove unused reference
7 years ago
Daniel Gasienica
fccbf70d57
Pre-process media for `LightboxGallery`
7 years ago
Daniel Gasienica
d00fb560b0
Avoid exposing `AttachmentTS`
7 years ago
Daniel Gasienica
86e48a5713
Implement background migration using index
7 years ago
Daniel Gasienica
e1b620602d
Display attachments from disk
7 years ago
Daniel Gasienica
e2a2165d9c
Remove lightbox on unload
7 years ago
Daniel Gasienica
21db2e7182
Use `saveURLAsFile`
7 years ago
Daniel Gasienica
36c609c2c3
Persist `has*Attachments` properties for incoming messages
7 years ago
Daniel Gasienica
3df8c22e44
Alphabetize `Message` properties
7 years ago
Daniel Gasienica
45d6c7a5a8
Implement video support in lightbox
7 years ago
Daniel Gasienica
ac04f0648a
Load more documents than media
7 years ago
Daniel Gasienica
b86f9c0be8
Allow saving of attachments from media gallery lightbox
7 years ago
Daniel Gasienica
b74b761255
Implement click to save for document list
7 years ago
Daniel Gasienica
41fe50553f
Replace Backbone `saveFile` with `Attachment.save`
7 years ago
Daniel Gasienica
954433366e
Load documents for media gallery
7 years ago
Daniel Gasienica
2a5f513ebc
Organize `global`s
7 years ago
Scott Nonnenberg
84c7a4c293
Move to some of our global utility methods
7 years ago
Scott Nonnenberg
403fb1fd60
Make algorithm for finding thumbnails more efficient
7 years ago
Scott Nonnenberg
27a30b3267
Respond to PR feedback
...
- makeThumbnail -> makeImageThumbnail
- duplicate 'display: flex'
- remove no-longer-applicable comment
7 years ago
Scott Nonnenberg
ac0b50d20f
Generate thumbnails for new video attachments, video quotes
7 years ago
Scott Nonnenberg
0e99ca61a2
eslintify file_input_view.js
7 years ago
Daniel Gasienica
bf3a547a76
Organize `global`s
7 years ago
Daniel Gasienica
f36f206a01
Use `IndexablePresence` for `hasFileAttachments` and `hasVisualMediaAttachments`
...
Reduces index size, makes it easier to debug using IndexedDB inspector, and
hopefully improves lookup performance.
7 years ago
Daniel Gasienica
8e3c38d5fe
Fix formatting
7 years ago
Daniel Gasienica
b65370c8d7
Prefer `GoogleChrome.is*` over `MIME.is*`
7 years ago
Daniel Gasienica
96be0df8c7
Show lightbox controls based on presence of handlers
7 years ago
Daniel Gasienica
9134701f7c
Move `filesize` from Bower to npm
7 years ago
Daniel Gasienica
86a9923181
Remove TODOs
7 years ago
Daniel Gasienica
204de3aaea
Lazily bind `Signal.Components.MediaGallery`
7 years ago
Daniel Gasienica
146178f977
Update schema documentation
7 years ago
Daniel Gasienica
b4a4182613
Hide ‘Save As…’ button in media gallery
...
Wait until we support it.
7 years ago
Daniel Gasienica
0d676a65b8
Open media gallery item in lightbox
7 years ago
Daniel Gasienica
ce825fbd66
Rename `save` to `onSave`
7 years ago
Daniel Gasienica
b0e1cc49a5
Remove legacy Backbone lightbox
7 years ago
Daniel Gasienica
86da80fd23
Wire up attachment saving
7 years ago
Daniel Gasienica
593976fe21
Extract Backbone Lightbox view module
7 years ago
Daniel Gasienica
3acdeb90c3
Make `ReactWrapperView` globals explicit
7 years ago
Daniel Gasienica
4a5a2cb5c1
Replace Backbone with React lightbox
7 years ago
Daniel Gasienica
4ce0472b9f
Extract `Message.loadWithObjectURL`
7 years ago
Daniel Gasienica
2dc3877fd4
Integrate visual media attachment gallery
7 years ago
Daniel Gasienica
082ef98a56
Add type definition for `deferredToPromise`
7 years ago
Daniel Gasienica
9d84b2f420
Index messages with attachments using a boolean
...
When indexing message attachment metadata using numeric indexes such as:
```javascript
{
conversationId: '+12223334455',
received_at: 123,
attachments: […],
numAttachments: 2,
},
{
conversationId: '+12223334455',
received_at: 456,
attachments: [],
numAttachments: 0,
}
{
conversationId: '+12223334455',
received_at: 789,
attachments: [],
numAttachments: 1,
}
```
It creates an index as follows:
```
[conversationId, received_at, numAttachments]
['+12223334455', 123, 2]
['+12223334455', 456, 0]
['+12223334455', 789, 1]
```
This means a query such as…
```
lowerBound: ['+12223334455', 0, 1 ]
upperBound: ['+12223334455', Number.MAX_VALUE, Number.MAX_VALUE]
```
…will return all three original entries because they span the `received_at`
from `0` through `Number.MAX_VALUE`. One workaround is to index booleans using
`1 | undefined` where `1` is included in the index and `undefined` is not, but
that way we lose the ability to query for the `false` value. Instead, we flip
adjust the index to `[conversationId, hasAttachments, received_at]` and can
then query messages with attachments using
```
[conversationId, 1 /* hasAttachments */, 0 /* received_at */]
[conversationId, 1 /* hasAttachments */, Number.MAX_VALUE /* received_at */]
```
7 years ago
Daniel Gasienica
f367a9b059
Move `private` method below `public` ones
7 years ago
Daniel Gasienica
d7b21ef5dc
Render attachments grouped by date
7 years ago
Daniel Gasienica
ae419764bf
Use arrow function over `.bind`
7 years ago
Daniel Gasienica
272c49c5bf
Use existing `ReactWrapper`
7 years ago
Daniel Gasienica
32a3ef518b
Render media gallery placeholder panel
7 years ago
Daniel Gasienica
5f220a7b2c
Add migration for media gallery indices
7 years ago
Daniel Gasienica
273248d3fd
Wire up ‘View All Media’ menu item
7 years ago
Daniel Gasienica
d14761087a
Add schema version 4: Attachment metadata
7 years ago
Daniel Gasienica
df2e6e7864
Port `MIME` module to TypeScript
7 years ago
Daniel Gasienica
6a63e427c8
Use `is` instead of Lodash `is*`
7 years ago
Scott Nonnenberg
9619e5b66d
Fix quote thumbnail flickering issue
...
Turns out that we reload thumbnails for every message when any new
message is added to the conversation. This fix prevents that by actually
checking for the proper sentinel on the message model
7 years ago
Scott Nonnenberg
b0b1dc6be8
Apply iOS theme after link
7 years ago
Scott Nonnenberg
c614c3968b
Enable the sending of quoted replies
7 years ago
Scott Nonnenberg
ef1d568a80
Restore rendering of group update and end session messages
...
The previous work to refactor bubbles broke rendering for these message
types. :0/
7 years ago
Scott Nonnenberg
bf81c3db63
Document Message v4, remove data-free thumbnails
7 years ago
Scott Nonnenberg
c02860af5c
Responding to pull request review feedback
...
- messages.getQuoteObjectUrl: early return
- backup.js: explaining variables for long if statement
- types/messages.js: Log if thumbnail has neither data nor path
- sendmessage.js:
- remove extraneous logging
- fix indentation
- upload attachments and thumbnails in parallel
- preload: don't load fs for tests, just fse
- _conversation.scss: split two selectors into two lines, 0px -> 0
- backup_test.js: use fse.existsSync and comment twoSlashes regex
- network_tests_view_test.js: Comment duplicate assignment to window.getSocketStatus
7 years ago
Scott Nonnenberg
ba4b033db9
Disable sending of quoted replies for now
7 years ago
Scott Nonnenberg
21713cbce7
Update quotes to render emoji just like normal messages
7 years ago
Scott Nonnenberg
a7d44d3344
Backup and end-to-end test!
7 years ago
Scott Nonnenberg
d0bcf506b4
Put focus in the message composition field on reply
7 years ago
Scott Nonnenberg
978ff0e2bb
Refactor: Use correct name for sanitized filename in backup.js
7 years ago
Scott Nonnenberg
26dd01c4fd
Make sent quote clickable - process after adding to conversation
7 years ago
Scott Nonnenberg
73edabfb17
Full pipeline to send quotes, including thumbnail upload
7 years ago
Scott Nonnenberg
13ce056830
Make thumbnails on quote load and on quote preview creation
7 years ago
Scott Nonnenberg
12257e1560
MessageView: Show menu w/ 'reply to message' on triple-dot click
7 years ago
Scott Nonnenberg
f4d9ab8ba0
Put quote preview in text box for Android, above it in iOS
7 years ago
Scott Nonnenberg
d4220e278d
MessageView: Remove logging
7 years ago
Scott Nonnenberg
afad1a8d77
conversation_view: Remove logging in quote handling
7 years ago
Scott Nonnenberg
c71dcf0139
Show current quoted message above composition field
...
Note that substantial changes will be required for the updated Android
mockups, putting the quotation into the text box next to the attachment
preview.
7 years ago
Scott Nonnenberg
e66f9faf33
MessageView refactor: reply -> quote
7 years ago
Scott Nonnenberg
b4ff223d18
Refactor: Push selector logic for quote props into Message model
7 years ago
Scott Nonnenberg
d0b11c59f5
Eslintify conversation_view.js
7 years ago
Scott Nonnenberg
26e4e97592
Tighten up CSS
...
- Remove extra padding at top of Android bubbles, via sibling selector
- Don't include .attachments, .quote-wrapper, .content in bubble unless
we actually need them. This allows for sibling selectors.
- This is a different technique for adding the ReactWrapperView for
quotes - it is now appended to the DOM instead of attaching to
something already in the DOM. This allows us to use .remove(), so it's
a bit cleaner.
- Users of ReactWrapperView can now specify tagName and className
7 years ago
Scott Nonnenberg
30957341e4
Show three dot icon next to message on hover
...
But only if it doesn't have an error.
Also: reformatted message template in legacy_templates.js to match what
is in background.html for easier diffing.
7 years ago
Scott Nonnenberg
a563dc8b37
Style Guide: Additional message examples, a few fixes to enable
7 years ago
Scott Nonnenberg
000dc3a159
Handle attachment load failure for quoted message
7 years ago
Scott Nonnenberg
f1ff040842
Finish type definition for _mapQuotedAttachments
7 years ago
Scott Nonnenberg
4e9abdf348
MessageView: Call the proper render method on change event
7 years ago
Scott Nonnenberg
04d186c05a
Conversation.loadQuoteThumbnail: Be resilient to no attachments
7 years ago
Scott Nonnenberg
a6467d4fda
Constrain 'start recording' event listener to capture-audio only
...
(it was firing when clicking on a microphone icon in quotation!)
7 years ago
Scott Nonnenberg
3bbb9f535a
Load thumbnail even if we have the full message in hand
...
This is important for now, when we aren't generating our own thumbnails
7 years ago
Scott Nonnenberg
c283ba1a12
Remove pointer cursor when clicking on quote won't do anything
7 years ago
Scott Nonnenberg
9ad55c803f
Fix handling attachment thumbnails using thumbnail key
7 years ago
Scott Nonnenberg
fce9bb7342
Move to central MIME functions, remove some console.log
...
And generally address PR feedback.
7 years ago
Scott Nonnenberg
32925ed026
Load attachment data for quotedMessages, processMessage on add
...
Not ideal that it loads it twice, but AttachmentView is so selfish with
its blob and objectUrl!
7 years ago
Scott Nonnenberg
0100e279f5
MessageView: Make Quotes resilient to re-renders
7 years ago
Scott Nonnenberg
087dd0f758
Support for iOS theme
7 years ago
Scott Nonnenberg
fc330ef854
Quote loading: Check for in-memory message until we get one
7 years ago
Scott Nonnenberg
0f8dd7e2db
Fix a number of lint failures
7 years ago
Scott Nonnenberg
1cc0633786
Full support for quotations in Android theme
7 years ago
Scott Nonnenberg
5602241a0c
Eliminate eslint-generated triple-parents
7 years ago
Scott Nonnenberg
5c2936bdd6
Turns out that we call validateNumber() on group conversations!
7 years ago
Scott Nonnenberg
e99192dca7
Unleash eslint on models/messages.js
...
Fun fact: eslint was not running on this file, despite the eslint
directives previously in the file!
7 years ago
Scott Nonnenberg
33ef967dd7
Unleash eslint on models/conversations.js
7 years ago
Scott Nonnenberg
054d3887a1
Quotes: The full pipeline into the database
...
1. MessageReceiver always pulls down thumbnails included in quotes
2. Message.upgradeSchema has a new schema that puts all thumbnails on
disk just like happens with full attachments.
3. handleDataMessage pipes quote from dataMessage into the final message
destined for the database
7 years ago