|
Remoto - VFS
|
A VFS_datastore subclass for storing data directly in memory as if it was a filesystem. More...
#include <VFS_ephemeral.h>
Public Slots | |
| virtual void | applyDiff (VFS_request *r) |
| Apply a diff to this node's data. More... | |
Public Slots inherited from VFS_node | |
| virtual void | applyDiff (VFS_request *r) |
| Apply a diff received via subscription. More... | |
| virtual void | executeRequest (VFS_request *t) |
| Based on the VFS_request::requestType, execute the function associated with an operation. More... | |
| void | notifySubscribers (VFS_node *origin, VFS_request *t) |
| Propagate a diff to subscribers. More... | |
| virtual void | receiveResponse (VFS_request *t) |
| Once a VFS_request has been completed, a response will be issued back to its _origin. More... | |
| void | remove (bool andDelete) |
| Remove a child node. More... | |
| virtual void | remove (VFS_node *node=nullptr, QString *name=nullptr, QString user="server") |
| Remove a child node from this node. More... | |
| virtual void | subtreeRequest (VFS_request *t) |
| find() the target of a VFS_request, and execute the request More... | |
| virtual void | unsubscribeAll (VFS_node *n) |
| Remove all references to a subscriber from this node. More... | |
Public Member Functions | |
| Q_INVOKABLE | VFS_ephemeral (bool container, bool raw=false) |
| Create a VFS_ephemeral node. More... | |
| virtual | ~VFS_ephemeral () |
| virtual VFS_node * | append (QString name, VFS_node *node, bool containerCheck=true, QString user="server") |
| Append a VFS_ephemeral node as a child of this node. More... | |
| virtual VFS_node * | find (VFS_request *r) |
| Find a node using a VFS_request. More... | |
| virtual bool | isContainer () |
| The VFS_ephemeral node is a container or a document. More... | |
| void | populateMetadata (QString name) |
| Use an incoming file type to try to populate mime type. More... | |
| virtual QString | reportDetails () |
| Report the current cache usage. More... | |
Public Member Functions inherited from VFS_node | |
| Q_INVOKABLE | VFS_node () |
| The VFS_node constructor will add its instance to the VFS_node::__allNodes global node registry, observing thread safety rules. More... | |
| virtual | ~VFS_node () |
| VFS_node destructor. More... | |
| QString | className () |
| Return the class name of a node. More... | |
| virtual VFS_request * | createRequest (VFS_request::requestType type, QString path, QString user="unknown", QJsonDocument data=QJsonDocument(), QJsonObject metadata=QJsonObject(), bool dontDelete=false) |
| Create a new VFS_request with this object as _origin. More... | |
| VFS_node * | find (QString path) |
| Find a node by string path. More... | |
| VFS_node * | findChildWithName (QString name) |
| Check if a child with a given name exists. More... | |
| virtual VFS_node * | mount () |
| Mount this node. More... | |
| QString | uniqueChildName (QString name) |
| Generate a unique child name. More... | |
| virtual VFS_node * | unmount () |
| Unmount this node. More... | |
| virtual bool | validChildName (QString name) |
| Check if a node name is valid. More... | |
Protected Member Functions | |
| virtual void | fetchRange (VFS_request *r) |
| Fetch a byte range within a file. More... | |
| virtual QByteArray | icon () |
| The "disk" icon found in the VFS_icons library. More... | |
| virtual void | ls (VFS_request *r) |
| List the contents of a directory. More... | |
| virtual void | metadata (VFS_request *r) |
| Fetch the metadata for this node. More... | |
| virtual void | read (VFS_request *r) |
| Read the contents of this node. More... | |
| quint64 | size () |
| Return the size of the data in this node. More... | |
| virtual void | submit (VFS_request *r) |
| Submit data to this node, applying the data as a diff. More... | |
| virtual void | write (VFS_request *r) |
| Write data to this node. More... | |
Protected Member Functions inherited from VFS_node | |
| virtual void | aclDefaults (VFS_request *r) |
| Return default values and features associated wth this node. More... | |
| void | addACLDefault (QJsonObject &acl, bool value, QString description="") |
| Add a default value to the acl object. More... | |
| void | addACLFeature (QJsonObject &acl, QString feature, bool value, QString description="") |
| Add a feature to the acl object. More... | |
| void | addACLFeatureGroup (QJsonObject &acl, QString feature, QString group, bool value) |
| Add a feature group to the acl object. More... | |
| void | addACLFeatureUser (QJsonObject &acl, QString feature, QString user, bool value) |
| Add a feature user to the acl object. More... | |
| void | addACLGroup (QJsonObject &acl, QString group, bool value) |
| Add a group to the acl object. More... | |
| void | addACLUser (QJsonObject &acl, QString user, bool value) |
| Add a user to the acl object. More... | |
| virtual void | issueRequest (VFS_node *target, VFS_request *t) |
| Issue a VFS_request to its target. More... | |
| virtual void | issueRequest (VFS_request *t) |
| A convenience function. More... | |
| virtual void | issueResponse (VFS_request *t) |
| Once a request has been completed, issue a response. More... | |
| virtual void | releaseLock (VFS_request *r) |
| Release a lock on this node. More... | |
| virtual void | report (VFS_request *r) |
| Report debugging information about the current state of this node. More... | |
| virtual void | requestLock (VFS_request *r) |
| Request a lock on this node. More... | |
| virtual void | rm (VFS_request *r) |
| Remove a child entry from a node, or the node itself. More... | |
| virtual void | subscribe (VFS_request *r) |
| Add an entry to this node's _subscription list. More... | |
| virtual void | unsubscribe (VFS_request *r) |
| Remove an entry from this node's _subscription list. More... | |
| virtual void | unsubscribePath (QString path) |
| Unsubscribe all references to a subpath. More... | |
Static Protected Attributes | |
| static QMimeDatabase | _mimeDatabase |
| The mime database, used for metadata. More... | |
Private Attributes | |
| bool | _container |
| QJsonObject | _data |
| QJsonObject | _metadata |
| QDateTime | _modified |
| bool | _raw |
| QByteArray | _rawData |
Additional Inherited Members | |
Signals inherited from VFS_node | |
| void | diff (VFS_node *origin, VFS_request *t) |
| Emit a diff, which will trigger notifySubscribers() for a mounted node. More... | |
| void | finished (bool andDelete=false) |
Emitted if a thread fails to create its node, or a node is rm()'d, or any other reason a node has completed its lifecycle. It is deleted if andDelete==true. More... | |
| void | mounted () |
| Emitted when a node is mount()ed. More... | |
| void | unmounted (VFS_node *self) |
| Emitted when a node is unmount()ed. More... | |
Static Public Member Functions inherited from VFS_node | |
| static bool | __isNode (VFS_node *) |
| Check to see if a node is in the global registry. More... | |
| static QString | code (QString nodename, QString libname, QString &error) |
| Fetch code or any other resource from a node. More... | |
Protected Attributes inherited from VFS_node | |
| VFS_children | _children |
| This node's children. More... | |
| QMutex | _lock |
| A recursive mutex that is local to this node. More... | |
| VFS_subscriptionType | _subscribers |
| This node's subscribers. These subscribers will receive diff notifications. More... | |
A VFS_datastore subclass for storing data directly in memory as if it was a filesystem.
The VFS_ephemeral node is a direct subclass of VFS_node with the intention of storing raw or JSON data.
Definition at line 10 of file VFS_ephemeral.h.
|
explicit |
Create a VFS_ephemeral node.
| container | Whether this node is a container |
| raw | Does this node contain raw data? |
Definition at line 35 of file VFS_ephemeral.cpp.
|
virtual |
Definition at line 43 of file VFS_ephemeral.cpp.
|
virtual |
Append a VFS_ephemeral node as a child of this node.
| nodename | The child name |
| node | The VFS_node instance pointer, which must be of type VFS_ephemeral. |
| containerCheck | This flag is ignored for VFS_ephemeral. |
| user | The user adding the node, used for logging. |
Reimplemented from VFS_node.
Definition at line 139 of file VFS_ephemeral.cpp.
|
virtualslot |
Apply a diff to this node's data.
| r | The VFS_request object |
This calls submit() using the request object. This does not call VFS_node::applyDiff() because the submit function should emit a diff() as needed.
Definition at line 387 of file VFS_ephemeral.cpp.
|
protectedvirtual |
Fetch a byte range within a file.
| r | The VFS_request object |
It will not return chunks larger than VFS_EPHEMERAL_MAX_READABLE, which is 100mb.
r->_metadata["range"] should include an object with a chunk range:
Where s and e indicate start and end of the range, inclusive.
If s or e is missing, value of 0 will be used. If s or e is a negative value, the start will be an offset from the end of the file. If e is 0, the end of the file will be used. If s >= e, no data will be returned.
Definition at line 419 of file VFS_ephemeral.cpp.
|
virtual |
Find a node using a VFS_request.
| r | The VFS_request object |
Reimplemented from VFS_node.
Definition at line 80 of file VFS_ephemeral.cpp.
|
protectedvirtual |
The "disk" icon found in the VFS_icons library.
Reimplemented from VFS_node.
Definition at line 55 of file VFS_ephemeral.cpp.
|
virtual |
The VFS_ephemeral node is a container or a document.
Reimplemented from VFS_node.
Definition at line 122 of file VFS_ephemeral.cpp.
|
protectedvirtual |
List the contents of a directory.
| r | The VFS_request object |
Only containers can be listed. If _container is false, this operation is an error.
Reimplemented from VFS_node.
Definition at line 202 of file VFS_ephemeral.cpp.
|
protectedvirtual |
Fetch the metadata for this node.
| r | The VFS_request object |
Uses VFS_node_type::getType() to determine a type for a path.
Reimplemented from VFS_node.
Definition at line 306 of file VFS_ephemeral.cpp.
| void VFS_ephemeral::populateMetadata | ( | QString | name | ) |
Use an incoming file type to try to populate mime type.
| name | The name this entry is being appended as |
The _metadata["raw"] field will also be populated if _raw==true.
Definition at line 161 of file VFS_ephemeral.cpp.
|
protectedvirtual |
Read the contents of this node.
| r | The VFS_request object |
If r->_metadata["createIfMissing"]==true, and the entry does not exist, we will populate the _data and _rawData fields from the VFS_request.
Reimplemented from VFS_node.
Definition at line 232 of file VFS_ephemeral.cpp.
|
virtual |
Report the current cache usage.
Reimplemented from VFS_node.
Definition at line 66 of file VFS_ephemeral.cpp.
|
protected |
Return the size of the data in this node.
The size is calculated from _rawData or _data (as json), based on the value of _raw
Definition at line 188 of file VFS_ephemeral.cpp.
|
protectedvirtual |
Submit data to this node, applying the data as a diff.
| r | The VFS_request object |
Apply the r->_data as a diff using VFS_datastore::applyJsonDiff(), or if r->_metadata["method"]=="delta", use VFS_datastore::applyDeltaDiff().
A submit() to a directory is illegal.
If r->_success==true, emit a diff() of the applied data to subscribers.
Reimplemented from VFS_node.
Definition at line 337 of file VFS_ephemeral.cpp.
|
protectedvirtual |
Write data to this node.
| r | The VFS_request object |
The data for this node will be entirely replaced by r->_data and r->_rawData.
Because this is a write() operation, a diff() is emitted.
Reimplemented from VFS_node.
Definition at line 286 of file VFS_ephemeral.cpp.
|
private |
Definition at line 45 of file VFS_ephemeral.h.
|
private |
Definition at line 48 of file VFS_ephemeral.h.
|
private |
Definition at line 47 of file VFS_ephemeral.h.
|
staticprotected |
The mime database, used for metadata.
Definition at line 28 of file VFS_ephemeral.h.
|
private |
Definition at line 51 of file VFS_ephemeral.h.
|
private |
Definition at line 46 of file VFS_ephemeral.h.
|
private |
Definition at line 49 of file VFS_ephemeral.h.