mpviewplugins/mpdetailsviewplugin/resources/musiccontext.js
author hgs
Fri, 23 Jul 2010 17:31:12 -0500
changeset 45 612c4815aebe
parent 36 a0afa279b8fe
permissions -rw-r--r--
201029
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
35
hgs
parents:
diff changeset
     1
//Logging for QT
hgs
parents:
diff changeset
     2
hgs
parents:
diff changeset
     3
// Override the default alert function.
36
hgs
parents: 35
diff changeset
     4
// TODO remove this when alert in platform is working?
35
hgs
parents:
diff changeset
     5
alert = function(str) {
hgs
parents:
diff changeset
     6
    console.log(str);
hgs
parents:
diff changeset
     7
    window.context.owner().errorHandler("Alert", str);
hgs
parents:
diff changeset
     8
}
hgs
parents:
diff changeset
     9
hgs
parents:
diff changeset
    10
function logme(str){
hgs
parents:
diff changeset
    11
    console.log(str);
hgs
parents:
diff changeset
    12
    if(window['context'] && context['owner']){
hgs
parents:
diff changeset
    13
        context.owner().debugJs('debugJs: ' + str);
hgs
parents:
diff changeset
    14
    }
hgs
parents:
diff changeset
    15
}
hgs
parents:
diff changeset
    16
hgs
parents:
diff changeset
    17
function traceme(){
hgs
parents:
diff changeset
    18
    var cf = arguments.callee.caller;
hgs
parents:
diff changeset
    19
    logme('-------------- Start traceme ' + new Date().toLocaleTimeString() + ' --------------');
hgs
parents:
diff changeset
    20
    var arr = new Array();
hgs
parents:
diff changeset
    21
    while (cf) {
hgs
parents:
diff changeset
    22
      var fn = cf.toString();
hgs
parents:
diff changeset
    23
      fn = fn.substr(0,fn.indexOf('{'));
hgs
parents:
diff changeset
    24
      arr.push(fn);
hgs
parents:
diff changeset
    25
      cf = cf.caller;
hgs
parents:
diff changeset
    26
    }
hgs
parents:
diff changeset
    27
    //arr.reverse();
hgs
parents:
diff changeset
    28
    for(i=0;i<=arr.length -1;i++){
hgs
parents:
diff changeset
    29
        logme(arr[i]);
hgs
parents:
diff changeset
    30
    }
hgs
parents:
diff changeset
    31
    logme('-------------- End traceme --------------');
hgs
parents:
diff changeset
    32
}
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
window["music"] = window["music"] ||
hgs
parents:
diff changeset
    36
{};
hgs
parents:
diff changeset
    37
hgs
parents:
diff changeset
    38
(function(){
hgs
parents:
diff changeset
    39
	var musicContext = null;
hgs
parents:
diff changeset
    40
	var publishingPlayer = null;
hgs
parents:
diff changeset
    41
    
hgs
parents:
diff changeset
    42
    music.getPostContent = function(){
hgs
parents:
diff changeset
    43
        traceme();
hgs
parents:
diff changeset
    44
        return {
hgs
parents:
diff changeset
    45
            reservedLength : window.context.objectReservedLength(),
hgs
parents:
diff changeset
    46
			type : window.context.objectType(), 
hgs
parents:
diff changeset
    47
		    content : window.context.objectContent()
hgs
parents:
diff changeset
    48
        };
hgs
parents:
diff changeset
    49
    }
hgs
parents:
diff changeset
    50
    	
hgs
parents:
diff changeset
    51
	/**
hgs
parents:
diff changeset
    52
	 * Call this for player to show UI and initialize connection to SNC
hgs
parents:
diff changeset
    53
	 */
hgs
parents:
diff changeset
    54
	music.initPlayer = function() 
hgs
parents:
diff changeset
    55
	{	
hgs
parents:
diff changeset
    56
        traceme();
hgs
parents:
diff changeset
    57
	    // Initialize player    
hgs
parents:
diff changeset
    58
	    publishingPlayer = new ovi.player.publish.Player({
36
hgs
parents: 35
diff changeset
    59
	        locale : window.context.language(),
35
hgs
parents:
diff changeset
    60
	        credentials : {
hgs
parents:
diff changeset
    61
	            type : "",
hgs
parents:
diff changeset
    62
	            sso_base_url : "",
hgs
parents:
diff changeset
    63
	            token : _getNoa() 
hgs
parents:
diff changeset
    64
	        }
hgs
parents:
diff changeset
    65
	    });
hgs
parents:
diff changeset
    66
	    
hgs
parents:
diff changeset
    67
	    // Show UI 
hgs
parents:
diff changeset
    68
	    publishingPlayer.create(null, function(status, data){
hgs
parents:
diff changeset
    69
            traceme();
hgs
parents:
diff changeset
    70
			if (status != publishingPlayer.status.updateservices_ok && status != publishingPlayer.status.show_ok) {
hgs
parents:
diff changeset
    71
				// Delegate errors to native side
36
hgs
parents: 35
diff changeset
    72
                window.context.owner().errorHandler(status, data.message);
35
hgs
parents:
diff changeset
    73
			} 		
hgs
parents:
diff changeset
    74
		});	
hgs
parents:
diff changeset
    75
		
hgs
parents:
diff changeset
    76
	}
hgs
parents:
diff changeset
    77
	
hgs
parents:
diff changeset
    78
	/** 
hgs
parents:
diff changeset
    79
	 * Call this for player to update context area (the song UI).
hgs
parents:
diff changeset
    80
	 */
hgs
parents:
diff changeset
    81
	music.updateContextArea = function() {
hgs
parents:
diff changeset
    82
		// Update artist and title metadata.
hgs
parents:
diff changeset
    83
        traceme();
hgs
parents:
diff changeset
    84
	    publishingPlayer.setContextObject(_getMusicContext());
36
hgs
parents: 35
diff changeset
    85
	    if(window['context'] && context['owner']){
hgs
parents: 35
diff changeset
    86
        context.owner().showWindow();
hgs
parents: 35
diff changeset
    87
    }
hgs
parents: 35
diff changeset
    88
}
35
hgs
parents:
diff changeset
    89
	
hgs
parents:
diff changeset
    90
	/**
hgs
parents:
diff changeset
    91
	 * Call this function to update metadata (called when music player has retrieved the link) 
hgs
parents:
diff changeset
    92
	 */
hgs
parents:
diff changeset
    93
	music.updateMetadata = function() {
hgs
parents:
diff changeset
    94
	    // Update url at bottom of comment field.
hgs
parents:
diff changeset
    95
        traceme();
hgs
parents:
diff changeset
    96
		musicContext.updateObject(music.getPostContent());
hgs
parents:
diff changeset
    97
	}
hgs
parents:
diff changeset
    98
	
hgs
parents:
diff changeset
    99
	/**
hgs
parents:
diff changeset
   100
	 * Call this function to release all resources from player.
hgs
parents:
diff changeset
   101
	 */
hgs
parents:
diff changeset
   102
	music.teardown = function() {
hgs
parents:
diff changeset
   103
        traceme();
hgs
parents:
diff changeset
   104
		publishingPlayer.cancel();
hgs
parents:
diff changeset
   105
	}
hgs
parents:
diff changeset
   106
	
hgs
parents:
diff changeset
   107
	// Private functions, read data from native side..
hgs
parents:
diff changeset
   108
	function _playerReady() {
hgs
parents:
diff changeset
   109
        traceme();
hgs
parents:
diff changeset
   110
        return typeof ovi != "undefined" &&
hgs
parents:
diff changeset
   111
            typeof ovi.player != "undefined" &&
hgs
parents:
diff changeset
   112
			typeof ovi.player.publish != "undefinded";
hgs
parents:
diff changeset
   113
	}
hgs
parents:
diff changeset
   114
	
hgs
parents:
diff changeset
   115
	
hgs
parents:
diff changeset
   116
	function _getMusicContext() {
hgs
parents:
diff changeset
   117
	    traceme();            
hgs
parents:
diff changeset
   118
	    musicContext = new ovi.player.contextobject.Player(); 
hgs
parents:
diff changeset
   119
        
hgs
parents:
diff changeset
   120
        var attachment = music.getPostContent();
hgs
parents:
diff changeset
   121
	
hgs
parents:
diff changeset
   122
        logme('music._getMusicContext() | attachment'); 	 
hgs
parents:
diff changeset
   123
hgs
parents:
diff changeset
   124
        logme('music._getMusicContext() | musicContext.create');
hgs
parents:
diff changeset
   125
hgs
parents:
diff changeset
   126
        var sharePlayerArtImage = "";
hgs
parents:
diff changeset
   127
        var sharePlayerArtBase64 = window.context.albumArtBase64();
hgs
parents:
diff changeset
   128
        if ( sharePlayerArtBase64.length > 0 ) {
hgs
parents:
diff changeset
   129
            // TODO: this is temporary solution until base64 defect in QT is fixed.
36
hgs
parents: 35
diff changeset
   130
            sharePlayerArtImage = "<td valign='top' width='74px'><img src='" + sharePlayerArtBase64 + "' width='74px' height='74px' /></td>";
35
hgs
parents:
diff changeset
   131
//            sharePlayerArtImage = "<img class='cover' src='data:image/png;base64," + sharePlayerArtBase64 + "' width='74px' height='74px' />";
hgs
parents:
diff changeset
   132
        }
hgs
parents:
diff changeset
   133
        // Create context object
hgs
parents:
diff changeset
   134
	    musicContext.create({
hgs
parents:
diff changeset
   135
	        view: "none",
hgs
parents:
diff changeset
   136
	        data: { 
36
hgs
parents: 35
diff changeset
   137
	            miniview: "<table width='100%' class='list info-list'><tr>"
35
hgs
parents:
diff changeset
   138
				/*
hgs
parents:
diff changeset
   139
						// TODO REMOVE, for testing only
hgs
parents:
diff changeset
   140
						+ "<input type=\"button\" value=\"Clear JS Cache\" onClick=\"window.context.owner().clearCache();\">"
hgs
parents:
diff changeset
   141
                */
hgs
parents:
diff changeset
   142
                        + sharePlayerArtImage
36
hgs
parents: 35
diff changeset
   143
						+ "<td align='left' valign='top'>"
hgs
parents: 35
diff changeset
   144
						+ "<span class='description'>"
hgs
parents: 35
diff changeset
   145
						+ "<div class='title'>" + window.context.title() + "</div>"
hgs
parents: 35
diff changeset
   146
						+ "<div class='artist'>" + window.context.artist() + "</div>"
hgs
parents: 35
diff changeset
   147
						+ "</span>"
hgs
parents: 35
diff changeset
   148
					    + "</td></tr></table>",
35
hgs
parents:
diff changeset
   149
	            object: attachment 
hgs
parents:
diff changeset
   150
	        }
hgs
parents:
diff changeset
   151
	    });
hgs
parents:
diff changeset
   152
        return musicContext;
hgs
parents:
diff changeset
   153
	}
hgs
parents:
diff changeset
   154
	                        
hgs
parents:
diff changeset
   155
	function _getNoa() {
hgs
parents:
diff changeset
   156
        traceme();
hgs
parents:
diff changeset
   157
	    // temporary solution until SSO token get from QT SSO DE (now we fetch username, password and re-authenticate using api.ovi.com)
hgs
parents:
diff changeset
   158
	    var token = (window.context.username)? [window.context.username(),window.context.password()] : window.context.token.split(":");
hgs
parents:
diff changeset
   159
        logme(token[0] + "/" + token[1]);
hgs
parents:
diff changeset
   160
	    return {
hgs
parents:
diff changeset
   161
            username: token[0],
hgs
parents:
diff changeset
   162
	        password: token[1]
hgs
parents:
diff changeset
   163
	    }           
hgs
parents:
diff changeset
   164
	}	
hgs
parents:
diff changeset
   165
})();