[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    =?utf-8?q?=5Bplasma-mediacenter=5D_dataengines=3A_addons_improve?=
From:       Onur-Hayri Bakici <thehayro () gmail ! com>
Date:       2011-03-31 17:49:52
Message-ID: 20110331174952.1980AA60A9 () git ! kde ! org
[Download RAW message or body]

Git commit af2bc4f6ce2898e29a27473ca05c69e15213a4fc by Onur-Hayri Bakici.
Committed on 31/03/2011 at 19:24.
Pushed by bakici into branch 'master'.

addons improved

M  +70   -44   dataengines/addons/blip/contents/code/main.js     
M  +93   -136  dataengines/addons/flickr/contents/code/main.js     
M  +57   -39   dataengines/addons/metacafe/contents/code/main.js     
M  +361  -206  dataengines/addons/photobucket/contents/code/main.js     
M  +86   -131  dataengines/addons/picasa/contents/code/main.js     
M  +125  -50   dataengines/addons/veoh/contents/code/main.js     
A  +25   -0    dataengines/addons/veoh/metadata.desktop         [License: UNKNOWN]  *
M  +104  -76   dataengines/addons/youtube/contents/code/main.js     
M  +1    -1    dataengines/addons/youtube/metadata.desktop     
M  +32   -13   dataengines/javascript/service/contents/code/mediaapi.js     
M  +7    -1    dataengines/javascript/service/contents/code/mediaservice.js     
M  +21   -3    dataengines/javascript/service/contents/code/stdutils.js     
M  +0    -1    dataengines/javascript/service/contents/services/provider.operations   \


The files marked with a * at the end have a non valid license. Please read: \
http://techbase.kde.org/Policies/Licensing_Policy and use the headers which are \
listed at that page.


http://commits.kde.org/plasma-mediacenter/af2bc4f6ce2898e29a27473ca05c69e15213a4fc

diff --git a/dataengines/addons/blip/contents/code/main.js \
b/dataengines/addons/blip/contents/code/main.js index 2e93c59..f497f69 100644
--- a/dataengines/addons/blip/contents/code/main.js
+++ b/dataengines/addons/blip/contents/code/main.js
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright 2010 by Onur-Hayri Bakici <thehayro@gmail.com               *
+ *   Copyright 2010, 2011 by Onur-Hayri Bakici <thehayro@gmail.com         *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   it under the terms of the GNU General Public License as published by  *
@@ -23,20 +23,27 @@ function Blip()
 {
   print("Hello blip");
   this.baseUrl = "http://www.blip.tv/";
+  this.name = "blip";
   blipObject = this;
 }
 
 Blip.prototype.searchMedia = function(queryParams)
 {
-  var query = queryParams['text'];
-  if (query === "" || typeof query === "undefined")
-  {
-    print("no query defined");
-    return;
-  }
-  print(query);
+  var text = queryParams['text'];
+  var maxResults = queryParams['max-results'];
+  var page = queryParams['page'];
+  
+  if (maxResults != "")
+    outputWarningMessage(this.name, "max-results", WarningTypes[PARAMIGNORED]);
+  if (page != "")
+    outputWarningMessage(this.name, "page", WarningTypes[PARAMIGNORED]);
  
-  var url = this.baseUrl + "search/view/?search=" + query + "&skin=api";
+  var url = buildUrl(this.baseUrl + "search/view/",
+		     {
+		       "search" : text,
+		       "skin": "api"
+		     }
+		    );
   print(url);
 
   var result = "";
@@ -52,55 +59,64 @@ Blip.prototype.searchMedia = function(queryParams)
 	var objDom = new XMLDoc(result, xmlError);
 	var objDomTree = objDom.docNode;
 	
-	//blip tv has an inconsisten return of errors
+	//blip tv has an inconsisties return of errors
 	if (objDomTree.getElements("notice")[0] != null)
 	{
-	  setData(blipObject.toString(), "Error", \
objDomTree.getElements("notice")[0].getText()); +	  \
outputErrorMessage(blipObject.name, "", \
objDomTree.getElements("notice")[0].getText(), ErrorTypes[INTERNALERROR]);  return;
 	}
-	/*if (blipObject.isErrorMessage(objDomTree))
-	  return;*/
+	if (blipObject.isErrorMessage(objDomTree))
+	  return;
 	var photoNodes = objDomTree.getElements("payload")[0].getElements("asset");
 	if (photoNodes.length == 0)
-	  print("photonodes is empty");	
+	{
+	  outputErrorMessage(blipObject.name, "", text, ErrorTypes[NORESULTS]);
+	  return;
+	}
 	for (var i = 0; i < photoNodes.length; i++)
 	{
-	  try{
-	    //get only the first entry of the media list
-	    var mediaItem = \
                photoNodes[i].getElements("mediaList")[0].getElements("media")[0];
-	    var webmedia = new WebMedia();
-	    webmedia.type = MediaType.video;
-	    
-	    webmedia.id = photoNodes[i].getElements("id")[0].getText();
-	    
-	    webmedia.title = photoNodes[i].getElements("title")[0].getText();
-	    webmedia.description = photoNodes[i].getElements("description")[0].getText();
-	    
-	    var tagItems = photoNodes[i].getElements("tags")[0].getElements("string");
-	    for (var j = 0; j < tagItems.length; ++j)
-	    {
-	      webmedia.keywords[j] = tagItems[j].getText();
-	    }
-	    
-	    webmedia.author = \
                photoNodes[i].getElements("createdBy")[0].getElements("login")[0].getText();
                
-	    webmedia.published = new \
                Date(photoNodes[i].getElements("modified")[0].getText());
-	    webmedia.link = mediaItem.getElements("link")[0].getAttribute("href");
-	    webmedia.height = mediaItem.getElements("height")[0].getText();
-	    webmedia.width = mediaItem.getElements("width")[0].getText();
-	    webmedia.size = mediaItem.getElements("size")[0].getText();;
-      //     webmedia.thumbnailLink = "http://farm" + farm + ".static.flickr.com/" + \
                server + "/" + webmedia.id + "_" + secret + "_t.jpg";
-	    //MediaDataCollection.push(webmedia);
-	    setData(webmedia.id, webmedia.toArray());
+	
+	  //get only the first entry of the media list
+	  var mediaItem = photoNodes[i].getElements("mediaList")[0].getElements("media");
+	  var webmedia = new WebMedia();
+	  webmedia.type = MediaTypes[VIDEO];
+	  
+	  webmedia.id = getID();
+	  webmedia.providerSpecificID = photoNodes[i].getElements("id")[0].getText();
+	  webmedia.provider = blipObject.name;
+	  webmedia.title = photoNodes[i].getElements("title")[0].getText();
+	  webmedia.description = photoNodes[i].getElements("description")[0].getText();
+	  
+	  var tagItems = photoNodes[i].getElements("tags")[0].getElements("string");
+	  for (var j = 0; j < tagItems.length; j++)
+	  {
+	    webmedia.keywords[j] = tagItems[j].getText();
 	  }
-	  catch(e)
+	  
+	  var webRoleItem = null;
+	  // get the "web"-role from the video
+	  for (var j = 0; j < mediaItem; j++)
 	  {
-	    print("A problem occured while parsing:" + e.message);
+	    if (mediaItem[j].getElements("role")[0].getText() == "Web")
+	      webRoleItem = mediaItem[j];
 	  }
+	  // "web"-role not found. Taking the first one
+	  webRoleItem = mediaItem[0];
+	  webmedia.user = photoNodes[i].getElements("createdBy")[0].getElements("login")[0].getText();
 +	  webmedia.published = new \
Date(parseInt(photoNodes[i].getElements("timestamp")[0].getText())); +	  \
webmedia.updated = new \
Date(parseInt(photoNodes[i].getElements("modified")[0].getText())); +	  webmedia.link \
= webRoleItem.getElements("link")[0].getAttribute("href"); +	  webmedia.height = \
webRoleItem.getElements("height")[0].getText(); +	  webmedia.width = \
webRoleItem.getElements("width")[0].getText(); +	  webmedia.size = \
webRoleItem.getElements("size")[0].getText(); +    //     webmedia.thumbnailLink = \
"http://farm" + farm + ".static.flickr.com/" + server + "/" + webmedia.id + "_" + \
secret + "_t.jpg"; +	  //MediaDataCollection.push(webmedia);
+	  setData(webmedia.id, webmedia.toArray());
 	}
       }
       catch(e)
       {
-	print("A problem occured while parsing:" + e.message);
+	outputErrorMessage(blipObject.name, "", e.message, ErrorTypes[PARSINGERROR]);
       }
     }
   );
@@ -109,7 +125,17 @@ Blip.prototype.searchMedia = function(queryParams)
 
 Blip.prototype.seachCollection = function(queryParams)
 {
-  
+  outputErrorMessage(this.name, "", "searchCollection", \
ErrorTypes[FUNCTIONNOTPROVIDED]); +}
+
+Blip.prototype.getUploadedUserMedia = function(queryParams)
+{
+  outputErrorMessage(this.name, "", "getUploadedUserMedia", \
ErrorTypes[FUNCTIONNOTPROVIDED]); +}
+
+Blip.prototype.getUploadedUserCollection = function(queryParams)
+{
+  outputErrorMessage(this.name, "", "getUploadedUserCollection", \
ErrorTypes[FUNCTIONNOTPROVIDED]);  }
 
 Blip.prototype.toString = function()
diff --git a/dataengines/addons/flickr/contents/code/main.js \
b/dataengines/addons/flickr/contents/code/main.js index d9a1faf..eeb3e25 100644
--- a/dataengines/addons/flickr/contents/code/main.js
+++ b/dataengines/addons/flickr/contents/code/main.js
@@ -35,9 +35,12 @@ Flickr.prototype.searchMedia = function(queryParams)
   var page = queryParams['page'];
   var media = queryParams['media'];
 
-  if (media == "" || !media)
+  // by default, we search for pictures
+  if (media == "" || !media || media == MediaTypes[PHOTO])
     media = "photos";
-  
+  if (media == MediaTypes[VIDEO])
+    media = "videos";
+    
   /*
   we can search for videos as well, with the extras=media parameter
   description: the description of this medium
@@ -50,19 +53,20 @@ Flickr.prototype.searchMedia = function(queryParams)
   url_t: the thumbnailLink
   url_o: the url of the original media link
 */  
-  
+  print("here");
+  print(media);
   var url = buildUrl(this.baseUrl, 
 		      {
 			"method" : "flickr.photos.search",
 		        "api_key" : this.apiKey,
 		        "text" : text,
+			"sort" : "relevance",
 			"media" : media,
 		        "extras" : \
"description,date_upload,owner_name,last_update,tags,machine_tags,o_dims,media,url_t,url_o",
                
-			"per_page" : max-results,
+			"per_page" : maxResults,
 			"page" : page
 		      }
-		    );
-  //print(url2);
+	    );
   print(url);
 
   var result = "";
@@ -77,7 +81,7 @@ Flickr.prototype.searchMedia = function(queryParams)
       {
 	var objDom = new XMLDoc(result, xmlError);
 	var objDomTree = objDom.docNode;
-	// we cannot access the this object. we have to access it indirectly
+	// we cannot access the "this" object. we have to access it indirectly
 	if (flickrObject.isErrorMessage(objDomTree))
 	  return;
 	var photoNodes = objDomTree.getElements("photos")[0].getElements("photo");
@@ -88,50 +92,35 @@ Flickr.prototype.searchMedia = function(queryParams)
 	}
 	for (var i = 0; i < photoNodes.length; i++)
 	{
-	  try
-	  {
-	    var webmedia = new WebMedia();
-	    if (photoNodes[i].getAttribute("media") == "photo")
-	      webmedia.type = MediaTypes[PHOTO];
-	    else
-	      webmedia.type = MediaTypes[VIDEO];
-	    
-	    webmedia.id = getID();
-	    webmedia.providerSpecificID = photoNodes[i].getAttribute("id");
-	    webmedia.title = photoNodes[i].getAttribute("title");
-	    webmedia.description = photoNodes[i].getElements("description")[0].getText();
-	    
-	    webmedia.keywords = photoNodes[i].getAttribute("tags").split(" ");
-	    
-	    webmedia.user = photoNodes[i].getAttribute("ownername");
-	    webmedia.updated = photoNodes[i].getAttribute("last_update");;
-	    webmedia.published = photoNodes[i].getAttribute("dateupload");
-	    webmedia.link = photoNodes[i].getAttribute("url_o");
-	    webmedia.height = photoNodes[i].getAttribute("height_o");
-	    webmedia.width = photoNodes[i].getAttribute("width_o");
-	    webmedia.size = "";
-	  //  webmedia.collection = "";
-	    webmedia.addThumbnail(photoNodes[i].getAttribute("url_t"),
-				  photoNodes[i].getAttribute("height_t"),
-				  photoNodes[i].getAttribute("width_t"));
-	    setData(webmedia.id, webmedia.toArray());
-	  }catch(e)
-	  {
-	    print("A problem occured while parsing: " + e.message);
-	    if (typeof e.message === "undefined")
-	      outputErrorMessage(this.name, "", result);     
-	    else
-	      outputErrorMessage(this.name, "", e.message);
-	  }
+	  var webmedia = new WebMedia();
+	  if (photoNodes[i].getAttribute("media") == "photo")
+	    webmedia.type = MediaTypes[PHOTO];
+	  else
+	    webmedia.type = MediaTypes[VIDEO];
+	  webmedia.provider = flickrObject.name;
+	  webmedia.id = getID();
+	  webmedia.providerSpecificID = photoNodes[i].getAttribute("id");
+	  webmedia.title = photoNodes[i].getAttribute("title");
+	  webmedia.description = photoNodes[i].getElements("description")[0].getText();
+	  
+	  webmedia.keywords = photoNodes[i].getAttribute("tags").split(" ");
+	  
+	  webmedia.user = photoNodes[i].getAttribute("ownername");
+	  webmedia.updated = UnixToDate(photoNodes[i].getAttribute("last_update"));
+	  webmedia.published = UnixToDate(photoNodes[i].getAttribute("dateupload"));
+	  webmedia.link = photoNodes[i].getAttribute("url_o");
+	  webmedia.height = photoNodes[i].getAttribute("height_o");
+	  webmedia.width = photoNodes[i].getAttribute("width_o");
+	  webmedia.size = "";
+	//  webmedia.collection = "";
+	  webmedia.addThumbnail(photoNodes[i].getAttribute("url_t"),
+				photoNodes[i].getAttribute("height_t"),
+				photoNodes[i].getAttribute("width_t"));
+	  setData(webmedia.id, webmedia.toArray());
 	}
-	print("Parsing done");
       }catch(e)
       {
-	print("A problem occured while parsing: " + e.message);
-	if (typeof e.message === "undefined")
-	  outputErrorMessage(this.name, "", result);     
-	else
-	  outputErrorMessage(this.name, "", e.message);
+	outputErrorMessage(flickrObject.name, "", e.message, ErrorTypes[PARSINGERROR]);
       }
     }
   );
@@ -148,10 +137,6 @@ Flickr.prototype.getUploadedUserMedia = function(queryParams)
   var user = queryParams['user'];
   var maxResults = queryParams['max-results'];
   var page = queryParams['page'];
-  var collectionID = queryParams['providerCollectionID'];
-  
-  if (collectionID)
-    outputWarningMessage(this.name, collectionID, WarningTypes[PARAMIGNORED]);
   
   var result = "";
   this.getNSID(user, 
@@ -159,7 +144,7 @@ Flickr.prototype.getUploadedUserMedia = function(queryParams)
 		{
 		  if (!nsid)
 		  {
-		    outputErrorMessage(flickrObject.name, "", "Fetching username " + user + " \
failed"); +		    outputErrorMessage(flickrObject.name, "", user, \
ErrorTypes[NOUSERFOUND]);  return;
 		  }
 		  
@@ -195,49 +180,34 @@ Flickr.prototype.getUploadedUserMedia = function(queryParams)
 				  }
 				  for (var i = 0; i < photoNodes.length; i++)
 				  {
-				    try
-				    {
-				      var webmedia = new WebMedia();
-				      if (photoNodes[i].getAttribute("media") == "photo")
-					webmedia.type = MediaTypes[PHOTO];
-				      else
-					webmedia.type = MediaTypes[VIDEO];
-				      
-				      webmedia.id = getID();
-				      webmedia.providerSpecificID = photoNodes[i].getAttribute("id");
-				      webmedia.title = photoNodes[i].getAttribute("title");
-				      webmedia.description = \
                photoNodes[i].getElements("description")[0].getText();
-				      
-				      webmedia.keywords = photoNodes[i].getAttribute("tags").split(" ");
-				      
-				      webmedia.user = photoNodes[i].getAttribute("ownername");
-				      webmedia.updated = photoNodes[i].getAttribute("last_update");;
-				      webmedia.published = photoNodes[i].getAttribute("dateupload");
-				      webmedia.link = photoNodes[i].getAttribute("url_o");
-				      webmedia.height = photoNodes[i].getAttribute("height_o");
-				      webmedia.width = photoNodes[i].getAttribute("width_o");
-				      webmedia.size = "";
-				      webmedia.addThumbnail(photoNodes[i].getAttribute("url_t"),
-							    photoNodes[i].getAttribute("height_t"),
-							    photoNodes[i].getAttribute("width_t"));
-				      setData(webmedia.id, webmedia.toArray());
-				    }catch(e)
-				    {
-				      print("A problem occured while parsing: " + e.message);
-				      if (typeof e.message === "undefined")
-					outputErrorMessage(fObj.name, "", result);     
-				      else
-					outputErrorMessage(fObj.name, "", e.message);
-				    }
+				    var webmedia = new WebMedia();
+				    if (photoNodes[i].getAttribute("media") == "photo")
+				      webmedia.type = MediaTypes[PHOTO];
+				    else
+				      webmedia.type = MediaTypes[VIDEO];
+				    
+				    webmedia.id = getID();
+				    webmedia.providerSpecificID = photoNodes[i].getAttribute("id");
+				    webmedia.title = photoNodes[i].getAttribute("title");
+				    webmedia.description = \
photoNodes[i].getElements("description")[0].getText(); +				    
+				    webmedia.keywords = photoNodes[i].getAttribute("tags").split(" ");
+				    
+				    webmedia.user = photoNodes[i].getAttribute("ownername");
+				    webmedia.updated = photoNodes[i].getAttribute("last_update");;
+				    webmedia.published = photoNodes[i].getAttribute("dateupload");
+				    webmedia.link = photoNodes[i].getAttribute("url_o");
+				    webmedia.height = photoNodes[i].getAttribute("height_o");
+				    webmedia.width = photoNodes[i].getAttribute("width_o");
+				    webmedia.size = "";
+				    webmedia.addThumbnail(photoNodes[i].getAttribute("url_t"),
+							  photoNodes[i].getAttribute("height_t"),
+							  photoNodes[i].getAttribute("width_t"));
+				    setData(webmedia.id, webmedia.toArray());
 				  }
-				  print("Parsing done");
 				}catch(e)
 				{
-				  print("A problem occured while parsing: " + e.message);
-				  if (typeof e.message === "undefined")
-				    outputErrorMessage(fObj.name, "", result);     
-				  else
-				    outputErrorMessage(fObj.name, "", e.message);
+				  outputErrorMessage(flickrObject.name, "", e.message, \
ErrorTypes[PARSINGERROR]);  }
 			      }
 			  );
@@ -258,6 +228,11 @@ Flickr.prototype.getUploadedUserCollection = \
function(queryParams)  this.getNSID(user,
 	       function(nsid)
 	       {
+		  if (!nsid)
+		  {
+		    outputErrorMessage(flickrObject.name, "", user, ErrorTypes[NOUSERFOUND]);
+		    return;
+		  }
 		  var url = buildUrl(flickrObject.baseUrl, 
 				     {
 					"method" : "flickr.photosets.getList",
@@ -288,34 +263,20 @@ Flickr.prototype.getUploadedUserCollection = \
function(queryParams)  }
 				  for (var i = 0; i < photosetNodes.length; ++i)
 				  {
-				    try
-				    {
-				      var webmediaCollection = new WebMediaCollection();
-				      var farm = photosetNodes[i].getAttribute("farm");
-				      var server = photosetNodes[i].getAttribute("server");
-				      webmediaCollection.id = getID();
-				      webmediaCollection.providerSpecificID = \
                photosetNodes[i].getAttribute("id");
-				      webmediaCollection.provider = flickrObject.name;
-				      webmediaCollection.title = \
                photosetNodes[i].getElements("title")[0].getText();
-				      webmediaCollection.description = \
                photosetNodes[i].getElements("description")[0].getText();
-				      setData(webmediaCollection.id, webmediaCollection.toArray());
-				    }
-				    catch(e)
-				    {
-				      print("A problem occured while parsing: " + e.message);
-				      if (typeof e.message === "undefined")
-					outputErrorMessage(flickrObject.name, "", result);     
-				      else
-					outputErrorMessage(flickrObject.name, "", e.message);
-				    }
+				  
+				    var webmediaCollection = new WebMediaCollection();
+				    var farm = photosetNodes[i].getAttribute("farm");
+				    var server = photosetNodes[i].getAttribute("server");
+				    webmediaCollection.id = getID();
+				    webmediaCollection.providerSpecificID = photosetNodes[i].getAttribute("id");
+				    webmediaCollection.provider = flickrObject.name;
+				    webmediaCollection.title = \
photosetNodes[i].getElements("title")[0].getText(); +				    \
webmediaCollection.description = \
photosetNodes[i].getElements("description")[0].getText(); +				    \
setData(webmediaCollection.id, webmediaCollection.toArray());  }
 				}catch(e)
 				{
-				  print("A problem occured while parsing: " + e.message);
-				  if (typeof e.message === "undefined")
-				    outputErrorMessage(flickrObject.name, "", result);     
-				  else
-				    outputErrorMessage(flickrObject.name, "", e.message);
+				  outputErrorMessage(flickrObject.name, "", e.message, \
ErrorTypes[PARSINGERROR]);  }
 			      }
 			    );
@@ -357,11 +318,7 @@ Flickr.prototype.getNSID = function(username, \
onNSIDRetrievedCallback)  onNSIDRetrievedCallback(nsid);
 	      }catch(e)
 	      {
-		print("A problem occured while parsing: " + e.message);
-		if (typeof e.message === "undefined")
-		  outputErrorMessage(this.name, "", result);     
-		else
-		  outputErrorMessage(this.name, "", e.message);
+		outputErrorMessage(flickrObject.name, "", e.message, ErrorTypes[PARSINGERROR]);
 	      }
 	    }
 	  );
@@ -369,14 +326,21 @@ Flickr.prototype.getNSID = function(username, \
onNSIDRetrievedCallback)  
 Flickr.prototype.isErrorMessage = function(objDomTree)
 {
-  if (objDomTree.getAttribute("stat") == "fail")
+  try 
+  {
+    if (objDomTree.getAttribute("stat") == "fail")
+    {
+      var msg = objDomTree.getElements("err")[0].getAttribute("msg");
+      var code = objDomTree.getElements("err")[0].getAttribute("code");
+      outputErrorMessage(this.name, code, "Server response", msg);
+      return true;
+    }
+    return false;
+  }catch(e)
   {
-    var msg = objDomTree.getElements("err")[0].getAttribute("msg");
-    var code = objDomTree.getElements("err")[0].getAttribute("code");
-    outputErrorMessage(this.name, code, "Server response", msg);
-    return true;
+    outputErrorMessage(flickrObject.name, "", e.message, ErrorTypes[PARSINGERROR]);
+    return false;
   }
-  return false;
 }
 
 function xmlError(e)
@@ -384,11 +348,4 @@ function xmlError(e)
   print(e);
 }
 
-
-//helper function
-function UnixToDate(unixTimeStamp)
-{
-  return new Date(unixTimeStamp * 1000);
-}
-
 registerAddon(Flickr)
\ No newline at end of file
diff --git a/dataengines/addons/metacafe/contents/code/main.js \
b/dataengines/addons/metacafe/contents/code/main.js index 5ffb7af..a5f4c41 100644
--- a/dataengines/addons/metacafe/contents/code/main.js
+++ b/dataengines/addons/metacafe/contents/code/main.js
@@ -16,22 +16,32 @@
  *   Free Software Foundation, Inc.,                                       *
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA .        *
  ***************************************************************************/
+var mcObject = null;
 
 function Metacafe()
 {
   print("Hello metacafe");
   this.baseUrl = "http://www.metacafe.com/api/videos/";
+  this.name = "metacafe";
+  mcObject = this;
 }
 
 Metacafe.prototype.searchMedia = function(queryParams)
 {
-  var query = queryParams['text'];
-  var url = this.baseUrl + "?vq=" + query;
-  if (query === "" || typeof query === "undefined")
-  {
-    print("no query defined");
-    return;
-  }
+  var text = queryParams['text'];
+  var maxResults = queryParams['max-results'];;
+  var page = queryParams['page'];
+  // zero based index
+  var startIndex = (maxResults * page) - maxResults;
+  
+  var url = buildUrl(this.baseUrl,
+		     {
+		      "q" : text,
+		      "max-results" : maxResults,
+		      "start-index" : startIndex
+		     }
+	    );
+
   print(url);
   var result = "";
   doRequest(engine, url,
@@ -42,8 +52,6 @@ Metacafe.prototype.searchMedia = function(queryParams)
 	    function(job)
 	    {    
 	      try{
-		print("Job done");
-		print("Parsing...");
 		//parse xml here
 		var mediaNS = "http://search.yahoo.com/mrss/";
 		var parser = new DOMImplementation();
@@ -55,42 +63,40 @@ Metacafe.prototype.searchMedia = function(queryParams)
 		
 		if (mediaNodes.length == 0)
 		{
-		  setData("Metacafe", "Error", "No results for " + query + " found");
+		  outputErrorMessage(mcObject.name, "", text, ErrorTypes[NORESULTS]);
 		  return;
 		}
 		for (var i = 0; i < mediaNodes.length; ++i)
 		{
-		  try{
-		    var webmedia = new WebMedia();
-		    var mediaNodesItem = mediaNodes.item(i);
-		    var contentItem = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
                "content").item(0);
-		    
-		    //potential nullable item
-		    var keywordsItem = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
                "keywords").item(0).getFirstChild();
-		    
-		    webmedia.type = MediaType.video;
-		    webmedia.id = \
                mediaNodesItem.getElementsByTagName("id").item(0).getFirstChild().getNodeValue();
                
-		    webmedia.title = \
                mediaNodesItem.getElementsByTagName("title").item(0).getFirstChild().getNodeValue();
                
-		    webmedia.description = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
                "description").item(0).getFirstChild().getNodeValue();
-		    
-		    if (typeof(keywordsItem) !== "undefined" && keywordsItem != null)
-		      webmedia.keywords = keywordsItem.getNodeValue().split(",");
-		    
-		    webmedia.author = \
                mediaNodesItem.getElementsByTagName("author").item(0).getFirstChild().getNodeValue();
                
-		    webmedia.published = \
mediaNodesItem.getElementsByTagName("pubDate").item(0).getFirstChild().getNodeValue();
                
-		    webmedia.link = \
                contentItem.getAttributes().getNamedItem("url").getNodeValue();
-		    webmedia.width = \
                contentItem.getAttributes().getNamedItem("height").getNodeValue();;
-		    webmedia.height = \
                contentItem.getAttributes().getNamedItem("width").getNodeValue();;
-		    webmedia.thumbnailLink = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
                "thumbnail").item(0).getAttributes().getNamedItem("url").getNodeValue();
                
-		    setData(webmedia.id, webmedia.toArray());
-		  }catch(e)
-		  {
-		    print("A problem occured while parsing:" + e.message);
-		  }
+		  var webmedia = new WebMedia();
+		  var mediaNodesItem = mediaNodes.item(i);
+		  var contentItem = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"content").item(0); +		  
+		  //potential nullable item
+		  var keywordsItem = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"keywords").item(0).getFirstChild(); +		  
+		  webmedia.type = MediaTypes[VIDEO];
+		  webmedia.id = getID();
+		  webmedia.providerSpecificID = \
mediaNodesItem.getElementsByTagName("id").item(0).getFirstChild().getNodeValue(); +		 \
webmedia.title = mediaNodesItem.getElementsByTagName("title").item(0).getFirstChild().getNodeValue();
 +		  webmedia.description = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"description").item(0).getFirstChild().getNodeValue(); +		  
+		  if (keywordsItem)
+		    webmedia.keywords = keywordsItem.getNodeValue().split(",");
+		  
+		  webmedia.user = \
mediaNodesItem.getElementsByTagName("author").item(0).getFirstChild().getNodeValue(); \
+		  webmedia.published = \
mediaNodesItem.getElementsByTagName("pubDate").item(0).getFirstChild().getNodeValue();
 +		  webmedia.link = contentItem.getAttributes().getNamedItem("url").getNodeValue();
+		  webmedia.width = \
contentItem.getAttributes().getNamedItem("height").getNodeValue(); +		  \
webmedia.height = contentItem.getAttributes().getNamedItem("width").getNodeValue(); \
+		  webmedia.videoDuration = \
contentItem.getAttributes().getNamedItem("duration").getNodeValue(); +		  \
webmedia.videoFormat = \
contentItem.getAttributes().getNamedItem("type").getNodeValue(); +		  \
webmedia.addThumbnail(mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"thumbnail").item(0).getAttributes().getNamedItem("url").getNodeValue(), 0, 0); +		  \
setData(webmedia.id, webmedia.toArray());  }
 	      }catch(e)
 	      {
-		print("A problem occured while parsing:" + e.message);
+		outputErrorMessage(mcObject.name, "", e.message, ErorTypes[PARSINGERROR]);
 	      }
 	    }
   );
@@ -99,7 +105,19 @@ Metacafe.prototype.searchMedia = function(queryParams)
 
 Metacafe.prototype.searchCollection = function(queryParams)
 {
-  
+  outputErrorMessage(this.name, "", "searchCollection", \
ErorTypes[FUNCTIONNOTPROVIDED]); +}
+
+Metacafe.prototype.getUploadedUserMedia = function(queryParams)
+{
+  var user = queryParams['user'];
+  var maxResults = queryParams['max-results'];
+  var page = queryParams['page'];
+}
+
+Metacafe.prototype.getUploadedUserCollection = function(queryParams)
+{
+  outputErrorMessage(this.name, "", "getUploadedUserCollection", \
ErorTypes[FUNCTIONNOTPROVIDED]);  }
 
 Metacafe.prototype.toString = function()
diff --git a/dataengines/addons/photobucket/contents/code/main.js \
b/dataengines/addons/photobucket/contents/code/main.js index 87b98fb..b4bcfc6 100644
--- a/dataengines/addons/photobucket/contents/code/main.js
+++ b/dataengines/addons/photobucket/contents/code/main.js
@@ -24,161 +24,314 @@ function Photobucket()
   print("Hello photobucket");
   this.consumerKey = "149830244";
   this.consumerSecret = "0549aaac2e9552d174f73835c2d1edf3";
-  this.baseUrl = "http://api.photobucket.com";
+  this.baseUrl = "http://api.photobucket.com/";
+  this.name = "photobucket";
   photobucketObject = this;
 }
 
 Photobucket.prototype.searchMedia = function(queryParams)
 {
-  var query = queryParams['text'];
-  if (query === "" || query === "undefined")
-  {
-    print("No query defined");
-    return;
-  }
-
-  var url = this.buildUrl(this.baseUrl + "/search/" + query + "/image", \
                "format=xml");
-  print(url);
-  
-  if (url == "" || url == undefined)
-  {
-    print("No photobucket url found");
-    return;
-  }
+  var text = queryParams['text'];
+  var maxResults = queryParams['max-results'];
+  var page = queryParams['page'];
+  var media = queryParams['media'];
   
-  var result = "";
+  if (maxResults != "")
+    outputWarningMessage(this.name, maxResults, WarningTypes[PARAMIGNORED]);
+  // set default value for media. default value is photo
+  if (!media || media == "" || media == MediaTypes[PHOTO])
+    media = "image";
+  if (media == MediaTypes[VIDEO])
+    media = "video";
   
-  doRequest(engine, url,
-	    function(job, data)
-	    {
-	      result += data.valueOf();
-	    },
-	    function(job)
-	    {
-	      try{
-
-		var objDom = new XMLDoc(result, xmlError);
-		var objDomTree = objDom.docNode;
-
-		if (photobucketObject.isErrorMessage(objDomTree))
-		  return;
-		
-		var photoNodes = objDomTree.getElements("content")[0].getElements("result")[0].getElements("primary")[0].getElements("media");
                
-		if (photoNodes.length == 0)
-		{
-		  setData("Photobucket", "Error", "No results for " + query + " found");
-		  return;
-		}
-		print(photoNodes.length);
-
-		for (var i = 0; i < photoNodes.length; i++)
-		{
-		  try{
-		    var webmedia = new WebMedia();
-		    
-		    //potential nullable items
-		    var descriptionItem = photoNodes[i].getElements("decription")[0];
-		    
-		    webmedia.type = MediaType.photo;
-		    
-		    //in photobucket the attribute 'description_id' is somehow always an empty \
                string
-		    webmedia.id = i;//photoNodes[i].getAttribute("description_id");
-
-		    webmedia.title = photoNodes[i].getElements("title")[0].getText();
-		    
-		    if (typeof(descriptionItem) !== "undefined" && descriptionItem != null)
-		      webmedia.description = descriptionItem.getText();
-		    
-		    webmedia.author = photoNodes[i].getAttribute("username");
-		    webmedia.published = photoNodes[i].getAttribute("uploaddate");
-		    webmedia.link = photoNodes[i].getElements("url")[0].getText();
-		    webmedia.thumbnailLink = photoNodes[i].getElements("thumb")[0].getText();
-		    setData(webmedia.id, webmedia.toArray());
-	      //       getPhotoInfo2(webmedia);
-		  }
-		  catch(e)
+  this.buildPhotobucketUrl(this.baseUrl + "search/" + text + "/" + media, 
+      {
+	"page" : page
+      },
+      function(url)
+      {
+	print(url);
+    
+	var result = "";
+	
+	doRequest(engine, url,
+		  function(job, data)
 		  {
-		    print("A problem occured while parsing: " + e.message);
+		    result += data.valueOf();
+		  },
+		  function(job)
+		  {
+		    try{
+		      print("Parsing...");
+		      print(result);
+		      var objDom = new XMLDoc(result, xmlError);
+		      var objDomTree = objDom.docNode;
+
+		      if (photobucketObject.isErrorMessage(objDomTree))
+			return;
+		      
+		      var photoNodes = \
objDomTree.getElements("content")[0].getElements("result")[0].getElements("primary")[0].getElements("media");
 +		      if (photoNodes.length == 0)
+		      {
+			outputErrorMessage(photobucketObject.name, "", text, ErrorTypes[NORESULTS]);
+			return;
+		      }
+		      print(photoNodes.length);
+
+		      for (var i = 0; i < photoNodes.length; i++)
+		      {
+			var webmedia = new WebMedia();
+			
+			//potential nullable items
+			var descriptionItem = photoNodes[i].getElements("decription")[0];
+			
+			var typeItem = photoNodes[i].getElements("type")[0];
+			if (typeItem && typeItem.getText() == "video")
+			  webmedia.type = MediaTypes[VIDEO];
+			else
+			  webmedia.type = MediaTypes[PHOTO];
+			
+			//in photobucket the attribute 'description_id' is somehow always an empty string
+			webmedia.id = i;
+			webmedia.providerSpecificID = photoNodes[i].getAttribute("description_id");
+
+			webmedia.title = photoNodes[i].getElements("title")[0].getText();
+			
+			if (descriptionItem)
+			  webmedia.description = descriptionItem.getText();
+			
+			webmedia.user = photoNodes[i].getAttribute("username");
+			webmedia.published = UnixToDate(photoNodes[i].getAttribute("uploaddate"));
+			webmedia.link = photoNodes[i].getElements("url")[0].getText();
+			webmedia.addThumbnail(photoNodes[i].getElements("thumb")[0].getText(), "", "");
+			setData(webmedia.id, webmedia.toArray());
+		      }
+		    }
+		    catch(e)
+		    {
+		      outputErrorMessage(photobucketObject.name, "", e.message, \
ErrorTypes[PARSINGERROR]); +		    }
 		  }
-		}
-	      }
-	      catch(e)
-	      {
-		print("A problem occured while parsing: " + e.message);
-	      }
-	    }
-  );  
+	  );  
+      }
+  );
+  
 }
 
 
 Photobucket.prototype.searchCollection = function(queryParams)
 {
+  var text = queryParams['text'];
+  var result = "";
+  this.buildPhotobucketUrl(this.baseUrl + "search/" + text + "/group", 
+			   null,
+			   function(url)
+			   {
+			    doRequest(engine, url,
+				      function(job, data)
+				      {
+					result += data.valueOf();
+				      },
+				      function(job)
+				      {
+					try{
+					  var objDom = new XMLDoc(result, xmlError);
+					  var objDomTree = objDom.docNode;
+					  
+					  if (photobucketObject.isErrorMessage(objDomTree))
+					    return;
+					  var groupNodes = objDomTree.getElements("content")[0].getElements("album");
+					  if (groupNodes.length == 0)
+					  {
+					    outputErrorMessage(photobucketObject.name, "", text, \
ErrorTypes[NORESULTS]); +					    return;
+					  }
+					  for (var i = 0; i < groupNodes.length; i++)
+					  {
+					    var webmediaColl = new WebMediaCollection();
+					    
+					    //potential nullable items
+					    var descriptionItem = groupNodes[i].getElements("decription")[0];
+					    
+					    webmediaColl.id = getID();//groupNodes[i].getAttribute("description_id");
+					    
+					    webmediaColl.providerSpecificID = \
groupNodes[i].getElements("id")[0].getText(); +					    webmediaColl.title = \
groupNodes[i].getAttribute("name"); +					    
+					    if (typeof(descriptionItem) !== "undefined" && descriptionItem != null)
+					      webmediaColl.description = descriptionItem.getText();
+					    
+					  //  webmediaColl.author = user;
+					//    webmediaColl.published = groupNodes[i].getAttribute("uploaddate");
+					//    webmediaColl.link = groupNodes[i].getElements("url")[0].getText();
+					//    webmediaColl.thumbnailLink = \
groupNodes[i].getElements("thumb")[0].getText(); +					    setData(webmediaColl.id, \
webmediaColl.toArray()); +				      //       getPhotoInfo2(webmedia);
+					  }
+					}
+					catch(e)
+					{
+					  outputErrorMessage(photobucketObject.name, "", e.message, \
ErrorTypes[PARSINGERROR]); +					}
+				      }
+			    );
+			   }
+       );
+}
+
+Photobucket.prototype.getUserUploadedMedia = function(queryParams)
+{
   var user = queryParams['user'];
-  if (user === "" || user === "undefined")
-  {
-    print("no user defined");
-    return;
-  }
-  var url = this.buildUrl(this.baseUrl + "/album/" + user, "format=xml");
-  print(url);
-  if (url == "" || url == undefined)//&view=flat&recurse=1
-  {
-    print("No photobucket url found");
-    return;
-  }
+  var maxResults = queryParams['max-results'];
+  var page = queryParams['page'];
   
-  var result = "";
   
-  doRequest(engine, url,
-	    function(job, data)
-	    {
-	      result += data.valueOf();
-	    },
-	    function(job)
-	    {
-	      try{
-		var objDom = new XMLDoc(result, xmlError);
-		var objDomTree = objDom.docNode;
-		
-		if (photobucketObject.isErrorMessage(objDomTree))
-		  return;
-		var albumNodes = objDomTree.getElements("content")[0].getElements("album");
-		if (albumNodes.length == 0)
-		  return;
-		for (var i = 0; i < albumNodes.length; i++)
-		{
-		  try{
-		    var webmediaColl = new WebMediaCollection();
-		    
-		    //potential nullable items
-		    var descriptionItem = albumNodes[i].getElements("decription")[0];
-		    
-		    webmediaColl.id = i;//albumNodes[i].getAttribute("description_id");
-
-		    webmediaColl.title = albumNodes[i].getAttribute("name");
-		    
-		    if (typeof(descriptionItem) !== "undefined" && descriptionItem != null)
-		      webmediaColl.description = descriptionItem.getText();
-		    
-		    webmediaColl.author = user;
-		//    webmediaColl.published = albumNodes[i].getAttribute("uploaddate");
-		//    webmediaColl.link = albumNodes[i].getElements("url")[0].getText();
-		//    webmediaColl.thumbnailLink = \
                albumNodes[i].getElements("thumb")[0].getText();
-		    setData(webmediaColl.id, webmediaColl.toArray());
-	      //       getPhotoInfo2(webmedia);
-		  }
-		  catch(e)
-		  {
-		    print("A problem occured while parsing: " + e.message);
-		  }
-		}
-	      }
-	      catch(e)
-	      {
-		print("A problem occured while parsing: " + e.message);
-	      }
-	    }
-  );
+  this.buildPhotobucketUrl(this.baseUrl + "/user/" + user + "/search",
+			   {
+			    "perpage" : maxResults
+			   },
+			   function(url)
+			   {
+			      var result = "";
+	  
+			      doRequest(engine, url,
+					function(job, data)
+					{
+					  result += data.valueOf();
+					},
+					function(job)
+					{
+					  try{
+					    print("Parsing...");
+					    print(result);
+					    var objDom = new XMLDoc(result, xmlError);
+					    var objDomTree = objDom.docNode;
+
+					    if (photobucketObject.isErrorMessage(objDomTree))
+					      return;
+					    
+					    var photoNodes = \
objDomTree.getElements("content")[0].getElements("result")[0].getElements("primary")[0].getElements("media");
 +					    if (photoNodes.length == 0)
+					    {
+					      outputErrorMessage(photobucketObject.name, "", text, \
ErrorTypes[NORESULTS]); +					      return;
+					    }
+					    print(photoNodes.length);
+
+					    for (var i = 0; i < photoNodes.length; i++)
+					    {
+					    
+					      var webmedia = new WebMedia();
+					      
+					      //potential nullable items
+					      var descriptionItem = photoNodes[i].getElements("decription")[0];
+					      
+					      var typeItem = photoNodes[i].getElements("type")[0];
+					      if (typeItem && typeItem.getText() == "video")
+						webmedia.type = MediaTypes[VIDEO];
+					      else
+						webmedia.type = MediaTypes[PHOTO];
+					      
+					      //in photobucket the attribute 'description_id' is somehow always an \
empty string +					      webmedia.id = i;
+					      webmedia.providerSpecificID = \
photoNodes[i].getAttribute("description_id"); +
+					      webmedia.title = photoNodes[i].getElements("title")[0].getText();
+					      
+					      if (descriptionItem)
+						webmedia.description = descriptionItem.getText();
+					      
+					      webmedia.user = photoNodes[i].getAttribute("username");
+					      webmedia.published = \
UnixToDate(photoNodes[i].getAttribute("uploaddate")); +					      webmedia.link = \
photoNodes[i].getElements("url")[0].getText(); +					      \
webmedia.addThumbnail(photoNodes[i].getElements("thumb")[0].getText(), "", ""); \
+					      setData(webmedia.id, webmedia.toArray()); +					    }
+					  }
+					  catch(e)
+					  {
+					    outputErrorMessage(photobucketObject.name, "", e.message, \
ErrorTypes[PARSINGERROR]); +					  }
+					}
+				);  
+			    }
+       );
+}
+
+Photobucket.prototype.getUserUploadedCollection = function(queryParams)
+{
+  var user = queryParams['user'];
+  var maxResults = queryParams['max-results'];
+  var page = queryParams['page'];
+  
+  
+  this.buildPhotobucketUrl(this.baseUrl + "/user/" + user + "/group",
+			   null,
+			   function(url)
+			   {
+			      var result = "";
+	  
+			      doRequest(engine, url,
+					function(job, data)
+					{
+					  result += data.valueOf();
+					},
+					function(job)
+					{
+					  try{
+					    print("Parsing...");
+					    print(result);
+					    var objDom = new XMLDoc(result, xmlError);
+					    var objDomTree = objDom.docNode;
+
+					    if (photobucketObject.isErrorMessage(objDomTree))
+					      return;
+					    
+					    var photoNodes = \
objDomTree.getElements("content")[0].getElements("result")[0].getElements("primary")[0].getElements("media");
 +					    if (photoNodes.length == 0)
+					    {
+					      outputErrorMessage(photobucketObject.name, "", text, \
ErrorTypes[NORESULTS]); +					      return;
+					    }
+					    print(photoNodes.length);
+
+					    for (var i = 0; i < photoNodes.length; i++)
+					    {
+					      var webmedia = new WebMedia();
+					      
+					      //potential nullable items
+					      var descriptionItem = photoNodes[i].getElements("decription")[0];
+					      
+					      var typeItem = photoNodes[i].getElements("type")[0];
+					      if (typeItem && typeItem.getText() == "video")
+						webmedia.type = MediaTypes[VIDEO];
+					      else
+						webmedia.type = MediaTypes[PHOTO];
+					      
+					      //in photobucket the attribute 'description_id' is somehow always an \
empty string +					      webmedia.id = i;
+					      webmedia.providerSpecificID = \
photoNodes[i].getAttribute("description_id"); +
+					      webmedia.title = photoNodes[i].getElements("title")[0].getText();
+					      
+					      if (descriptionItem)
+						webmedia.description = descriptionItem.getText();
+					      
+					      webmedia.user = photoNodes[i].getAttribute("username");
+					      webmedia.published = \
UnixToDate(photoNodes[i].getAttribute("uploaddate")); +					      webmedia.link = \
photoNodes[i].getElements("url")[0].getText(); +					      \
webmedia.addThumbnail(photoNodes[i].getElements("thumb")[0].getText(), "", ""); \
+					      setData(webmedia.id, webmedia.toArray()); +					    }
+					  }
+					  catch(e)
+					  {
+					    outputErrorMessage(photobucketObject.name, "", e.message, \
ErrorTypes[PARSINGERROR]); +					  }
+					}
+				);  
+			    }
+       );
 }
 
 Photobucket.prototype.toString = function()
@@ -186,82 +339,69 @@ Photobucket.prototype.toString = function()
   return "Photobucket";
 }
 
-Photobucket.prototype.buildUrl = function(url, format) {
-  try 
-  {
-    if( url == undefined ) 
-    {
-      url = "http://api.photobucket.com/ping";
-    }
-
-    if( format == undefined ) 
+Photobucket.prototype.buildPhotobucketUrl = function(url, optionalParams, \
onUrlCreated) +{
+  var pbUrl = "";
+  this.getTimestamp(
+    function(timestamp)
     {
-      format = "format=xml";
+      var params = {
+		      "format" : "xml",
+		      "oauth_consumer_key" : encodeURIComponent(photobucketObject.consumerKey),
+		      "oauth_nonce" : encodeURIComponent("nonce" + timestamp),
+		      "oauth_signature_method" : encodeURIComponent("HMAC-SHA1"),
+		      "oauth_timestamp" : encodeURIComponent(timestamp),
+		      "oauth_version" : encodeURIComponent("1.0")
+		    };
+      if (optionalParams)
+      {
+	for (var key in optionalParams)
+	  params[key] = encodeURIComponent(optionalParams[key]);
+      }
+      var query = photobucketObject.makeQuery(params);
+      //print(encodeURIComponent(query));
+      var base = encodeURIComponent("GET") + "&" + encodeURIComponent(url) + "&" + \
encodeURIComponent(query); +      print(base);
+      var base2 = encodeURIComponent("GET") + "&" + url + "&" + query;
+      print(base2);
+      params["oauth_signature"] = getSignature(photobucketObject.consumerSecret + \
"&", base); +
+    //  print(photobucketObject.makeQuery(params));
+      pbUrl = buildUrl(url, params);
+      print(pbUrl);
+      onUrlCreated(pbUrl);
     }
+  );
+}
 
-    var timestamp = getTimestamp();
-    auth_nonce="nonce" + timestamp;
-
-    auth_method = "HMAC-SHA1";
-    auth_timestamp = "" + timestamp;
-
-    auth_version="1.0";
-
-    auth_consumer = "&oauth_consumer_key="+ encodeURIComponent( this.consumerKey );
-    nonce = "&oauth_nonce="+ encodeURIComponent( auth_nonce );
-    auth_sig_method = "&oauth_signature_method="+ encodeURIComponent( auth_method );
-    auth_timestamp = "&oauth_timestamp="+ encodeURIComponent( auth_timestamp );
-    version = "&oauth_version=" + encodeURIComponent( auth_version );
-
-    paramstring = format + auth_consumer + nonce + auth_sig_method + auth_timestamp \
                + version;
-
-    method = "GET";
-
-    base = encodeURIComponent( method ) + "&" +
-    encodeURIComponent( url ) + "&" +
-    encodeURIComponent( paramstring );
-    print(base);
-    sig_hash = getSignature( this.consumerSecret+"&", base );
-    auth_sign = "oauth_signature=" + sig_hash;
-
-    auth_url = url + "?" + paramstring + "&" + auth_sign;
-    print( ""+ auth_url+"");
-    return auth_url;
-  }
-  catch (err) 
+Photobucket.prototype.makeQuery = function(queryItems)
+{
+  var query = "";
+  for (var key in queryItems)
   {
-      print( "A problem occured while building the url: " + err.message);
+    query += key + "=" + queryItems[key] + "&";
   }
+  if (query.charAt(query.length - 1) == '&')
+    query = query.slice(0, query.length - 1);
+  return query;
 }
 
 Photobucket.prototype.isErrorMessage = function(objDomTree)
 {
-  if (objDomTree.getElements("status")[0].getText() == "Exception")
+  try
+  {
+    if (objDomTree.getElements("status")[0].getText() == "Exception")
+    {
+      var msg = objDomTree.getElements("message")[0].getText();
+      outputErrorMessage(photobucketObject.name, "", "Server response", msg);
+      return true;
+    }
+    return false;
+  }catch(e)
   {
-    var msg = objDomTree.getElements("message")[0].getText();
-    setData(this.toString(), "Error", msg);
-    return true;
+    outputErrorMessage(this.name, "", e.message, ErrorTypes[PARSINGERROR]);
+    return false;
   }
-  return false;
-}
-
-Photobucket.prototype.buildParams = function(queryParams)
-{
-  var params = "";
-  if (queryParams['text'] != null)
-    params += "text=" + queryParams['text'];
-  if (queryParams['max-results'] != null)
-    params += "per-page=" + queryParams['max-results'];
-  if (queryParams['min-results'] != null)
-    params += queryParams['min-results'];
-  if (queryParams['user'] != null)
-    //params += queryParams['user'];
-    print("Parameter user for flickr not supported yet");
-  if (queryParams['tags'] != null)
-    print("Parameter tags for photobucket not supported");
-  if (queryParams['page'] != null)
-    params += "page=" + queryParams['page'];
-  return params;
 }
 
 function getSignature(key, baseString) {
@@ -297,17 +437,32 @@ function xmlError(e)
   });
 }*/
 
-function getTimestamp() {
+Photobucket.prototype.getTimestamp = function(onTimeStampRetrieved) {
 /*  var timestamp = "";
   var io = engine.getUrl("http://api.photobucket.com/time");
   io.data.connect(function(job, data){ timestamp += data.valueOf(); });
   io.finished.connect(function(job){ print(timestamp); return; });
   doRequest(engine, "http://api.photobucket.com/time", function(job, data){ \
timestamp += data.valueOf(); } , function(job){ print(timestamp); });*/  
-  var timestamp = new Date().valueOf();
+  /*var timestamp = new Date().valueOf();
   timestamp = timestamp / 1000;
   timestamp = Math.ceil( timestamp );
-  return timestamp;
+  return timestamp;*/
+  var timestamp = "";
+  var url = buildUrl(this.baseUrl + "time", null);
+  print(url);
+  
+  doRequest(engine, url,
+	    function(job, data)
+	    {
+	      timestamp += data.valueOf();
+	    },
+	    function(job)
+	    {
+	      print(timestamp);
+	      onTimeStampRetrieved(timestamp);
+	    }
+  );
 }
 
 
diff --git a/dataengines/addons/picasa/contents/code/main.js \
b/dataengines/addons/picasa/contents/code/main.js index ec49b8e..6b34379 100644
--- a/dataengines/addons/picasa/contents/code/main.js
+++ b/dataengines/addons/picasa/contents/code/main.js
@@ -78,52 +78,41 @@ Picasa.prototype.searchMedia = function(queryParams)
 		}
 		for (var i = 0; i < mediaNodes.length; i++)
 		{
-		  try
+		  var webmedia = new WebMedia();
+		  var mediaNodesItem = mediaNodes.item(i);
+		  
+		  //potential nullable items
+		  var summaryItem = \
mediaNodesItem.getElementsByTagName("summary").item(0).getFirstChild(); +		  var \
keywordsItem = mediaNodesItem.getElementsByTagNameNS(mediaNS, "keywords").item(0); \
+		   +		  webmedia.type = MediaTypes[PHOTO];
+		  webmedia.id = getID();
+		  webmedia.providerSpecificID = mediaNodesItem.getElementsByTagNameNS(gphotoNS, \
"id").item(0).getFirstChild().getNodeValue(); +		  webmedia.title = \
mediaNodesItem.getElementsByTagName("title").item(0).getFirstChild().getNodeValue(); \
+		  if (summaryItem) +		    webmedia.description = summaryItem.getNodeValue();
+		  if (keywordsItem)
+		    webmedia.keywords = keywordsItem.getFirstChild().getNodeValue().split(",");
+		  webmedia.user = \
mediaNodesItem.getElementsByTagName("author").item(0).getElementsByTagNameNS(gphotoNS, \
"user").item(0).getFirstChild().getNodeValue(); +		  webmedia.authodNick = \
webmedia.user = mediaNodesItem.getElementsByTagName("author").item(0).getElementsByTagNameNS(gphotoNS, \
"nickname").item(0).getFirstChild().getNodeValue(); +		  webmedia.updated = new \
Date(); +		  webmedia.updated.setISO8601(mediaNodesItem.getElementsByTagName("updated").item(0).getFirstChild().getNodeValue());
 +		  webmedia.published = new Date();
+		  webmedia.updated.setISO8601(mediaNodesItem.getElementsByTagName("published").item(0).getFirstChild().getNodeValue());
 +		  webmedia.link = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"content").item(0).getAttributes().getNamedItem("url").getNodeValue(); +		  \
webmedia.width = mediaNodesItem.getElementsByTagNameNS(gphotoNS, \
"width").item(0).getFirstChild().getNodeValue(); +		  webmedia.height = \
mediaNodesItem.getElementsByTagNameNS(gphotoNS, \
"height").item(0).getFirstChild().getNodeValue(); +		  for (var j = 0; j < \
mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"group").item(0).getElementsByTagNameNS(mediaNS, "thumbnail").length; j++)  {
-		    var webmedia = new WebMedia();
-		    var mediaNodesItem = mediaNodes.item(i);
-		    
-		    //potential nullable items
-		    var summaryItem = \
                mediaNodesItem.getElementsByTagName("summary").item(0).getFirstChild();
                
-		    var keywordsItem = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
                "keywords").item(0);
-		    
-		    webmedia.type = MediaTypes[PHOTO];
-		    webmedia.id = getID();
-		    webmedia.providerSpecificID = mediaNodesItem.getElementsByTagNameNS(gphotoNS, \
                "id").item(0).getFirstChild().getNodeValue();
-		    webmedia.title = \
                mediaNodesItem.getElementsByTagName("title").item(0).getFirstChild().getNodeValue();
                
-		    if (summaryItem)
-		      webmedia.description = summaryItem.getNodeValue();
-		    if (keywordsItem)
-		      webmedia.keywords = keywordsItem.getFirstChild().getNodeValue().split(",");
-		    webmedia.user = \
mediaNodesItem.getElementsByTagName("author").item(0).getElementsByTagNameNS(gphotoNS, \
                "user").item(0).getFirstChild().getNodeValue();
-		    webmedia.authodNick = webmedia.user = \
mediaNodesItem.getElementsByTagName("author").item(0).getElementsByTagNameNS(gphotoNS, \
                "nickname").item(0).getFirstChild().getNodeValue();
-		    webmedia.updated = new Date();
-		    webmedia.updated.setISO8601(mediaNodesItem.getElementsByTagName("updated").item(0).getFirstChild().getNodeValue());
                
-		    webmedia.published = new Date();
-		    webmedia.updated.setISO8601(mediaNodesItem.getElementsByTagName("published").item(0).getFirstChild().getNodeValue());
                
-		    webmedia.link = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
                "content").item(0).getAttributes().getNamedItem("url").getNodeValue();
                
-		    webmedia.width = mediaNodesItem.getElementsByTagNameNS(gphotoNS, \
                "width").item(0).getFirstChild().getNodeValue();
-		    webmedia.height = mediaNodesItem.getElementsByTagNameNS(gphotoNS, \
                "height").item(0).getFirstChild().getNodeValue();
-		    for (var j = 0; j < mediaNodesItem.getElementsByTagNameNS(mediaNS, \
                "group").item(0).getElementsByTagNameNS(mediaNS, "thumbnail").length; \
                j++)
-		    {
-		      webmedia.addThumbnail(mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"group").item(0).getElementsByTagNameNS(mediaNS, \
                "thumbnail").item(j).getAttributes().getNamedItem("url").getNodeValue(),
                
-					    mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"group").item(0).getElementsByTagNameNS(mediaNS, \
                "thumbnail").item(j).getAttributes().getNamedItem("height").getNodeValue(),
                
-					    mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"group").item(0).getElementsByTagNameNS(mediaNS, \
                "thumbnail").item(j).getAttributes().getNamedItem("height").getNodeValue());
                
-		    }
-		    webmedia.collectionID = mediaNodesItem.getElementsByTagNameNS(gphotoNS, \
                "albumid").item(0).getFirstChild().getNodeValue();
-		    setData(webmedia.id, webmedia.toArray());
-		  }catch(e)
-		  {
-		    print("A problem occured while parsing: " + e.message);
-		    if (typeof e.message === "undefined")
-		      outputErrorMessage(this.name, "", result);
-		    else
-		      outputErrorMessage(this.name, "", e.message);
+		    webmedia.addThumbnail(mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"group").item(0).getElementsByTagNameNS(mediaNS, \
"thumbnail").item(j).getAttributes().getNamedItem("url").getNodeValue(), +					  \
mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"group").item(0).getElementsByTagNameNS(mediaNS, \
"thumbnail").item(j).getAttributes().getNamedItem("height").getNodeValue(), +					  \
mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"group").item(0).getElementsByTagNameNS(mediaNS, \
"thumbnail").item(j).getAttributes().getNamedItem("height").getNodeValue());  }
+		  webmedia.collectionID = mediaNodesItem.getElementsByTagNameNS(gphotoNS, \
"albumid").item(0).getFirstChild().getNodeValue(); +		  setData(webmedia.id, \
webmedia.toArray());  }
 	      }catch(e)
 	      {
-		print("A problem occured while parsing: " + e.message);
 		if (typeof e.message === "undefined")
 		  outputErrorMessage(this.name, "", result);
 		else
@@ -144,21 +133,11 @@ Picasa.prototype.getUploadedUserMedia = function(queryParams)
   var user = queryParams['user'];
   var maxResults = queryParams['max-results'];
   var page = queryParams['page'];
-  var collectionID = queryParams['providerCollectionID'];
   
   // calculate the index of the first picture in each page
   var startIndex = (maxResults * page) - (maxResults - 1);;
   
-  var baseUrl = "";
-  
-  // check wheather to get the photos of the user
-  if (collectionID == "" || !collectionID)
-    baseUrl = this.baseUrl + "user/" + user;
-  else
-    // or just to get the photos of a specific album with collectionID of the user
-    baseUrl = this.baseUrl + "user/" + user + "/albumid/" + collectionID;
-  
-  var url = buildUrl(baseUrl,
+  var url = buildUrl(this.baseUrl + "user/" + user,
 		    {
 		      "kind" : "photo",
 		      "start-index" : startIndex,
@@ -197,59 +176,46 @@ Picasa.prototype.getUploadedUserMedia = function(queryParams)
 		var thumb = null;
 		for (var i = 0; i < mediaNodes.length; i++)
 		{
-		  try
+		  var webmedia = new WebMedia();
+		  var mediaNodesItem = mediaNodes.item(i);
+		  
+		  //potential nullable items
+		  var summaryItem = \
mediaNodesItem.getElementsByTagName("summary").item(0).getFirstChild(); +		  var \
keywordsItem = mediaNodesItem.getElementsByTagNameNS(mediaNS, "keywords").item(0);    \
 +		  
+		  webmedia.type = MediaTypes[PHOTO];
+		  webmedia.id = getID();//mediaNodesItem.getElementsByTagName("id").item(0).getFirstChild().getNodeValue();
 +		  webmedia.providerSpecificID = mediaNodesItem.getElementsByTagNameNS(gphotoNS, \
"id").item(0).getFirstChild().getNodeValue(); +		  // those two elements are in each \
webmedia entry +		  webmedia.authorNick = docRoot.getElementsByTagNameNS(gphotoNS, \
"nickname").item(0).getFirstChild().getNodeValue(); +		  webmedia.user = \
docRoot.getElementsByTagNameNS(gphotoNS, \
"user").item(0).getFirstChild().getNodeValue(); +		  webmedia.provider = this.name;
+		  webmedia.title = \
mediaNodesItem.getElementsByTagName("title").item(0).getFirstChild().getNodeValue(); \
+		  if (summaryItem) +		    webmedia.description = summaryItem.getNodeValue();
+		  
+		  if (keywordsItem )
+		    webmedia.keywords = keywordsItem.getFirstChild().getNodeValue().split(",");
+		  
+		  webmedia.updated = new Date();
+		  webmedia.updated.setISO8601(mediaNodesItem.getElementsByTagName("updated").item(0).getFirstChild().getNodeValue());
 +		  webmedia.published = new Date();
+		  webmedia.updated.setISO8601(mediaNodesItem.getElementsByTagName("published").item(0).getFirstChild().getNodeValue());
 +		  webmedia.link = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"content").item(0).getAttributes().getNamedItem("url").getNodeValue(); +		  \
webmedia.width = mediaNodesItem.getElementsByTagNameNS(gphotoNS, \
"width").item(0).getFirstChild().getNodeValue(); +		  webmedia.height = \
mediaNodesItem.getElementsByTagNameNS(gphotoNS, \
"height").item(0).getFirstChild().getNodeValue(); +		  
+		  for (var j = 0; j < mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"group").item(0).getElementsByTagNameNS(mediaNS, "thumbnail").length; j++)  {
-		    var webmedia = new WebMedia();
-		    var mediaNodesItem = mediaNodes.item(i);
-		    
-		    //potential nullable items
-		    var summaryItem = \
                mediaNodesItem.getElementsByTagName("summary").item(0).getFirstChild();
                
-		    var keywordsItem = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
                "keywords").item(0);    
-		    
-		    webmedia.type = MediaTypes[PHOTO];
-		    webmedia.id = \
getID();//mediaNodesItem.getElementsByTagName("id").item(0).getFirstChild().getNodeValue();
                
-		    webmedia.providerSpecificID = mediaNodesItem.getElementsByTagNameNS(gphotoNS, \
                "id").item(0).getFirstChild().getNodeValue();
-		    // those two elements are in each webmedia entry
-		    webmedia.authorNick = docRoot.getElementsByTagNameNS(gphotoNS, \
                "nickname").item(0).getFirstChild().getNodeValue();
-		    webmedia.user = docRoot.getElementsByTagNameNS(gphotoNS, \
                "user").item(0).getFirstChild().getNodeValue();
-		    webmedia.provider = this.name;
-		    webmedia.title = \
                mediaNodesItem.getElementsByTagName("title").item(0).getFirstChild().getNodeValue();
                
-		    if (summaryItem)
-		      webmedia.description = summaryItem.getNodeValue();
-		    
-		    if (keywordsItem )
-		      webmedia.keywords = keywordsItem.getFirstChild().getNodeValue().split(",");
-		    
-		    webmedia.updated = new Date();
-		    webmedia.updated.setISO8601(mediaNodesItem.getElementsByTagName("updated").item(0).getFirstChild().getNodeValue());
                
-		    webmedia.published = new Date();
-		    webmedia.updated.setISO8601(mediaNodesItem.getElementsByTagName("published").item(0).getFirstChild().getNodeValue());
                
-		    webmedia.link = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
                "content").item(0).getAttributes().getNamedItem("url").getNodeValue();
                
-		    webmedia.width = mediaNodesItem.getElementsByTagNameNS(gphotoNS, \
                "width").item(0).getFirstChild().getNodeValue();
-		    webmedia.height = mediaNodesItem.getElementsByTagNameNS(gphotoNS, \
                "height").item(0).getFirstChild().getNodeValue();
-		    
-		    for (var j = 0; j < mediaNodesItem.getElementsByTagNameNS(mediaNS, \
                "group").item(0).getElementsByTagNameNS(mediaNS, "thumbnail").length; \
                j++)
-		    {
-		      webmedia.addThumbnail(mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"group").item(0).getElementsByTagNameNS(mediaNS, \
                "thumbnail").item(j).getAttributes().getNamedItem("url").getNodeValue(),
                
-					    mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"group").item(0).getElementsByTagNameNS(mediaNS, \
                "thumbnail").item(j).getAttributes().getNamedItem("height").getNodeValue(),
                
-					    mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"group").item(0).getElementsByTagNameNS(mediaNS, \
                "thumbnail").item(j).getAttributes().getNamedItem("height").getNodeValue());
                
-		    }
-		    webmedia.collectionID = mediaNodesItem.getElementsByTagNameNS(gphotoNS, \
                "albumid").item(0).getFirstChild().getNodeValue();
-		    setData(webmedia.id, webmedia.toArray());
-		    
-		  }catch(e)
-		  {
-		    print("A problem occured while parsing: " + e.message);
-		    if (typeof e.message === "undefined")
-		      outputErrorMessage(this.name, "", result);     
-		    else
-		      outputErrorMessage(this.name, "", e.message);
+		    webmedia.addThumbnail(mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"group").item(0).getElementsByTagNameNS(mediaNS, \
"thumbnail").item(j).getAttributes().getNamedItem("url").getNodeValue(), +					  \
mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"group").item(0).getElementsByTagNameNS(mediaNS, \
"thumbnail").item(j).getAttributes().getNamedItem("height").getNodeValue(), +					  \
mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"group").item(0).getElementsByTagNameNS(mediaNS, \
"thumbnail").item(j).getAttributes().getNamedItem("height").getNodeValue());  }
+		  webmedia.collectionID = mediaNodesItem.getElementsByTagNameNS(gphotoNS, \
"albumid").item(0).getFirstChild().getNodeValue(); +		  setData(webmedia.id, \
webmedia.toArray());  }
-		print("Job done");
 	      }catch(e)
 	      {
-		print("A problem occured while parsing: " + e.message);
 		if (typeof e.message === "undefined")
 		  outputErrorMessage(this.name, "", result);     
 		else
@@ -301,40 +267,29 @@ Picasa.prototype.getUploadedUserCollection = \
function(queryParams)  
 		for (var i = 0; i < mediaNodes.length; i++)
 		{
-		  try
-		  {
-		    var webmediaCollection = new WebMediaCollection();
-		    var mediaNodesItem = mediaNodes.item(i);
-		    var mediaEntriesUrl = null;
-		    
-		    //potential nullable item
-		    var descriptionItem = \
                mediaNodesItem.getElementsByTagName("summary").item(0).getFirstChild();
                
-		    
-		    webmediaCollection.id = getID();
-		    webmediaCollection.providerSpecificID = \
                mediaNodesItem.getElementsByTagName("id").item(0).getFirstChild().getNodeValue();
                
-		    webmediaCollection.title = \
mediaNodesItem.getElementsByTagName("title").item(0).getFirstChild().getNodeValue();  \
                
-		    if (descriptionItem)
-		      webmediaCollection.description = descriptionItem.getNodeValue();
-		    //webmedia.keywords = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
                "keywords").item(0).getFirstChild().getNodeValue().split(",");
-		    webmediaCollection.link =  \
                mediaNodesItem.getElementsByTagName("id").item(0).getFirstChild().getNodeValue();
                
-		    webmediaCollection.user = user;
-		    webmediaCollection.updated = new Date();
-		    webmediaCollection.updated.setISO8601(mediaNodesItem.getElementsByTagName("updated").item(0).getFirstChild().getNodeValue());
                
-		    webmediaCollection.published = new Date();
-		    webmediaCollection.updated.setISO8601(mediaNodesItem.getElementsByTagName("published").item(0).getFirstChild().getNodeValue());
                
-		    setData(webmediaCollection.id, webmediaCollection.toArray());
-		  }catch(e)
-		  {
-		    print("A problem occured while parsing: " + e.message);
-		    if (typeof e.message === "undefined")
-		      outputErrorMessage(this.name, "", result);     
-		    else
-		      outputErrorMessage(this.name, "", e.message);
-		  }
+		  var webmediaCollection = new WebMediaCollection();
+		  var mediaNodesItem = mediaNodes.item(i);
+		  var mediaEntriesUrl = null;
+		  
+		  //potential nullable item
+		  var descriptionItem = \
mediaNodesItem.getElementsByTagName("summary").item(0).getFirstChild(); +		  
+		  webmediaCollection.id = getID();
+		  webmediaCollection.providerSpecificID = \
mediaNodesItem.getElementsByTagName("id").item(0).getFirstChild().getNodeValue(); +		 \
webmediaCollection.title = \
mediaNodesItem.getElementsByTagName("title").item(0).getFirstChild().getNodeValue();  \
 +		  if (descriptionItem)
+		    webmediaCollection.description = descriptionItem.getNodeValue();
+		  //webmedia.keywords = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"keywords").item(0).getFirstChild().getNodeValue().split(","); +		  \
webmediaCollection.link =  \
mediaNodesItem.getElementsByTagName("id").item(0).getFirstChild().getNodeValue(); +		 \
webmediaCollection.user = user; +		  webmediaCollection.updated = new Date();
+		  webmediaCollection.updated.setISO8601(mediaNodesItem.getElementsByTagName("updated").item(0).getFirstChild().getNodeValue());
 +		  webmediaCollection.published = new Date();
+		  webmediaCollection.updated.setISO8601(mediaNodesItem.getElementsByTagName("published").item(0).getFirstChild().getNodeValue());
 +		  setData(webmediaCollection.id, webmediaCollection.toArray());
 		}
 	      }catch(e)
 	      {
-		print("A problem occured while parsing: " + e.message);
 		if (typeof e.message === "undefined")
 		  outputErrorMessage(this.name, "", result);     
 		else
diff --git a/dataengines/addons/veoh/contents/code/main.js \
b/dataengines/addons/veoh/contents/code/main.js index 64c2687..74c2893 100644
--- a/dataengines/addons/veoh/contents/code/main.js
+++ b/dataengines/addons/veoh/contents/code/main.js
@@ -24,18 +24,26 @@ function Veoh()
   print("Hello veoh");
   this.baseUrl = "http://www.veoh.com/rest/v2/execute.xml";
   this.apiKey = "A73F9B59-0A24-23C3-B376-1A57CCA2C00B";
+  this.name = "veoh";
   veohObject = this;
 }
 
 Veoh.prototype.searchMedia = function(queryParams)
 {
-  var query = queryParams['text'];
-  if (query === "" || typeof query === "undefined")
-  {
-    print("no query defined");
-    return;
-  }
-  var url = this.baseUrl + "?method=veoh.search.video&apiKey=" + this.apiKey + \
"&userQuery=" + query; +  var text = queryParams['text'];
+  var maxResults = queryParams['max-results'];
+  var page = queryParams['page'];
+  
+  // zero based index
+  var offset = (maxResults  * page) - maxResults;
+  var url = buildUrl(this.baseUrl, 
+		    {
+		      "method" : "veoh.search.video",
+		      "apiKey" : this.apiKey,
+		      "userQuery" : text,
+		      "maxResults" : maxResults,
+		      "offset" : offset
+		    });
   print(url);
   var result = "";
   doRequest(engine, url, 
@@ -55,33 +63,30 @@ Veoh.prototype.searchMedia = function(queryParams)
 	
 	var videoNodes = objDomTree.getElements("videoList")[0].getElements("video");
 	if (videoNodes.length == 0)
-	  print("photonodes is empty");
-	
+	{
+	  errorMessage(veohObject.name, "", text, ErrorTypes[NORESULTS]);
+	  return;
+	}
 	for (var i = 0; i < videoNodes.length; i++)
 	{
-	  try
-	  {
-	    var webmedia = new WebMedia();
-	    
-	    webmedia.type = MediaType.video;
-	    
-	    webmedia.id = videoNodes[i].getAttribute("videoId");
-	    webmedia.title = videoNodes[i].getAttribute("title");
-	    webmedia.description = videoNodes[i].getAttribute("description");
-	    webmedia.keywords = videoNodes[i].getAttribute("tags").split(" ");
-	    webmedia.author = videoNodes[i].getAttribute("username");
-	    webmedia.published = new Date(videoNodes[i].getAttribute("dateAdded"));
-	    webmedia.link = videoNodes[i].getAttribute("previewUrl");
-	    webmedia.thumbnailLink = videoNodes[i].getAttribute("highResImage");
-	    setData(webmedia.id, webmedia.toArray());
-	  }catch(e)
-	  {
-	    print("A problem occured while parsing:" + e.message);
-	  }
+	  var webmedia = new WebMedia();
+	  
+	  webmedia.type = MediaTypes[VIDEO];
+	  
+	  webmedia.id = getID();
+	  webmedia.providerSpecificID = videoNodes[i].getAttribute("videoId");
+	  webmedia.title = videoNodes[i].getAttribute("title");
+	  webmedia.description = videoNodes[i].getAttribute("description");
+	  webmedia.keywords = videoNodes[i].getAttribute("tags").split(" ");
+	  webmedia.user = videoNodes[i].getAttribute("username");
+	  webmedia.published = new Date(videoNodes[i].getAttribute("dateAdded"));
+	  webmedia.link = videoNodes[i].getAttribute("previewUrl");
+	  webmedia.addThumbnai(videoNodes[i].getAttribute("highResImage"), 0, 0);
+	  setData(webmedia.id, webmedia.toArray());
 	}
       }catch(e)
       {
-	print("A problem occured while parsing:" + e.message);
+	outputErrorMessage(veohObject.name, "", e.message, ErrorTypes[PARSINGERROR]);
       }
     }
   );
@@ -89,10 +94,14 @@ Veoh.prototype.searchMedia = function(queryParams)
 
 Veoh.prototype.searchCollection = function(queryParams)
 {
-  var query = queryParams['text'];
-  if (query === "" || typeof(query) == "undefined")
-    return;
-  var url = this.baseUrl + "?method=veoh.search.collection&userQuery=" + query + \
"&apiKey=" + this.apiKey; +  var text = queryParams['text'];
+  
+  var url = buildUrl(this.baseUrl, 
+		     {
+		       "method" : "veoh.search.collection",
+		       "userQuery" : text,
+		       "apiKey" : this.apiKey
+		     });
   var result = "";
   print(url);
   doRequest(engine, url,
@@ -108,35 +117,101 @@ Veoh.prototype.searchCollection = function(queryParams)
 	var objDomTree = objDom.docNode;
 	
 	var videosetNodes = \
                objDomTree.getElements("collections")[0].getElements("collection");
-	if (typeof(videosetNodes) === "undefined" || videosetNodes == null || \
videosetNodes.length == 0) +	if (!videosetNodes || videosetNodes.length == 0)
 	{
-	  print("No collections");
+	  outputErrorMessage(veohObject.name, "", text, ErrorTypes[NORESULTS]);
 	  return;
 	}
 	for (var i = 0; i < videosetNodes.length; ++i)
 	{
-	  try
-	  {
-	    var webmediaCollection = new WebMediaCollection();
-	    webmediaCollection.id = videosetNodes[i].getAttribute("collectionId");
-	    webmediaCollection.title = videosetNodes[i].getAttribute("title");
-	    webmediaCollection.description = videosetNodes[i].getAttribute("description");
-	    webmediaCollection.updated = videosetNodes[i].getAttribute("dateLastModified");
-	    webmediaCollection.author = videosetNodes[i].getAttribute("username");
-	    setData(webmediaCollection.id, webmediaCollection.toArray());
-	  }catch(e)
-	  {
-	    print("A problem occured while parsing: " + e.message);
-	  }
+	  var webmediaCollection = new WebMediaCollection();
+	  webmediaCollection.id = getID();
+	  webmediaCollection.providerSpecificID = \
videosetNodes[i].getAttribute("collectionId"); +	  webmediaCollection.title = \
videosetNodes[i].getAttribute("title"); +	  webmediaCollection.description = \
videosetNodes[i].getAttribute("description"); +	  webmediaCollection.updated = \
videosetNodes[i].getAttribute("dateLastModified"); +	  webmediaCollection.user = \
videosetNodes[i].getAttribute("username"); +	  webmediaCollection.thumbnail = \
videosetNodes[i].getAttribute("highResImageUrl"); +	  setData(webmediaCollection.id, \
webmediaCollection.toArray());  }
       }catch(e)
       {
-	print("A problem occured while parsing: " + e.message);
+	outputErrorMessage(veohObject.name, "", e.message, ErrorTypes[PARSINGERROR]);
       }
     }
   );
 }
 
+Veoh.prototype.getUploadedUserMedia = function(queryParams)
+{
+  var user = queryParams['user'];
+  var maxResults = queryParams['max-results'];
+  var page = queryParams['page'];
+  
+  // zero based index
+  var offset = (maxResults * page) - maxResults;
+  var url = buildUrl(this.baseUrl,
+		     {
+		       "method" : "veoh.people.getPublishedVideos",
+		       "username" : user,
+		       "maxResults" : maxResults,
+		       "offset" : offset,
+		       "apiKey" : this.apiKey
+		     }
+		  );
+  print(url);
+  var result = "";
+  doRequest(engine, url,
+	    function(job, data)
+	    {
+	      result += data.valueOf();
+	    },
+	    function(job)
+	    {
+	      try
+	      {
+		var objDom = new XMLDoc(result, xmlError);
+		var objDomTree = objDom.docNode;
+		
+		if (veohObject.isErrorMessage(objDomTree))
+		  return;
+		
+		var videoNodes = objDomTree.getElements("videoList")[0].getElements("video");
+		if (videoNodes.length == 0)
+		{
+		  errorMessage(veohObject.name, "", text, ErrorTypes[NORESULTS]);
+		  return;
+		}
+		for (var i = 0; i < videoNodes.length; i++)
+		{
+		  var webmedia = new WebMedia();
+		  
+		  webmedia.type = MediaTypes[VIDEO];
+		  
+		  webmedia.id = getID();
+		  webmedia.providerSpecificID = videoNodes[i].getAttribute("videoId");
+		  webmedia.title = videoNodes[i].getAttribute("title");
+		  webmedia.description = videoNodes[i].getAttribute("description");
+		  webmedia.keywords = videoNodes[i].getAttribute("tags").split(" ");
+		  webmedia.user = videoNodes[i].getAttribute("username");
+		  webmedia.published = new Date(videoNodes[i].getAttribute("dateAdded"));
+		  webmedia.link = videoNodes[i].getAttribute("previewUrl");
+		  webmedia.addThumbnail(videoNodes[i].getAttribute("highResImage"), 0, 0);
+		  setData(webmedia.id, webmedia.toArray());
+		}
+	      }catch(e)
+	      {
+		outputErrorMessage(veohObject.name, "", e.message, ErrorTypes[PARSINGERROR]);
+	      }
+	    }
+	  );
+}
+
+Veoh.prototype.getUploadedUserCollection = function(queryParams)
+{
+  outputErrorMessage(this.name, "", "getUploadedUserCollection", \
ErrorTypes[FUNCTIONNOTPROVIDED]); +}
+
 Veoh.prototype.toString = function()
 {
   return "Veoh";
@@ -147,7 +222,7 @@ Veoh.prototype.isErrorMessage = function(objDomTree)
   if (objDomTree.getAttribute("stat") == "fail")
   {
     var msg = objDomTree.getElements("errorList")[0].getAttribute("errorMessage");
-    setData(this.toString(), "Error", msg);
+    outputErrorMessage(this.name,"", "Error", msg);
     return true;
   }
   return false;
diff --git a/dataengines/addons/veoh/metadata.desktop \
b/dataengines/addons/veoh/metadata.desktop new file mode 100644
index 0000000..f1fc643
--- /dev/null
+++ b/dataengines/addons/veoh/metadata.desktop
@@ -0,0 +1,25 @@
+[Desktop Entry]
+Name=Veoh
+Name[x-test]=xxVeohxx
+
+Comment=An engine that allows you to query web services for media.
+Comment[pt]=Um motor que lhe permite pesquisar conteúdos multimédia em vários \
serviços na Web. +Comment[pt_BR]=Um motor que lhe permite pesquisar conteúdos \
multimídia em vários serviços na Web. +Comment[sv]=Ett gränssnitt som låter dig \
söka efter media på webbtjänster. +Comment[uk]= ушій, який надасть \
вам змогу звантажувати мультимедійні дані зі \
служб у мережі. +Comment[x-test]=xxAn engine that allows you to query web \
services for media.xx +
+X-KDE-ServiceTypes=Plasma/JavascriptAddon
+Type=Service
+X-Plasma-API=javascript
+
+X-KDE-Library=plasma_engine_webmedia
+X-KDE-PluginInfo-Author=Onur-Hayri Bakici
+X-KDE-PluginInfo-Email=thehayro@gmail.com
+X-KDE-PluginInfo-Name=org.kde.plasma.dataengine.webmedia.veoh
+X-KDE-PluginInfo-Version=0.1
+X-KDE-PluginInfo-Website=http://plasma.kde.org/
+X-KDE-PluginInfo-Category=org.kde.plasma.dataengine.webmedia
+X-KDE-PluginInfo-Depends=
+X-KDE-PluginInfo-License=LGPL
+X-KDE-PluginInfo-EnabledByDefault=true
diff --git a/dataengines/addons/youtube/contents/code/main.js \
b/dataengines/addons/youtube/contents/code/main.js index 12d5904..47fc388 100644
--- a/dataengines/addons/youtube/contents/code/main.js
+++ b/dataengines/addons/youtube/contents/code/main.js
@@ -17,22 +17,31 @@
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA .        *
  ***************************************************************************/
 
+var ytObject = null;
+
 function Youtube()
 {
   print("Hello youtube");
   this.baseUrl = "http://gdata.youtube.com/feeds/api/";
+  this.name = "youtube";
+  ytObject = this;
 }
 
 Youtube.prototype.searchMedia = function(queryParams)
 {
-  var query = queryParams['text'];
-  if (query === "" || typeof query === "undefined")
-  {
-    print("no query defined");
-    return;
-  }
-  print(query);
-  var url = this.baseUrl + "videos?q=" + query;
+  var text= queryParams['text'];
+  var maxResults = queryParams['max-results'];
+  var page = queryParams['page'];
+  
+  // calculate the index of the first picture in each page
+  var startIndex = (maxResults * page) - (maxResults - 1);;
+  
+  var url = buildUrl(this.baseUrl + "videos", 
+		     {
+		       "q" : text,
+		       "max-results" : maxResults,
+		       "start-index" : startIndex
+		     });
   print(url);
   var result = "";
   
@@ -58,53 +67,63 @@ Youtube.prototype.searchMedia = function(queryParams)
 		
 		if (mediaNodes.length == 0)
 		{
-		  setData("Youtube", "Error", "No results for " + query + " found");
+		  outputErrorMessage(ytObject.name, "", text, ErrorTypes[NORESULTS]);
 		  return;
 		}
 		
 		for (var i = 0; i < mediaNodes.length; i++)
 		{
-		  try{
-		    var webmedia = new WebMedia();
-		    var mediaNodesItem = mediaNodes.item(i);
-		    if (mediaNodes.length == 0)
+		  var webmedia = new WebMedia();
+		  var mediaNodesItem = mediaNodes.item(i);
+		  if (mediaNodes.length == 0)
+		  {
+		    outputErrorMessage(ytObject.name, "", text, ErrorTypes[NORESULTS]);
+		    return;
+		  }
+		  //potential nullable items
+		  var keywordsItem = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"keywords").item(0).getFirstChild(); +		  var contentItem = \
mediaNodesItem.getElementsByTagNameNS(mediaNS, "content").item(0); +		  
+		  webmedia.type = MediaTypes[VIDEO];
+		  webmedia.id = getID();
+		  webmedia.providerSpecificID = \
mediaNodesItem.getElementsByTagName("id").item(0).getFirstChild().getNodeValue(); +		 \
webmedia.title = mediaNodesItem.getElementsByTagName("title").item(0).getFirstChild().getNodeValue();
 +		  webmedia.description = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"description").item(0).getFirstChild().getNodeValue(); +		  
+		  if (keywordsItem)
+		    webmedia.keywords = keywordsItem.getNodeValue().split(",");
+		  
+		  webmedia.user = \
mediaNodesItem.getElementsByTagName("author").item(0).getElementsByTagName("name").item(0).getFirstChild().getNodeValue();
 +		  webmedia.updated = new Date();
+		  webmedia.updated.setISO8601(mediaNodesItem.getElementsByTagName("updated").item(0).getFirstChild().getNodeValue());
 +		  webmedia.published = new Date();
+		  webmedia.published.setISO8601(mediaNodesItem.getElementsByTagName("published").item(0).getFirstChild().getNodeValue());
 +		  
+		  // get the default content item
+		  if (contentItem){
+		    for (var c = 0; c < mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"content").length; c++)  {
-		      setData("Youtube", "Error", "No results for " + query + " found");
-		      return;
+		      var cItem = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"content").item(c); +		      if \
(cItem.getAttributes().getNamedItem("isDefault").getNodeValue() == 'true'){ \
+			webmedia.link = cItem.getAttributes().getNamedItem("url").getNodeValue(); \
+			webmedia.videoFormat = cItem.getAttributes().getNamedItem("type").getNodeValue(); \
+			webmedia.videoDuration = \
cItem.getAttributes().getNamedItem("duration").getNodeValue(); +			break;
+		      }
 		    }
-		    //potential nullable items
-		    var keywordsItem = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
                "keywords").item(0).getFirstChild();
-		    var contentItem = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
                "content").item(0);
-		    
-		    webmedia.type = MediaType.video;
-		    webmedia.id = \
                mediaNodesItem.getElementsByTagName("id").item(0).getFirstChild().getNodeValue();
                
-		    webmedia.title = \
                mediaNodesItem.getElementsByTagName("title").item(0).getFirstChild().getNodeValue();
                
-		    webmedia.description = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
                "description").item(0).getFirstChild().getNodeValue();
-		    
-		    if (typeof(keywordsItem) !== "undefined" && keywordsItem != null)
-		      webmedia.keywords = keywordsItem.getNodeValue().split(",");
-		    
-		    webmedia.author = \
mediaNodesItem.getElementsByTagName("author").item(0).getElementsByTagName("name").item(0).getFirstChild().getNodeValue();
                
-		    webmedia.updated = new Date();
-		    webmedia.updated.setISO8601(mediaNodesItem.getElementsByTagName("updated").item(0).getFirstChild().getNodeValue());
                
-		    webmedia.published = new Date();
-		    webmedia.updated.setISO8601(mediaNodesItem.getElementsByTagName("published").item(0).getFirstChild().getNodeValue());
                
-		    
-		    if (typeof(contentItem) !== "undefined" && contentItem != null)
-		      webmedia.link = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
                "content").item(0).getAttributes().getNamedItem("url").getNodeValue();
                
-		    
-		    webmedia.width = 0;
-		    webmedia.height = 0;
-		    webmedia.thumbnailLink = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
                "thumbnail").item(0).getAttributes().getNamedItem("url").getNodeValue();
                
-		    setData(webmedia.id, webmedia.toArray());
-		  }catch(e)
+		  }
+		  for (var t = 0; t < mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"thumbnail").length; t++)  {
-		    print("A problem occured while parsing.");
+		    var tItem = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"thumbnail").item(t); +		    \
webmedia.addThumbnail(tItem.getAttributes().getNamedItem("url").getNodeValue(), \
tItem.getAttributes().getNamedItem("height"), +					  \
tItem.getAttributes().getNamedItem("width"));  }
+		  setData(webmedia.id, webmedia.toArray());
+		  webmedia.toArrayString();
 		}
 	      }catch(e)
 	      {
-		print("A problem occured while parsing.");
+		outputErrorMessage(ytObject.name, "", e.message, ErrorTypes[PARSINGERROR]);
 	      }
 	    }
   );
@@ -113,9 +132,13 @@ Youtube.prototype.searchMedia = function(queryParams)
 
 Youtube.prototype.searchCollection = function(queryParams)
 {
-  var query = queryParams['text'];
+  var text = queryParams['text'];
   print(query);
-  var url = this.baseUrl + "playlists/snippets?q=" + query + "&v=2";
+  var url = buildUrl(this.baseUrl + "playlists/snippets",
+		     {
+		       "q": text,
+		       "v" : "2"
+		     });
   var ytNS = "http://gdata.youtube.com/schemas/2007";
   var result = "";
   
@@ -136,50 +159,55 @@ Youtube.prototype.searchCollection = function(queryParams)
 		var mediaNodes =  docRoot.getElementsByTagName("entry");
 		if (mediaNodes.length == 0)
 		{
-		  setData("Youtube", "Error", "No results for " + query + " found");
+		  outputErrorMessage(ytObject.name, "", text, ErrorTypes[NORESULTS]);
 		  return;
 		}
 		for (var i = 0; i < mediaNodes.length; i++)
 		{
-		  try{
-		    var webmediaC = new WebMediaCollection();
-		    var mediaNodesItem = mediaNodes.item(i);
-		    var mediaEntriesUrl = null;
-		    var idForEngine = mediaNodesItem.getElementsByTagNameNS(ytNS, \
                "playlistId").item(0).getFirstChild().getNodeValue();
-		    
-		    //potential nullable items
-		    var descriptionItem = \
                mediaNodesItem.getElementsByTagName("summary").item(0).getFirstChild();
                
-		    
-		    webmediaC.id = \
                mediaNodesItem.getElementsByTagName("id").item(0).getFirstChild().getNodeValue();
                
-		    webmediaC.title = \
mediaNodesItem.getElementsByTagName("title").item(0).getFirstChild().getNodeValue();  \
                
-		    if (typeof(descriptionItem) !== "undefined" && descriptionItem != null)
-		      webmediaC.description = descriptionItem.getNodeValue();
-		    //webmedia.keywords = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
                "keywords").item(0).getFirstChild().getNodeValue().split(",");
-		    webmediaC.link =  \
mediaNodesItem.getElementsByTagName("content").item(0).getAttributes().getNamedItem("src").getNodeValue();
                
-		    webmediaC.author = \
mediaNodesItem.getElementsByTagName("author").item(0).getElementsByTagName("name").item(0).getFirstChild().getNodeValue();
                
-		    webmediaC.updated = new Date();
-		    webmediaC.updated.setISO8601(mediaNodesItem.getElementsByTagName("updated").item(0).getFirstChild().getNodeValue());
                
-		    webmediaC.published = new Date();
-		    webmediaC.updated.setISO8601(mediaNodesItem.getElementsByTagName("published").item(0).getFirstChild().getNodeValue());
                
-		    //webmedia.link = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
                "content").item(0).getAttributes().getNamedItem("url").getNodeValue();
                
-		    //webmedia.width = 0;
-		    //webmedia.height = 0;
-		    //webmedia.thumbnailLink = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
                "thumbnail").item(0).getAttributes().getNamedItem("url").getNodeValue();
                
-		    setData(idForEngine, webmediaC.toArray());
-		  }catch(e)
-		  {
-		    print("A problem occured while parsing:" + e.message);
-		  }
+		  
+		  var webmediaCollection = new WebMediaCollection();
+		  var mediaNodesItem = mediaNodes.item(i);
+		  var mediaEntriesUrl = null;
+		  var idForEngine = mediaNodesItem.getElementsByTagNameNS(ytNS, \
"playlistId").item(0).getFirstChild().getNodeValue(); +		  
+		  //potential nullable items
+		  var descriptionItem = \
mediaNodesItem.getElementsByTagName("summary").item(0).getFirstChild(); +		  
+		  webmediaCollection.id = getID();
+		  webmediaCollection.providerSpecificID = \
mediaNodesItem.getElementsByTagName("id").item(0).getFirstChild().getNodeValue(); +		 \
webmediaCollection.title = \
mediaNodesItem.getElementsByTagName("title").item(0).getFirstChild().getNodeValue();  \
 +		  if (descriptionItem)
+		    webmediaCollection.description = descriptionItem.getNodeValue();
+		  //webmedia.keywords = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"keywords").item(0).getFirstChild().getNodeValue().split(","); +		  \
webmediaCollection.link =  \
mediaNodesItem.getElementsByTagName("content").item(0).getAttributes().getNamedItem("src").getNodeValue();
 +		  webmediaCollection.author = \
mediaNodesItem.getElementsByTagName("author").item(0).getElementsByTagName("name").item(0).getFirstChild().getNodeValue();
 +		  webmediaCollection.updated = new Date();
+		  //webmediaCollection.updated.setISO8601(mediaNodesItem.getElementsByTagName("updated").item(0).getFirstChild().getNodeValue());
 +		  webmediaCollection.published = new Date();
+		  webmediaCollection.updated.setISO8601(mediaNodesItem.getElementsByTagName("published").item(0).getFirstChild().getNodeValue());
 +		  //webmedia.link = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"content").item(0).getAttributes().getNamedItem("url").getNodeValue(); +		  \
//webmedia.width = 0; +		  //webmedia.height = 0;
+		  //webmedia.thumbnailLink = mediaNodesItem.getElementsByTagNameNS(mediaNS, \
"thumbnail").item(0).getAttributes().getNamedItem("url").getNodeValue(); +		  \
setData(webmediaCollection.id, webmediaCollection.toArray());  }
 	      }catch(e)
 	      {
-		print("A problem occured while parsing:" + e.message);
+		outputErrorMessage(ytObject.name, "", e.message, ErrorTypes[PARSINGERROR]);
 	      }
 	    }
   );
 }
 
+Youtube.prototype.getUploadedUserMedia = function(queryParams)
+{
+  
+}
 
+Youtube.prototype.getUploadedUserCollection = function(queryParams)
+{
+  
+}
 
 Youtube.prototype.toString = function()
 {
diff --git a/dataengines/addons/youtube/metadata.desktop \
b/dataengines/addons/youtube/metadata.desktop index 6908d7f..5313dd3 100644
--- a/dataengines/addons/youtube/metadata.desktop
+++ b/dataengines/addons/youtube/metadata.desktop
@@ -1,6 +1,6 @@
 [Desktop Entry]
 Name=Youtube
-Name[de]=YouTube
+Name[de]=Youtube
 Name[ja]=Youtube
 Name[nds]=Youtube
 Name[nl]=Youtube
diff --git a/dataengines/javascript/service/contents/code/mediaapi.js \
b/dataengines/javascript/service/contents/code/mediaapi.js index f7d2f0a..444a3e7 \
                100644
--- a/dataengines/javascript/service/contents/code/mediaapi.js
+++ b/dataengines/javascript/service/contents/code/mediaapi.js
@@ -33,6 +33,9 @@ ErrorTypes[INVALIDNUMBER	= 2] = "Invalud number.";
 ErrorTypes[INVALIDFORMAT	= 3] = "Invalid format.";
 ErrorTypes[FUNCTIONNOTPROVIDED	= 4] = "Function not provided.";
 ErrorTypes[NORESULTS		= 5] = "No results found.";
+ErrorTypes[NOUSERFOUND		= 6] = "No user found.";
+ErrorTypes[PARSINGERROR		= 7] = "Error while parsing results";
+ErrorTypes[INTERNALERROR	= 8] = "Internal error occured";
 // can be continued
 
 
@@ -66,31 +69,47 @@ WebMedia = function()
   // in bytes ?
   this.size = "";
   this.thumbnails = new Array();
-  this.rating = "";
-  this.comments = "";
+  
+  //this.rating = 0.0;
+  //this.comments = "";
+  
+  // video specific attributes
+  this.videoDuration = 0;
+  this.videoFormat = "";
+  this.videoEmbedCode = "";
+  
 }
 
 WebMedia.prototype.toArray = function()
 {
   var array = new Array();
   array['type'] = this.type;
-  array['provider'] = this.provider;
+  array['provider'] = String(this.provider);
   array['id'] = this.id;
-  array['title'] = this.title;
-  array['author'] = this.author;
-  array['description'] = this.description;    
-  array['keywords'] = this.keywords;
+  array['title'] = String(this.title);
+  array['user'] = String(this.user);
+  array['description'] = String(this.description);
+  array['keywords'] = String(this.keywords);
   array['updated'] = this.updated;
   array['published'] = this.published;
-  array['link'] = this.link;
-  array['width'] = this.width;
-  array['height'] = this.height;
-  array['size'] = this.size;
+  array['link'] = String(this.link);
+  array['width'] = parseInt(this.width);
+  array['height'] = parseInt(this.height);
+  array['size'] = parseInt(this.size);
   for (var i = 0; i < this.thumbnails.length; i++)
-    array['thumbnail' + i] = this.thumbnails[i].url;
+    array['thumbnail' + i] = String(this.thumbnails[i].url);
   return array;
 }
 
+WebMedia.prototype.toArrayString = function()
+{
+  var arr = this.toArray();
+  for (var key in arr)
+  {
+    print(key + " : " + arr[key]);
+  }
+}
+
 WebMedia.prototype.addThumbnail = function(url, height, width)
 {
   var thumb = new Thumbnail();
@@ -164,4 +183,4 @@ WebMediaCollection.prototype.toArray = function()
   arr['updated'] = this.updated;
   arr['link'] = this.link;
   return arr;
-}
+}
\ No newline at end of file
diff --git a/dataengines/javascript/service/contents/code/mediaservice.js \
b/dataengines/javascript/service/contents/code/mediaservice.js index 360fb41..c1dfded \
                100644
--- a/dataengines/javascript/service/contents/code/mediaservice.js
+++ b/dataengines/javascript/service/contents/code/mediaservice.js
@@ -27,7 +27,7 @@ engine.include('mediaapi.js');
 var addons = new Array();
 var selectedAddon = null;
 var webmediaID = 0;
-print("Hello");
+
 function getID()
 {
   return webmediaID++;
@@ -66,6 +66,12 @@ function GetAddon(name)
   return null;
 }
 
+/*var cMaxResults = engine.readConfig("MaxResults");
+var cPage = engine.readConfig("Page");
+print(cMaxResults);
+print(cPage);
+*/
+
 // PARAMETER CHECK FUNCTIONS FOR EACH FUNCTION IN THE INTERFACE
 // ALL OF THE RETURN A NEW ARRAY OF PARAMETERS
 // OPTIONAL PARAMETERS GET DEFAULT VALUES
diff --git a/dataengines/javascript/service/contents/code/stdutils.js \
b/dataengines/javascript/service/contents/code/stdutils.js index 50ec591..91659f8 \
                100644
--- a/dataengines/javascript/service/contents/code/stdutils.js
+++ b/dataengines/javascript/service/contents/code/stdutils.js
@@ -1,5 +1,12 @@
 // INET HELPER FUNCTIONS
 
+/*
+ * Makes a http request
+ * @param webengine: the engine that makes the request
+ * @param url: the url to make a request to
+ * @param onDataCallBack: function pointer, when data arrives
+ * @param onFinishedCallBack: function pointer, when the request finished
+ */
 function doRequest(webengine, url, onDataCallBack, onFinishedCallBack)
 {
   var io = webengine.getUrl(url);
@@ -7,16 +14,21 @@ function doRequest(webengine, url, onDataCallBack, \
onFinishedCallBack)  io.finished.connect(onFinishedCallBack);
 }
 
+/*
+ * Builds an url with query
+ * @param baseUrl: the base url to build the url on
+ * @param queryItems: array of key value pairs, which represent the query
+ * @return a complete url, e.g. http://www.example.com?test=true
+ * returns the base url when queryItems is empty
+ */
 function buildUrl(baseUrl, queryItems)
 {
   var newUrl = "";
-  if (queryItems == null)
+  if (!queryItems)
     return baseUrl;
   
   if (baseUrl.charAt(baseUrl.length - 1) != '/')
     baseUrl.concat("/");
-
-  // build query in the url
   newUrl = baseUrl + "?";
   for (var key in queryItems)
   {
@@ -54,6 +66,11 @@ Date.prototype.setISO8601 = function(string) {
     this.setTime(Number(time));
 }
 
+function UnixToDate(unixTimeStamp)
+{
+  return new Date(unixTimeStamp * 1000);
+}
+
 // OUTPUT FUNCTIONS
 
 
@@ -61,6 +78,7 @@ var errorID = 0;
 
 function outputErrorMessage(provider, providerSpecificCode, identifier, message)
 {
+  print(identifier + " caused a problem in " + provider + ": " + message);
   setData("Error:" + errorID, 
 	  {
 	    "provider" : provider,
diff --git a/dataengines/javascript/service/contents/services/provider.operations \
b/dataengines/javascript/service/contents/services/provider.operations index \
                3aea438..29730c3 100644
--- a/dataengines/javascript/service/contents/services/provider.operations
+++ b/dataengines/javascript/service/contents/services/provider.operations
@@ -12,7 +12,6 @@
   </group>
   <group name="getUploadedUserMedia">
     <entry name="user" type="string"/>
-    <entry name="providerCollectionID" type="string"/> <!-- Provilder specific id of \
a collection -->  <entry name="max-results" type="string"/>
     <entry name="page" type="string" />
   </group>


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic