Skip to content

Commit ab02d77

Browse files
committed
### 2.1.1 (2016-05-20)
* (bluefox) try to fix "Duplicate name" error * (bluefox) modify readFile/wrieFile commands * (gh-god) fix stop of script and unsubscribe
1 parent cf3ae59 commit ab02d77

File tree

4 files changed

+130
-51
lines changed

4 files changed

+130
-51
lines changed

README.md

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -661,24 +661,33 @@ $('channel[role=switch][state.id=*.STATE](rooms=Wohnzimmer)').each(function (id,
661661
readFile (fileName, function (error, bytes) {})
662662

663663
The result will be given in callback.
664-
File will be stored on the disk
664+
Read file from DB from folder "javascript".
665665

666666
### writeFile
667667
writeFile (fileName, bytes, function (error) {})
668668

669669
The optional error code will be given in callback.
670-
fileName is the name of file on local disk.
670+
fileName is the name of file in DB. All files are stored in folder "javascript". if you want to write to other folders, e.g. to "/vis.0/" use setFile for that.
671671

672-
### getFile
673-
getFile (fileName, function (error, bytes) {})
672+
The file that looks like '/subfolder/file.txt' will be stored under "/javascript/subfolder/file.txt" and can be accessed over web server with ```http://ip:8082/javascript/subfolder/file.txt```
674673

675-
The result will be given in callback.
676-
File will be stored in DB and can be accessed from any host under name javascript.X.fileName
677-
678-
### setFile
679-
setFile (fileName, bytes, function (error) {})
674+
```
675+
// store screenshot in DB
676+
var fs = require('fs');
677+
var data = fs.readFileSync('/tmp/screenshot.png');
678+
writeFile('/screenshots/1.png', data, function (error) {
679+
console.log('file written');
680+
});
681+
```
680682

681-
The optional error code will be given in callback. Read file from DB. Works on any host.
683+
```
684+
// store file in '/vis.0' in DB
685+
var fs = require('fs');
686+
var data = fs.readFileSync('/tmp/screenshot.png');
687+
writeFile('vis.0', '/screenshots/1.png', data, function (error) {
688+
console.log('file written');
689+
});
690+
```
682691

683692
### getHistory
684693
getHistory (instance, options, function (error, result, options, instance) {});
@@ -744,7 +753,7 @@ Scripts can be activated and deactivated by controlling of this state with ack=f
744753
## Changelog
745754
### 2.1.1 (2016-05-20)
746755
* (bluefox) try to fix "Duplicate name" error
747-
* (bluefox) add getFile/setFile commands
756+
* (bluefox) modify readFile/wrieFile commands
748757
* (gh-god) fix stop of script and unsubscribe
749758

750759
### 2.1.0 (2016-05-13)

javascript.js

Lines changed: 16 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1762,11 +1762,23 @@
17621762
return adapter.formatDate(date, format);
17631763
},
17641764

1765-
writeFile: function (fileName, data, callback) {
1766-
adapter.writeFile(null, fileName, data, callback);
1765+
writeFile: function (_adapter, fileName, data, callback) {
1766+
if (typeof data === 'function' || !data) {
1767+
callback = data;
1768+
data = fileName;
1769+
fileName = _adapter;
1770+
_adapter = null;
1771+
}
1772+
1773+
adapter.writeFile(_adapter, fileName, data, callback);
17671774
},
1768-
readFile: function (fileName, callback) {
1769-
adapter.readFile(null, fileName, callback);
1775+
readFile: function (_adapter, fileName, callback) {
1776+
if (typeof fileName === 'function') {
1777+
callback = fileName;
1778+
fileName = _adapter;
1779+
_adapter = null;
1780+
}
1781+
adapter.readFile(_adapter, fileName, callback);
17701782
},
17711783
getHistory: function (instance, options, callback) {
17721784
if (typeof instance === 'object') {
@@ -1816,30 +1828,6 @@
18161828
callback = null;
18171829
});
18181830
},
1819-
getFile: function (fileName, callback) {
1820-
var parts = fileName.replace(/\\/g, '/').split('/');
1821-
if (!parts[0]) parts.splice(0, 1);
1822-
if (!parts[0] || !parts[1]) {
1823-
var err = 'Invalid file name "' + fileName + '". It must be like: /vis.0/main/image.png';
1824-
adapter.log.error(err);
1825-
if (callback) callback(err);
1826-
return;
1827-
}
1828-
var a = parts.shift();
1829-
adapter.readFile(a, parts.join('/'), callback);
1830-
},
1831-
setFile: function (fileName, data, callback) {
1832-
var parts = fileName.replace(/\\/g, '/').split('/');
1833-
if (!parts[0]) parts.splice(0, 1);
1834-
if (!parts[0] || !parts[1]) {
1835-
var err = 'Invalid file name "' + fileName + '". It must be like: /vis.0/main/image.png';
1836-
adapter.log.error(err);
1837-
if (callback) callback(err);
1838-
return;
1839-
}
1840-
var a = parts.shift();
1841-
adapter.writeFile(a, parts.join('/'), callback);
1842-
},
18431831
toInt: function (val) {
18441832
if (val === true || val === 'true') val = 1;
18451833
if (val === false || val === 'false') val = 0;

test/lib/setup.js

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -356,17 +356,18 @@ function copyAdapterToController() {
356356
console.log('Adapter copied.');
357357
}
358358

359-
function clearControllerLog() {
360-
var dirPath = rootDir + 'tmp/log';
359+
function deleteAllFilesInDir(dirPath, isCreate) {
361360
var files;
362361
try {
363362
if (fs.existsSync(dirPath)) {
364-
console.log('Clear controller log...');
363+
console.log('Clear folder "' + dirPath + '"...');
365364
files = fs.readdirSync(dirPath);
366-
} else {
365+
} else if (isCreate) {
367366
console.log('Create controller log directory...');
368367
files = [];
369368
fs.mkdirSync(dirPath);
369+
} else {
370+
files = [];
370371
}
371372
} catch(e) {
372373
console.error('Cannot read "' + dirPath + '"');
@@ -378,9 +379,31 @@ function clearControllerLog() {
378379
var filePath = dirPath + '/' + files[i];
379380
fs.unlinkSync(filePath);
380381
}
381-
console.log('Controller log cleared');
382+
console.log('Controller folder "' + dirPath + '" cleared');
382383
} catch (err) {
383-
console.error('cannot clear log: ' + err);
384+
console.error('Cannot clear folder "' + dirPath + '": ' + err);
385+
}
386+
}
387+
}
388+
389+
function clearControllerLog() {
390+
deleteAllFilesInDir(rootDir + 'tmp/log');
391+
392+
// clear store files
393+
var dirPath = rootDir + 'tmp/' + appName + '-data/files';
394+
var files;
395+
try {
396+
if (fs.existsSync(dirPath)) {
397+
files = fs.readdirSync(dirPath);
398+
}
399+
} catch(e) {
400+
console.error('Cannot read "' + dirPath + '"');
401+
return;
402+
}
403+
if (files.length > 0) {
404+
for (var i = 0; i < files.length; i++) {
405+
if (files[i] === 'admin.admin' || files[i] === 'javascript.admin') continue;
406+
deleteAllFilesInDir(dirPath + '/' + files[i]);
384407
}
385408
}
386409
}

test/testFunctions.js

Lines changed: 65 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ describe('Test JS', function() {
112112
this.timeout(5000);
113113
checkConnectionOfAdapter(done);
114114
});
115-
115+
/*
116116
it('Test JS: check creation of state', function (done) {
117117
this.timeout(2000);
118118
// add script
@@ -673,15 +673,16 @@ describe('Test JS', function() {
673673
objects.setObject(script._id, script, function (err) {
674674
expect(err).to.be.not.ok;
675675
});
676-
});
676+
});*/
677677

678-
it('Test JS: test write file', function (done) {
678+
it('Test JS: test write file to "javascript"', function (done) {
679+
this.timeout(5000);
679680
// add script
680681
var script = {
681682
"common": {
682683
"name": "test ON any",
683684
"engineType": "Javascript/js",
684-
"source": "createState('testScheduleResponse2', false, function () {writeFile('/javascript.admin/test.txt', 'test', function () {setState('testScheduleResponse2', true, true);});});",
685+
"source": "createState('testScheduleResponse2', false, function () {writeFile('/test.txt', 'test', function () {setState('testScheduleResponse2', true, true);});});",
685686
"enabled": true,
686687
"engine": "system.adapter.javascript.0"
687688
},
@@ -701,13 +702,15 @@ describe('Test JS', function() {
701702
expect(err).to.be.not.ok;
702703
});
703704
});
704-
it('Test JS: test read file', function (done) {
705+
706+
it('Test JS: test read file from "javascript"', function (done) {
707+
this.timeout(5000);
705708
// add script
706709
var script = {
707710
"common": {
708711
"name": "test ON any",
709712
"engineType": "Javascript/js",
710-
"source": "readFile('/javascript.admin/test.txt', function (err, data) {setState('testScheduleResponse2', data, true);});",
713+
"source": "readFile('/test.txt', function (err, data) {setState('testScheduleResponse2', data, true);});",
711714
"enabled": true,
712715
"engine": "system.adapter.javascript.0"
713716
},
@@ -728,6 +731,62 @@ describe('Test JS', function() {
728731
});
729732
});
730733

734+
it('Test JS: test write file to "vis.0"', function (done) {
735+
this.timeout(5000);
736+
// add script
737+
var script = {
738+
"common": {
739+
"name": "test ON any",
740+
"engineType": "Javascript/js",
741+
"source": "createState('testScheduleResponse2', false, function () {writeFile('vis.0', '/test1.txt', 'test', function () {setState('testScheduleResponse2', true, true);});});",
742+
"enabled": true,
743+
"engine": "system.adapter.javascript.0"
744+
},
745+
"type": "script",
746+
"_id": "script.js.test_write1",
747+
"native": {}
748+
};
749+
750+
onStateChanged = function (id, state) {
751+
if (id === 'javascript.0.testScheduleResponse2' && state.val === true) {
752+
onStateChanged = null;
753+
done();
754+
}
755+
};
756+
757+
objects.setObject(script._id, script, function (err) {
758+
expect(err).to.be.not.ok;
759+
});
760+
});
761+
762+
it('Test JS: test read file from "vis.0"', function (done) {
763+
this.timeout(5000);
764+
// add script
765+
var script = {
766+
"common": {
767+
"name": "test ON any",
768+
"engineType": "Javascript/js",
769+
"source": "readFile('vis.0', '/test1.txt', function (err, data) {setState('testScheduleResponse2', data, true);});",
770+
"enabled": true,
771+
"engine": "system.adapter.javascript.0"
772+
},
773+
"type": "script",
774+
"_id": "script.js.test_read1",
775+
"native": {}
776+
};
777+
778+
onStateChanged = function (id, state) {
779+
if (id === 'javascript.0.testScheduleResponse2' && state.val === 'test') {
780+
onStateChanged = null;
781+
done();
782+
}
783+
};
784+
785+
objects.setObject(script._id, script, function (err) {
786+
expect(err).to.be.not.ok;
787+
});
788+
});
789+
731790
after('Test JS: Stop js-controller', function (done) {
732791
this.timeout(6000);
733792

0 commit comments

Comments
 (0)