diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2014-02-21 16:39:57 +0200 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2014-02-24 13:05:49 +0200 |
commit | bfaa4eceda474cb0200a3a75ac648249219904b5 (patch) | |
tree | 8b902920498b528c8a44f84f85fb7d02fc3a1f5e /acf2/model | |
parent | f6c04ff1d0395210f595e16cfc8757bb8f7ee706 (diff) | |
download | acf2-bfaa4eceda474cb0200a3a75ac648249219904b5.tar.bz2 acf2-bfaa4eceda474cb0200a3a75ac648249219904b5.tar.xz |
audio data type
Diffstat (limited to 'acf2/model')
-rw-r--r-- | acf2/model/binary.lua | 50 | ||||
-rw-r--r-- | acf2/model/init.lua | 2 |
2 files changed, 52 insertions, 0 deletions
diff --git a/acf2/model/binary.lua b/acf2/model/binary.lua new file mode 100644 index 0000000..2af10a0 --- /dev/null +++ b/acf2/model/binary.lua @@ -0,0 +1,50 @@ +--[[ +Copyright (c) 2012-2014 Kaarle Ritvanen +See LICENSE file for license details +--]] + +local M = {} + +local object = require('acf2.object') +local class = object.class +local super = object.super + + +local b64 = require('b64') + +local magic = require('magic') +magic = magic.open(magic.MIME_TYPE) +magic:load() + + +M.Data = class() + +function M.Data:init(path, data) + self.path = path + self.data = data + self.type = magic:buffer(data) +end + +function M.Data:encode() + return 'data:'..self.type..';base64,'..b64.encode(self.data) +end + + +M.Audio = class(require('acf2.model.field').Field) + +function M.Audio:init(params) + super(self, M.Audio):init(params) + self.dtype = 'binary' + self.widget = 'audio' +end + +function M.Audio:load(context) + local value = super(self, M.Audio):load(context) + return type(value) == 'string' and M.Data(context.path, value) or value +end + +-- not yet implemented +function M.Audio:save(context, value) end + + +return M diff --git a/acf2/model/init.lua b/acf2/model/init.lua index 376ec64..6e8b7f5 100644 --- a/acf2/model/init.lua +++ b/acf2/model/init.lua @@ -9,6 +9,8 @@ M.error = require('acf2.error') local raise = M.error.raise local relabel = M.error.relabel +M.binary = require('acf2.model.binary') + local combination = require('acf2.model.combination') M.Union = combination.Union M.Range = combination.Range |