               return  # Ignore errors on readFile()
             )
           ).then((compare) =>
-            if !force and compareData?
+            if !force and compare?
               return if arrayEqual(new Uint8Array(content), new Uint8Array(compare))
+            written = true
             return boardFs.writeFile(item.path, content).then(=>
               item.setTransfered()
+            ).catch((error) =>
+              progress?(item.path, null, STEP_ABORTED, error)
+              return Promise.reject(error)
             )
           )
         ).then(=>
-          progress?(item.path, (100 * ++done / transferItems.length))
+          progress?(
+            item.path
+            (100 * ++done / transferItems.length)
+            if written then STEP_FINISHED else STEP_SKIPPED
+          )
           return
         )
       @_board.requestFileSystem("internal").then((fs) =>

    get: -> @_workspace
    set: (v) -> @_workspace = v
  )

  #--------------------------------------------------------------------------------
  # Events

    Build sketch
  @param {boolean} [force=false]
    Force build all files
  @param {function(string,number,number,Error)} [progress=null]
    Hook function for show progress
  @return {Promise}
    Promise object
