diff --git a/src/app.js b/src/app.js index f532ed5cf8..be27986b50 100644 --- a/src/app.js +++ b/src/app.js @@ -122,6 +122,7 @@ var css = csjs` class App { constructor (api = {}, events = {}, opts = {}) { var self = this + self.appManager = new RemixAppManager({}) self._components = {} self._view = {} self._view.splashScreen = yo` @@ -142,18 +143,17 @@ class App { registry.put({api: config, name: 'config'}) // load file system - self.appManager = new RemixAppManager({}) self._components.filesProviders = {} self._components.filesProviders['browser'] = new FileProvider('browser') registry.put({api: self._components.filesProviders['browser'], name: 'fileproviders/browser'}) - // var remixd = new Remixd(65520) - // registry.put({api: remixd, name: 'remixd'}) - // remixd.event.register('system', (message) => { - // if (message.error) toolTip(message.error) - // }) + var remixd = new Remixd(65520) + registry.put({api: remixd, name: 'remixd'}) + remixd.event.register('system', (message) => { + if (message.error) toolTip(message.error) + }) - self._components.filesProviders['localhost'] = new RemixDProvider(self.appManager) + self._components.filesProviders['localhost'] = new RemixDProvider(remixd, self.appManager) registry.put({api: self._components.filesProviders['localhost'], name: 'fileproviders/localhost'}) registry.put({api: self._components.filesProviders, name: 'fileproviders'}) diff --git a/src/app/files/remixDProvider.js b/src/app/files/remixDProvider.js index 84651b3aba..894a1a3fd1 100644 --- a/src/app/files/remixDProvider.js +++ b/src/app/files/remixDProvider.js @@ -3,10 +3,11 @@ var EventManager = require('../../lib/events') var pathtool = require('path') module.exports = class RemixDProvider { - constructor (appManager) { - this._appManager = appManager - this.remixd = remixapi(appManager, this) + constructor (remixd, appManager) { this.event = new EventManager() + this._remixd = remixd + this._appManager = appManager + this.remixd = remixapi(remixd, this) this.type = 'localhost' this.error = { 'EEXIST': 'File already exists' } this._isReady = false @@ -17,37 +18,37 @@ module.exports = class RemixDProvider { var remixdEvents = ['connecting', 'connected', 'errored', 'closed'] remixdEvents.forEach((value) => { - // remixd.event.register(value, (event) => { - // this.event.trigger(value, [event]) - // }) + remixd.event.register(value, (event) => { + this.event.trigger(value, [event]) + }) }) - // remixd.event.register('notified', (data) => { - // if (data.scope === 'sharedfolder') { - // if (data.name === 'created') { - // this.init(() => { - // this.event.trigger('fileAdded', [this.type + '/' + data.value.path, data.value.isReadOnly, data.value.isFolder]) - // }) - // } else if (data.name === 'removed') { - // this.init(() => { - // this.event.trigger('fileRemoved', [this.type + '/' + data.value.path]) - // }) - // } else if (data.name === 'changed') { - // this._appManager.call('sharedfolder', 'get', {path: data.value}, (error, content) => { - // if (error) { - // console.log(error) - // } else { - // var path = this.type + '/' + data.value - // this.filesContent[path] = content - // this.event.trigger('fileExternallyChanged', [path, content]) - // } - // }) - // } else if (data.name === 'rootFolderChanged') { - // // new path has been set, we should reset - // this.event.trigger('folderAdded', [this.type + '/']) - // } - // } - // }) + remixd.event.register('notified', (data) => { + if (data.scope === 'sharedfolder') { + if (data.name === 'created') { + this.init(() => { + this.event.trigger('fileAdded', [this.type + '/' + data.value.path, data.value.isReadOnly, data.value.isFolder]) + }) + } else if (data.name === 'removed') { + this.init(() => { + this.event.trigger('fileRemoved', [this.type + '/' + data.value.path]) + }) + } else if (data.name === 'changed') { + this._appManager.call('remixd', 'get', {path: data.value}, (error, content) => { + if (error) { + console.log(error) + } else { + var path = this.type + '/' + data.value + this.filesContent[path] = content + this.event.trigger('fileExternallyChanged', [path, content]) + } + }) + } else if (data.name === 'rootFolderChanged') { + // new path has been set, we should reset + this.event.trigger('folderAdded', [this.type + '/']) + } + } + }) } isConnected () { @@ -55,17 +56,18 @@ module.exports = class RemixDProvider { } close (cb) { - this.remixd.exit() this._isReady = false cb() } async init (cb) { - const result = await this._appManager.call('remixdWebsocketPlugin', 'folderIsReadOnly', {}) - this._readOnlyMode = result + this._isReady = true + this._readOnlyMode = await this._appManager.call('remixd', 'folderIsReadOnly', {}) + console.log('this._readOnlyMode: ', this._readOnlyMode) + cb() } - // @TODO: refactor all `this._appManager.call(....)` uses into `this.remixd[api](...)` + // @TODO: refactor all `this._remixd.call(....)` uses into `this.remixd[api](...)` // where `api = ...`: // this.remixd.read(path, (error, content) => {}) // this.remixd.write(path, content, (error, result) => {}) @@ -77,7 +79,7 @@ module.exports = class RemixDProvider { async exists (path, cb) { const unprefixedpath = this.removePrefix(path) - const callId = await this._appManager.call('sharedfolder', 'exists', {path: unprefixedpath}) + const callId = await this._appManager.call('remixd', 'exists', {path: unprefixedpath}) const result = await this._appManager.receiveResponse(callId) return cb(null, result) @@ -93,7 +95,7 @@ module.exports = class RemixDProvider { get (path, cb) { var unprefixedpath = this.removePrefix(path) - this._appManager.call('sharedfolder', 'get', {path: unprefixedpath}, (error, file) => { + this._appManager.call('remixd', 'get', {path: unprefixedpath}, (error, file) => { if (!error) { this.filesContent[path] = file.content if (file.readonly) { this._readOnlyFiles[path] = 1 } @@ -108,7 +110,7 @@ module.exports = class RemixDProvider { set (path, content, cb) { var unprefixedpath = this.removePrefix(path) - this._appManager.call('sharedfolder', 'set', {path: unprefixedpath, content: content}, (error, result) => { + this._appManager.call('remixd', 'set', {path: unprefixedpath, content: content}, (error, result) => { if (cb) return cb(error, result) var path = this.type + '/' + unprefixedpath this.event.trigger('fileChanged', [path]) @@ -122,7 +124,7 @@ module.exports = class RemixDProvider { async remove (path) { var unprefixedpath = this.removePrefix(path) - const callId = await this._appManager.call('sharedfolder', 'remove', {path: unprefixedpath}, (error, result) => { + const callId = await this._appManager.call('remixd', 'remove', {path: unprefixedpath}, (error, result) => { if (error) console.log(error) var path = this.type + '/' + unprefixedpath delete this.filesContent[path] @@ -137,7 +139,7 @@ module.exports = class RemixDProvider { rename (oldPath, newPath, isFolder) { var unprefixedoldPath = this.removePrefix(oldPath) var unprefixednewPath = this.removePrefix(newPath) - this._appManager.call('sharedfolder', 'rename', {oldPath: unprefixedoldPath, newPath: unprefixednewPath}, (error, result) => { + this._appManager.call('remixd', 'rename', {oldPath: unprefixedoldPath, newPath: unprefixednewPath}, (error, result) => { if (error) { console.log(error) if (this.error[error.code]) error = this.error[error.code] @@ -175,47 +177,46 @@ module.exports = class RemixDProvider { async isDirectory (path) { const unprefixedpath = this.removePrefix(path) - const callId = await this._appManager.call('sharedfolder', 'isDirectory', {path: unprefixedpath}) + const callId = await this._appManager.call('remixd', 'isDirectory', {path: unprefixedpath}) - return await this._appManager.receiveResponse(callId) + return await this._remixd.receiveResponse(callId) } async isFile (path) { const unprefixedpath = this.removePrefix(path) - const callId = await this._appManager.call('sharedfolder', 'isFile', {path: unprefixedpath}) + const callId = await this._appManager.call('remixd', 'isFile', {path: unprefixedpath}) - return await this._appManager.receiveResponse(callId) + return await this._remixd.receiveResponse(callId) } } -function remixapi (appManager, self) { +function remixapi (remixd, self) { const read = (path, callback) => { path = '' + (path || '') path = pathtool.join('./', path) - appManager.call('sharedfolder', 'get', { path }, (error, content) => callback(error, content)) + remixd.call('remixd', 'get', { path }, (error, content) => callback(error, content)) } const write = (path, content, callback) => { path = '' + (path || '') path = pathtool.join('./', path) - appManager.call('sharedfolder', 'set', { path, content }, (error, result) => callback(error, result)) + remixd.call('remixd', 'set', { path, content }, (error, result) => callback(error, result)) } const rename = (path, newpath, callback) => { path = '' + (path || '') path = pathtool.join('./', path) - appManager.call('sharedfolder', 'rename', { oldPath: path, newPath: newpath }, (error, result) => callback(error, result)) + remixd.call('remixd', 'rename', { oldPath: path, newPath: newpath }, (error, result) => callback(error, result)) } const remove = (path, callback) => { path = '' + (path || '') path = pathtool.join('./', path) - appManager.call('sharedfolder', 'remove', { path }, (error, result) => callback(error, result)) + remixd.call('remixd', 'remove', { path }, (error, result) => callback(error, result)) } const dir = (path, callback) => { path = '' + (path || '') path = pathtool.join('./', path) - appManager.call('sharedfolder', 'resolveDirectory', { path }, (error, filesList) => callback(error, filesList)) + remixd.call('remixd', 'resolveDirectory', { path }, (error, filesList) => callback(error, filesList)) } const exit = () => { remixd.close() } - // const api = { read, write, rename, remove, dir, exit, event: remixd.event } - const api = { read, write, rename, remove, dir, exit, event: self.event } + const api = { read, write, rename, remove, dir, exit, event: remixd.event } return api } diff --git a/src/app/files/remixd-handle.js b/src/app/files/remixd-handle.js index 16e7208e62..dc75a7cad2 100644 --- a/src/app/files/remixd-handle.js +++ b/src/app/files/remixd-handle.js @@ -20,7 +20,9 @@ var css = csjs` const profile = { name: 'remixd', + url: 'ws://127.0.0.1:65520', methods: ['folderIsReadOnly'], + events: [], description: 'Using Remixd daemon, allow to access file system', kind: 'other', version: packageJson.version @@ -35,12 +37,14 @@ export class RemixdHandle extends WebsocketPlugin { } deactivate () { + super.deactivate() this.locahostProvider.close((error) => { if (error) console.log(error) }) } - activate () { + async activate () { + await super.activate() this.connectToLocalhost() } diff --git a/src/lib/remixd.js b/src/lib/remixd.js index db789fc994..0fdb7fdb47 100644 --- a/src/lib/remixd.js +++ b/src/lib/remixd.js @@ -106,6 +106,7 @@ class Remixd { reject(error) return } + console.log('this.socket: ', this.socket) if (this.socket && this.socket.readyState === this.socket.OPEN) { var data = this.format(service, fn, args) this.callbacks[data.id] = callback