4 * Nokia Web Runtime Service API emulation
7 * Copyright 2009 Nokia Corporation. All rights reserved.
13 var provider = 'Service.MediaManagement' ,
14 Interface = 'IDataSource';
17 * MediaManagement service
19 var MediaManagementService = function(){
20 this.GetList = __GetList;
21 this.Cancel = __Cancel;
24 device.implementation.extend(provider, Interface, new MediaManagementService() );
27 /******************************************************/
28 /******************************************************/
29 /******************************************************/
31 var context = device.implementation.context,
38 * MediaManagement: GetList
39 * @param {Object} criteria
40 * @param {Function} callback function for async call (mandatory)
42 function __GetList(criteria, callback, _flag){
44 if ((result = validator.apply('GetList', arguments)) !== false)
47 // _flag=true indicates re-called state
48 _flag = _flag || false;
51 // callback is mandatory
52 if (typeof callback != 'function')
53 return error(device.implementation.ERR_MISSING_ARGUMENT, msg.badAsync);
55 // continue validation after callback check
57 return error(device.implementation.ERR_MISSING_ARGUMENT, msg.is_missing, 'Filter');
59 if (!criteria.Filter.FileType)
60 return error(device.implementation.ERR_MISSING_ARGUMENT, msg.is_missing, 'FileType');
62 if (!/^(Music|Sound|Image|Video|StreamingURL)$/i.test(criteria.Filter.FileType))
63 return error(device.implementation.ERR_BAD_ARGUMENT_TYPE);
67 return context.callAsync(this, arguments.callee, criteria, callback, _flag);
72 fileType = criteria.Filter.FileType,
73 filter = criteria.Filter;
76 fileType = fileType[0].toUpperCase() + fileType.substr(1).toLowerCase();
77 fileType = fileType.replace(/url/i, 'URL');
79 DBase = context.getData(provider);
81 // unsupported filters
83 && (match = context.keys(filter).join().match(/Key|StartRange|EndRange/ig)) ) {
84 context.notify(_t('%s:: GetList : filter %s not implemented in preview').arg(provider, match.join()));
88 context.notify(_t('%s:: GetList : sort not implemented in preview').arg(provider));
91 returnValue = DBase[fileType];
92 return context.Result(context.Iterator(returnValue));
97 * MediaManagement: Cancel
98 * @param {Object} criteria
100 function __Cancel(criteria){
102 if (!criteria || !criteria.TransactionID)
103 return error(device.implementation.ERR_MISSING_ARGUMENT, msg.missingTID);
105 clearTimeout(criteria.TransactionID);
106 return context.ErrorResult(device.implementation.ERR_SUCCESS);
111 /*******************************
113 *******************************/
115 function error(code, msg /*, args...*/){
117 var args = ['MediaMgmt',method].concat([].slice.call(arguments,2));
118 msg = msg ? _t().arg.apply(msg,args) : undefined;
119 return context.ErrorResult(code, msg);
123 * validate common input arguments
124 * 'this' is string (object) name of calling function
126 * @param {arguments} arguments of calling function
127 * @return {Result} Result object if error, false if no error.
129 function validator() {
132 criteria = arguments[0] || false;
134 if (!criteria || typeof criteria != 'object' || typeof criteria.Type == 'undefined')
135 return error(device.implementation.ERR_MISSING_ARGUMENT, msg.is_missing, 'Type');
137 if (!/^FileInfo$/i.test(criteria.Type))
138 return error(device.implementation.ERR_SERVICE_NOT_SUPPORTED, msg.badType);
145 * order of %s args: Service name, method name, parameter name
148 badType : '%s : %s : Type not supported',
149 missingTID : '%s : %s : TransactionID is missing',
150 badAsync : '%s : %s : Insufficient arguments for async request',
151 is_missing : '%s : %s : %s is missing',
152 is_invalid : '%s : %s : %s is invalid'