--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Wikipedia/preview/script/lib/sapi/SysInfo.js Tue Mar 09 10:34:58 2010 +0000
@@ -0,0 +1,398 @@
+/**
+ * SysInfo.js
+ *
+ * Nokia Web Runtime Service API emulation
+ * WRT v1.1
+ *
+ * Copyright 2009 Nokia Corporation. All rights reserved.
+*/
+
+
+(function(){
+
+ var provider = 'Service.SysInfo' ,
+ Interface = 'ISysInfo';
+
+ var supportedEntitiesAndKeys = {
+ "battery":{
+ "batterystrength":{"GetInfo":true,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":false},
+ "chargingstatus":{"GetInfo":true,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":true}
+ },
+ "connectivity":{
+ "bluetooth":{"GetInfo":true,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":true},
+ "infrared":{"GetInfo":true,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":true},
+ "activeconnections":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":false},
+ "connectionstatus":{"GetInfo":false,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":false},
+ "wlanmacaddress":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true}
+ },
+ "device":{
+ "firmwareversion":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "platformversion":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "producttype":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "manufacturer":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "machineid":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "phonemodel":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "imei":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true}
+ },
+ "display":{
+ "brightness":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "screensavertimeout":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "userinactivity":{"GetInfo":false,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":false},
+ "keyguardtime":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "autolocktime":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "autolockstatus":{"GetInfo":true,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":true},
+ "wallpaper":{"GetInfo":false,"SetInfo":true,"GetNotification":false,"GetInfoModeSync":false,"InputDataType":"string"},
+ "lighttimeout":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "displayresolution":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "displayorientation":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true}
+ },
+ "features":{
+ "bluetooth":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "infrared":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "camera":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "memorycard":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "fmradio":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "qwerty":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "wlan":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "usb":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "pen":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "led":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "coverui":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "sidevolumekeys":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "vibra":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true}
+ },
+ "general":{
+ "accessorystatus":{"GetInfo":false,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":false},
+ "connectedaccessories":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "inputlanguage":{"GetInfo":true,"SetInfo":true,"GetNotification":true,"GetInfoModeSync":true},
+ "supportedlanguages":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "predictivetext":{"GetInfo":true,"SetInfo":true,"GetNotification":true,"GetInfoModeSync":true},
+ "vibraactive":{"GetInfo":true,"SetInfo":true,"GetNotification":true,"GetInfoModeSync":true},
+ "availableusbmodes":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "activeusbmode":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "flipstatus":{"GetInfo":true,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":true},
+ "gripstatus":{"GetInfo":true,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":true},
+
+ },
+ "memory":{
+ "driveinfo":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "listdrives":{"GetInfo":true,"SetInfo":false,"GetNotification":false,"GetInfoModeSync":true},
+ "criticalmemory":{"GetInfo":false,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":false},
+ "memorycard":{"GetInfo":true,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":true}
+ },
+ "network":{
+ "signalstrength":{"GetInfo":true,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":false},
+ "registrationstatus":{"GetInfo":true,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":true},
+ "networkmode":{"GetInfo":true,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":true},
+ "currentnetwork":{"GetInfo":true,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":false},
+ "locationarea":{"GetInfo":false,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":false},
+ "cellid":{"GetInfo":false,"SetInfo":false,"GetNotification":true,"GetInfoModeSync":false}
+ }
+ };
+
+ /**
+ * SysInfo service
+ */
+ var SysInfoService = function(){
+ this.GetInfo = __GetInfo;
+ this.SetInfo = __SetInfo;
+ this.GetNotification = __GetNotification;
+ this.Cancel = __Cancel;
+ }
+
+ device.implementation.extend(provider, Interface, new SysInfoService() );
+
+ var context = device.implementation.context,
+ _t = context._t,
+ method = '',
+ result = false,
+ DBase = null,
+ default_device = 'default';
+
+ /**
+ * SysInfo: GetInfo
+ * @param {Object} criteria
+ * @param {function} callback function for async call (optional)
+ */
+ function __GetInfo(criteria, callback){
+ var retVal = ValidateArguments("GetInfo",criteria,callback);
+ if(retVal.ErrorCode != 0)
+ {
+ return retVal;
+ }
+ // Async call
+ if (typeof callback == 'function') {
+ return context.callAsync(this, arguments.callee, criteria, callback);
+ }
+
+ DBase = context.getData(provider);
+ var returnValue = DBase;
+ returnValue = returnValue[criteria.Entity.toLowerCase()][criteria.Key.toLowerCase()];
+ returnValue.Key = criteria.Key;
+ returnValue.Entity = criteria.Entity;
+
+ if(/^Connectivity$/i.test(criteria.Entity)&& /^ActiveConnections$/i.test(criteria.Key))
+ {
+ var temp = returnValue.ConnectionList;
+ returnValue.ConnectionList = context.Iterator(temp);
+ }
+ else if(/^General$/i.test(criteria.Entity)&& /^ConnectedAccessories$/i.test(criteria.Key))
+ {
+ var temp = returnValue.AccessoryList;
+ returnValue.AccessoryList = context.Iterator(temp);
+ }
+ else if(/^Memory$/i.test(criteria.Entity)&& /^DriveInfo$/i.test(criteria.Key))
+ {
+ try {
+ var temp = criteria.SystemData.Drive;
+ if(temp.length > 3)
+ {
+ temp = temp.substring(0,3);
+ }
+ temp= returnValue.Drive[temp.toUpperCase()];
+ if (!temp) {
+ return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.no_msg);
+ }
+ var driveInfo = new Object();
+ driveInfo.Key = returnValue.Key;
+ driveInfo.Entity = returnValue.Entity;
+ driveInfo.DriveInfo = temp;
+ return context.Result(driveInfo);
+ }
+ catch(err)
+ {
+ return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.no_msg);
+ }
+
+ }
+ return context.Result(returnValue);
+ }
+
+
+ /**
+ * SysInfo: SetInfo
+ * @param {Object} criteria
+ * @param {function} callback function for async call (optional)
+ */
+ function __SetInfo(criteria, callback){
+ var retVal = ValidateArguments("SetInfo",criteria,callback);
+ if(retVal.ErrorCode != 0)
+ {
+ return retVal;
+ }
+
+ // Current implementation support only for 'General' -> 'InputLanguage' || 'PredictiveText'
+ if (/^General$/i.test(criteria.Entity) && ( /^InputLanguage$/i.test(criteria.Key) || /^PredictiveText/i.test(criteria.Key) || /^VibraActive/i.test(criteria.Key))) {
+ // get the DBase data
+ DBase = context.getData(provider);
+ var returnValue = DBase;
+
+ // Check the 'SupportedLanguages' entries for Setting the new Status
+ if (/^InputLanguage$/i.test(criteria.Key)) {
+ var found = false;
+ var languageList = returnValue['general']['supportedlanguages']['LanguageList'];
+ for (var key in languageList) {
+ if (languageList[key] == criteria.SystemData.Status) {
+ found = true;
+ }
+ }
+ // Update the 'InputLanguage' if the value value found in the ['SupportedLanguages']
+ if (found)
+ returnValue[criteria.Entity.toLowerCase()][criteria.Key.toLowerCase()]['Status'] = criteria.SystemData.Status;
+ else
+ return error(device.implementation.ERR_SERVICE_NOT_SUPPORTED, msg.not_supported);
+ }
+ else if (/^PredictiveText$/i.test(criteria.Key)) {
+ if (criteria.SystemData.Status == 0 || criteria.SystemData.Status == 1)
+ returnValue[criteria.Entity.toLowerCase()][criteria.Key.toLowerCase()]['Status'] = criteria.SystemData.Status;
+ else
+ return error(device.implementation.ERR_NOT_FOUND, msg.badType);
+ }
+ else if (/^VibraActive$/i.test(criteria.Key)) {
+ if (criteria.SystemData.Status == 0 || criteria.SystemData.Status == 1)
+ returnValue[criteria.Entity.toLowerCase()][criteria.Key.toLowerCase()]['Status'] = criteria.SystemData.Status;
+ }
+ else {
+ return error(device.implementation.ERR_SERVICE_NOT_SUPPORTED, msg.not_supported);
+ }
+ }
+ else if(/^Display/i.test(criteria.Entity) && /^Wallpaper/i.test(criteria.Key)) {
+ if(typeof criteria.SystemData.StringData == 'undefined')
+ return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingArgs);
+ returnValue[criteria.Entity.toLowerCase()][criteria.Key.toLowerCase()]['StringData'] = criteria.SystemData.StringData;
+ return context.ErrorResult(device.implementation.ERR_SUCCESS);
+ }
+ return context.Result(result);
+ }
+
+
+ /**
+ * SysInfo: GetNotification
+ * @param {Object} criteria
+ * @param {function} callback function for async call
+ */
+ function __GetNotification(criteria, callback){
+ var retVal = ValidateArguments("GetNotification",criteria,callback);
+ if(retVal.ErrorCode != 0)
+ {
+ return retVal;
+ }
+
+ // unsupported
+ if (!/^(Battery|Memory)$/i.test(criteria.Entity) ||
+ !/^(BatteryStrength|ChargingStatus|MemoryCard)$/i.test(criteria.Key)) {
+ context.notify(_t('%s:: GetNotification : entity %s, key %s not implemented in preview.').arg(provider, criteria.Entity, criteria.Key));
+ // register callback anyway so Cancel works.
+ }
+
+ // evenType = 'entity.key'
+ var eventType = criteria.Entity+'.'+criteria.Key;
+
+ // process notify
+ return context.addListener(provider, eventType, criteria, callback, notifyHandler);
+ }
+
+ function notifyHandler(transactionID, criteria, callback, data){
+
+ var result,
+ eventCode = {completed:2, error:4, progress:9},
+ code = eventCode.progress;
+ try{
+ DBase = context.getData(provider);
+ var entity = criteria.Entity.toLowerCase(),
+ key = criteria.Key.toLowerCase();
+
+ // make a copy of return value
+ var returnValue = context.extend({},DBase[entity][key]);
+
+ // augment with data
+ context.extend(returnValue, data);
+
+ result = context.Result(returnValue);
+ }
+ catch(e){
+ code = eventCode.error;
+ }
+ callback(transactionID, code, result);
+ }
+
+
+
+ /**
+ * SysInfo: Cancel
+ * @param {Object} criteria
+ */
+ function __Cancel(criteria){
+ method = 'Cancel';
+
+ if (!criteria || !criteria.TransactionID)
+ return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingTID);
+
+ var found = context.removeListener(provider, null, criteria.TransactionID);
+ if (!found)
+ return error(device.implementation.ERR_NOT_FOUND);
+ else
+ return context.ErrorResult(device.implementation.ERR_SUCCESS);
+ }
+
+
+
+ /*******************************
+ * helper functions
+ *******************************/
+
+ function error(code, msg /*, args...*/){
+
+ var args = ['SysInfo',method].concat([].slice.call(arguments,2));
+ msg = msg ? _t().arg.apply(msg,args) : undefined;
+ return context.ErrorResult(code, msg);
+ }
+
+ function cancelRegisteredNotify(result)
+ {
+ __Cancel({'TransactionID':result.TransactionID});
+ method = 'GetNotification';
+ }
+
+ /**
+ * error messages
+ * order of %s args: Service name, method name, parameter name
+ */
+ var msg = {
+ badType : '%s: %s: Type is invalid',
+ badSysInfo : '%s: %s: SysInfoName is invalid',
+ missingSysInfo : '%s: %s: SysInfoName is missing',
+ missingTID : '%s: %s: Transaction ID missing',
+ not_supported : '%s: %s: Not Supported',
+ is_invalid : '%s: %s: Is invalid',
+ missingArgs : '%s: %s: SystemData Argument Missing',
+ inSufficientArgs : '%s: %s: Insufficient Arguments to process',
+ missingInputParam : '%s: %s: Input Parameter Missing',
+ not_supportedSyncVer: '%s: %s: Sync Version Not Supported',
+ noEntity : '%s: %s: Entity: Input Parameter Missing',
+ noKey : '%s: %s: Key: Input Parameter Missing',
+ IncorrectSytemData : '%s: %s: Incorrect SystemData Type, SystemData Must be a Map',
+ callbackNotFound : '%s: %s: Callback object not found',
+ commandNotFound : '%s: %s: Command Not Supported',
+ unsupInterface : 'SysInfo:Requested interface not supported by the provider',
+ no_msg : '%s: %s: '
+ };
+
+ /**
+ * Common validator for all functions
+ *
+ *
+ * @param {arguments} function name and arguments of calling function
+ * @return {Result} Error object
+ */
+ function ValidateArguments(funName,criteria,callback)
+ {
+ method = funName;
+
+ try {
+ if (/^GetNotification$/i.test(funName) && typeof callback != "function") {
+ return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.not_supportedSyncVer);
+ }
+
+ if (typeof criteria == "undefined" || typeof criteria.Entity == "undefined" || typeof criteria.Key == "undefined") {
+ return error(device.implementation.ERR_MISSING_ARGUMENT, msg.inSufficientArgs);
+ }
+
+ if (criteria.Entity == "") {
+ return error(device.implementation.ERR_MISSING_ARGUMENT, msg.noEntity);
+ }
+
+ if (criteria.Key == "") {
+ return error(device.implementation.ERR_MISSING_ARGUMENT, msg.noKey);
+ }
+
+ if (/^SetInfo$/i.test(funName)) {
+ if (typeof criteria.SystemData == "undefined" || criteria.SystemData == '') {
+ return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingArgs);
+ }
+ if (typeof criteria.SystemData.StringData == "undefined" && typeof criteria.SystemData.Status == "undefined") {
+ return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingArgs);
+ }
+ }
+
+ if (typeof supportedEntitiesAndKeys[criteria.Entity.toLowerCase()] == 'undefined' || typeof supportedEntitiesAndKeys[criteria.Entity.toLowerCase()][criteria.Key.toLowerCase()] == 'undefined') {
+ return error(device.implementation.ERR_NOT_FOUND, msg.no_msg);
+ }
+
+ if (!supportedEntitiesAndKeys[criteria.Entity.toLowerCase()][criteria.Key.toLowerCase()][funName]) {
+ return error(device.implementation.ERR_NOT_FOUND, msg.no_msg);
+ }
+
+ if (funName == "GetInfo" && !supportedEntitiesAndKeys[criteria.Entity.toLowerCase()][criteria.Key.toLowerCase()]["GetInfoModeSync"] && typeof callback != "function") {
+ return error(device.implementation.ERR_MISSING_ARGUMENT, msg.not_supportedSyncVer);
+ }
+
+ return context.ErrorResult(device.implementation.ERR_SUCCESS, "");
+ }
+ catch(err){
+ return error(device.implementation.ERR_BAD_ARGUMENT_TYPE, msg.badType);
+ }
+
+ }
+
+}) ()
\ No newline at end of file