commit
159aeffff7
@ -0,0 +1,111 @@ |
|||||||
|
'use strict' |
||||||
|
|
||||||
|
var EventManager = require('../lib/eventManager') |
||||||
|
|
||||||
|
function Files (storage) { |
||||||
|
var event = new EventManager() |
||||||
|
this.event = event |
||||||
|
var readonly = {} |
||||||
|
|
||||||
|
this.exists = function (path) { |
||||||
|
// NOTE: ignore the config file
|
||||||
|
if (path === '.browser-solidity.json') { |
||||||
|
return false |
||||||
|
} |
||||||
|
|
||||||
|
return this.isReadOnly(path) || storage.exists(path) |
||||||
|
} |
||||||
|
|
||||||
|
this.get = function (path) { |
||||||
|
// NOTE: ignore the config file
|
||||||
|
if (path === '.browser-solidity.json') { |
||||||
|
return null |
||||||
|
} |
||||||
|
|
||||||
|
return readonly[path] || storage.get(path) |
||||||
|
} |
||||||
|
|
||||||
|
this.set = function (path, content) { |
||||||
|
// NOTE: ignore the config file
|
||||||
|
if (path === '.browser-solidity.json') { |
||||||
|
return false |
||||||
|
} |
||||||
|
|
||||||
|
if (!this.isReadOnly(path)) { |
||||||
|
var exists = storage.exists(path) |
||||||
|
if (!storage.set(path, content)) { |
||||||
|
return false |
||||||
|
} |
||||||
|
if (!exists) { |
||||||
|
event.trigger('fileAdded', [path, false]) |
||||||
|
} else { |
||||||
|
event.trigger('fileChanged', [path]) |
||||||
|
} |
||||||
|
return true |
||||||
|
} |
||||||
|
|
||||||
|
return false |
||||||
|
} |
||||||
|
|
||||||
|
this.addReadOnly = function (path, content) { |
||||||
|
if (!storage.exists(path)) { |
||||||
|
readonly[path] = content |
||||||
|
event.trigger('fileAdded', [path, true]) |
||||||
|
return true |
||||||
|
} |
||||||
|
|
||||||
|
return false |
||||||
|
} |
||||||
|
|
||||||
|
this.isReadOnly = function (path) { |
||||||
|
return !!readonly[path] |
||||||
|
} |
||||||
|
|
||||||
|
this.remove = function (path) { |
||||||
|
if (!this.exists(path)) { |
||||||
|
return false |
||||||
|
} |
||||||
|
|
||||||
|
if (this.isReadOnly(path)) { |
||||||
|
readonly[path] = undefined |
||||||
|
} else { |
||||||
|
if (!storage.remove(path)) { |
||||||
|
return false |
||||||
|
} |
||||||
|
} |
||||||
|
event.trigger('fileRemoved', [path]) |
||||||
|
return true |
||||||
|
} |
||||||
|
|
||||||
|
this.rename = function (oldPath, newPath) { |
||||||
|
if (!this.isReadOnly(oldPath) && storage.exists(oldPath)) { |
||||||
|
if (!storage.rename(oldPath, newPath)) { |
||||||
|
return false |
||||||
|
} |
||||||
|
event.trigger('fileRenamed', [oldPath, newPath]) |
||||||
|
return true |
||||||
|
} |
||||||
|
return false |
||||||
|
} |
||||||
|
|
||||||
|
this.list = function () { |
||||||
|
var files = {} |
||||||
|
|
||||||
|
// add r/w files to the list
|
||||||
|
storage.keys().forEach(function (path) { |
||||||
|
// NOTE: as a temporary measure do not show the config file
|
||||||
|
if (path !== '.browser-solidity.json') { |
||||||
|
files[path] = false |
||||||
|
} |
||||||
|
}) |
||||||
|
|
||||||
|
// add r/o files to the list
|
||||||
|
Object.keys(readonly).forEach(function (path) { |
||||||
|
files[path] = true |
||||||
|
}) |
||||||
|
|
||||||
|
return files |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
module.exports = Files |
Loading…
Reference in new issue