| Midgard2 Reference Manual | ||||
|---|---|---|---|---|
| Top | Description | Object Hierarchy | Properties | ||||
#include <midgard/midgard.h>
                    MidgardBlob;
struct              MidgardBlobClass;
MidgardBlob *       midgard_blob_new                    (MidgardObject *attachment,
                                                         const gchar *encoding);
MidgardBlob *       midgard_blob_create_blob            (MidgardObject *attachment,
                                                         const gchar *encoding);
gchar *             midgard_blob_read_content           (MidgardBlob *self,
                                                         gsize *bytes_read);
gboolean            midgard_blob_write_content          (MidgardBlob *self,
                                                         const gchar *content);
GIOChannel *        midgard_blob_get_handler            (MidgardBlob *self,
                                                         const gchar *mode,
                                                         GError **error);
const gchar *       midgard_blob_get_path               (MidgardBlob *self);
gboolean            midgard_blob_exists                 (MidgardBlob *self);
gboolean            midgard_blob_remove_file            (MidgardBlob *self,
                                                         GError **error);
"attachment" MidgardObject* : Read / Write / Construct Only "content" gchar* : Read / Write "encoding" gchar* : Read / Write / Construct Only "parentguid" gchar* : Read / Write
MidgardBlob class provides transparent access to real files located in filesystem. It's a proxy between database objects (usually midgard_attachment) and real files like images or documents.
Main MidgardBlob approaches:
Binary data doesn't have to be stored together with database record ( MidgardObject ).
One object may have unlimited attachments.
One blob may be shared among different objects ( of different classes even ).
You may attach attachment to another attachment ( notes to documentation or image thumbnails ).
Binary file is independent from objects
struct MidgardBlobClass {
	GObjectClass parent;
	gchar *(*read_content) (MidgardBlob *self, gsize *bytes_read);
	gboolean (*write_content) (MidgardBlob *self, const gchar *content);
	gboolean (*remove_file) (MidgardBlob *self, GError **error);
	gboolean (*exists) (MidgardBlob *self);
	const gchar *(*get_path) (MidgardBlob *self);
	GIOChannel *(*get_handler) (MidgardBlob *self, const gchar *mode, GError **error);
};
MidgardBlob * midgard_blob_new (MidgardObject *attachment,const gchar *encoding);
Default encoding is UTF-8. Set NULL encoding if such is required. 
Instatiate new Midgard Blob object for the given midgard_attachment object.
This constructor defines new relative path for attachment, if midgard_attachment is associated with midgard_blob and its location is empty. In any other case, location is not changed.
  | 
MidgardObject of MIDGARD_TYPE_ATTACHMENT type. | 
  | 
file encoding. [allow-none] | 
Returns :  | 
newly instatiated MidgardBlob object or NULL on failure | 
MidgardBlob * midgard_blob_create_blob (MidgardObject *attachment,const gchar *encoding);
Invokes midgard_blob_new() and it's designed for language bindings, in whic, 
that function can not be invoked explicitly.
  | 
MidgardObject of MIDGARD_TYPE_ATTACHMENT type. | 
  | 
file encoding. [allow-none] | 
Returns :  | 
new MidgardBlob instance. [transfer full] | 
Since 10.05.1
gchar * midgard_blob_read_content (MidgardBlob *self,gsize *bytes_read);
Returned content should be freed when no longer needed.
bytes_read holds size of returned content. 
This function should be used to get content of small files. For large and huge ones midgard_blob_get_handler should be used to get file handle.
  | 
MidgardBlob self instance | 
  | 
number of bytes read. [out] | 
Returns :  | 
content of the file, or NULL on failure | 
gboolean midgard_blob_write_content (MidgardBlob *self,const gchar *content);
Write given content to a file.
  | 
MidgardBlob self instance. | 
  | 
content which should be written to file. | 
Returns :  | 
TRUE if content has been written to file, FALSE otherwise. | 
GIOChannel * midgard_blob_get_handler (MidgardBlob *self,const gchar *mode,GError **error);
The main idea is to get file handler. On C level it returns GIOChannel, but language bindings could return typical file handler or anything else which is needed for particular language.
Returned channel is owned by midgard_blob and should not be freed or unreferenced.
  | 
MidgardBlob instance | 
  | 
fopen mode (r, w, a, b). Default is 'w'. | 
  | 
a pointer to store error. [allow-none] | 
Returns :  | 
GIOChannel or NULL. [transfer none]
 | 
const gchar *       midgard_blob_get_path               (MidgardBlob *self);
Returned path is owned by midgard_blob and should not be freed. It basically contains blobdir and relative file's location.
  | 
MidgardBlob instance | 
Returns :  | 
absolute path or NULL if path is not set yet. | 
gboolean            midgard_blob_exists                 (MidgardBlob *self);
Check if file associated with midgard_blob exists. This function will also return FALSE, if file is not yet associated.
  | 
MidgardBlob instance | 
Returns :  | 
TRUE if file exists, FALSE otherwise | 
gboolean midgard_blob_remove_file (MidgardBlob *self,GError **error);
Deletes a file which is associated with blob and located at attachment's location which is initialized for blob. midgard_blob_exists should be invoked if file may be already deleted, for example when one file is shared among many attachments.
  | 
MidgardBlob self instance. | 
Returns :  | 
TRUE on success, FALSE otherwise |