diff -r f3521a11d878 -r 918767a9c8d3 Wikipedia/preview/script/lib/sapi/AppManager.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Wikipedia/preview/script/lib/sapi/AppManager.js Tue Mar 09 10:34:58 2010 +0000 @@ -0,0 +1,223 @@ +/** + * AppManager.js + * + * Nokia Web Runtime Service API emulation + * WRT v1.1 + * + * Copyright 2009 Nokia Corporation. All rights reserved. +*/ + + +(function(){ + + var provider = 'Service.AppManager', + Interface = 'IAppManager'; + + /** + * AppManager service + */ + var AppManagerService = function(){ + this.GetList = __GetList; + this.LaunchApp = __LaunchApp; + this.LaunchDoc = __LaunchDoc; + this.Cancel = __Cancel; + } + + device.implementation.extend(provider, Interface, new AppManagerService() ); + + + /******************************************************/ + /******************************************************/ + /******************************************************/ + + var context = device.implementation.context, + _t = context._t, + method = '', + result = false, + DBase = null; + + /** + * AppManager: GetList + * @param {Object} criteria + */ + function __GetList(criteria){ + if ((result = validator.apply('GetList', arguments)) !== false) + return result; + + if (typeof criteria.Type == 'undefined') + return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingType); + + if (!/^(Application|UserInstalledPackage)$/i.test(criteria.Type)) + return error(device.implementation.ERR_BAD_ARGUMENT_TYPE); + + // check if a callback was provided + if (arguments.length > 1) + return error(device.implementation.ERR_SERVICE_NOT_SUPPORTED, msg.badAsync); + + var returnValue, + filter = criteria.Filter || null; + + DBase = context.getData(provider); + + if (criteria.Filter) + context.notify(_t('%s:: GetList : filter not implemented in preview').arg(provider)); + + // Type = UserInstalledPackage + if (!/UserInstalledPackage/i.test(criteria.Type)){ + + returnValue = context.Iterator( DBase[criteria.Type] || [] ); + + } else { + // Type = Application + // @todo: apply filter criteria + + returnValue = context.Iterator( DBase[criteria.Type] || [] ); + } + + return context.Result(returnValue); + } + + /** + * AppManager: LaunchApp + * @param {Object} criteria + * @param {function} callback function for async call (optional) + */ + function __LaunchApp(criteria, callback){ + + if ((result = validator.apply('LaunchApp', arguments)) !== false) + return result; + + if (typeof criteria.ApplicationID == 'undefined') + return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingAppID); + + // app id must be in the form "s60uid://" where is + // what is returned by GetList. + var appId = criteria.ApplicationID; + + if (!/^s60uid:\/\/0x/i.test(appId)) + return error(device.implementation.ERR_BAD_ARGUMENT_TYPE); + + if (criteria.CmdLind) + context.notify(_t('%s:: LaunchApp : CmdLine not implemented in preview').arg(provider)); + + if (criteria.Options) + context.notify(_t('%s:: LaunchApp : Options not implemented in preview').arg(provider)); + + + if (typeof callback == 'function') { + return context.callAsync(this, arguments.callee, criteria, callback); + } + + appId = appId.replace(/^s60uid:\/\//i, ''); + DBase = context.getData(provider); + + for(var type in DBase){ + for(var i in DBase[type]) { + var item = DBase[type][i]; + if (item.Uid == appId) { + // found! + context.notify(_t('%s:: LaunchApp : application found & launched : id=%s').arg(provider, appId)); + return context.ErrorResult(device.implementation.ERR_SUCCESS); + } + } + } + // if not found + return error(device.implementation.ERR_BAD_ARGUMENT_TYPE); + } + + /** + * AppManager: LaunchDoc + * @param {Object} criteria + * @param {function} callback function for async call (optional) + */ + function __LaunchDoc(criteria, callback){ + + if ((result = validator.apply('LaunchDoc', arguments)) !== false) + return result; + + if (typeof criteria.Document == 'undefined' && typeof criteria.MimeType == 'undefined') + return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingDoc); + + if (typeof criteria.Document != 'undefined' && !criteria.Document.DocumentPath) + return error(device.implementation.ERR_BAD_ARGUMENT_TYPE); + + if (criteria.Options) + context.notify(_t('%s:: LaunchDoc : Options not implemented in preview').arg(provider)); + + if (typeof callback == 'function') { + return context.callAsync(this, arguments.callee, criteria, callback); + } + + // nothing to launch in emulation, just notify user + context.notify(_t('%s:: LaunchDoc : document launched').arg(provider)); + + if (criteria.Document) + // return success + return context.ErrorResult(device.implementation.ERR_SUCCESS); + else + // for mimetype, return value name of document + return context.Result('', device.implementation.ERR_SUCCESS); + } + + + + /** + * AppManager: 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 = ['AppManager',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') + return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingType); + + return failed; + } + + /** + * error messages + * order of %s args: Service name, method name, parameter name + */ + var msg = { + missingType : '%s:%s:Content Type Missing', + badAsync : 'AppManger:GetList:Asynchronous version of API is not supported', // typo on device! + missingAppID : '%s:%s:Application ID Missing', // double space between ID & missing!! + missingDoc : '%s:%s:Document/MimeType Missing/value more than expected length ', + missingTID : '%s:Incorrect TransactionID', + is_invalid : '%s:%s:%s is invalid' + }; + + +}) () +