Commit Graph

2622 Commits (41dd78c073ce681aa764f7d843565afd0de80cee)

Author SHA1 Message Date
Scott Nonnenberg 43a44793c5 Remove jshint - move everything over to eslint
Also removed all hints of previous linters
7 years ago
Scott Nonnenberg dc11db92f9 New React component: Message
Also: Use react to render contects on the 'show group members' screen
7 years ago
Scott Nonnenberg fc5c52fbdf Remove iOS theme in favor of plain light/dark themes 7 years ago
Scott Nonnenberg 5823ae3951 Ensure disabled timer notification is 'to off' not 'to seconds' 7 years ago
Scott Nonnenberg f5852bb357 Be resilient to null thrown errors so we can surface to user 7 years ago
Scott Nonnenberg c54ba8d1fa Ensure that notifications and auto-hide window settings are saved 7 years ago
Scott Nonnenberg d8e5e5fcf2 Open separate windows with theme, update settings theme on change 7 years ago
Scott Nonnenberg 61d8a694b7 Remove temporary test logging 7 years ago
Scott Nonnenberg 212ec8bb73 Whenever user opens conversation, update its last message 7 years ago
Matthias Beaupère 6a611cbecf Auto-scroll to selected conversation when reordering them (#2498)
When conversations are reordered (last message time has changed), this commit leads to scrolling the shortest distance to the conversation.
7 years ago
Scott Nonnenberg e30b34f424 Add 'newmessage' event handler to Conversation for reliablity 7 years ago
Scott Nonnenberg ad4387803b New media permission, show dialog when not enabled for voice msg
UI now in separate renderer:
  - the permissions popup
  - settings dialog
  - debug log dialog
  - about window

Couple bug fixes:
  - About Window: Fix 'escape' to close window
  - Remove outdated dist/copy tasks from Gruntfile

Eslintified settings_view.js
7 years ago
Scott Nonnenberg 9d9a797bda Handle timer updates along with group updates 7 years ago
Scott Nonnenberg 67464774c3 eslintify expiring_messages.js 7 years ago
Scott Nonnenberg 12b5547e72 Update contents of conversation even when view not hydrated
Also ensure that we update the last message in a conversation after
expire, after the mesage is really deleted from the database.
7 years ago
Scott Nonnenberg a40a39314a Disable notifications on new 'reconnect' event for laptop resume 7 years ago
Scott Nonnenberg 125c3fafa8
Idle detector: Fix bug preventing it from ever turning off (#2487) 7 years ago
Scott Nonnenberg 0abdd5ead1 Add missing await for thumbnail creation in makeQuote() 7 years ago
Scott Nonnenberg b113cd0ad2
Expire timer updates: don't send if updated via remote message (#2473)
A recent change removed the type property to make markRead() behave
properly, but that broke our check 'should we send an update?' logic. So
instead of using `isIncoming()` we now use the thing we previously used
to determine whether a message was incoming: `receivedAt`.
7 years ago
Scott Nonnenberg a4603807e1
Send/reply: Be resilient to errors making attachment thumbnail (#2468)
* Show generic file icon if we fail to make attachment thumbnail

* Be resilient to thumbnail creation errors when creating quote
7 years ago
Scott Nonnenberg 8eeaad8e18 Remove unused export/import functionality 7 years ago
Scott Nonnenberg 1c23c6a9d7 Remove window.config in favor of window.getXXX() accessors 7 years ago
Scott Nonnenberg 5fca44d1b1 Send message: Pull expireTimer, recipients, dest before queueJob 7 years ago
Scott Nonnenberg dfa1f0797c Ensure timer updates show in convo before initiating message 7 years ago
Scott Nonnenberg 71d873ccfe Ensure message expire timer start times are never in the future 7 years ago
Scott Nonnenberg f3bd0cf903 Refactor api.js into web_api, which encapsulates all web access 7 years ago
Scott Nonnenberg 8c85f6e3a6 When marking message read, ensure that peers have same read_at
When we mark a message as read, we go to the database to ensure that
older messages in this conversation are marked read as well. That
optimization was missing the read_at value provided to the starting
message, so now it is piped along to all of them.
7 years ago
Scott Nonnenberg 9400d1a538 eslintify background.js 7 years ago
Scott Nonnenberg 34f423b52c Remove unused code; move signal.js to js/modules for eslint
(noticed as I was doing this that signal.js doesn't get eslint coverage)
7 years ago
Scott Nonnenberg ec3e36824c Remove jscs from the project 7 years ago
Scott Nonnenberg cfe0bd0e79 Move to npm for several dependencies
mustache
jQuery
underscore
backbone
mocha
chai
intl-tel-input
7 years ago
Scott Nonnenberg 01be58acc2 Remove formatting in importError localization string 7 years ago
Scott Nonnenberg 548c8e69cf Emojification now all done with react via a few new components
Three locations were changed:
  1. a group update, which lists a set of contacts
  2. the contact name in the left pane
  3. the conversation title

Three new components were added to window.Signal.Components to support
these scenarios, respectively:
  1. Emojify
  2. ContactName
  3. ConversationTitle

Note that there are a number of other places in the app that should be
emojified, but never have been before. Essentially any place that a
contact name might be shown. A non-exhaustive list:
  - Show group members
  - Show safety number
  - Verified change notification
  - Disappearing timer change notification
  - Contact verification notification
  - Quote contact name
7 years ago
Scott Nonnenberg a5416e42c4 Refactor all emoji utility methods into window.Signal.Emoji 7 years ago
Scott Nonnenberg e2d044e02b Filter file scheme; disable http, https and ftp entirely 7 years ago
Scott Nonnenberg e02887565b
Update to electron v2.0.1 (#2401)
* Remove extra parenthesis causing warnings on latest chromium

* Update to electron 2.0.1

* Move all @types dependencies to devDependencies

* Update electron-builder/electron-updater

* Update to Node.js 8.9.3 to match Electron 2.0.1
7 years ago
Scott Nonnenberg d54aedcefa
A few fixes for the contact detail screen (#2374)
* Only show 'send message' on contact detail when user has account

* Make contact detail headers visible in dark mode

* Fix vertical scrolling for very large contact in detail pane

* Fix a couple comment typos
7 years ago
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