diff -r f3521a11d878 -r 918767a9c8d3 Wikipedia/preview/script/lib/sapi/MediaManagement.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Wikipedia/preview/script/lib/sapi/MediaManagement.js Tue Mar 09 10:34:58 2010 +0000 @@ -0,0 +1,157 @@ +/** + * MediaManagement.js + * + * Nokia Web Runtime Service API emulation + * WRT v1.1 + * + * Copyright 2009 Nokia Corporation. All rights reserved. +*/ + + +(function(){ + + var provider = 'Service.MediaManagement' , + Interface = 'IDataSource'; + + /** + * MediaManagement service + */ + var MediaManagementService = function(){ + this.GetList = __GetList; + this.Cancel = __Cancel; + } + + device.implementation.extend(provider, Interface, new MediaManagementService() ); + + + /******************************************************/ + /******************************************************/ + /******************************************************/ + + var context = device.implementation.context, + _t = context._t, + method = '', + result = false, + DBase = null; + + /** + * MediaManagement: GetList + * @param {Object} criteria + * @param {Function} callback function for async call (mandatory) + */ + function __GetList(criteria, callback, _flag){ + + if ((result = validator.apply('GetList', arguments)) !== false) + return result; + + // _flag=true indicates re-called state + _flag = _flag || false; + if (!_flag) { + + // callback is mandatory + if (typeof callback != 'function') + return error(device.implementation.ERR_MISSING_ARGUMENT, msg.badAsync); + + // continue validation after callback check + if (!criteria.Filter) + return error(device.implementation.ERR_MISSING_ARGUMENT, msg.is_missing, 'Filter'); + + if (!criteria.Filter.FileType) + return error(device.implementation.ERR_MISSING_ARGUMENT, msg.is_missing, 'FileType'); + + if (!/^(Music|Sound|Image|Video|StreamingURL)$/i.test(criteria.Filter.FileType)) + return error(device.implementation.ERR_BAD_ARGUMENT_TYPE); + + // process callback + _flag = true; + return context.callAsync(this, arguments.callee, criteria, callback, _flag); + } + + var returnValue = [], + match = null, + fileType = criteria.Filter.FileType, + filter = criteria.Filter; + + // normalize filetype + fileType = fileType[0].toUpperCase() + fileType.substr(1).toLowerCase(); + fileType = fileType.replace(/url/i, 'URL'); + + DBase = context.getData(provider); + + // unsupported filters + if (filter + && (match = context.keys(filter).join().match(/Key|StartRange|EndRange/ig)) ) { + context.notify(_t('%s:: GetList : filter %s not implemented in preview').arg(provider, match.join())); + } + // unsupported sort + if (criteria.Sort) { + context.notify(_t('%s:: GetList : sort not implemented in preview').arg(provider)); + } + + returnValue = DBase[fileType]; + return context.Result(context.Iterator(returnValue)); + } + + + /** + * MediaManagement: Cancel + * @param {Object} criteria + */ + function __Cancel(criteria){ + method = 'Cancel'; + if (!criteria || !criteria.TransactionID) + return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingTID); + + clearTimeout(criteria.TransactionID); + return context.ErrorResult(device.implementation.ERR_SUCCESS); + } + + + + /******************************* + * helper functions + *******************************/ + + function error(code, msg /*, args...*/){ + + var args = ['MediaMgmt',method].concat([].slice.call(arguments,2)); + msg = msg ? _t().arg.apply(msg,args) : undefined; + return context.ErrorResult(code, msg); + } + + /** + * validate common input arguments + * 'this' is string (object) name of calling function + * + * @param {arguments} arguments of calling function + * @return {Result} Result object if error, false if no error. + */ + function validator() { + method = ''+this; + var failed = false, + criteria = arguments[0] || false; + + if (!criteria || typeof criteria != 'object' || typeof criteria.Type == 'undefined') + return error(device.implementation.ERR_MISSING_ARGUMENT, msg.is_missing, 'Type'); + + if (!/^FileInfo$/i.test(criteria.Type)) + return error(device.implementation.ERR_SERVICE_NOT_SUPPORTED, msg.badType); + + return failed; + } + + /** + * error messages + * order of %s args: Service name, method name, parameter name + */ + var msg = { + badType : '%s : %s : Type not supported', + missingTID : '%s : %s : TransactionID is missing', + badAsync : '%s : %s : Insufficient arguments for async request', + is_missing : '%s : %s : %s is missing', + is_invalid : '%s : %s : %s is invalid' + }; + + +}) () +