Changed zouba directory heirarchy.
[ptas] / zouba / misc / rss / preview / script / lib / sapi / MediaManagement.js
diff --git a/zouba/misc/rss/preview/script/lib/sapi/MediaManagement.js b/zouba/misc/rss/preview/script/lib/sapi/MediaManagement.js
new file mode 100644 (file)
index 0000000..fe1639b
--- /dev/null
@@ -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'
+       };
+               
+
+}) ()
+