   # ------------------
 
   sync: ->
-    fs.makeTreeSync(@physicalRoot) unless fs.existsSync(@physicalRoot)
-    @tree.getPathsToRemove().forEach (path) -> shell.moveItemToTrash(path)
-    @tree.getPathsToSync().then (paths) => @fetch(paths)
+    @send {command: 'sync'}
 
   fetch: (paths) ->
     pathsToFetch = paths.map (path) => @convert.localToRemote(path)

    path = @convert.remoteToLocal(path)
    @treeView()?.selectEntryForPath(path)

  onFetch: ({path, attributes, contents}) =>
    # TODO: preserve full stats
    localPath = @convert.remoteToLocal(path)
    dirname = _path.dirname(localPath)

    decoded = new Buffer(contents, 'base64').toString('utf8')
    fs.writeFile(localPath, decoded)

  onRecievedRescue: ({message, backtrace}) ->
    console.log 'RESCUE:', message, backtrace

  # ------------------
