Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
134 lines (124 sloc) 5.54 KB
distribution: how? size?
npm install hfs
system integration
some of these features are expected to not be possible with Node, but must be verified.
Those who are not possible will be achieved with a different executable communicating with node possibly via socket.
background notifications
Windows' tray icons
automatic handling starting/restaring of the server
Windows' services
easy way to add to the VFS, possibly starting HFS if it's not running
Windows' shell context menu
- GUI: all web
- admin on different port, to eventually accept connection only in local
- executable helper to get some features:
- tray icon for
- start/stop
- easy access to administration
- notification
- shell context menu
- add files via right click
- Windows' service
- webservices
- it should be possible to build an ajax-based webapp, like a straight template like for HFS 2.2
- both webservices and template engine
- does the webapp need a template engine at all or should it all be done via ajax?
- login
- folder list
- navigate folders (get folder by folder, or whole tree for speed?)
- search
- select & action (archive, delete, rename...)
- the web apps must perfectly working offline, don't rely on online resources (or do it just as an option or gracefully degrade)
- most non-core features should be plugins. We should have a repository and easy installations.
=== GUI
libraries to evaluate
login (cookie based)
switch on url resource type
case 'file': serve file
case 'link': redirect
case 'folder':
switch ($format)
case nothing: serve front-end web app, with this folder already selected
case 'tar': serve archive
case 'zip': serve archive
default: unknown
=== VFS
- able to
- add virtual items, (will override others with same name)
- add real items, (override)
- renamed, (a real item with customName. Remember that an existance check is always done)
- deleted, (this make the item with same resource to be skipped)
these are not child nodes, but are the names are kept in an object of the folder
- various options set (like hidden, permission, log, counting, comment, realm, icon)
- file node permissions by account (values: anyone, anonymous, any account, account list)
- NOT the old "access", it's just download+browse
- visible (this will make this item appear or not in lists, but won't prevent download)
default: anyone
- browse (only folders: prevent display of items inside, but with a message, not as if the folder was empty [recursive])
default: anyone
- download/stream [recursive]
default: anyone
- archive [recursive]
default: anyone
- upload (only folders [recursive])
default: no one
- delete [recursive]
default: no one
- options and metadata
- log (allow logging of this item [recursive])
default: yes
- logMask (only folders [recursive])
default: *
- count as download [recursive]
default: yes
- count as download Mask (only folders [recursive])
default: *
- upload mask (only folders [recursive])
default: *
- visibility mask (only folders [recursive])
default: *
- download mask (only folders [recursive])
default: *
- default file mask (only folders [recursive])
default: index.htm*;default.html*
- ?(leave it to future versions) auto-hide empty folders (folders only)
default: no
- hide extension [recursive]
default: no
- comment
- icon
- ? message when not allowed
- permissions and options have default values that are enforced when not assigned, to not clutter the stored data structure
- adding only "?" at the end of an URL of a file, will turn on a specific feature on that download
like asking the browser for the save dialog
could this be done with a plugin?
- only-once downloads
- an important part in designing a good plugin system is to have clear in mind what their needs are
- it could be good to collect plugins idea, then list what their needs are. So it's easier to sequentially
check that every requirement is met
- technically, how to make it?
- HFS could be the event emitter, and plugins the subscribers
- this won't permit plugins to be blocking. Like a plugin who takes an output and wants to manipulate
it before outputting.
- a real example?
- enable/disable plugins without having to restart the server
- possible plugins
- add flags to displaied connections
- this is mainly client-side
NEED: integrate with the template
- it needs access to a webservice, so it needs a server part that will proxy the webservice
NEED: respond to its own messages
file system errors
C lib reference