Switch product name to “Mailspring”

This commit is contained in:
Ben Gotow
2017-09-05 13:37:40 -07:00
parent f051b52e8c
commit b698458766
186 changed files with 560 additions and 560 deletions

View File

@@ -41,7 +41,7 @@ deploy:
secret_access_key: secret_access_key:
secure: XlLzz7sdvrtgi4g459NvxLfrH/+hOutb+0Osz29unfi4Zcw9N8H8SEaq6m3ZeWc+ secure: XlLzz7sdvrtgi4g459NvxLfrH/+hOutb+0Osz29unfi4Zcw9N8H8SEaq6m3ZeWc+
region: us-east-1 region: us-east-1
bucket: merani-builds bucket: mailspring-builds
folder: "client/$(commit)" folder: "client/$(commit)"
set_public: true set_public: true

2
.gitmodules vendored
View File

@@ -1,3 +1,3 @@
[submodule "mailsync"] [submodule "mailsync"]
path = mailsync path = mailsync
url = git@github.com:Foundry376/Merani-Mailsync.git url = git@github.com:Foundry376/Mailspring-Mailsync.git

View File

@@ -16,8 +16,8 @@ addons:
paths: paths:
- mailsync - mailsync
- mailsync.dSYM.zip - mailsync.dSYM.zip
- Merani.dmg - Mailspring.dmg
- Merani.zip - Mailspring.zip
- $(find . -type f -name *.deb | tr "\n" ":") - $(find . -type f -name *.deb | tr "\n" ":")
- $(find . -type f -name *.rpm | tr "\n" ":") - $(find . -type f -name *.rpm | tr "\n" ":")
apt: apt:
@@ -72,7 +72,7 @@ before_install:
- source app/build/resources/certs/mac/set_unix_env.sh; - source app/build/resources/certs/mac/set_unix_env.sh;
# Checkout the (currently private) C++ Mailsync codebase # Checkout the (currently private) C++ Mailsync codebase
- GIT_SSH_COMMAND='ssh -i app/build/resources/certs/mailsync-deploy-key -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' - GIT_SSH_COMMAND='ssh -i app/build/resources/certs/mailsync-deploy-key -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
SSH_ASKPASS=/Users/travis/build/Foundry376/Merani/app/build/resources/certs/ssh-askpass-fix SSH_ASKPASS=/Users/travis/build/Foundry376/Mailspring/app/build/resources/certs/ssh-askpass-fix
DISPLAY=nothing:0 DISPLAY=nothing:0
git submodule update --init mailsync git submodule update --init mailsync

View File

@@ -1,17 +1,17 @@
# Filing an Issue # Filing an Issue
Thanks for checking out Merani! If you have a feature request, be sure to check out the [open source roadmap](http://trello.com/b/hxsqB6vx/n1-open-source-roadmap). If someone has already requested Thanks for checking out Mailspring! If you have a feature request, be sure to check out the [open source roadmap](http://trello.com/b/hxsqB6vx/n1-open-source-roadmap). If someone has already requested
the feature you have in mind, you can upvote the card on Trello—to keep things organized, we the feature you have in mind, you can upvote the card on Trello—to keep things organized, we
often close feature requests on GitHub after creating Trello cards. often close feature requests on GitHub after creating Trello cards.
If you've found a bug, try searching for similars issue before filing a new one. Please include If you've found a bug, try searching for similars issue before filing a new one. Please include
the version of Merani you're using, the platform you're using (Mac / Windows / Linux), and the the version of Mailspring you're using, the platform you're using (Mac / Windows / Linux), and the
type of email account. (Gmail, Outlook 365, etc.) type of email account. (Gmail, Outlook 365, etc.)
# Pull requests # Pull requests
We require all authors sign our [Contributor License We require all authors sign our [Contributor License
Agreement](https://www.getmerani.com/cla.html) before pull requests (even Agreement](https://www.getmailspring.com/cla.html) before pull requests (even
minor ones) can be accepted. (It's similar to other projects, like NodeJS minor ones) can be accepted. (It's similar to other projects, like NodeJS
Meteor, or React). I'm really sorry, but Legal made us do it. Meteor, or React). I'm really sorry, but Legal made us do it.

View File

@@ -1,20 +1,20 @@
<!-- <!--
Thanks for taking the time to file an issue! If you have general question or a problem with your email account, take a quick look at the Merani Knowledge Base to see if you question is addressed there: Thanks for taking the time to file an issue! If you have general question or a problem with your email account, take a quick look at the Mailspring Knowledge Base to see if you question is addressed there:
https://support.getmerani.com/hc/en-us/sections/203638587-N1_ https://support.getmailspring.com/hc/en-us/sections/203638587-N1_
Our team tries to respond to all GitHub issues. To make sure your issue is Our team tries to respond to all GitHub issues. To make sure your issue is
actionable, try to include the following information: actionable, try to include the following information:
--> -->
##### Are there any related issues? ##### Are there any related issues?
<!-- Try searching for both open and closed issues here: https://github.com/Foundry376/Merani/issues?q=is%3Aissue. Keep in mind that email features are often described differently on different platforms. (Conversations == threads, shortcuts == hotkeys, etc.) --> <!-- Try searching for both open and closed issues here: https://github.com/Foundry376/Mailspring/issues?q=is%3Aissue. Keep in mind that email features are often described differently on different platforms. (Conversations == threads, shortcuts == hotkeys, etc.) -->
... ...
##### What operating system are you using? ##### What operating system are you using?
... ...
##### What version of Merani are you using? ##### What version of Mailspring are you using?
... ...
-- --

View File

@@ -1,14 +1,14 @@
💌 Merani 💌 Mailspring
==== ====
[![Travis Status](https://travis-ci.org/Foundry376/Merani.svg?branch=master)](https://travis-ci.org/Foundry376/Merani) [![Travis Status](https://travis-ci.org/Foundry376/Mailspring.svg?branch=master)](https://travis-ci.org/Foundry376/Mailspring)
[![AppVeyor Status](https://ci.appveyor.com/api/projects/status/iuuuy6d65u3x6bj6?svg=true)](https://ci.appveyor.com/project/Foundry376/Merani) [![AppVeyor Status](https://ci.appveyor.com/api/projects/status/iuuuy6d65u3x6bj6?svg=true)](https://ci.appveyor.com/project/Foundry376/Mailspring)
**Hello! I'm one of the original authors of Nylas Mail and this is a significant fork of the app which completely replaces JavaScript mail sync with a C++ core built on Mailcore2. Unfortunately, it's not ready for use - check back soon!** **Hello! I'm one of the original authors of Nylas Mail and this is a significant fork of the app which completely replaces JavaScript mail sync with a C++ core built on Mailcore2. Unfortunately, it's not ready for use - check back soon!**
![Merani Screenshot](https://github.com/Foundry376/Merani/raw/master/screenshots/hero_graphic_mac%402x.png) ![Mailspring Screenshot](https://github.com/Foundry376/Mailspring/raw/master/screenshots/hero_graphic_mac%402x.png)
High level Goals: High level Goals:
--- ---
@@ -25,39 +25,39 @@ High level Goals:
Roadmap and Progress: Roadmap and Progress:
--- ---
See [ROADMAP.md](https://github.com/Foundry376/Merani/blob/master/ROADMAP.md) See [ROADMAP.md](https://github.com/Foundry376/Mailspring/blob/master/ROADMAP.md)
---------------- ----------------
**Merani is an open-source mail client built on the modern web with [Electron](https://github.com/atom/electron), [React](https://facebook.github.io/react/), and [Flux](https://facebook.github.io/flux/).** It is designed to be extensible, so it's easy to create new experiences and workflows around email. Want to learn more? Check out the [full documentation](https://Foundry376.github.io/Merani/). **Mailspring is an open-source mail client built on the modern web with [Electron](https://github.com/atom/electron), [React](https://facebook.github.io/react/), and [Flux](https://facebook.github.io/flux/).** It is designed to be extensible, so it's easy to create new experiences and workflows around email. Want to learn more? Check out the [full documentation](https://Foundry376.github.io/Mailspring/).
[![Slack Invite Button](http://slack-invite.getmerani.com/badge.svg)](http://slack-invite.getmerani.com) [![Slack Invite Button](http://slack-invite.getmailspring.com/badge.svg)](http://slack-invite.getmailspring.com)
## Download Merani ## Download Mailspring
You can download compiled versions of Merani for Windows, Mac OS X, and Linux (.deb) from [https://getmerani.com/download](https://getmerani.com/download). You can also build and run Merani (Previously N1) on Fedora. On Arch Linux, you can install **[n1](https://aur.archlinux.org/packages/n1/)** or **[n1-git](https://aur.archlinux.org/packages/n1-git/)** from the aur. You can download compiled versions of Mailspring for Windows, Mac OS X, and Linux (.deb) from [https://getmailspring.com/download](https://getmailspring.com/download). You can also build and run Mailspring (Previously N1) on Fedora. On Arch Linux, you can install **[n1](https://aur.archlinux.org/packages/n1/)** or **[n1-git](https://aur.archlinux.org/packages/n1-git/)** from the aur.
## Build A Plugin ## Build A Plugin
Plugins lie at the heart of Merani and give it its powerful features. Building your own plugins allows you to integrate the app with other tools, experiment with new workflows, and more. Follow the [Getting Started guide](https://Foundry376.github.io/Merani/) to write your first plugin in five minutes. To create your own theme, go to our [Theme Starter guide](https://github.com/nylas/N1-theme-starter). Plugins lie at the heart of Mailspring and give it its powerful features. Building your own plugins allows you to integrate the app with other tools, experiment with new workflows, and more. Follow the [Getting Started guide](https://Foundry376.github.io/Mailspring/) to write your first plugin in five minutes. To create your own theme, go to our [Theme Starter guide](https://github.com/nylas/N1-theme-starter).
If you would like to run the N1 source and contribute, check out our [contributing If you would like to run the N1 source and contribute, check out our [contributing
guide](https://github.com/Foundry376/Merani/blob/master/CONTRIBUTING.md). guide](https://github.com/Foundry376/Mailspring/blob/master/CONTRIBUTING.md).
## Themes ## Themes
The Merani user interface is styled using CSS, which means it's easy to modify and extend. Merani comes stock with a few beautiful themes, and there are many more which have been built by community developers The Mailspring user interface is styled using CSS, which means it's easy to modify and extend. Mailspring comes stock with a few beautiful themes, and there are many more which have been built by community developers
<center><img width=550 src="http://i.imgur.com/PWQ7NlY.jpg"></center> <center><img width=550 src="http://i.imgur.com/PWQ7NlY.jpg"></center>
#### Bundled Themes #### Bundled Themes
- [Dark](https://github.com/Foundry376/Merani/tree/master/internal_packages/ui-dark) - [Dark](https://github.com/Foundry376/Mailspring/tree/master/internal_packages/ui-dark)
- [Darkside](https://github.com/Foundry376/Merani/tree/master/internal_packages/ui-darkside) (designed by [Jamie Wilson](https://github.com/jamiewilson)) - [Darkside](https://github.com/Foundry376/Mailspring/tree/master/internal_packages/ui-darkside) (designed by [Jamie Wilson](https://github.com/jamiewilson))
- [Taiga](https://github.com/Foundry376/Merani/tree/master/internal_packages/ui-taiga) (designed by [Noah Buscher](https://github.com/noahbuscher)) - [Taiga](https://github.com/Foundry376/Mailspring/tree/master/internal_packages/ui-taiga) (designed by [Noah Buscher](https://github.com/noahbuscher))
- [Ubuntu](https://github.com/Foundry376/Merani/tree/master/internal_packages/ui-ubuntu) (designed by [Ahmed Elhanafy](https://github.com/ahmedlhanafy)) - [Ubuntu](https://github.com/Foundry376/Mailspring/tree/master/internal_packages/ui-ubuntu) (designed by [Ahmed Elhanafy](https://github.com/ahmedlhanafy))
- [Less Is More](https://github.com/Foundry376/Merani/tree/master/internal_packages/ui-less-is-more) (designed by [Alexander Adkins](https://github.com/P0WW0W)) - [Less Is More](https://github.com/Foundry376/Mailspring/tree/master/internal_packages/ui-less-is-more) (designed by [Alexander Adkins](https://github.com/P0WW0W))
@@ -93,8 +93,8 @@ The Merani user interface is styled using CSS, which means it's easy to modify a
#### To install community themes: #### To install community themes:
1. Download and unzip the repo 1. Download and unzip the repo
2. In Merani, select `Developer > Install a Package Manually... ` 2. In Mailspring, select `Developer > Install a Package Manually... `
3. Navigate to where you downloaded the theme and select the root folder. The theme is copied into the Merani settings folder for your convinence 3. Navigate to where you downloaded the theme and select the root folder. The theme is copied into the Mailspring settings folder for your convinence
5. Select `Change Theme...` from the top level menu, and you'll see the newly installed theme. That's it! 5. Select `Change Theme...` from the top level menu, and you'll see the newly installed theme. That's it!
@@ -102,21 +102,21 @@ Want to dive in more? Try [creating your own theme](https://github.com/nylas/nyl
## Plugin List ## Plugin List
We're working on building a plugin index that makes it super easy to add them to Merani. For now, check out the list below! (Feel free to submit a PR if you build a plugin and want it featured here.) We're working on building a plugin index that makes it super easy to add them to Mailspring. For now, check out the list below! (Feel free to submit a PR if you build a plugin and want it featured here.)
#### Bundled Plugins #### Bundled Plugins
Great starting points for creating your own plugins! Great starting points for creating your own plugins!
- [Translate](https://github.com/Foundry376/Merani/tree/master/internal_packages/composer-translate)—Works with 10 languages - [Translate](https://github.com/Foundry376/Mailspring/tree/master/internal_packages/composer-translate)—Works with 10 languages
- [Quick Replies](https://github.com/Foundry376/Merani/tree/master/internal_packages/composer-templates)—Send emails faster with templates - [Quick Replies](https://github.com/Foundry376/Mailspring/tree/master/internal_packages/composer-templates)—Send emails faster with templates
- [Emoji Keyboard](https://github.com/Foundry376/Merani/tree/master/internal_packages/composer-emoji)—Insert emoji by typing a colon (:) followed by the name of an emoji symbol - [Emoji Keyboard](https://github.com/Foundry376/Mailspring/tree/master/internal_packages/composer-emoji)—Insert emoji by typing a colon (:) followed by the name of an emoji symbol
- [GitHub Sidebar Info](https://github.com/Foundry376/Merani/tree/master/internal_packages/github-contact-card) - [GitHub Sidebar Info](https://github.com/Foundry376/Mailspring/tree/master/internal_packages/github-contact-card)
- [View on GitHub](https://github.com/Foundry376/Merani/tree/master/internal_packages/message-view-on-github) - [View on GitHub](https://github.com/Foundry376/Mailspring/tree/master/internal_packages/message-view-on-github)
- [Personal Level Indicators](https://github.com/Foundry376/Merani/tree/master/internal_packages/personal-level-indicators) - [Personal Level Indicators](https://github.com/Foundry376/Mailspring/tree/master/internal_packages/personal-level-indicators)
- [Phishing Detection](https://github.com/Foundry376/Merani/tree/master/internal_packages/phishing-detection) - [Phishing Detection](https://github.com/Foundry376/Mailspring/tree/master/internal_packages/phishing-detection)
## Configuration ## Configuration
You can configure Merani in a few ways—for instance, pointing it to your self-hosted instance of the sync engine or changing the interface zoom level. [Learn more about how.](https://github.com/Foundry376/Merani/blob/master/CONFIGURATION.md) You can configure Mailspring in a few ways—for instance, pointing it to your self-hosted instance of the sync engine or changing the interface zoom level. [Learn more about how.](https://github.com/Foundry376/Mailspring/blob/master/CONFIGURATION.md)
## Feature Requests / Plugin Ideas ## Feature Requests / Plugin Ideas
Have an idea for a package or a feature you'd love to see in Merani? Search for existing [GitHub issues](https://github.com/Foundry376/Merani/issues) and join the conversation! Have an idea for a package or a feature you'd love to see in Mailspring? Search for existing [GitHub issues](https://github.com/Foundry376/Mailspring/issues) and join the conversation!

View File

@@ -5,7 +5,7 @@ Target Ship Date: Late September
#### C++ MailSync #### C++ MailSync
*Goal: Reduce bugginess and battery impact, enable new controls over what mail data is synced, and dramatically improve performance by moving mailsync to a new C++ codebase based on MailCore2.* *Goal: Reduce bugginess and battery impact, enable new controls over what mail data is synced, and dramatically improve performance by moving mailsync to a new C++ codebase based on MailCore2.*
- [x] Build a lightweight C++ command-line application that syncs mail using `MailCore2` and `libcurl` and writes to the same sqlite3 database schema used by Merani. - [x] Build a lightweight C++ command-line application that syncs mail using `MailCore2` and `libcurl` and writes to the same sqlite3 database schema used by Mailspring.
- [x] Remove the client-sync package and the Activity window and implement `MailsyncProcess`/`MailsyncBridge` wrappers around new C++ codebase. Broadcast database events from the C++ app into the JavaScript app so the UI updates as data changes. - [x] Remove the client-sync package and the Activity window and implement `MailsyncProcess`/`MailsyncBridge` wrappers around new C++ codebase. Broadcast database events from the C++ app into the JavaScript app so the UI updates as data changes.
- [x] Remove thread and contact search indexing, perform indexing as data is retrieved from IMAP in C++. - [x] Remove thread and contact search indexing, perform indexing as data is retrieved from IMAP in C++.
- [x] Remove migration support from JavaScript. Run the C++ app at launch with `--migrate` to run migrations before the main window is displayed. - [x] Remove migration support from JavaScript. Run the C++ app at launch with `--migrate` to run migrations before the main window is displayed.
@@ -28,7 +28,7 @@ Target Ship Date: Late September
- [x] Add support for Gmail authentication flow and XOAUTH2 - [x] Add support for Gmail authentication flow and XOAUTH2
- [ ] Add more robust retry / failure handling logic to C++ code. - [ ] Add more robust retry / failure handling logic to C++ code.
- [x] Decide what license to use for the C++ codebase / whether to open-source it or provide binaries. (Update: I've deciced to keep this closed source for now. [Here's why.](#why-is-mailsync-closed-source)) - [x] Decide what license to use for the C++ codebase / whether to open-source it or provide binaries. (Update: I've deciced to keep this closed source for now. [Here's why.](#why-is-mailsync-closed-source))
- [x] Link the C++ codebase into Merani as a submodule, make Travis and AppVeyor CI build the C++ codebase. - [x] Link the C++ codebase into Mailspring as a submodule, make Travis and AppVeyor CI build the C++ codebase.
#### C++ MailSync Testing: #### C++ MailSync Testing:
- [x] Test with a Gmail account - [x] Test with a Gmail account
@@ -54,22 +54,22 @@ Target Ship Date: Late September
+ [x] Implement delta stream handling in the C++ codebase + [x] Implement delta stream handling in the C++ codebase
#### Deployment #### Deployment
- [x] Create a new AWS account for Merani project - [x] Create a new AWS account for Mailspring project
- [x] Create a Stripe account - [x] Create a Stripe account
- [x] Register Merani domain(s) - [x] Register Mailspring domain(s)
- [x] Setup Sentry for client error reporting - [x] Setup Sentry for client error reporting
- [x] Setup Sentry for server error reporting - [x] Setup Sentry for server error reporting
- [x] Obtain Mac Developer Certificate for Merani - [x] Obtain Mac Developer Certificate for Mailspring
- [ ] Obtain Windows Verisign Certificate for Merani - [ ] Obtain Windows Verisign Certificate for Mailspring
- [x] Setup Amazon VPC with public/private subnets, strong security group rules - [x] Setup Amazon VPC with public/private subnets, strong security group rules
- [x] Setup fast, reproducible deployments w/ Docker containers - [x] Setup fast, reproducible deployments w/ Docker containers
- [x] Deploy new identity API to id.getmerani.com - [x] Deploy new identity API to id.getmailspring.com
- [ ] Deploy new accounts API to accounts.getmerani.com - [ ] Deploy new accounts API to accounts.getmailspring.com
- [ ] Deploy cloud workers to a secured AWS VPC - [ ] Deploy cloud workers to a secured AWS VPC
*Blocked: Waiting for Nylas to open-source the rest of the code.* *Blocked: Waiting for Nylas to open-source the rest of the code.*
#### General #### General
- [ ] Create a new logo / icon for Merani - [ ] Create a new logo / icon for Mailspring
- [x] Bump Electron to 1.7.6 - [x] Bump Electron to 1.7.6
- [x] Bump React to 15.x - [x] Bump React to 15.x
- [x] Remove "heavy" Node modules no longer needed in 2017 and contribute to slow launch time: - [x] Remove "heavy" Node modules no longer needed in 2017 and contribute to slow launch time:
@@ -85,7 +85,7 @@ Target Ship Date: Late September
## Roadmap Past 1.0 ## Roadmap Past 1.0
- [ ] Bring back Mail Rules! - [ ] Bring back Mail Rules!
- [ ] Update documentation for creating plugins and themes - [ ] Update documentation for creating plugins and themes
- [ ] Create help site using existing content from support.getmerani.com. - [ ] Create help site using existing content from support.getmailspring.com.
*Verify they are OK with this?* *Verify they are OK with this?*
- [ ] Implement plugin / theme browser like the Chrome Web Store. - [ ] Implement plugin / theme browser like the Chrome Web Store.
+ Decide whether to restore support for plugins that need native modules. + Decide whether to restore support for plugins that need native modules.
@@ -105,13 +105,13 @@ Target Ship Date: Late September
## Why is Mailsync Closed Source? ## Why is Mailsync Closed Source?
For the initial release I've decided to keep the new C++ codebase closed-source. When you pull this repository and run `npm install`, the correct Mailsync build for your platform is automatically downloaded and put in place so you can hack away on the Merani Electron app. For those of you who are interested, here's why it's closed-source: For the initial release I've decided to keep the new C++ codebase closed-source. When you pull this repository and run `npm install`, the correct Mailsync build for your platform is automatically downloaded and put in place so you can hack away on the Mailspring Electron app. For those of you who are interested, here's why it's closed-source:
- **Open source is a commitment.** When I was the lead engineer of the Nylas Mail team at Nylas, I spent thousands of hours responding to GitHub issues, helping people build the source, and trying to give PR feedback that was actionable and kind. I'm expecting to spend about 30% of my time working with the open-source community on the JavaScript side of Merani, and I'd rather focus on improving existing documentation and hackability than expand code surface area past what I can support. Especially until it's past the ["bus factor"](https://en.wikipedia.org/wiki/Bus_factor) of one! - **Open source is a commitment.** When I was the lead engineer of the Nylas Mail team at Nylas, I spent thousands of hours responding to GitHub issues, helping people build the source, and trying to give PR feedback that was actionable and kind. I'm expecting to spend about 30% of my time working with the open-source community on the JavaScript side of Mailspring, and I'd rather focus on improving existing documentation and hackability than expand code surface area past what I can support. Especially until it's past the ["bus factor"](https://en.wikipedia.org/wiki/Bus_factor) of one!
- **Mailsync is hard to compile.** Mailsync is written in C++0x and uses new features like `shared_ptr` and `condition_variable`. It requires GCC 4.8 and has a ton of dependencies and required build flags. If `node-sqlite3` is any indication, open-sourcing it in it's current form would be a GitHub Issues disaster. (Compared to mailsync, `node-sqlite3` is pretty easy to build but a whopping *35%* of it's open issues are [compilation-related!](https://github.com/mapbox/node-sqlite3/issues?utf8=%E2%9C%93&q=is%3Aissue%20is%3Aopen%20compile) 😰). - **Mailsync is hard to compile.** Mailsync is written in C++0x and uses new features like `shared_ptr` and `condition_variable`. It requires GCC 4.8 and has a ton of dependencies and required build flags. If `node-sqlite3` is any indication, open-sourcing it in it's current form would be a GitHub Issues disaster. (Compared to mailsync, `node-sqlite3` is pretty easy to build but a whopping *35%* of it's open issues are [compilation-related!](https://github.com/mapbox/node-sqlite3/issues?utf8=%E2%9C%93&q=is%3Aissue%20is%3Aopen%20compile) 😰).
- **The odds of great PRs are low.** Mailsync is a multithreaded, cross-platform C++ application that interfaces with old, fragile protocols that have their own learning curves and are difficult to mock. For folks to contribute meaningful pull requests, I'd have to write great docs and tests. I'd also need to spend a /lot/ of time reviewing changes for side-effects, enforcing good C++ techniques, and checking changes for performance impact. Maybe I'll be able to support this in the future, but not yet! - **The odds of great PRs are low.** Mailsync is a multithreaded, cross-platform C++ application that interfaces with old, fragile protocols that have their own learning curves and are difficult to mock. For folks to contribute meaningful pull requests, I'd have to write great docs and tests. I'd also need to spend a /lot/ of time reviewing changes for side-effects, enforcing good C++ techniques, and checking changes for performance impact. Maybe I'll be able to support this in the future, but not yet!
If you're interested in contributing to the Merani Mailsync codebase and have some time and skill to throw at it, please let me know! If you're interested in contributing to the Mailspring Mailsync codebase and have some time and skill to throw at it, please let me know!

View File

@@ -12,19 +12,19 @@ const {version} = require(path.join(appDir, 'package.json'));
const config = { const config = {
usePackageJson: false, usePackageJson: false,
outputDirectory: path.join(appDir, 'dist'), outputDirectory: path.join(appDir, 'dist'),
appDirectory: path.join(appDir, 'dist', 'merani-win32-ia32'), appDirectory: path.join(appDir, 'dist', 'mailspring-win32-ia32'),
loadingGif: path.join(appDir, 'build', 'resources', 'win', 'loading.gif'), loadingGif: path.join(appDir, 'build', 'resources', 'win', 'loading.gif'),
iconUrl: 'http://edgehill.s3.amazonaws.com/static/merani.ico', iconUrl: 'http://edgehill.s3.amazonaws.com/static/mailspring.ico',
certificateFile: process.env.CERTIFICATE_FILE, certificateFile: process.env.CERTIFICATE_FILE,
certificatePassword: process.env.WINDOWS_CODESIGN_KEY_PASSWORD, certificatePassword: process.env.WINDOWS_CODESIGN_KEY_PASSWORD,
description: "Merani", description: "Mailspring",
version: version, version: version,
title: "merani", title: "mailspring",
authors: 'Foundry 376, LLC', authors: 'Foundry 376, LLC',
setupIcon: path.join(appDir, 'build', 'resources', 'win', 'merani.ico'), setupIcon: path.join(appDir, 'build', 'resources', 'win', 'mailspring.ico'),
setupExe: 'MeraniSetup.exe', setupExe: 'MailspringSetup.exe',
exe: 'merani.exe', exe: 'mailspring.exe',
name: 'Merani', name: 'Mailspring',
} }
console.log(config); console.log(config);

View File

@@ -1,6 +1,6 @@
# Merani SDK # Mailspring SDK
* Merani SDK Guides * Mailspring SDK Guides
* [Introduction](/README.md) * [Introduction](/README.md)
* [Getting Started](/guides/GettingStarted.md) * [Getting Started](/guides/GettingStarted.md)
* [Getting Started Part 2](/guides/GettingStarted-2.md) * [Getting Started Part 2](/guides/GettingStarted-2.md)
@@ -8,7 +8,7 @@
* [Interface Concepts](/guides/InterfaceConcepts.md) * [Interface Concepts](/guides/InterfaceConcepts.md)
* [UI Components](/guides/React.md) * [UI Components](/guides/React.md)
* [Application Architecture](/guides/Architecture.md) * [Application Architecture](/guides/Architecture.md)
* [Debugging Merani](/guides/Debugging.md) * [Debugging Mailspring](/guides/Debugging.md)
* [Accessing the Database](/guides/Database.md) * [Accessing the Database](/guides/Database.md)
* [Extending the Composer](/guides/ComposerExtensions.md) * [Extending the Composer](/guides/ComposerExtensions.md)
* [Writing Tests](/guides/WritingSpecs.md) * [Writing Tests](/guides/WritingSpecs.md)

Binary file not shown.

View File

@@ -1,9 +1,9 @@
merani: arch-dependent-file-in-usr-share mailspring: arch-dependent-file-in-usr-share
merani: changelog-file-missing-in-native-package mailspring: changelog-file-missing-in-native-package
merani: copyright-file-contains-full-apache-2-license mailspring: copyright-file-contains-full-apache-2-license
merani: copyright-should-refer-to-common-license-file-for-apache-2 mailspring: copyright-should-refer-to-common-license-file-for-apache-2
merani: copyright-should-refer-to-common-license-file-for-lgpl mailspring: copyright-should-refer-to-common-license-file-for-lgpl
merani: embedded-library mailspring: embedded-library
merani: package-installs-python-bytecode mailspring: package-installs-python-bytecode
merani: unstripped-binary-or-object mailspring: unstripped-binary-or-object
merani: extra-license-file mailspring: extra-license-file

View File

@@ -1,5 +1,5 @@
#!/bin/sh #!/bin/sh
# postinst script for merani # postinst script for mailspring
# #
# see: dh_installdeb(1) # see: dh_installdeb(1)
@@ -15,7 +15,7 @@
# for details, see http://www.debian.org/doc/debian-policy/ or # for details, see http://www.debian.org/doc/debian-policy/ or
# the debian-policy package # the debian-policy package
UBUNTU_CODENAMES="precise trusty utopic vivid" # "xenial is not yet available in merani repos." UBUNTU_CODENAMES="precise trusty utopic vivid" # "xenial is not yet available in mailspring repos."
DEBIAN_CODENAMES="squeeze wheezy jessie sid" DEBIAN_CODENAMES="squeeze wheezy jessie sid"
case "$1" in case "$1" in
@@ -31,12 +31,12 @@ case "$1" in
DISTS=$DEBIAN_CODENAMES DISTS=$DEBIAN_CODENAMES
DISTRO="debian" DISTRO="debian"
else else
echo "You are not running Debian, Ubuntu, ElementaryOS or LinuxMint. Not adding merani repository." echo "You are not running Debian, Ubuntu, ElementaryOS or LinuxMint. Not adding mailspring repository."
DISTRO="" DISTRO=""
fi fi
if [ -n "$DISTRO" ]; then if [ -n "$DISTRO" ]; then
# Add the merani repository. # Add the mailspring repository.
# Copyright (c) 2009 The Chromium Authors. All rights reserved. # Copyright (c) 2009 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license. # Use of this source code is governed by a BSD-style license.
@@ -92,7 +92,7 @@ KEYDATA
fi fi
done done
REPOCONFIG="deb [arch=i386,amd64] http://apt.getmerani.com/$DISTRO $REPO main" REPOCONFIG="deb [arch=i386,amd64] http://apt.getmailspring.com/$DISTRO $REPO main"
APT_GET="`which apt-get 2> /dev/null`" APT_GET="`which apt-get 2> /dev/null`"
APT_CONFIG="`which apt-config 2> /dev/null`" APT_CONFIG="`which apt-config 2> /dev/null`"
@@ -113,7 +113,7 @@ KEYDATA
APT_SOURCESDIR="$APTDIR$APTETC$(apt_config_val 'Dir::Etc::sourceparts')" APT_SOURCESDIR="$APTDIR$APTETC$(apt_config_val 'Dir::Etc::sourceparts')"
} }
# Add the merani repository to the apt sources. # Add the mailspring repository to the apt sources.
# Returns: # Returns:
# 0 - no update necessary # 0 - no update necessary
# 1 - sources were updated # 1 - sources were updated
@@ -127,13 +127,13 @@ KEYDATA
if [ -d "$APT_SOURCESDIR" ]; then if [ -d "$APT_SOURCESDIR" ]; then
# Nothing to do if it's already there. # Nothing to do if it's already there.
SOURCELIST=$(grep -H "$REPOCONFIG" "$APT_SOURCESDIR/merani.list" \ SOURCELIST=$(grep -H "$REPOCONFIG" "$APT_SOURCESDIR/mailspring.list" \
2>/dev/null | cut -d ':' -f 1) 2>/dev/null | cut -d ':' -f 1)
if [ -n "$SOURCELIST" ]; then if [ -n "$SOURCELIST" ]; then
return 0 return 0
fi fi
printf "$REPOCONFIG\n" > "$APT_SOURCESDIR/merani.list" printf "$REPOCONFIG\n" > "$APT_SOURCESDIR/mailspring.list"
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
return 1 return 1
fi fi

View File

@@ -1,5 +1,5 @@
#!/bin/sh #!/bin/sh
# Remove the merani repository. # Remove the mailspring repository.
# Copyright (c) 2009 The Chromium Authors. All rights reserved. # Copyright (c) 2009 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license. # Use of this source code is governed by a BSD-style license.
@@ -46,7 +46,7 @@ clean_sources_lists() {
find_apt_sources find_apt_sources
if [ -d "$APT_SOURCESDIR" ]; then if [ -d "$APT_SOURCESDIR" ]; then
rm -f "$APT_SOURCESDIR/merani.list" rm -f "$APT_SOURCESDIR/mailspring.list"
fi fi
return 0 return 0

View File

@@ -2,10 +2,10 @@
Name=<%= productName %> Name=<%= productName %>
Comment=<%= description %> Comment=<%= description %>
GenericName=<%= productName %> GenericName=<%= productName %>
Exec=/usr/bin/merani %U Exec=/usr/bin/mailspring %U
Icon=merani Icon=mailspring
Type=Application Type=Application
StartupNotify=true StartupNotify=true
StartupWMClass=<%= productName %> StartupWMClass=<%= productName %>
Categories=GNOME;GTK;Network;Email;Utility;Development; Categories=GNOME;GTK;Network;Email;Utility;Development;
MimeType=text/plain;x-scheme-handler/mailto;x-scheme-handler/merani; MimeType=text/plain;x-scheme-handler/mailto;x-scheme-handler/mailspring;

View File

@@ -0,0 +1,40 @@
Name: <%= name %>
Version: <%= version %>
Release: 0.1%{?dist}
Summary: <%= description %>
License: GPLv3
URL: https://github.com/Foundry376/Mailspring
AutoReqProv: no # Avoid libchromiumcontent.so missing dependency
requires: libgnome-keyring
%description
<%= description %>
%install
mkdir -p %{buildroot}/usr/share/mailspring
cp -r <%= contentsDir %>/* %{buildroot}/usr/share/mailspring
mkdir -p %{buildroot}/usr/bin/
ln -s ../share/mailspring/mailspring %{buildroot}/usr/bin/mailspring
chmod 755 %{buildroot}/usr/bin/mailspring
mkdir -p %{buildroot}/usr/share/applications/
mv mailspring.desktop %{buildroot}/usr/share/applications/
for s in 16 32 64 128 256 512; do
mkdir -p %{buildroot}/usr/share/icons/hicolor/${s}x${s}/apps
cp -p <%= linuxAssetsDir %>/icons/${s}.png %{buildroot}/usr/share/icons/hicolor/${s}x${s}/apps/mailspring.png
done
%files
/usr/bin/mailspring
/usr/share/mailspring
/usr/share/applications/mailspring.desktop
/usr/share/icons/hicolor/16x16/apps/mailspring.png
/usr/share/icons/hicolor/32x32/apps/mailspring.png
/usr/share/icons/hicolor/64x64/apps/mailspring.png
/usr/share/icons/hicolor/128x128/apps/mailspring.png
/usr/share/icons/hicolor/256x256/apps/mailspring.png
/usr/share/icons/hicolor/512x512/apps/mailspring.png

View File

@@ -1,40 +0,0 @@
Name: <%= name %>
Version: <%= version %>
Release: 0.1%{?dist}
Summary: <%= description %>
License: GPLv3
URL: https://github.com/Foundry376/Merani
AutoReqProv: no # Avoid libchromiumcontent.so missing dependency
requires: libgnome-keyring
%description
<%= description %>
%install
mkdir -p %{buildroot}/usr/share/merani
cp -r <%= contentsDir %>/* %{buildroot}/usr/share/merani
mkdir -p %{buildroot}/usr/bin/
ln -s ../share/merani/merani %{buildroot}/usr/bin/merani
chmod 755 %{buildroot}/usr/bin/merani
mkdir -p %{buildroot}/usr/share/applications/
mv merani.desktop %{buildroot}/usr/share/applications/
for s in 16 32 64 128 256 512; do
mkdir -p %{buildroot}/usr/share/icons/hicolor/${s}x${s}/apps
cp -p <%= linuxAssetsDir %>/icons/${s}.png %{buildroot}/usr/share/icons/hicolor/${s}x${s}/apps/merani.png
done
%files
/usr/bin/merani
/usr/share/merani
/usr/share/applications/merani.desktop
/usr/share/icons/hicolor/16x16/apps/merani.png
/usr/share/icons/hicolor/32x32/apps/merani.png
/usr/share/icons/hicolor/64x64/apps/merani.png
/usr/share/icons/hicolor/128x128/apps/merani.png
/usr/share/icons/hicolor/256x256/apps/merani.png
/usr/share/icons/hicolor/512x512/apps/merani.png

View File

Before

Width:  |  Height:  |  Size: 161 KiB

After

Width:  |  Height:  |  Size: 161 KiB

View File

@@ -0,0 +1,60 @@
Windows Registry Editor Version 5.00
[{{HKEY_ROOT}}\SOFTWARE\Classes\Mailspring.Url.mailto]
"FriendlyTypeName"="Mailspring Url"
[{{HKEY_ROOT}}\SOFTWARE\Classes\Mailspring.Url.mailto\shell]
[{{HKEY_ROOT}}\SOFTWARE\Classes\Mailspring.Url.mailto\shell\open]
[{{HKEY_ROOT}}\SOFTWARE\Classes\Mailspring.Url.mailto\shell\open\command]
@="\"{{PATH_TO_ROOT_FOLDER}}\\Update.exe\" --processStart mailspring.exe --process-start-args %1"
[{{HKEY_ROOT}}\SOFTWARE\Clients\Mail\Mailspring]
@="Mailspring"
"LocalizedString"="@{{PATH_TO_ROOT_FOLDER}}\\Update.exe,-123"
[{{HKEY_ROOT}}\SOFTWARE\Clients\Mail\Mailspring\DefaultIcon]
@="{{PATH_TO_APP_FOLDER}}\\mailspring.exe,1"
[{{HKEY_ROOT}}\SOFTWARE\Clients\Mail\Mailspring\Capabilities]
"ApplicationName"="Mailspring"
"ApplicationDescription"="A fast, modern mail client designed to help you boost your productivity."
[{{HKEY_ROOT}}\SOFTWARE\Clients\Mail\Mailspring\Capabilities\StartMenu]
"Mail"="Mailspring"
[{{HKEY_ROOT}}\SOFTWARE\Clients\Mail\Mailspring\Capabilities\URLAssociations]
"mailto"="Mailspring.Url.mailto"
[{{HKEY_ROOT}}\SOFTWARE\Clients\Mail\Mailspring\Protocols]
[{{HKEY_ROOT}}\SOFTWARE\Clients\Mail\Mailspring\Protocols\mailto]
@="URL:MailTo Protocol"
[{{HKEY_ROOT}}\SOFTWARE\Clients\Mail\Mailspring\Protocols\mailto\DefaultIcon]
@="{{PATH_TO_APP_FOLDER}}\\mailspring.exe,1"
[{{HKEY_ROOT}}\SOFTWARE\Clients\Mail\Mailspring\Protocols\mailto\shell]
[{{HKEY_ROOT}}\SOFTWARE\Clients\Mail\Mailspring\Protocols\mailto\shell\open]
[{{HKEY_ROOT}}\SOFTWARE\Clients\Mail\Mailspring\Protocols\mailto\shell\open\command]
@="\"{{PATH_TO_ROOT_FOLDER}}\\Update.exe\" --processStart mailspring.exe --process-start-args %1"
[{{HKEY_ROOT}}\SOFTWARE\Clients\Mail\Mailspring\shell]
[{{HKEY_ROOT}}\SOFTWARE\Clients\Mail\Mailspring\shell\open]
[{{HKEY_ROOT}}\SOFTWARE\Clients\Mail\Mailspring\shell\open\command]
@="\"{{PATH_TO_ROOT_FOLDER}}\\Update.exe\" --processStart mailspring.exe"
[{{HKEY_ROOT}}\SOFTWARE\RegisteredApplications]
"Mailspring"="Software\\Clients\\Mail\\Mailspring\\Capabilities"
[HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache]
"{{PATH_TO_ROOT_FOLDER}}\\Update.exe"="Mailspring"
"{{PATH_TO_ROOT_FOLDER}}\\Update.exe.FriendlyAppName"="Mailspring"
"{{PATH_TO_ROOT_FOLDER}}\\Update.exe.ApplicationCompany"="Mailspring"

View File

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

@@ -1,60 +0,0 @@
Windows Registry Editor Version 5.00
[{{HKEY_ROOT}}\SOFTWARE\Classes\Merani.Url.mailto]
"FriendlyTypeName"="Merani Url"
[{{HKEY_ROOT}}\SOFTWARE\Classes\Merani.Url.mailto\shell]
[{{HKEY_ROOT}}\SOFTWARE\Classes\Merani.Url.mailto\shell\open]
[{{HKEY_ROOT}}\SOFTWARE\Classes\Merani.Url.mailto\shell\open\command]
@="\"{{PATH_TO_ROOT_FOLDER}}\\Update.exe\" --processStart merani.exe --process-start-args %1"
[{{HKEY_ROOT}}\SOFTWARE\Clients\Mail\Merani]
@="Merani"
"LocalizedString"="@{{PATH_TO_ROOT_FOLDER}}\\Update.exe,-123"
[{{HKEY_ROOT}}\SOFTWARE\Clients\Mail\Merani\DefaultIcon]
@="{{PATH_TO_APP_FOLDER}}\\merani.exe,1"
[{{HKEY_ROOT}}\SOFTWARE\Clients\Mail\Merani\Capabilities]
"ApplicationName"="Merani"
"ApplicationDescription"="A fast, modern mail client designed to help you boost your productivity."
[{{HKEY_ROOT}}\SOFTWARE\Clients\Mail\Merani\Capabilities\StartMenu]
"Mail"="Merani"
[{{HKEY_ROOT}}\SOFTWARE\Clients\Mail\Merani\Capabilities\URLAssociations]
"mailto"="Merani.Url.mailto"
[{{HKEY_ROOT}}\SOFTWARE\Clients\Mail\Merani\Protocols]
[{{HKEY_ROOT}}\SOFTWARE\Clients\Mail\Merani\Protocols\mailto]
@="URL:MailTo Protocol"
[{{HKEY_ROOT}}\SOFTWARE\Clients\Mail\Merani\Protocols\mailto\DefaultIcon]
@="{{PATH_TO_APP_FOLDER}}\\merani.exe,1"
[{{HKEY_ROOT}}\SOFTWARE\Clients\Mail\Merani\Protocols\mailto\shell]
[{{HKEY_ROOT}}\SOFTWARE\Clients\Mail\Merani\Protocols\mailto\shell\open]
[{{HKEY_ROOT}}\SOFTWARE\Clients\Mail\Merani\Protocols\mailto\shell\open\command]
@="\"{{PATH_TO_ROOT_FOLDER}}\\Update.exe\" --processStart merani.exe --process-start-args %1"
[{{HKEY_ROOT}}\SOFTWARE\Clients\Mail\Merani\shell]
[{{HKEY_ROOT}}\SOFTWARE\Clients\Mail\Merani\shell\open]
[{{HKEY_ROOT}}\SOFTWARE\Clients\Mail\Merani\shell\open\command]
@="\"{{PATH_TO_ROOT_FOLDER}}\\Update.exe\" --processStart merani.exe"
[{{HKEY_ROOT}}\SOFTWARE\RegisteredApplications]
"Merani"="Software\\Clients\\Mail\\Merani\\Capabilities"
[HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache]
"{{PATH_TO_ROOT_FOLDER}}\\Update.exe"="Merani"
"{{PATH_TO_ROOT_FOLDER}}\\Update.exe.FriendlyAppName"="Merani"
"{{PATH_TO_ROOT_FOLDER}}\\Update.exe.ApplicationCompany"="Merani"

View File

@@ -2,14 +2,14 @@ const path = require('path');
const createDMG = require('electron-installer-dmg') const createDMG = require('electron-installer-dmg')
module.exports = (grunt) => { module.exports = (grunt) => {
grunt.registerTask('create-mac-dmg', 'Create DMG for Merani', function pack() { grunt.registerTask('create-mac-dmg', 'Create DMG for Mailspring', function pack() {
const done = this.async(); const done = this.async();
const dmgPath = path.join(grunt.config('outputDir'), "Merani.dmg"); const dmgPath = path.join(grunt.config('outputDir'), "Mailspring.dmg");
createDMG({ createDMG({
appPath: path.join(grunt.config('outputDir'), "Merani-darwin-x64", "Merani.app"), appPath: path.join(grunt.config('outputDir'), "Mailspring-darwin-x64", "Mailspring.app"),
name: "Merani", name: "Mailspring",
background: path.resolve(grunt.config('appDir'), 'build', 'resources', 'mac', 'DMG-background.png'), background: path.resolve(grunt.config('appDir'), 'build', 'resources', 'mac', 'DMG-background.png'),
icon: path.resolve(grunt.config('appDir'), 'build', 'resources', 'mac', 'merani.icns'), icon: path.resolve(grunt.config('appDir'), 'build', 'resources', 'mac', 'mailspring.icns'),
overwrite: true, overwrite: true,
out: grunt.config('outputDir'), out: grunt.config('outputDir'),
}, (err) => { }, (err) => {

View File

@@ -6,20 +6,20 @@ const path = require('path');
module.exports = (grunt) => { module.exports = (grunt) => {
const {spawn} = grunt.config('taskHelpers') const {spawn} = grunt.config('taskHelpers')
grunt.registerTask('create-mac-zip', 'Zip up Merani', function pack() { grunt.registerTask('create-mac-zip', 'Zip up Mailspring', function pack() {
const done = this.async(); const done = this.async();
const zipPath = path.join(grunt.config('outputDir'), 'Merani.zip'); const zipPath = path.join(grunt.config('outputDir'), 'Mailspring.zip');
if (grunt.file.exists(zipPath)) { if (grunt.file.exists(zipPath)) {
grunt.file.delete(zipPath, {force: true}); grunt.file.delete(zipPath, {force: true});
} }
const orig = process.cwd(); const orig = process.cwd();
process.chdir(path.join(grunt.config('outputDir'), 'Merani-darwin-x64')); process.chdir(path.join(grunt.config('outputDir'), 'Mailspring-darwin-x64'));
spawn({ spawn({
cmd: "zip", cmd: "zip",
args: ["-9", "-y", "-r", "-9", "-X", zipPath, 'Merani.app'], args: ["-9", "-y", "-r", "-9", "-X", zipPath, 'Mailspring.app'],
}, (error) => { }, (error) => {
process.chdir(orig); process.chdir(orig);

View File

@@ -7,7 +7,7 @@ module.exports = (grunt) => {
const {spawn} = grunt.config('taskHelpers'); const {spawn} = grunt.config('taskHelpers');
const outputDir = grunt.config.get('outputDir'); const outputDir = grunt.config.get('outputDir');
const contentsDir = path.join(grunt.config('outputDir'), `merani-linux-${process.arch}`); const contentsDir = path.join(grunt.config('outputDir'), `mailspring-linux-${process.arch}`);
const linuxAssetsDir = path.resolve(path.join(grunt.config('buildDir'), 'resources', 'linux')); const linuxAssetsDir = path.resolve(path.join(grunt.config('buildDir'), 'resources', 'linux'));
const arch = { const arch = {
ia32: 'i386', ia32: 'i386',
@@ -49,17 +49,17 @@ module.exports = (grunt) => {
version: grunt.config('appJSON').version, version: grunt.config('appJSON').version,
description: grunt.config('appJSON').description, description: grunt.config('appJSON').description,
productName: grunt.config('appJSON').productName, productName: grunt.config('appJSON').productName,
linuxShareDir: '/usr/local/share/merani', linuxShareDir: '/usr/local/share/mailspring',
linuxAssetsDir: linuxAssetsDir, linuxAssetsDir: linuxAssetsDir,
contentsDir: contentsDir, contentsDir: contentsDir,
} }
// This populates merani.spec // This populates mailspring.spec
const specInFilePath = path.join(linuxAssetsDir, 'redhat', 'merani.spec.in') const specInFilePath = path.join(linuxAssetsDir, 'redhat', 'mailspring.spec.in')
writeFromTemplate(specInFilePath, templateData) writeFromTemplate(specInFilePath, templateData)
// This populates merani.desktop // This populates mailspring.desktop
const desktopInFilePath = path.join(linuxAssetsDir, 'merani.desktop.in') const desktopInFilePath = path.join(linuxAssetsDir, 'mailspring.desktop.in')
writeFromTemplate(desktopInFilePath, templateData) writeFromTemplate(desktopInFilePath, templateData)
const cmd = path.join(grunt.config('appDir'), 'script', 'mkrpm') const cmd = path.join(grunt.config('appDir'), 'script', 'mkrpm')
@@ -92,23 +92,23 @@ module.exports = (grunt) => {
name: grunt.config('appJSON').name, name: grunt.config('appJSON').name,
description: grunt.config('appJSON').description, description: grunt.config('appJSON').description,
productName: grunt.config('appJSON').productName, productName: grunt.config('appJSON').productName,
linuxShareDir: '/usr/share/merani', linuxShareDir: '/usr/share/mailspring',
arch: arch, arch: arch,
section: 'devel', section: 'devel',
maintainer: 'Merani Team <support@getmerani.com>', maintainer: 'Mailspring Team <support@getmailspring.com>',
installedSize: installedSize, installedSize: installedSize,
} }
writeFromTemplate(path.join(linuxAssetsDir, 'debian', 'control.in'), data) writeFromTemplate(path.join(linuxAssetsDir, 'debian', 'control.in'), data)
writeFromTemplate(path.join(linuxAssetsDir, 'merani.desktop.in'), data) writeFromTemplate(path.join(linuxAssetsDir, 'mailspring.desktop.in'), data)
const icon = path.join(grunt.config('appDir'), 'build', 'resources', 'merani.png') const icon = path.join(grunt.config('appDir'), 'build', 'resources', 'mailspring.png')
const cmd = path.join(grunt.config('appDir'), 'script', 'mkdeb'); const cmd = path.join(grunt.config('appDir'), 'script', 'mkdeb');
const args = [version, arch, icon, linuxAssetsDir, contentsDir, outputDir]; const args = [version, arch, icon, linuxAssetsDir, contentsDir, outputDir];
spawn({cmd, args}, (spawnError) => { spawn({cmd, args}, (spawnError) => {
if (spawnError) { if (spawnError) {
return done(spawnError); return done(spawnError);
} }
grunt.log.ok(`Created ${outputDir}/merani-${version}-${arch}.deb`); grunt.log.ok(`Created ${outputDir}/mailspring-${version}-${arch}.deb`);
return done() return done()
}); });
}); });

View File

@@ -130,8 +130,8 @@ module.exports = (grunt) => {
appVersion: packageJSON.version, appVersion: packageJSON.version,
platform: platform, platform: platform,
protocols: [{ protocols: [{
name: "Merani Protocol", name: "Mailspring Protocol",
schemes: ["merani"], schemes: ["mailspring"],
}, { }, {
name: "Mailto Protocol", name: "Mailto Protocol",
schemes: ["mailto"], schemes: ["mailto"],
@@ -143,14 +143,14 @@ module.exports = (grunt) => {
'win32': 'ia32', 'win32': 'ia32',
}[platform], }[platform],
icon: { icon: {
darwin: path.resolve(grunt.config('appDir'), 'build', 'resources', 'mac', 'merani.icns'), darwin: path.resolve(grunt.config('appDir'), 'build', 'resources', 'mac', 'mailspring.icns'),
win32: path.resolve(grunt.config('appDir'), 'build', 'resources', 'win', 'merani.ico'), win32: path.resolve(grunt.config('appDir'), 'build', 'resources', 'win', 'mailspring.ico'),
linux: undefined, linux: undefined,
}[platform], }[platform],
name: { name: {
darwin: 'Merani', darwin: 'Mailspring',
win32: 'merani', win32: 'mailspring',
linux: 'merani', linux: 'mailspring',
}[platform], }[platform],
appCopyright: `Copyright (C) 2014-${new Date().getFullYear()} Foundry 376, LLC. All rights reserved.`, appCopyright: `Copyright (C) 2014-${new Date().getFullYear()} Foundry 376, LLC. All rights reserved.`,
derefSymlinks: false, derefSymlinks: false,
@@ -216,9 +216,9 @@ module.exports = (grunt) => {
osxSign: !!process.env.SIGN_BUILD, osxSign: !!process.env.SIGN_BUILD,
win32metadata: { win32metadata: {
CompanyName: 'Foundry 376, LLC', CompanyName: 'Foundry 376, LLC',
FileDescription: 'Merani', FileDescription: 'Mailspring',
LegalCopyright: `Copyright (C) 2014-${new Date().getFullYear()} Foundry 376, LLC. All rights reserved.`, LegalCopyright: `Copyright (C) 2014-${new Date().getFullYear()} Foundry 376, LLC. All rights reserved.`,
ProductName: 'Merani', ProductName: 'Mailspring',
}, },
// NOTE: The following plist keys can NOT be set in the // NOTE: The following plist keys can NOT be set in the
// extra.plist since they are manually overridden by // extra.plist since they are manually overridden by
@@ -235,7 +235,7 @@ module.exports = (grunt) => {
// Electron.app/Contents/Info.plist. A majority of the defaults are // Electron.app/Contents/Info.plist. A majority of the defaults are
// left in the Electron Info.plist file // left in the Electron Info.plist file
extendInfo: path.resolve(grunt.config('appDir'), 'build', 'resources', 'mac', 'extra.plist'), extendInfo: path.resolve(grunt.config('appDir'), 'build', 'resources', 'mac', 'extra.plist'),
appBundleId: "com.merani.merani", appBundleId: "com.mailspring.mailspring",
afterCopy: [ afterCopy: [
runCopyPlatformSpecificResources, runCopyPlatformSpecificResources,
runWriteCommitHashIntoPackage, runWriteCommitHashIntoPackage,
@@ -245,7 +245,7 @@ module.exports = (grunt) => {
}, },
}) })
grunt.registerTask('package', 'Package Merani', function pack() { grunt.registerTask('package', 'Package Mailspring', function pack() {
const done = this.async(); const done = this.async();
const start = Date.now(); const start = Date.now();

View File

@@ -80,8 +80,8 @@ module.exports = (grunt) => {
getCertData = () => { getCertData = () => {
const certs = path.resolve(path.join(grunt.config('buildDir'), 'resources', 'certs', 'mac')); const certs = path.resolve(path.join(grunt.config('buildDir'), 'resources', 'certs', 'mac'));
const appleCert = path.join(certs, 'AppleWWDRCA.cer'); const appleCert = path.join(certs, 'AppleWWDRCA.cer');
const nylasCert = path.join(certs, 'mac-merani.cer'); const nylasCert = path.join(certs, 'mac-codesigning.cer');
const nylasPrivateKey = path.join(certs, 'mac-merani.p12'); const nylasPrivateKey = path.join(certs, 'mac-codesigning.p12');
const keyPass = process.env.APPLE_CODESIGN_KEY_PASSWORD; const keyPass = process.env.APPLE_CODESIGN_KEY_PASSWORD;

View File

@@ -1,5 +1,5 @@
# Default Config # Default Config
These are the default Merani configs. This folder on setup is copied to These are the default Mailspring configs. This folder on setup is copied to
`/Library/Application Support/Merani` on a Mac and otehr appropriate folders `/Library/Application Support/Mailspring` on a Mac and otehr appropriate folders
on Windows and Linux. on Windows and Linux.

View File

@@ -7,6 +7,6 @@
"private": true, "private": true,
"syncInit": true, "syncInit": true,
"engines": { "engines": {
"merani": "*" "mailspring": "*"
} }
} }

View File

@@ -1 +1 @@
This folder contains a modified version of analytics-node. The original version uses `superagent`, which is both unnecessary (since we have both Browser and Node APIs and can use `fetch` and also added ~2.1MB of JavaScript to Merani.) This folder contains a modified version of analytics-node. The original version uses `superagent`, which is both unnecessary (since we have both Browser and Node APIs and can use `fetch` and also added ~2.1MB of JavaScript to Mailspring.)

View File

@@ -22,7 +22,7 @@ class AnalyticsStore extends NylasStore {
// Allow requests to be grouped together if they're fired back-to-back, // Allow requests to be grouped together if they're fired back-to-back,
// but generally report each event as it happens. This segment library // but generally report each event as it happens. This segment library
// is intended for a server where the user doesn't quit... // is intended for a server where the user doesn't quit...
this.analytics = new AnalyticsSink("merani", { this.analytics = new AnalyticsSink("mailspring", {
host: `${NylasAPIRequest.rootURLForServer('identity')}/api/s`, host: `${NylasAPIRequest.rootURLForServer('identity')}/api/s`,
flushInterval: 500, flushInterval: 500,
flushAt: 5, flushAt: 5,

View File

@@ -9,6 +9,6 @@
"default": true "default": true
}, },
"engines": { "engines": {
"merani": "*" "mailspring": "*"
} }
} }

View File

@@ -7,7 +7,7 @@
"private": true, "private": true,
"syncInit": true, "syncInit": true,
"engines": { "engines": {
"merani": "*" "mailspring": "*"
}, },
"windowTypes": { "windowTypes": {
"default": true, "default": true,

View File

@@ -6,6 +6,6 @@
"license": "GPL-3.0", "license": "GPL-3.0",
"private": true, "private": true,
"engines": { "engines": {
"merani": "*" "mailspring": "*"
} }
} }

View File

@@ -7,7 +7,7 @@
"url": "" "url": ""
}, },
"engines": { "engines": {
"merani": "*" "mailspring": "*"
}, },
"isOptional": true, "isOptional": true,

View File

@@ -7,7 +7,7 @@
"license": "GPL-3.0", "license": "GPL-3.0",
"icon": "./icon.png", "icon": "./icon.png",
"engines": { "engines": {
"merani": "*" "mailspring": "*"
}, },
"isOptional": true, "isOptional": true,
"isHiddenOnPluginsPage": true, "isHiddenOnPluginsPage": true,

View File

@@ -6,7 +6,7 @@
"license": "GPL-3.0", "license": "GPL-3.0",
"private": true, "private": true,
"engines": { "engines": {
"merani": "*" "mailspring": "*"
}, },
"windowTypes": { "windowTypes": {
"default": true, "default": true,

View File

@@ -6,7 +6,7 @@
"license": "GPL-3.0", "license": "GPL-3.0",
"private": true, "private": true,
"engines": { "engines": {
"merani": "*" "mailspring": "*"
}, },
"windowTypes": { "windowTypes": {
"default": true, "default": true,

View File

@@ -1,7 +1,7 @@
# Composer Templates # Composer Templates
Create templates you can use to pre-fill the N1 composer - never type the same Create templates you can use to pre-fill the N1 composer - never type the same
email again! Templates live in the templates folder inside the Merani config folder. email again! Templates live in the templates folder inside the Mailspring config folder.
Each template is an HTML file - the name of the file is the name of the template, Each template is an HTML file - the name of the file is the name of the template,
and it's contents are the default message body. and it's contents are the default message body.

View File

@@ -123,7 +123,7 @@ class TemplatePicker extends React.Component {
title="Insert quick reply…" title="Insert quick reply…"
> >
<RetinaImg <RetinaImg
url="merani://composer-templates/assets/icon-composer-templates@2x.png" url="mailspring://composer-templates/assets/icon-composer-templates@2x.png"
mode={RetinaImg.Mode.ContentIsMask} mode={RetinaImg.Mode.ContentIsMask}
/> />
&nbsp; &nbsp;

View File

@@ -12,7 +12,7 @@
"license": "GPL-3.0", "license": "GPL-3.0",
"private": true, "private": true,
"engines": { "engines": {
"merani": "*" "mailspring": "*"
}, },
"windowTypes": { "windowTypes": {
"default": true, "default": true,

View File

@@ -149,7 +149,7 @@ class TranslateButton extends React.Component {
> >
<RetinaImg <RetinaImg
mode={RetinaImg.Mode.ContentIsMask} mode={RetinaImg.Mode.ContentIsMask}
url="merani://composer-translate/assets/icon-composer-translate@2x.png" url="mailspring://composer-translate/assets/icon-composer-translate@2x.png"
/> />
&nbsp; &nbsp;
<RetinaImg <RetinaImg

View File

@@ -11,7 +11,7 @@
"license": "GPL-3.0", "license": "GPL-3.0",
"engines": { "engines": {
"merani": "*" "mailspring": "*"
}, },
"repository": { "repository": {
"type": "git", "type": "git",

View File

@@ -9,7 +9,7 @@
"scripts": { "scripts": {
}, },
"engines": { "engines": {
"merani": "*" "mailspring": "*"
}, },
"windowTypes": { "windowTypes": {
"default": true, "default": true,

View File

@@ -9,6 +9,6 @@
"all": true "all": true
}, },
"engines": { "engines": {
"merani": "*" "mailspring": "*"
} }
} }

View File

@@ -3,35 +3,35 @@
font-family: 'Nylas-Pro'; font-family: 'Nylas-Pro';
font-style: normal; font-style: normal;
font-weight: 200; font-weight: 200;
src: url('merani://custom-fonts/fonts/Custom-Thin.otf'); src: url('mailspring://custom-fonts/fonts/Custom-Thin.otf');
} }
@font-face { @font-face {
font-family: 'Nylas-Pro'; font-family: 'Nylas-Pro';
font-style: normal; font-style: normal;
font-weight: 300; font-weight: 300;
src: url('merani://custom-fonts/fonts/Custom-Blond.otf'); src: url('mailspring://custom-fonts/fonts/Custom-Blond.otf');
} }
@font-face { @font-face {
font-family: 'Nylas-Pro'; font-family: 'Nylas-Pro';
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
src: url('merani://custom-fonts/fonts/Custom-Normal.otf'); src: url('mailspring://custom-fonts/fonts/Custom-Normal.otf');
} }
@font-face { @font-face {
font-family: 'Nylas-Pro'; font-family: 'Nylas-Pro';
font-style: normal; font-style: normal;
font-weight: 500; font-weight: 500;
src: url('merani://custom-fonts/fonts/Custom-Medium.otf'); src: url('mailspring://custom-fonts/fonts/Custom-Medium.otf');
} }
@font-face { @font-face {
font-family: 'Nylas-Pro'; font-family: 'Nylas-Pro';
font-style: normal; font-style: normal;
font-weight: 600; font-weight: 600;
src: url('merani://custom-fonts/fonts/Custom-SemiBold.otf'); src: url('mailspring://custom-fonts/fonts/Custom-SemiBold.otf');
} }
// Pro-SemiBold doesn't render emoji properly. Override the emjoi unicode // Pro-SemiBold doesn't render emoji properly. Override the emjoi unicode
@@ -40,6 +40,6 @@
font-family: 'Nylas-Pro'; font-family: 'Nylas-Pro';
font-style: normal; font-style: normal;
font-weight: 600; font-weight: 600;
src: url('merani://custom-fonts/fonts/Custom-Normal.otf'), Helvetica, sans-serif; src: url('mailspring://custom-fonts/fonts/Custom-Normal.otf'), Helvetica, sans-serif;
unicode-range: U+1F300-1F5FF, U+1F600-1F64F, U+1F680-1F6FF, U+2600-26FF; unicode-range: U+1F300-1F5FF, U+1F600-1F64F, U+1F680-1F6FF, U+2600-26FF;
} }

View File

@@ -1,7 +1,7 @@
import {SoundRegistry} from 'nylas-exports'; import {SoundRegistry} from 'nylas-exports';
export function activate() { export function activate() {
// FIXME: Use the merani:// protocol handlers once we upgrade Electron past // FIXME: Use the mailspring:// protocol handlers once we upgrade Electron past
// v30.0 // v30.0
// See: https://github.com/atom/electron/issues/1123 // See: https://github.com/atom/electron/issues/1123
SoundRegistry.register({ SoundRegistry.register({

View File

@@ -6,7 +6,7 @@
"license": "Proprietary", "license": "Proprietary",
"private": true, "private": true,
"engines": { "engines": {
"merani": "*" "mailspring": "*"
}, },
"windowTypes": { "windowTypes": {
"all": true "all": true

View File

@@ -6,6 +6,6 @@
"license": "GPL-3.0", "license": "GPL-3.0",
"private": true, "private": true,
"engines": { "engines": {
"merani": "*" "mailspring": "*"
} }
} }

View File

@@ -6,7 +6,7 @@
"license": "GPL-3.0", "license": "GPL-3.0",
"private": true, "private": true,
"engines": { "engines": {
"merani": "*" "mailspring": "*"
}, },
"windowTypes": { "windowTypes": {
"default": true, "default": true,

View File

@@ -32,7 +32,7 @@ const GithubProfile = function GithubProfile(props) {
// objects here that *represent* the DOM we want. // objects here that *represent* the DOM we want.
return ( return (
<div className="profile"> <div className="profile">
<img className="logo" alt="github logo" src="merani://github-contact-card/assets/github.png" /> <img className="logo" alt="github logo" src="mailspring://github-contact-card/assets/github.png" />
<a href={profile.html_url}>{profile.login}</a> <a href={profile.html_url}>{profile.login}</a>
<div>{repoElements}</div> <div>{repoElements}</div>
</div> </div>

View File

@@ -12,7 +12,7 @@
"license": "GPL-3.0", "license": "GPL-3.0",
"engines": { "engines": {
"merani": "*" "mailspring": "*"
}, },
"repository": { "repository": {
"type": "git", "type": "git",

View File

@@ -8,7 +8,7 @@
"scripts": { "scripts": {
}, },
"engines": { "engines": {
"merani": "*" "mailspring": "*"
}, },
"windowTypes": { "windowTypes": {
"calendar": true "calendar": true

View File

@@ -6,7 +6,7 @@
"license": "GPL-3.0", "license": "GPL-3.0",
"private": true, "private": true,
"engines": { "engines": {
"merani": "*" "mailspring": "*"
}, },
"windowTypes": { "windowTypes": {
"default": true, "default": true,

View File

@@ -62,7 +62,7 @@ export function autolink(doc, {async} = {}) {
exclude: [/\..*[/|?].*@/], exclude: [/\..*[/|?].*@/],
}], }],
['tel:', RegExpUtils.phoneRegex()], ['tel:', RegExpUtils.phoneRegex()],
['', RegExpUtils.meraniCommandRegex()], ['', RegExpUtils.mailspringCommandRegex()],
['', RegExpUtils.urlRegex({matchEntireString: false})], ['', RegExpUtils.urlRegex({matchEntireString: false})],
]; ];

View File

@@ -77,7 +77,7 @@ export default class MessageItemBody extends React.Component {
const inlineImgRegexp = new RegExp(`<\\s*img.*src=['"]cid:${file.contentId}['"][^>]*>`, 'gi') const inlineImgRegexp = new RegExp(`<\\s*img.*src=['"]cid:${file.contentId}['"][^>]*>`, 'gi')
// Render a spinner // Render a spinner
merged = merged.replace(inlineImgRegexp, () => merged = merged.replace(inlineImgRegexp, () =>
'<img alt="spinner.gif" src="merani://message-list/assets/spinner.gif" style="-webkit-user-drag: none;">' '<img alt="spinner.gif" src="mailspring://message-list/assets/spinner.gif" style="-webkit-user-drag: none;">'
); );
} else { } else {
// Render the completed download. We include data-nylas-file so that if the image fails // Render the completed download. We include data-nylas-file so that if the image fails

View File

@@ -7,7 +7,7 @@
"private": true, "private": true,
"syncInit": true, "syncInit": true,
"engines": { "engines": {
"merani": "*" "mailspring": "*"
}, },
"windowTypes": { "windowTypes": {
"default": true, "default": true,

View File

@@ -1,11 +1,11 @@
Hello world Hello world
merani is cool. mailspring is cool.
merani://plugins?test=stuff mailspring://plugins?test=stuff
merani:plugins?test=stuff mailspring:plugins?test=stuff
<strong>merani://plugins?test=stuff</strong> <strong>mailspring://plugins?test=stuff</strong>
Don't you like merani? Don't you like mailspring?

View File

@@ -1,11 +1,11 @@
Hello world Hello world
merani is cool. mailspring is cool.
<a href="merani://plugins?test=stuff" title="merani://plugins?test=stuff">merani://plugins?test=stuff</a> <a href="mailspring://plugins?test=stuff" title="mailspring://plugins?test=stuff">mailspring://plugins?test=stuff</a>
<a href="merani:plugins?test=stuff" title="merani:plugins?test=stuff">merani:plugins?test=stuff</a> <a href="mailspring:plugins?test=stuff" title="mailspring:plugins?test=stuff">mailspring:plugins?test=stuff</a>
<strong><a href="merani://plugins?test=stuff" title="merani://plugins?test=stuff">merani://plugins?test=stuff</a></strong> <strong><a href="mailspring://plugins?test=stuff" title="mailspring://plugins?test=stuff">mailspring://plugins?test=stuff</a></strong>
Don't you like merani? Don't you like mailspring?

View File

@@ -158,7 +158,7 @@ export default class ViewOnGithubButton extends React.Component {
> >
<RetinaImg <RetinaImg
mode={RetinaImg.Mode.ContentIsMask} mode={RetinaImg.Mode.ContentIsMask}
url="merani://message-view-on-github/assets/github@2x.png" url="mailspring://message-view-on-github/assets/github@2x.png"
/> />
</button> </button>
</KeyCommandsRegion> </KeyCommandsRegion>

View File

@@ -13,6 +13,6 @@
"isHiddenOnPluginsPage": true, "isHiddenOnPluginsPage": true,
"engines": { "engines": {
"merani": "*" "mailspring": "*"
} }
} }

View File

@@ -5,7 +5,7 @@ import ModeToggle from './mode-toggle';
const ToggleWithTutorialTip = HasTutorialTip(ModeToggle, { const ToggleWithTutorialTip = HasTutorialTip(ModeToggle, {
title: 'Compose with context', title: 'Compose with context',
instructions: "Merani shows you everything about your contacts right inside your inbox. See LinkedIn profiles, Twitter bios, message history, and more.", instructions: "Mailspring shows you everything about your contacts right inside your inbox. See LinkedIn profiles, Twitter bios, message history, and more.",
}); });
// NOTE: this is a hack to allow ComponentRegistry // NOTE: this is a hack to allow ComponentRegistry

View File

@@ -5,7 +5,7 @@
"main": "./lib/main", "main": "./lib/main",
"license": "GPL-3.0", "license": "GPL-3.0",
"engines": { "engines": {
"merani": "*" "mailspring": "*"
}, },
"private": true "private": true
} }

View File

@@ -26,7 +26,7 @@ export default class AccountErrorNotification extends React.Component {
} }
_onContactSupport = (erroredAccount) => { _onContactSupport = (erroredAccount) => {
let url = 'https://support.getmerani.com/hc/en-us/requests/new' let url = 'https://support.getmailspring.com/hc/en-us/requests/new'
if (erroredAccount) { if (erroredAccount) {
url += `?email=${encodeURIComponent(erroredAccount.emailAddress)}` url += `?email=${encodeURIComponent(erroredAccount.emailAddress)}`
const {syncError} = erroredAccount const {syncError} = erroredAccount

View File

@@ -58,7 +58,7 @@ export default class DefaultClientNotification extends React.Component {
} }
return ( return (
<Notification <Notification
title="Would you like to make Merani your default mail client?" title="Would you like to make Mailspring your default mail client?"
priority="1" priority="1"
icon="volstead-defaultclient.png" icon="volstead-defaultclient.png"
actions={[{ actions={[{

View File

@@ -20,7 +20,7 @@ export default class DevModeNotification extends React.Component {
return ( return (
<Notification <Notification
priority="0" priority="0"
title="Merani is running in dev mode!" title="Mailspring is running in dev mode!"
/> />
) )
} }

View File

@@ -13,7 +13,7 @@ function OfflineNotification({isOnline, retryingInSeconds}) {
return ( return (
<Notification <Notification
className="offline" className="offline"
title="Merani is offline" title="Mailspring is offline"
subtitle={subtitle} subtitle={subtitle}
priority="5" priority="5"
icon="volstead-offline.png" icon="volstead-offline.png"

View File

@@ -26,7 +26,7 @@ export default class UnstableChannelNotification extends React.Component {
} }
_onReportIssue = () => { _onReportIssue = () => {
NylasEnv.windowEventHandler.openLink({href: 'mailto:support@getmerani.com'}) NylasEnv.windowEventHandler.openLink({href: 'mailto:support@getmailspring.com'})
} }
render() { render() {

View File

@@ -34,7 +34,7 @@ export default class UpdateNotification extends React.Component {
} }
_onViewChangelog = () => { _onViewChangelog = () => {
shell.openExternal('https://github.com/Foundry376/Merani/releases/latest') shell.openExternal('https://github.com/Foundry376/Mailspring/releases/latest')
} }
render() { render() {
@@ -45,7 +45,7 @@ export default class UpdateNotification extends React.Component {
return ( return (
<Notification <Notification
priority="4" priority="4"
title={`An update to Merani is available ${version}`} title={`An update to Mailspring is available ${version}`}
subtitle="View changelog" subtitle="View changelog"
subtitleAction={this._onViewChangelog} subtitleAction={this._onViewChangelog}
icon="volstead-upgrade.png" icon="volstead-upgrade.png"

View File

@@ -6,6 +6,6 @@
"license": "GPL-3.0", "license": "GPL-3.0",
"private": true, "private": true,
"engines": { "engines": {
"merani": "*" "mailspring": "*"
} }
} }

View File

@@ -53,7 +53,7 @@
.notification .subtitle.has-action::after { .notification .subtitle.has-action::after {
content:''; content:'';
background: url(merani://notifications/assets/minichevron@2x.png) top left no-repeat; background: url(mailspring://notifications/assets/minichevron@2x.png) top left no-repeat;
background-size: 4.5px 7px; background-size: 4.5px 7px;
margin-left:3px; margin-left:3px;
display: inline-block; display: inline-block;

View File

@@ -115,7 +115,7 @@ const CreatePageForForm = (FormComponent) => {
const errorStatusCode = err.statusCode const errorStatusCode = err.statusCode
if (err.errorType === "setting_update_error") { if (err.errorType === "setting_update_error") {
errorMessage = 'The IMAP/SMTP servers for this account do not match our records. Please verify that any server names you entered are correct. If your IMAP/SMTP server has changed, first remove this account from Merani, then try logging in again.'; errorMessage = 'The IMAP/SMTP servers for this account do not match our records. Please verify that any server names you entered are correct. If your IMAP/SMTP server has changed, first remove this account from Mailspring, then try logging in again.';
} }
if (err.errorType && err.errorType.includes("autodiscover") && (accountInfo.type === 'exchange')) { if (err.errorType && err.errorType.includes("autodiscover") && (accountInfo.type === 'exchange')) {
errorFieldNames.push('eas_server_host') errorFieldNames.push('eas_server_host')
@@ -178,10 +178,10 @@ const CreatePageForForm = (FormComponent) => {
let articleURL; let articleURL;
if (accountInfo.email.includes("@yahoo.com")) { if (accountInfo.email.includes("@yahoo.com")) {
message = "Have you enabled access through Yahoo?"; message = "Have you enabled access through Yahoo?";
articleURL = "https://support.getmerani.com/hc/en-us/articles/115001076128"; articleURL = "https://support.getmailspring.com/hc/en-us/articles/115001076128";
} else { } else {
message = "Some providers require an app password." message = "Some providers require an app password."
articleURL = "https://support.getmerani.com/hc/en-us/articles/115001056608"; articleURL = "https://support.getmailspring.com/hc/en-us/articles/115001056608";
} }
// We don't use a FormErrorMessage component because the content // We don't use a FormErrorMessage component because the content
// we need to display has HTML. // we need to display has HTML.

View File

@@ -50,7 +50,7 @@ export function makeGmailOAuthRequest(sessionKey) {
} }
export async function authIMAPForGmail(serverTokenResponse) { export async function authIMAPForGmail(serverTokenResponse) {
// At this point, the Merani server has retrieved the Gmail token, // At this point, the Mailspring server has retrieved the Gmail token,
// created an account object in the database and tested it. All we // created an account object in the database and tested it. All we
// need to do is save it locally, since we're confident Gmail will be // need to do is save it locally, since we're confident Gmail will be
// accessible from the local sync worker. // accessible from the local sync worker.

View File

@@ -165,7 +165,7 @@ class OnboardingStore extends NylasStore {
} }
} catch (e) { } catch (e) {
NylasEnv.reportError(e); NylasEnv.reportError(e);
NylasEnv.showErrorDialog("Unable to Connect Account", "Sorry, something went wrong on the Nylas server. Please try again. If you're still having issues, contact us at support@getmerani.com."); NylasEnv.showErrorDialog("Unable to Connect Account", "Sorry, something went wrong on the Nylas server. Please try again. If you're still having issues, contact us at support@getmailspring.com.");
} }
} }

View File

@@ -26,7 +26,7 @@ class AccountOnboardingSuccess extends Component { // eslint-disable-line
</div> </div>
<div> <div>
<h2>Successfully connected to {accountType.displayName}!</h2> <h2>Successfully connected to {accountType.displayName}!</h2>
<h3>Adding your account to Merani</h3> <h3>Adding your account to Mailspring</h3>
</div> </div>
</div> </div>
) )

View File

@@ -124,7 +124,7 @@ class InitialPreferencesPage extends React.Component
render: => render: =>
<div className="page opaque" style={width:900, height:620}> <div className="page opaque" style={width:900, height:620}>
<h1 style={paddingTop: 100}>Welcome to Merani</h1> <h1 style={paddingTop: 100}>Welcome to Mailspring</h1>
<h4 style={marginBottom: 70}>Let's set things up to your liking.</h4> <h4 style={marginBottom: 70}>Let's set things up to your liking.</h4>
<ConfigPropContainer> <ConfigPropContainer>
<InitialPreferencesOptions account={@state.account} /> <InitialPreferencesOptions account={@state.account} />

View File

@@ -7,7 +7,7 @@ const Steps = [
id: 'people', id: 'people',
title: 'Compose with context', title: 'Compose with context',
image: 'feature-people@2x.png', image: 'feature-people@2x.png',
description: "Merani shows you everything about your contacts right inside your inbox. See LinkedIn profiles, Twitter bios, message history, and more.", description: "Mailspring shows you everything about your contacts right inside your inbox. See LinkedIn profiles, Twitter bios, message history, and more.",
x: 96.6, x: 96.6,
y: 1.3, y: 1.3,
xDot: 93.5, xDot: 93.5,
@@ -18,7 +18,7 @@ const Steps = [
id: 'activity', id: 'activity',
title: 'Track opens and clicks', title: 'Track opens and clicks',
image: 'feature-activity@2x.png', image: 'feature-activity@2x.png',
description: "With activity tracking, youll know as soon as someone reads your message. Sending to a group? Merani shows you which recipients opened your email so you can follow up with precision.", description: "With activity tracking, youll know as soon as someone reads your message. Sending to a group? Mailspring shows you which recipients opened your email so you can follow up with precision.",
x: 12.8, x: 12.8,
y: 1, y: 1,
xDot: 15, xDot: 15,
@@ -29,7 +29,7 @@ const Steps = [
id: 'snooze', id: 'snooze',
title: 'Send on your own schedule', title: 'Send on your own schedule',
image: 'feature-snooze@2x.png', image: 'feature-snooze@2x.png',
description: "Snooze emails to return at any time that suits you. Schedule messages to send at the ideal time. Merani makes it easy to control the fabric of spacetime!", description: "Snooze emails to return at any time that suits you. Schedule messages to send at the ideal time. Mailspring makes it easy to control the fabric of spacetime!",
x: 5.5, x: 5.5,
y: 23.3, y: 23.3,
xDot: 10, xDot: 10,
@@ -40,7 +40,7 @@ const Steps = [
// id: 'composer', // id: 'composer',
// title: 'Eliminate hacky extensions', // title: 'Eliminate hacky extensions',
// image: 'feature-composer@2x.png', // image: 'feature-composer@2x.png',
// description: "Embed calendar invitations, propose meeting times, use quick reply templates, send mass emails with mail merge, and more—all directly from Meranis powerful composer.", // description: "Embed calendar invitations, propose meeting times, use quick reply templates, send mass emails with mail merge, and more—all directly from Mailsprings powerful composer.",
// x: 60.95, // x: 60.95,
// y: 66, // y: 66,
// xDot: 60.3, // xDot: 60.3,
@@ -125,7 +125,7 @@ export default class TutorialPage extends React.Component {
</div> </div>
</div> </div>
<div className="right"> <div className="right">
<img src={`merani://onboarding/assets/${current.image}`} style={{zoom: 0.5, margin: 'auto'}} role="presentation" /> <img src={`mailspring://onboarding/assets/${current.image}`} style={{zoom: 0.5, margin: 'auto'}} role="presentation" />
<h2>{current.title}</h2> <h2>{current.title}</h2>
<p>{current.description}</p> <p>{current.description}</p>
</div> </div>

View File

@@ -23,9 +23,9 @@ export default class WelcomePage extends React.Component {
<div className="page welcome"> <div className="page welcome">
<div className="steps-container"> <div className="steps-container">
<div> <div>
<RetinaImg className="logo" style={{marginTop: 166}} url="merani://onboarding/assets/nylas-logo@2x.png" mode={RetinaImg.Mode.ContentPreserve} /> <RetinaImg className="logo" style={{marginTop: 166}} url="mailspring://onboarding/assets/nylas-logo@2x.png" mode={RetinaImg.Mode.ContentPreserve} />
<p className="hero-text" style={{fontSize: 46, marginTop: 57}}>Welcome to Merani</p> <p className="hero-text" style={{fontSize: 46, marginTop: 57}}>Welcome to Mailspring</p>
<RetinaImg className="icons" url="merani://onboarding/assets/icons-bg@2x.png" mode={RetinaImg.Mode.ContentPreserve} /> <RetinaImg className="icons" url="mailspring://onboarding/assets/icons-bg@2x.png" mode={RetinaImg.Mode.ContentPreserve} />
</div> </div>
</div> </div>
<div className="footer"> <div className="footer">

View File

@@ -6,7 +6,7 @@
"license": "GPL-3.0", "license": "GPL-3.0",
"private": true, "private": true,
"engines": { "engines": {
"merani": "*" "mailspring": "*"
}, },
"windowTypes": { "windowTypes": {
"onboarding": true "onboarding": true

View File

@@ -379,7 +379,7 @@
.screenshot { .screenshot {
width: 523px; width: 523px;
height: 385px; height: 385px;
background:url(merani://onboarding/assets/app-screenshot@2x.png) top left no-repeat; background:url(mailspring://onboarding/assets/app-screenshot@2x.png) top left no-repeat;
background-size: contain; background-size: contain;
margin:auto; margin:auto;
position: relative; position: relative;
@@ -396,7 +396,7 @@
.overlay-content { .overlay-content {
transition: all cubic-bezier(0.65, 0.05, 0.36, 1) 260ms; transition: all cubic-bezier(0.65, 0.05, 0.36, 1) 260ms;
transform: translate3d(-67px,-67px,0) scale(0.21); transform: translate3d(-67px,-67px,0) scale(0.21);
background:url(merani://onboarding/assets/app-screenshot@2x.png) top left no-repeat; background:url(mailspring://onboarding/assets/app-screenshot@2x.png) top left no-repeat;
background-position: 10% 20%; background-position: 10% 20%;
border-radius: 73px; border-radius: 73px;
width: 146px; width: 146px;

View File

@@ -104,7 +104,7 @@ export default class SidebarParticipantProfile extends React.Component {
href={profile.url} href={profile.url}
> >
<RetinaImg <RetinaImg
url={`merani://participant-profile/assets/${type}-sidebar-icon@2x.png`} url={`mailspring://participant-profile/assets/${type}-sidebar-icon@2x.png`}
mode={RetinaImg.Mode.ContentPreserve} mode={RetinaImg.Mode.ContentPreserve}
/> />
</a> </a>
@@ -170,7 +170,7 @@ export default class SidebarParticipantProfile extends React.Component {
return ( return (
<p className="location"> <p className="location">
<RetinaImg <RetinaImg
url={`merani://participant-profile/assets/location-icon@2x.png`} url={`mailspring://participant-profile/assets/location-icon@2x.png`}
mode={RetinaImg.Mode.ContentPreserve} mode={RetinaImg.Mode.ContentPreserve}
style={{"float": "left"}} style={{"float": "left"}}
/> />

View File

@@ -11,7 +11,7 @@
"default": true "default": true
}, },
"engines": { "engines": {
"merani": "*" "mailspring": "*"
}, },
"license": "GPL-3.0" "license": "GPL-3.0"
} }

View File

@@ -18,7 +18,7 @@ export default class PersonalLevelIcon extends React.Component {
return ( return (
<div className="personal-level-icon"> <div className="personal-level-icon">
<RetinaImg <RetinaImg
url={`merani://personal-level-indicators/assets/PLI-Level${level}@2x.png`} url={`mailspring://personal-level-indicators/assets/PLI-Level${level}@2x.png`}
mode={RetinaImg.Mode.ContentDark} mode={RetinaImg.Mode.ContentDark}
/> />
</div> </div>

View File

@@ -15,7 +15,7 @@
"url": "" "url": ""
}, },
"engines": { "engines": {
"merani": "*" "mailspring": "*"
}, },
"license": "GPL-3.0" "license": "GPL-3.0"
} }

View File

@@ -1,6 +1,6 @@
## Phishing Detection ## Phishing Detection
A sample package for Merani to detect simple phishing attempts. This package display a simple warning if A sample package for Mailspring to detect simple phishing attempts. This package display a simple warning if
a message's originating address is different from its return address. The warning looks like this: a message's originating address is different from its return address. The warning looks like this:
![screenshot](./screenshot.png) ![screenshot](./screenshot.png)

View File

@@ -11,7 +11,7 @@
"isOptional": true, "isOptional": true,
"engines": { "engines": {
"merani": "*" "mailspring": "*"
}, },
"windowTypes": { "windowTypes": {
"default": true, "default": true,

View File

@@ -113,7 +113,7 @@ class PreferencesAccountDetails extends Component {
_onContactSupport = () => { _onContactSupport = () => {
const {shell} = require("electron"); const {shell} = require("electron");
shell.openExternal("https://support.getmerani.com/hc/en-us/requests/new"); shell.openExternal("https://support.getmailspring.com/hc/en-us/requests/new");
} }
// Renderers // Renderers
@@ -149,21 +149,21 @@ class PreferencesAccountDetails extends Component {
switch (account.syncState) { switch (account.syncState) {
case Account.N1_Cloud_AUTH_FAILED: case Account.N1_Cloud_AUTH_FAILED:
return this._renderErrorDetail( return this._renderErrorDetail(
`Merani can no longer authenticate with Merani cloud services for `Mailspring can no longer authenticate with Mailspring cloud services for
${account.emailAddress}. The password or authentication may ${account.emailAddress}. The password or authentication may
have changed.`, have changed.`,
"Reconnect", "Reconnect",
this._onReconnect); this._onReconnect);
case Account.SYNC_STATE_AUTH_FAILED: case Account.SYNC_STATE_AUTH_FAILED:
return this._renderErrorDetail( return this._renderErrorDetail(
`Merani can no longer authenticate with ${account.emailAddress}. The password `Mailspring can no longer authenticate with ${account.emailAddress}. The password
or authentication may have changed.`, or authentication may have changed.`,
"Reconnect", "Reconnect",
this._onReconnect); this._onReconnect);
default: default:
return this._renderErrorDetail( return this._renderErrorDetail(
`Merani encountered an error while syncing mail for ${account.emailAddress}. `Mailspring encountered an error while syncing mail for ${account.emailAddress}.
Try re-adding the account and contact Merani support if the problem persists.`, Try re-adding the account and contact Mailspring support if the problem persists.`,
"Contact support", "Contact support",
this._onContactSupport); this._onContactSupport);
} }

View File

@@ -38,14 +38,14 @@ class PreferencesIdentity extends React.Component {
} }
_renderBasic() { _renderBasic() {
const learnMore = () => shell.openExternal("https://getmerani.com/pro") const learnMore = () => shell.openExternal("https://getmailspring.com/pro")
return ( return (
<div className="row padded"> <div className="row padded">
<div> <div>
You are using <strong>Merani Basic</strong>. Upgrade to Merani Pro to unlock a more powerful email experience. You are using <strong>Mailspring Basic</strong>. Upgrade to Mailspring Pro to unlock a more powerful email experience.
</div> </div>
<div className="subscription-actions"> <div className="subscription-actions">
<div className="btn btn-emphasis" onClick={this._onUpgrade} style={{verticalAlign: "top"}}>Upgrade to Merani Pro</div> <div className="btn btn-emphasis" onClick={this._onUpgrade} style={{verticalAlign: "top"}}>Upgrade to Mailspring Pro</div>
<div className="btn minor-width" onClick={learnMore}>Learn More</div> <div className="btn minor-width" onClick={learnMore}>Learn More</div>
</div> </div>
</div> </div>
@@ -54,12 +54,12 @@ class PreferencesIdentity extends React.Component {
_renderPaidPlan(planName, effectivePlanName) { _renderPaidPlan(planName, effectivePlanName) {
const unpaidNote = (effectivePlanName !== planName) && ( const unpaidNote = (effectivePlanName !== planName) && (
<p>{`Note: Due to issues with your most recent payment, you've been temporarily downgraded to Merani ${effectivePlanName}. Click 'Billing' below to correct the issue.`}</p> <p>{`Note: Due to issues with your most recent payment, you've been temporarily downgraded to Mailspring ${effectivePlanName}. Click 'Billing' below to correct the issue.`}</p>
) )
return ( return (
<div className="row padded"> <div className="row padded">
<div> <div>
Thank you for using <strong style={{textTransform: 'capitalize'}}>{`Merani ${planName}`}</strong> and supporting independent software. Thank you for using <strong style={{textTransform: 'capitalize'}}>{`Mailspring ${planName}`}</strong> and supporting independent software.
{unpaidNote} {unpaidNote}
</div> </div>
<div className="subscription-actions"> <div className="subscription-actions">

View File

@@ -43,7 +43,7 @@ class DefaultMailClientItem extends React.Component {
checked={this.state.defaultClient} checked={this.state.defaultClient}
onChange={this.toggleDefaultMailClient} onChange={this.toggleDefaultMailClient}
/> />
<label htmlFor="default-client">Use Merani as default mail client</label> <label htmlFor="default-client">Use Mailspring as default mail client</label>
</div> </div>
); );
} }

View File

@@ -7,6 +7,6 @@
"syncInit": true, "syncInit": true,
"private": true, "private": true,
"engines": { "engines": {
"merani": "*" "mailspring": "*"
} }
} }

View File

@@ -6,7 +6,7 @@
"license": "GPL-3.0", "license": "GPL-3.0",
"private": true, "private": true,
"engines": { "engines": {
"merani": "*" "mailspring": "*"
}, },
"windowTypes": { "windowTypes": {
"default": true, "default": true,

View File

@@ -142,7 +142,7 @@ export function removeTrackingPixels(message) {
// Remove Nylas read receipt pixels for the current account. If this is a // Remove Nylas read receipt pixels for the current account. If this is a
// reply, our read receipt could still be in the body and could trigger // reply, our read receipt could still be in the body and could trigger
// additional opens. (isFromMe is not sufficient!) // additional opens. (isFromMe is not sufficient!)
if (imageURL.indexOf(`getmerani.com/open/${message.accountId}`) >= 0) { if (imageURL.indexOf(`getmailspring.com/open/${message.accountId}`) >= 0) {
return true; return true;
} }
return false; return false;

View File

@@ -4,7 +4,7 @@
"main": "./lib/main", "main": "./lib/main",
"license": "GPL-3.0", "license": "GPL-3.0",
"engines": { "engines": {
"merani": "*" "mailspring": "*"
}, },
"windowTypes": { "windowTypes": {
"default": true, "default": true,

View File

@@ -5,16 +5,16 @@ could you please put me in touch with them, so that we can get you guys set up
correctly as soon as possible?</p><p>Thanks!</p><p>Gleb Polyakov</p><p>Head of correctly as soon as possible?</p><p>Thanks!</p><p>Gleb Polyakov</p><p>Head of
Business Development and Growth</p>After Pixel Business Development and Growth</p>After Pixel
<br><br><signature>Sent from <a href="https://getmerani.com/?ref=client">Merani</a>, the extensible, open source mail client.<br/></signature><div class="gmail_quote"> <br><br><signature>Sent from <a href="https://getmailspring.com/?ref=client">Mailspring</a>, the extensible, open source mail client.<br/></signature><div class="gmail_quote">
On Apr 28 2016, at 2:14 pm, Ben Gotow (Careless) &lt;careless@foundry376.com&gt; wrote: On Apr 28 2016, at 2:14 pm, Ben Gotow (Careless) &lt;careless@foundry376.com&gt; wrote:
<br> <br>
<blockquote class="gmail_quote" <blockquote class="gmail_quote"
style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"> style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<body>nother mailA<br /><br />Sent from <a href="https://link.getmerani.com/link/b5djvgcuhj6i3x8nm53d0vnjm/local-a84ad76e-006b/0?redirect=https%3A%2F%2Fnylas.com%2Fn1%3Fref%3Dn1">Merani</a>, the extensible, open source mail client.<br /><img width="0" height="0" style="border:0; width:0; height:0;" src="https://link.getmerani.com/open/b5djvgcuhj6i3x8nm53d0vnjm/local-a84ad76e-006b" /><div> <body>nother mailA<br /><br />Sent from <a href="https://link.getmailspring.com/link/b5djvgcuhj6i3x8nm53d0vnjm/local-a84ad76e-006b/0?redirect=https%3A%2F%2Fnylas.com%2Fn1%3Fref%3Dn1">Mailspring</a>, the extensible, open source mail client.<br /><img width="0" height="0" style="border:0; width:0; height:0;" src="https://link.getmailspring.com/open/b5djvgcuhj6i3x8nm53d0vnjm/local-a84ad76e-006b" /><div>
On Apr 28 2016, at 1:46 pm, Ben Gotow (Careless) &lt;careless@foundry376.com&gt; wrote: On Apr 28 2016, at 1:46 pm, Ben Gotow (Careless) &lt;careless@foundry376.com&gt; wrote:
<br /> <br />
<blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"> <blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Hi Ben this is just a test.<br /><br />Sent from <a href="https://link.getmerani.com/link/b5djvgcuhj6i3x8nm53d0vnjm/local-aa39d95b-b883/0?redirect=https%3A%2F%2Fnylas.com%2Fn1%3Fref%3Dn1">Merani</a>, the extensible, open source mail client.<br /><img width="0" height="0" style="border:0; width:0; height:0;" src="https://link.getmerani.com/open/b5djvgcuhj6i3x8nm53d0vnjm/local-aa39d95b-b883" /><div> Hi Ben this is just a test.<br /><br />Sent from <a href="https://link.getmailspring.com/link/b5djvgcuhj6i3x8nm53d0vnjm/local-aa39d95b-b883/0?redirect=https%3A%2F%2Fnylas.com%2Fn1%3Fref%3Dn1">Mailspring</a>, the extensible, open source mail client.<br /><img width="0" height="0" style="border:0; width:0; height:0;" src="https://link.getmailspring.com/open/b5djvgcuhj6i3x8nm53d0vnjm/local-aa39d95b-b883" /><div>
On Apr 26 2016, at 6:03 pm, Ben Gotow &lt;bengotow@gmail.com&gt; wrote: On Apr 26 2016, at 6:03 pm, Ben Gotow &lt;bengotow@gmail.com&gt; wrote:
<br /> <br />
<blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"> <blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

View File

@@ -5,16 +5,16 @@ could you please put me in touch with them, so that we can get you guys set up
correctly as soon as possible?</p><p>Thanks!</p><p>Gleb Polyakov</p><p>Head of correctly as soon as possible?</p><p>Thanks!</p><p>Gleb Polyakov</p><p>Head of
Business Development and Growth</p><img src="https://sdr.salesloft.com/email_trackers/8c8bea88-af43-4f66-bf78-a97ad73d7aec/open.gif" alt="" width="1" height="1">After Pixel Business Development and Growth</p><img src="https://sdr.salesloft.com/email_trackers/8c8bea88-af43-4f66-bf78-a97ad73d7aec/open.gif" alt="" width="1" height="1">After Pixel
<br><br><signature>Sent from <a href="https://getmerani.com/?ref=client">Merani</a>, the extensible, open source mail client.<br/></signature><div class="gmail_quote"> <br><br><signature>Sent from <a href="https://getmailspring.com/?ref=client">Mailspring</a>, the extensible, open source mail client.<br/></signature><div class="gmail_quote">
On Apr 28 2016, at 2:14 pm, Ben Gotow (Careless) &lt;careless@foundry376.com&gt; wrote: On Apr 28 2016, at 2:14 pm, Ben Gotow (Careless) &lt;careless@foundry376.com&gt; wrote:
<br> <br>
<blockquote class="gmail_quote" <blockquote class="gmail_quote"
style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"> style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<body>nother mailA<br /><br />Sent from <a href="https://link.getmerani.com/link/b5djvgcuhj6i3x8nm53d0vnjm/local-a84ad76e-006b/0?redirect=https%3A%2F%2Fnylas.com%2Fn1%3Fref%3Dn1">Merani</a>, the extensible, open source mail client.<br /><img width="0" height="0" style="border:0; width:0; height:0;" src="https://link.getmerani.com/open/b5djvgcuhj6i3x8nm53d0vnjm/local-a84ad76e-006b" /><div> <body>nother mailA<br /><br />Sent from <a href="https://link.getmailspring.com/link/b5djvgcuhj6i3x8nm53d0vnjm/local-a84ad76e-006b/0?redirect=https%3A%2F%2Fnylas.com%2Fn1%3Fref%3Dn1">Mailspring</a>, the extensible, open source mail client.<br /><img width="0" height="0" style="border:0; width:0; height:0;" src="https://link.getmailspring.com/open/b5djvgcuhj6i3x8nm53d0vnjm/local-a84ad76e-006b" /><div>
On Apr 28 2016, at 1:46 pm, Ben Gotow (Careless) &lt;careless@foundry376.com&gt; wrote: On Apr 28 2016, at 1:46 pm, Ben Gotow (Careless) &lt;careless@foundry376.com&gt; wrote:
<br /> <br />
<blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"> <blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Hi Ben this is just a test.<br /><br />Sent from <a href="https://link.getmerani.com/link/b5djvgcuhj6i3x8nm53d0vnjm/local-aa39d95b-b883/0?redirect=https%3A%2F%2Fnylas.com%2Fn1%3Fref%3Dn1">Merani</a>, the extensible, open source mail client.<br /><img width="0" height="0" style="border:0; width:0; height:0;" src="https://link.getmerani.com/open/b5djvgcuhj6i3x8nm53d0vnjm/local-aa39d95b-b883" /><div> Hi Ben this is just a test.<br /><br />Sent from <a href="https://link.getmailspring.com/link/b5djvgcuhj6i3x8nm53d0vnjm/local-aa39d95b-b883/0?redirect=https%3A%2F%2Fnylas.com%2Fn1%3Fref%3Dn1">Mailspring</a>, the extensible, open source mail client.<br /><img width="0" height="0" style="border:0; width:0; height:0;" src="https://link.getmailspring.com/open/b5djvgcuhj6i3x8nm53d0vnjm/local-aa39d95b-b883" /><div>
On Apr 26 2016, at 6:03 pm, Ben Gotow &lt;bengotow@gmail.com&gt; wrote: On Apr 26 2016, at 6:03 pm, Ben Gotow &lt;bengotow@gmail.com&gt; wrote:
<br /> <br />
<blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"> <blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

View File

@@ -1,6 +1,6 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><p>Hey Ben,</p><p> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"><p>Hey Ben,</p><p>
This is the reply! This tracking pixel should not be removed. This is the reply! This tracking pixel should not be removed.
<img src="https://getmerani.com/open/abcd/zza1231231" /> <img src="https://getmailspring.com/open/abcd/zza1231231" />
<blockquote> <blockquote>
This is the email I sent! This is the email I sent!

View File

@@ -1,8 +1,8 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><p>Hey Ben,</p><p> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"><p>Hey Ben,</p><p>
This is the reply! This tracking pixel should not be removed. This is the reply! This tracking pixel should not be removed.
<img src="https://getmerani.com/open/abcd/zza1231231" /> <img src="https://getmailspring.com/open/abcd/zza1231231" />
<blockquote> <blockquote>
This is the email I sent! This is the email I sent!
<img src="https://getmerani.com/open/1234/12zxczxc123" /> <img src="https://getmailspring.com/open/1234/12zxczxc123" />
</blockquote> </blockquote>
</div> </div>

View File

@@ -2,33 +2,33 @@
font-family: 'Nylas-Pro'; font-family: 'Nylas-Pro';
font-style: normal; font-style: normal;
font-weight: 200; font-weight: 200;
src: url('merani://screenshot-mode/assets/BLOKKNeue-Regular.otf'); src: url('mailspring://screenshot-mode/assets/BLOKKNeue-Regular.otf');
} }
@font-face { @font-face {
font-family: 'Nylas-Pro'; font-family: 'Nylas-Pro';
font-style: normal; font-style: normal;
font-weight: 300; font-weight: 300;
src: url('merani://screenshot-mode/assets/BLOKKNeue-Regular.otf'); src: url('mailspring://screenshot-mode/assets/BLOKKNeue-Regular.otf');
} }
@font-face { @font-face {
font-family: 'Nylas-Pro'; font-family: 'Nylas-Pro';
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
src: url('merani://screenshot-mode/assets/BLOKKNeue-Regular.otf'); src: url('mailspring://screenshot-mode/assets/BLOKKNeue-Regular.otf');
} }
@font-face { @font-face {
font-family: 'Nylas-Pro'; font-family: 'Nylas-Pro';
font-style: normal; font-style: normal;
font-weight: 500; font-weight: 500;
src: url('merani://screenshot-mode/assets/BLOKKNeue-Regular.otf'); src: url('mailspring://screenshot-mode/assets/BLOKKNeue-Regular.otf');
} }
@font-face { @font-face {
font-family: 'Nylas-Pro'; font-family: 'Nylas-Pro';
font-style: normal; font-style: normal;
font-weight: 600; font-weight: 600;
src: url('merani://screenshot-mode/assets/BLOKKNeue-Regular.otf'); src: url('mailspring://screenshot-mode/assets/BLOKKNeue-Regular.otf');
} }

View File

@@ -6,7 +6,7 @@
"license": "Proprietary", "license": "Proprietary",
"private": true, "private": true,
"engines": { "engines": {
"merani": "*" "mailspring": "*"
}, },
"windowTypes": { "windowTypes": {
"all": true "all": true

View File

@@ -12,7 +12,7 @@ export const name = 'SendAndArchiveExtension'
export function sendActions() { export function sendActions() {
return [{ return [{
title: 'Send and Archive', title: 'Send and Archive',
iconUrl: 'merani://send-and-archive/images/composer-archive@2x.png', iconUrl: 'mailspring://send-and-archive/images/composer-archive@2x.png',
isAvailableForDraft({draft}) { isAvailableForDraft({draft}) {
return draft.threadId != null return draft.threadId != null
}, },

Some files were not shown because too many files have changed in this diff Show More