Mailspring/docs/build-instructions/linux.md
Ben Gotow 1e8fd46342 fix(drafts): Various improvements and fixes to drafts, draft state management
Summary:
This diff contains a few major changes:

1. Scribe is no longer used for the text editor. It's just a plain contenteditable region. The toolbar items (bold, italic, underline) still work. Scribe was causing React inconcistency issues in the following scenario:
   - View thread with draft, edit draft
   - Move to another thread
   - Move back to thread with draft
   - Move to another thread. Notice that one or more messages from thread with draft are still there.

There may be a way to fix this, but I tried for hours and there are Github Issues open on it's repository asking for React compatibility, so it may be fixed soon. For now contenteditable is working great.

2. Action.saveDraft() is no longer debounced in the DraftStore. Instead, firing that action causes the save to happen immediately, and the DraftStoreProxy has a new "DraftChangeSet" class which is responsbile for batching saves as the user interacts with the ComposerView. There are a couple big wins here:

   - In the future, we may want to be able to call Action.saveDraft() in other situations and it should behave like a normal action. We may also want to expose the DraftStoreProxy as an easy way of backing interactive draft UI.

   - Previously, when you added a contact to To/CC/BCC, this happened:

     <input> -> Action.saveDraft -> (delay!!) -> Database -> DraftStore -> DraftStoreProxy -> View Updates

Increasing the delay to something reasonable like 200msec meant there was 200msec of lag before you saw the new view state.

To fix this, I created a new class called DraftChangeSet which is responsible for accumulating changes as they're made and firing Action.saveDraft. "Adding" a change to the change set also causes the Draft provided by the DraftStoreProxy to change immediately (the changes are a temporary layer on top of the database object). This means no delay while changes are being applied. There's a better explanation in the source!

This diff includes a few minor fixes as well:

1. Draft.state is gone—use Message.object = draft instead
2. String model attributes should never be null
3. Pre-send checks that can cancel draft send
4. Put the entire curl history and task queue into feedback reports
5. Cache localIds for extra speed
6. Move us up to latest React

Test Plan: No new tests - once we lock down this new design I'll write tests for the DraftChangeSet

Reviewers: evan

Reviewed By: evan

Differential Revision: https://review.inboxapp.com/D1125
2015-02-03 16:24:31 -08:00

4.4 KiB

Linux

Ubuntu LTS 12.04 64-bit is the recommended platform.

Requirements

  • OS with 64-bit or 32-bit architecture
  • C++ toolchain
  • Git
  • Node.js v0.10.x
  • npm v1.4.x (bundled with Node.js)
    • npm -v to check the version.
    • npm config set python /usr/bin/python2 -g to ensure that gyp uses python2.
      • You might need to run this command as sudo, depending on how you have set up npm.
  • development headers for GNOME Keyring

Ubuntu / Debian

  • sudo apt-get install build-essential git libgnome-keyring-dev fakeroot
  • Instructions for Node.js.

Fedora / CentOS / RHEL

  • sudo yum --assumeyes install make gcc gcc-c++ glibc-devel git-core libgnome-keyring-devel rpmdevtools
  • Instructions for Node.js.

Arch

  • sudo pacman -S gconf base-devel git nodejs libgnome-keyring python2
  • export PYTHON=/usr/bin/python2 before building Atom.

Slackware

  • sbopkg -k -i node -i atom

openSUSE

  • sudo zypper install nodejs make gcc gcc-c++ glibc-devel git-core libgnome-keyring-devel rpmdevtools

Instructions

If you have problems with permissions don't forget to prefix with sudo

  1. Clone the Edgehill repository:
git clone https://github.com/inboxapp/edgehill
cd edgehill
  1. Checkout the latest Edgehill release:
git fetch -p
git checkout $(git describe --tags `git rev-list --tags --max-count=1`)
  1. Build Edgehill:
script/build

This will create the edgehill application at $TMPDIR/edgehill-build/Edgehill.

  1. Install the edgehill and apm commands to /usr/local/bin by executing:
sudo script/grunt install

To use the newly installed Edgehill, quit and restart all running Edgehill instances.

  1. Optionally, you may generate distributable packages of Edgehill at $TMPDIR/edgehill-build. Currenty, .deb and .rpm package types are supported. To create a .deb package run:
script/grunt mkdeb

To create an .rpm package run

script/grunt mkrpm

Advanced Options

Custom install directory

sudo script/grunt install --install-dir /install/edgehill/here

Custom build directory

script/build --build-dir /build/edgehill/here

Troubleshooting

TypeError: Unable to watch path

If you get following error with a big traceback right after Edgehill starts:

TypeError: Unable to watch path

you have to increase number of watched files by inotify. For testing if this is the reason for this error you can issue

sudo sysctl fs.inotify.max_user_watches=32768

and restart Edgehill. If Edgehill now works fine, you can make this setting permanent:

echo 32768 | sudo tee -a /proc/sys/fs/inotify/max_user_watches

See also https://github.com/atom/atom/issues/2082.

/usr/bin/env: node: No such file or directory

If you get this notice when attempting to script/build, you either do not have Node.js installed, or node isn't identified as Node.js on your machine. If it's the latter, entering sudo ln -s /usr/bin/nodejs /usr/bin/node into your terminal may fix the issue.

You can also use Alternatives

On some variants (mostly Debian based distros) it's preferable for you to use Alternatives so that changes to the binary paths can be fixed or altered easily:

sudo update-alternatives --install /usr/bin/node node /usr/bin/nodejs 1 --slave /usr/bin/js js /usr/bin/nodejs

AttributeError: 'module' object has no attribute 'script_main'

If you get following error with a big traceback while building Edgehill:

sys.exit(gyp.script_main()) AttributeError: 'module' object has no attribute 'script_main' gyp ERR!

you need to uninstall the system version of gyp.

On Fedora you would do the following:

sudo yum remove gyp

Linux build error reports in atom/atom

  • Use this search to get a list of reports about build errors on Linux.