From be03cdd59a505e397184066154ffde99a9417144 Mon Sep 17 00:00:00 2001 From: yann300 Date: Mon, 19 Oct 2020 11:47:32 +0200 Subject: [PATCH] remove fileManager ref from the recorder modulr --- .../src/app/tabs/runTab/model/recorder.js | 64 ++++++++----------- .../remix-ide/src/app/tabs/runTab/recorder.js | 36 ++++++++--- apps/remix-ide/src/app/udapp/run-tab.js | 4 +- 3 files changed, 54 insertions(+), 50 deletions(-) diff --git a/apps/remix-ide/src/app/tabs/runTab/model/recorder.js b/apps/remix-ide/src/app/tabs/runTab/model/recorder.js index 9d8a38cec9..1980b9c68d 100644 --- a/apps/remix-ide/src/app/tabs/runTab/model/recorder.js +++ b/apps/remix-ide/src/app/tabs/runTab/model/recorder.js @@ -12,12 +12,11 @@ var helper = require('../../../../lib/helper.js') * */ class Recorder { - constructor (blockchain, fileManager) { + constructor (blockchain) { var self = this self.event = new EventManager() self.blockchain = blockchain self.data = { _listen: true, _replay: false, journal: [], _createdContracts: {}, _createdContractsReverse: {}, _usedAccounts: {}, _abis: {}, _contractABIReferences: {}, _linkReferences: {} } - this.fileManager = fileManager this.blockchain.event.register('initiatingTransaction', (timestamp, tx, payLoad) => { if (tx.useCall) return @@ -278,50 +277,37 @@ class Recorder { return address } - runScenario (file, continueCb, promptCb, alertCb, confirmationCb, logCallBack, cb) { - if (!file) { - return cb('file must be defined') + runScenario (json, continueCb, promptCb, alertCb, confirmationCb, logCallBack, cb) { + if (!json) { + return cb('a json content must be provided') } - if (!file.match('.json$')) { - return cb('A scenario file is required. Please make sure a scenario file is currently displayed in the editor. The file must be of type JSON. Use the "Save Transactions" Button to generate a new Scenario File.') - } - this.fileManager.readFile(file).then((json) => { + if (typeof json === 'string') { try { - var obj = JSON.parse(json) - var txArray = obj.transactions || [] - var accounts = obj.accounts || [] - var options = obj.options || {} - var abis = obj.abis || {} - var linkReferences = obj.linkReferences || {} + json = JSON.parse(json) } catch (e) { - return cb('Invalid Scenario File, please try again') - } + return cb('A scenario file is required. It must be json formatted') + } + } - if (!txArray.length) { - return - } + try { + var txArray = json.transactions || [] + var accounts = json.accounts || [] + var options = json.options || {} + var abis = json.abis || {} + var linkReferences = json.linkReferences || {} + } catch (e) { + return cb('Invalid Scenario File. Please try again') + } - this.run(txArray, accounts, options, abis, linkReferences, confirmationCb, continueCb, promptCb, alertCb, logCallBack, (abi, address, contractName) => { - cb(null, abi, address, contractName) - }) - }).catch((error) => cb(error)) - } + if (!txArray.length) { + return + } - saveScenario (promptCb, cb) { - var txJSON = JSON.stringify(this.getAll(), null, 2) - var path = this.fileManager.currentPath() - promptCb(path, input => { - var fileProvider = this.fileManager.fileProviderOf(path) - if (!fileProvider) return - var newFile = path + '/' + input - helper.createNonClashingName(newFile, fileProvider, (error, newFile) => { - if (error) return cb('Failed to create file. ' + newFile + ' ' + error) - if (!fileProvider.set(newFile, txJSON)) return cb('Failed to create file ' + newFile) - this.fileManager.open(newFile) - }) - }) + this.run(txArray, accounts, options, abis, linkReferences, confirmationCb, continueCb, promptCb, alertCb, logCallBack, (abi, address, contractName) => { + cb(null, abi, address, contractName) + }) + } - } module.exports = Recorder diff --git a/apps/remix-ide/src/app/tabs/runTab/recorder.js b/apps/remix-ide/src/app/tabs/runTab/recorder.js index a9db168d17..50dad3ae33 100644 --- a/apps/remix-ide/src/app/tabs/runTab/recorder.js +++ b/apps/remix-ide/src/app/tabs/runTab/recorder.js @@ -18,7 +18,8 @@ const profile = { class RecorderUI extends Plugin { - constructor (blockchain, recorder, logCallBack, config) { + constructor (blockchain, fileManager, recorder, logCallBack, config) { + this.fileManager = fileManager this.blockchain = blockchain this.recorder = recorder this.logCallBack = logCallBack @@ -76,14 +77,16 @@ class RecorderUI extends Plugin { const confirmationCb = this.getConfirmationCb(modalDialog, confirmDialog) - // TODO: there is still a UI dependency to remove here, it's still too coupled at this point to remove easily - this.recorder.runScenario(file, continueCb, promptCb, alertCb, confirmationCb, this.logCallBack, (error, abi, address, contractName) => { - if (error) { - return modalDialogCustom.alert(error) - } + this.fileManager.readFile(file).then((json) => { + // TODO: there is still a UI dependency to remove here, it's still too coupled at this point to remove easily + this.recorder.runScenario(json, continueCb, promptCb, alertCb, confirmationCb, this.logCallBack, (error, abi, address, contractName) => { + if (error) { + return modalDialogCustom.alert(error) + } - this.event.trigger('newScenario', [abi, address, contractName]) - }) + this.event.trigger('newScenario', [abi, address, contractName]) + }) + }).catch((error) => cb(error)) } getConfirmationCb (modalDialog, confirmDialog) { @@ -119,7 +122,7 @@ class RecorderUI extends Plugin { } triggerRecordButton () { - this.recorder.saveScenario( + this.saveScenario( (path, cb) => { modalDialogCustom.prompt('Save transactions as scenario', 'Transactions will be saved in a file under ' + path, 'scenario.json', cb) }, @@ -129,6 +132,21 @@ class RecorderUI extends Plugin { ) } + saveScenario (promptCb, cb) { + var txJSON = JSON.stringify(this.getAll(), null, 2) + var path = this.fileManager.currentPath() + promptCb(path, input => { + var fileProvider = this.fileManager.fileProviderOf(path) + if (!fileProvider) return + var newFile = path + '/' + input + helper.createNonClashingName(newFile, fileProvider, (error, newFile) => { + if (error) return cb('Failed to create file. ' + newFile + ' ' + error) + if (!fileProvider.set(newFile, txJSON)) return cb('Failed to create file ' + newFile) + this.fileManager.open(newFile) + }) + }) + } + } module.exports = RecorderUI diff --git a/apps/remix-ide/src/app/udapp/run-tab.js b/apps/remix-ide/src/app/udapp/run-tab.js index b1e2447eae..21ec6562fc 100644 --- a/apps/remix-ide/src/app/udapp/run-tab.js +++ b/apps/remix-ide/src/app/udapp/run-tab.js @@ -118,13 +118,13 @@ export class RunTab extends LibraryPlugin { renderRecorder (udappUI, fileManager, config, logCallback) { this.recorderCount = yo`0` - const recorder = new Recorder(this.blockchain, fileManager) + const recorder = new Recorder(this.blockchain) recorder.event.register('recorderCountChange', (count) => { this.recorderCount.innerText = count }) this.event.register('clearInstance', recorder.clearAll.bind(recorder)) - this.recorderInterface = new RecorderUI(this.blockchain, recorder, logCallback, config) + this.recorderInterface = new RecorderUI(this.blockchain, fileManager, recorder, logCallback, config) this.recorderInterface.event.register('newScenario', (abi, address, contractName) => { var noInstancesText = this.noInstancesText