1102 Commits

Author SHA1 Message Date
Juan Cruz Viotti
51b6de4634 Show an informative label if a drive is not large enough (#474)
This is a huge improvement over our current approach, which was simply
to cross out the drive without further explanation.

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-06-11 13:52:38 -04:00
Juan Cruz Viotti
dc7b31f061 Apply checksum label padding as a custom modifier (#473)
We want to re-use the `label` component without big paddings in other
areas of the application, therefore we move the custom padding to a
separate label modifier.

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-06-11 13:44:02 -04:00
Juan Cruz Viotti
608cb5d74a Cleanup CSS (#471)
This is by no means a complete CSS refactoring. There still a lot to be
done. This encompasses mostly:

- Move "Finish page" specific styles to that module.
- Remove unused CSS rules.
- Move generic Bootstrap rules to `_bootstrap.scss`.

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-06-11 13:21:22 -04:00
Juan Cruz Viotti
f674f3d706 Fix image containing dots in the filename considered unsupported (#468)
Currently, we detect the extensions of an image path by finding the
first dot, and splitting everything afterwards, however this will fail
with image paths containing dots, like `foo.1.2.3-bar.iso.gz`.

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-06-10 10:19:26 -04:00
Juan Cruz Viotti
5ae5a1915d Refactor supported image logic to SupportedFormatsModel (#467)
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-06-09 13:08:01 -04:00
Juan Cruz Viotti
b950136deb Extract DrivesModel from DriveScannerService (#466)
Currently, `DriveScannerService` is in charge of both scanning the
available drives and maintaining the state of the currently detected
drives.

To honour the single responsibility principle, we split this service
into a `DrivesModel`, which is incharge of maintaining the state without
caring how they are detected, and `DriveScannerService`, which only
scans the available drives and modified `DrivesModel` accordingly.

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-06-09 12:42:09 -04:00
Juan Cruz Viotti
fc6ccf70dd Prevent selection of invalid images (#462)
The user might attempt to select an invalid image by dropping on the
first step, which would cause Etcher to blindly select it, possibly
causing errors later on the process.

This PR makes use of the list of supported extensions provided by
`SupportedFormatsModel` and prevents the selection if necessary, logging
an event that might help us determine which unsupported image types
users try to burn most often.

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-06-08 15:49:55 -04:00
Juan Cruz Viotti
0557c45102 Link README to the roadmap (#463)
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-06-08 15:49:49 -04:00
Juan Cruz Viotti
7d5f42f38c Try to get more information about error messages (#464)
If the error object is not well-formed, try to get as most information
about it as we can instead of just realying on generic error messages.

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-06-08 15:49:42 -04:00
Juan Cruz Viotti
f2a8860135 Fix package.json key/property spacing (#461)
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-06-08 13:36:00 -04:00
Juan Cruz Viotti
8de4be1897 Display ETA during flash and check (#460)
* Show speed during check

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>

* Display ETA during flash and check

Fixes: https://github.com/resin-io/etcher/issues/256
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-06-08 13:35:44 -04:00
Juan Cruz Viotti
ef82c2f09b Update Appveyor badge (#457)
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-06-08 13:19:11 -04:00
Juan Cruz Viotti
0c94de7fcf Prevent exernal resources from being loaded by the WebView (#456)
If a user drags and drops an image, an HTML file, or other resource the
WebView understands, Electron will navigate away from the application
and load it up in the WebView, making the application unusable unless
the user restarts it.

Fixes: https://github.com/resin-io/etcher/issues/430
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-06-08 11:10:46 -04:00
Juan Cruz Viotti
6c936a5192 Document can-ignore module.require annotation (#455)
* Document `can-ignore` module.require annotation

This annotation was introduced in: 1872d1f

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>

* Trigger CI build
2016-06-08 11:10:32 -04:00
Igor Klopov
a27e246cc9 Annotation for EncloseJS to ignore missing dependency (#454) 2016-06-07 14:52:51 -04:00
Juan Cruz Viotti
11fb499344 Upgrade drivelist to v3.1.2 (#450)
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-06-07 10:56:36 -04:00
Juan Cruz Viotti
052bb00be9 Fix CI tests (#452)
- Fix lint warning.
- Set the correct electron version in `appveyor.yml`

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-06-06 18:12:38 -04:00
Juan Cruz Viotti
dd6182ceb3 Write a document explaining Etcher's architecture (#447)
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-06-06 17:52:18 -04:00
Juan Cruz Viotti
31728801f5 Don't show a progress bar in update notifier modal (#445)
Fixes: https://github.com/resin-io/etcher/issues/442
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-05-26 21:18:13 -04:00
Juan Cruz Viotti
b14e94fc3b Fix GNU/Linux not opening an external resource when elevated (#446)
We currently had a workaround in place to make use of `node-open`
instead of Electron's built-in `shell` module since the latter didn't
work on older Electron versions on GNU/Linux for some reason.

After some experimentation, `node-open` doesn't seem to be working for
elevated applications anymore. I honestly didn't chase the issue further
since Electron `shell` has been fixed, and works fine when elevated,
therefore this PR basically undoes the previous workaround.

Fixes: https://github.com/resin-io/etcher/issues/443
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-05-26 21:18:03 -04:00
Juan Cruz Viotti
28e6cb3f79 Create docs/MAINTAINERS.md (#441)
This document will evolve as a guide for maintainers to perform all
sorts of common tasks.

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-05-26 16:13:50 -04:00
Juan Cruz Viotti
94bd796daa v1.0.0-beta.7
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
v1.0.0-beta.7
2016-05-26 10:12:04 -04:00
Juan Cruz Viotti
efe931cae5 Upgrade drivelist to v3.1.1 (#438)
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-05-26 10:09:53 -04:00
Juan Cruz Viotti
bedda41843 Provide a GUI elevation dialog for GNU/Linux (#440)
Fixes: https://github.com/resin-io/etcher/issues/439
Fixes: https://github.com/resin-io/etcher/issues/412
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-05-26 10:04:23 -04:00
Juan Cruz Viotti
e9164df384 Install NPM dev dependencies during the build (#437)
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-05-24 15:35:56 -04:00
Juan Cruz Viotti
7d0ea21567 Run linter as part of npm test (#436)
* Fix lint warnings

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>

* Run linter as part of `npm test`

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-05-24 15:35:51 -04:00
Juan Cruz Viotti
abb7dc6469 Prevent pressing "space" to re-click the "Flash" button (#435)
Currently we disable pointer events on the "Flash" button once a flash
is in progress to prevent the user from clicking it, but we didn't
consider that if the user kept focus on the button, he can press the
"space" bar for the same effect.

Fixes: https://github.com/resin-io/etcher/issues/431
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-05-24 14:21:31 -04:00
Juan Cruz Viotti
c8edafdad8 Upgrade CI servers NodeJS version (#434)
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-05-24 14:21:23 -04:00
Juan Cruz Viotti
6af2bd0d30 Prevent global shorcuts from interferring with other applications (#433)
Fixes: https://github.com/resin-io/etcher/issues/389
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-05-24 12:40:25 -04:00
Juan Cruz Viotti
2948d13075 Fix image drag and drop not working anymore (#432)
There has been changes in the model regarding with how the image
information was stored, and the dropzone directive was never modified to
comply with those changes.

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-05-24 11:52:50 -04:00
Juan Cruz Viotti
3b30748b1f Add support for .gz and .bz2 (#419)
See: https://github.com/resin-io/etcher/issues/325
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-05-24 10:38:12 -04:00
Juan Cruz Viotti
c1074de198 Upgrade electron to v1.1.1 (#427)
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-05-24 10:37:31 -04:00
Juan Cruz Viotti
d9f6c1b838 Add instructions to configure NPM for installation (#429)
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-05-24 10:37:12 -04:00
Juan Cruz Viotti
f4d9de850c Fix indentation in build scripts (#428)
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-05-23 14:27:03 -04:00
Juan Cruz Viotti
94e209ac80 Install dev dependencies before calling electron-builder on Windows (#426)
Since the addition of a patch to only install production dependencies on
build scripts, the Windows build would fail when reaching to
`electron-builder`, since this dependency might not be installed at that
point.

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-05-22 22:45:06 -04:00
Juan Cruz Viotti
9c755fbb53 Override files if needed in the build scripts (#425)
This allows the users to continuously run the build script without
having to remove `etcher-release` or certain files inside that directory
to prevent silly "file exists" errors.

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-05-22 22:44:59 -04:00
Juan Cruz Viotti
78fc028ae0 Only install production dependencies from build scripts (#424)
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-05-22 21:43:27 -04:00
Juan Cruz Viotti
b061c116da Enforce expected NodeJS version in build scripts (#422)
Not building Etcher with the exact NodeJS version bundled with Electron
can cause all sorts of weird issues. This was previously documented, but
its now enforced so Etcher packagers don't forget by accident.

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-05-20 10:51:09 -04:00
Juan Cruz Viotti
e1a3c88b10 Display image checksum on success in the CLI (#417)
* Upgrade etcher-image-write to v5.0.0

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>

* Display image CRC32 checksum on success

Fixes: http://github.com/resin-io/etcher/issues/357
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-05-19 10:13:10 -04:00
Alexandros Marinos
198d24741a make inbound links from the etcher app traceable in resin's analytics (#411) 2016-05-15 21:33:59 -04:00
Juan Cruz Viotti
35f42665d2 Call packageignore.js after depencies have been installed in Windows (#409)
Otherwise, dependencies used by `packageignore.js`, like Lodash, could
not be found.

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-05-13 17:54:43 -04:00
Juan Cruz Viotti
15752b2efb v1.0.0-beta.6
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
v1.0.0-beta.6
2016-05-12 17:14:19 -04:00
Juan Cruz Viotti
bf37ee72df Prevent selection of drives that are not large enough (#408)
* Make .selectImage() dialog return an object with a `path` property

This allows to return more than one value for the selected image,
like image size and other metadata for example.

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>

* Return image size from .selectImage() dialog

This property will be useful to perform some sanity checks, like
ensuring the selected drive is large enough to contain the image.

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>

* Store both the image path and the image size in the selection model

In order to simplify accessing such properties in an encapsulated
manner, `SelectionStateModel.getImage()` was replaced with the following
functions:

- `SelectionStateModel.getImagePath()`.
- `SelectionStateModel.getImageSize()`.

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>

* Increase SelectionStateModel setter validation

The model not providing any kind of validation was the source of some
bugs I encountered while implementing the previous commits that would
not have happened otherwise.

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>

* Prevent selection of drives that are not large enough

- The drive selector modal was modified such that drives that are not
large enough are crossed out, and the user is not able to click them.

- In the case of drive auto-selection, not large enough drives won't
attempt to get autoselected.

This commit introduces:

- The `SelectionStateModel.isDriveLargeEnough()` function.

Fixes: https://github.com/resin-io/etcher/issues/344
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-05-12 15:38:19 -04:00
Juan Cruz Viotti
c31ccdbdbe Move the code that performs the writing to lib/cli (#407)
The CLI is the only entity that calls it directly.

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-05-12 15:16:15 -04:00
Juan Cruz Viotti
a4e2639c00 Implement update notifier modal (#406)
Auto-update functionality is not ready for usage. As a workaround to
prevent users staying with older versions, we now check for updates at
startup, and if the user is not running the latest version, we present a
modal informing the user of the availiblity of a new version, and
provide a call to action to open the Etcher website in his web browser.

Extra features:

- The user can skip the update, and tell the program to delay the
notification for 7 days.

Misc changes:

- Center modal with flexbox, to allow more flexibility on the modal height.
interacting with the S3 server.
- Implement `ManifestBindService`, which now serves as a backend for the
`manifest-bind` directive to allow the directive's functionality to be
re-used by other services.
- Namespace checkbox styles that are specific to the settings page.

Fixes: https://github.com/resin-io/etcher/issues/396
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-05-12 13:11:30 -04:00
Juan Cruz Viotti
662c589ab9 Implement writing by spawning the CLI as a child process (#400)
After this change, the CLI becomes the only entity actually performing
I/O with the devices, and the GUI is just a wrapper around it.

When you click "Flash", the GUI spawns the CLI with all the appropriate
options, including `--ipc`, which uses an IPC communication channel to
report status back to the parent process.

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-05-11 17:52:09 -04:00
Juan Cruz Viotti
f365f2fa57 Group documentation in a docs/ directory (#405)
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-05-11 12:46:27 -04:00
Juan Cruz Viotti
883cae0d87 Remove implicit "Enable" from settings items (#404)
The fact that there is a checkbox at the left of the items already makes
clear the ticking them enables the setting.

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-05-11 09:25:36 -04:00
Juan Cruz Viotti
9c555fd1c9 Set mocha reporter to min (#403)
Fancier reporters are not shown correctly on CI servers.

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-05-10 16:10:05 -04:00
Juan Cruz Viotti
d36509d995 Implement cross-platform build scripts (#395)
With the addition of native addons to Etcher, its no longer possible to
package the application for all operating system in a single host.

Given we need to build on Windows, we're creating cross-platform bash
and batch scripts and deprecating the original Makefile.

Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
2016-05-10 16:07:18 -04:00