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

List:       kde-commits
Subject:    playground/base/plasma/MediaCenterComponents/dataengines
From:       Onur-Hayri Bakici <thehayro () gmail ! com>
Date:       2010-08-10 13:05:02
Message-ID: 20100810130502.F1664AC7E8 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1161615 by bakici:

Addons created: flickr, youtube, bliptv, metacafe, picasa, photobucket

 A             addons/blip (directory)  
 M  +138 -57   addons/flickr/contents/code/main.js  
 A             addons/metacafe (directory)  
 A             addons/photobucket (directory)  
 A             addons/picasa (directory)  
 A             addons/youtube (directory)  
 D             javascript/contents/code/flickr.js  
 M  +41 -57    javascript/contents/code/mediadataengine.js  
 A             javascript/contents/code/sha1.js  
 A             javascript/contents/code/stdutils.js  
 D             javascript/contents/code/youtube.js  


--- trunk/playground/base/plasma/MediaCenterComponents/dataengines/addons/flickr/contents/code/main.js \
#1161614:1161615 @@ -17,35 +17,56 @@
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA .        *
  ***************************************************************************/
 
+var flickrObject = null;
 
 function Flickr()
 {
-  print("Hello flickr!");
+  print("Hello flickr");
   this.baseUrl = "http://www.flickr.com/services/rest/";
-  this.apiKey = "api_key=df52d83b7fe03f1de079da2c300f3203";
-  this.mediaengine = webmediaengine();
+  this.apiKey = "df52d83b7fe03f1de079da2c300f3203";
+  flickrObject = this;
+  this.mediaengine = GetWebMediaEngine();
 }
 
 Flickr.prototype.searchMedia = function(queryParams)
 {
   
   var query = queryParams['text'];
-  print(query);
+  if (query === "" || typeof query === "undefined")
+  {
+    print("no query defined");
+    return;
+  }
  
-  var url = this.baseUrl + "?method=flickr.photos.search&" + this.apiKey + "&text=" \
+ query; +  /*
+  we can search for videos as well, with the extras=media parameter
+  description: the description of this medium
+  date_upload: the upload date_upload
+  last_update: the update date
+  media: the mediatype (video or photo)
+  owner_name: the name of the author
+  o_dims: original dimensions
+  tags: the tags of this medium
+  url_t: the thumbnailLink
+  url_o: the url of the original media link
+  
+  */
+  var url = this.baseUrl + "?method=flickr.photos.search&api_key=" + 
+  this.apiKey + "&text=" + query + 
+  "&extras=description,date_upload,owner_name,last_update,"+
+  "tags,machine_tags,o_dims,media,url_t,url_o";
   print(url);
 
-  //doRequest(this.mediaengine, this.url, DataCallBack, FinishedCallBack);
-  var io = this.mediaengine.getUrl(url);
   var array = new Array();
   var result = "";
-  io.data.connect(function (job, data)
+  doRequest(engine, url, 
+    function (job, data)
   {
     result += data.valueOf();
-  });
-  
-  io.finished.connect(function(job)
+    },
+    function(job)
   {
+      try{
     print("Job done");
     print("Parsing...");
     var objDom = new XMLDoc(result, xmlError);
@@ -54,84 +75,144 @@
     var photoNodes = objDomTree.getElements("photos")[0].getElements("photo");
     if (photoNodes.length == 0)
       print("photonodes is empty");
+	
     print(photoNodes.length);
     
     for (var i = 0; i < photoNodes.length; i++)
     {
+	  try{
+	    var webmedia = new WebMedia();
       
-      var webmedia = new WebMedia();
-      var farm = photoNodes[i].getAttribute("farm");
-      var server = photoNodes[i].getAttribute("server");
-      var secret = photoNodes[i].getAttribute("secret");
-      webmedia.type = "photo";
+	    if (photoNodes[i].getAttribute("media") == "photo")
+	      webmedia.type = MediaType.photo;
+	    else
+	      webmedia.type = MediaType.video;
+	    
       webmedia.id = photoNodes[i].getAttribute("id");
+	    webmedia.title = photoNodes[i].getAttribute("title");
+	    webmedia.description = photoNodes[i].getElements("description")[0].getText();
       
-      webmedia.title = photoNodes[i].getAttribute("title");
-      webmedia.description = "";
-  //    webmedia.keywords ="photo";
-      webmedia.author = photoNodes[i].getAttribute("owner");
-      webmedia.updated = "";
-      webmedia.published = "";
-      webmedia.link = "http://farm" + farm + ".static.flickr.com/" + server + "/" + \
                webmedia.id + "_" + secret + "_m.jpg";
-      webmedia.height = "";
-      webmedia.width = "";
+	    webmedia.keywords = photoNodes[i].getAttribute("tags").split(" ");
+	    
+	    webmedia.author = 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 = "1";
       webmedia.collection = "";
-      webmedia.thumbnailLink = "http://farm" + farm + ".static.flickr.com/" + server \
                + "/" + webmedia.id + "_" + secret + "_t.jpg";
-      //MediaDataCollection.push(webmedia);
-      this.getPhotoInfo(webmedia);
+	    webmedia.thumbnailLink = photoNodes[i].getAttribute("url_t");
+	    setData(webmedia.id, webmedia.toArray());
     }
+	  catch(e)
+	  {
+	    print("A problem occured while parsing:" + e.message);
+	  }
+	}
     print("Parsing done.");
-    });
+      }catch(e)
+      {
+	print("A problem occured while parsing:" + e.message);
 }
+    }
+  );
+}
 
+Flickr.prototype.searchCollection = function(queryParams)
+{
+  var user = queryParams['user'];
+  if (user === "" || typeof(user) == "undefined")
+    return;
 
+  // getting the internal flickr user id
+  var url = this.baseUrl + "?method=flickr.people.findByUsername&api_key=" + \
this.apiKey + "&username=" + user; +  print(url);
 
-Flickr.prototype.toString = function()
+  var result = "";
+  var nsid = "";
+  doRequest(engine, url,
+    function(job, data)
 {
-  //workaround for now, until the plugin search function is implemented
-  return "Flickr";
-}
+      result += data.valueOf();
+    },
+    function(job)
+    {
+      try{
+	print("Job finished");
+	var objDom = new XMLDoc(result, xmlError);
+	var objDomTree = objDom.docNode;
 
+	nsid = objDomTree.getElements("user")[0].getAttribute("nsid");
+	print(nsid);
 
-//gets the more information about the photo from a webmedia element
-Flickr.prototype.getPhotoInfo = function(webmedia)
+	if (nsid == null && typeof(nsid) === "undefined")
 {
-  print("getting more info");
-  var url = flickrObject.baseUrl + "?method=flickr.photos.getInfo&" + \
                flickrObject.apiKey + "&photo_id=" + webmedia.id;
-  var io = flickrObject.mediaengine.getUrl(url);
+	  print("empty");
+	  return;
+	}
+	
+	//now get the list of albums from the user
+	url = flickrObject.baseUrl + "?method=flickr.photosets.getList&api_key=" + \
flickrObject.apiKey + "&user_id=" + nsid; +	result = "";
   print(url);
-  var result = "";
-  
-  io.data.connect(function(job, data)
+	doRequest(engine, url,
+	  function(job, data)
   {
     result += data.valueOf();
-  });
-  
-  io.finished.connect(function(job)
+	  },
+	  function(job)
   {
-    //parsing
+	    try{
     var objDom = new XMLDoc(result, xmlError);
     var objDomTree = objDom.docNode;
-    var infoNodes = objDomTree.getElements("photo")[0];
     
-    webmedia.description = infoNodes.getElements("description")[0].getText();
-    
-    var tags = infoNodes.getElements("tags")[0].getElements("tag");
-    print(tags.length);
-    for (var i = 0; i < tags.length; i++)
+	      var photosetNodes = \
objDomTree.getElements("photosets")[0].getElements("photoset"); +	      if \
(typeof(photosetNodes) === "undefined" || photosetNodes == null || \
photosetNodes.length == 0)  {
-      webmedia.keywords.push(tags[i].getText());
+		print("No collections");
+		return;
     }
-    var dateNode = infoNodes.getElements("dates")[0];
-    webmedia.updated = UnixToDate(dateNode.getAttribute("lastupdate"));
-    webmedia.published = UnixToDate(dateNode.getAttribute("posted"));
-    setData(webmedia.id, webmedia.toArray());
-  });
+	      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 = photosetNodes[i].getAttribute("id");
+		  webmediaCollection.title = photosetNodes[i].getElements("title")[0].getText();
+		  webmediaCollection.description = \
photosetNodes[i].getElements("description")[0].getText(); +		  \
webmediaCollection.author = user; +		  setData(webmediaCollection.id, \
webmediaCollection.toArray());  }
+		catch(e)
+		{
+		  print("A problem occured while parsing: " + e.message);
+		}
+	      }
+	    }catch(e)
+	    {
+	      print("A problem occured while parsing: " + e.message);
+	    }
+	  }
+	);
+      }catch(e)
+      {
+	print("A problem occured while parsing: " + e.message);
+      }
+    }
+  );
+}
 
+Flickr.prototype.toString = function()
+{
+  //workaround for now, until the plugin search function is implemented
+  return "Flickr";
+}
 
 
+
 function xmlError(e)
 {
   print(e);
--- trunk/playground/base/plasma/MediaCenterComponents/dataengines/javascript/contents/code/mediadataengine.js \
#1161614:1161615 @@ -20,13 +20,13 @@
 engine.include('xmldom.js');
 engine.include('xmlsax.js');
 engine.include('xmlw3cdom.js');
-engine.include('youtube.js');
+//engine.include('youtube.js');
+engine.include('sha1.js');
+engine.include('stdutils.js');
 //engine.include('picasa.js');
 
-this.Addons = new Array();
+var MediaType = {"photo":0, "video":1};
 
-var MediaTypes = new Array("picture", "video");
-
 //The media interface
 var nl = '\n';
 
@@ -45,7 +45,8 @@
   this.size = null;
   //this.collection = null;
   this.thumbnailLink = null;
-  this.collectionID = null;
+//  this.collectionID = null;
+  
   this.toString = function()
   {
     var res = this.type + nl +
@@ -67,9 +68,10 @@
   this.toArray = function()
   {
     var array = new Array();
-    array['type'] = this.type;
+    array['type'] = MediaTypeToString(this.type);
     array['id'] = this.id;
     array['title'] = this.title;
+    array['author'] = this.author;
     array['description'] = this.description;    
     array['keywords'] = this.keywords;
     array['updated'] = this.updated;
@@ -79,13 +81,22 @@
     array['height'] = this.height;
     array['size'] = this.size;
     array['thumbnailLink'] = this.thumbnailLink;
-    array['collectionID'] = this.collectionID;
     return array;
   }
   //rating?
   //comments?
 }
 
+
+function MediaTypeToString(mediaType)
+{
+  switch(mediaType)
+  {
+    case 0: return "photo";
+    case 1: return "video";
+    default: return "undefined";
+  }
+}
 //albums and playlists
 function WebMediaCollection()
 {
@@ -93,6 +104,9 @@
   this.title = null;
   this.author = null;
   this.description = null;
+  this.updated = null;
+  this.published = null;
+  this.link = null;
   this.webmedia = new Array();
   
   this.toArray = function()
@@ -100,46 +114,43 @@
     var arr = new Array()
     arr['id'] = this.id;
     arr['title'] = this.title;
-    arr['description'] = this.description;
     arr['author'] = this.author;
+    arr['description'] = this.description;
+    arr['published'] = this.published;
+    arr['updated'] = this.updated;
+    arr['link'] = this.link;
     return arr;
   }
 }
 
+//attributes that only appear in videos: duration, embeddedHTML, resolution, 
 
 
-//Problem: attribute, die nur bei video auftauchen: duration, embeddedHTML
-//MediaData.prototype.MediaType = MediaType;
+var mediaEngine = new WebMediaDataEngine();
 
 function WebMediaDataEngine()
 {
-  this.Addons = new Array()
-  //temporary workaround
-  //this.Addons.push(flickrmain(engine));
-  this.Addons.push(youtubemain(engine));
- // this.Addons.push(picasamain(engine));
+  this.addons = new Array();
 }
 
-
 function addonCreated(addon)
 {
   print("new addon: " + addon)
-  mediaEngine.Addons.push(addon);
+  mediaEngine.addons.push(addon);
 }
 
-var mediaEngine = new WebMediaDataEngine();
 engine.addEventListener("addonCreated", addonCreated)
-
 addons = engine.listAddons("org.kde.plasma.dataengine.webmedia");
-print("number of addons: " + addons.length)
-for (i in addons) {
+print("number of addons: " + addons.length);
+for (i in addons) 
+{
   print("Addon: " + addons[i].name);
   engine.loadAddon("org.kde.plasma.dataengine.webmedia", addons[i].id);
 }
 
-function webmediaengine()
+function GetWebMediaEngine()
 {
-  return mediaEngine
+  return mediaEngine;
 }
 
 // the traditional sourceRequestEvent
@@ -147,9 +158,9 @@
 {
  if (source == "providers")
  {
-  for (var i = 0; i < mediaEngine.Addons.length; i++)
+  for (var i = 0; i < mediaEngine.addons.length; i++)
   {
-    setData(mediaEngine.Addons[i].toString(), "");
+    setData(mediaEngine.addons[i].toString(), "");
   }
   return;
  }
@@ -176,19 +187,18 @@
  // params[0] is provider:media
  var p = params[0].split(":");
  
- for (var i = 0; i < mediaEngine.Addons.length; i++)
+ for (var i = 0; i < mediaEngine.addons.length; i++)
  {
-  var provider = mediaEngine.Addons[i];
+  var provider = mediaEngine.addons[i];
   if (p[0] == "all")
   {
-    
     print("Its " + provider.toString());
     
-    if (p[1] == "media"){
+    if (p[1].toLowerCase() == "media"){
       provider.searchMedia(queryParams);
       continue;
     }
-    if (p[1] == "mediaCollection".toLowerCase())
+    if (p[1].toLowerCase() == "mediacollection")
     {
      if (provider.searchCollection)
        provider.searchCollection(queryParams);
@@ -216,30 +226,4 @@
 engine.updateSourceEvent = function(source)
 {
   return true;
-}
-
-//function to convert W3C Dateformat in javascript date format
-Date.prototype.setISO8601 = function (string) {
-    var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" +
-        "(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?" +
-        "(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?";
-    var d = string.match(new RegExp(regexp));
-
-    var offset = 0;
-    var date = new Date(d[1], 0, 1);
-
-    if (d[3]) { date.setMonth(d[3] - 1); }
-    if (d[5]) { date.setDate(d[5]); }
-    if (d[7]) { date.setHours(d[7]); }
-    if (d[8]) { date.setMinutes(d[8]); }
-    if (d[10]) { date.setSeconds(d[10]); }
-    if (d[12]) { date.setMilliseconds(Number("0." + d[12]) * 1000); }
-    if (d[14]) {
-        offset = (Number(d[16]) * 60) + Number(d[17]);
-        offset *= ((d[15] == '-') ? 1 : -1);
-    }
-
-    offset -= date.getTimezoneOffset();
-    time = (Number(date) + (offset * 60 * 1000));
-    this.setTime(Number(time));
-}
+}
\ No newline at end of file


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

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