[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