mpviewplugins/mpdetailsviewplugin/resources/musiccontext.js
author hgs
Fri, 14 May 2010 18:54:37 -0500
changeset 35 fdb31ab341af
child 32 c163ef0b758d
permissions -rw-r--r--
201019
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.
hgs
parents:
diff changeset
     4
alert = function(str) {
hgs
parents:
diff changeset
     5
    console.log(str);
hgs
parents:
diff changeset
     6
    if(window['context'] && context['owner']){
hgs
parents:
diff changeset
     7
        context.owner().debugJs('alert: ' + str);
hgs
parents:
diff changeset
     8
    }
hgs
parents:
diff changeset
     9
    window.context.owner().errorHandler("Alert", str);
hgs
parents:
diff changeset
    10
}
hgs
parents:
diff changeset
    11
hgs
parents:
diff changeset
    12
function logme(str){
hgs
parents:
diff changeset
    13
    console.log(str);
hgs
parents:
diff changeset
    14
    if(window['context'] && context['owner']){
hgs
parents:
diff changeset
    15
        context.owner().debugJs('debugJs: ' + str);
hgs
parents:
diff changeset
    16
    }
hgs
parents:
diff changeset
    17
}
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
function traceme(){
hgs
parents:
diff changeset
    20
    var cf = arguments.callee.caller;
hgs
parents:
diff changeset
    21
    logme('-------------- Start traceme ' + new Date().toLocaleTimeString() + ' --------------');
hgs
parents:
diff changeset
    22
    var arr = new Array();
hgs
parents:
diff changeset
    23
    while (cf) {
hgs
parents:
diff changeset
    24
      var fn = cf.toString();
hgs
parents:
diff changeset
    25
      fn = fn.substr(0,fn.indexOf('{'));
hgs
parents:
diff changeset
    26
      arr.push(fn);
hgs
parents:
diff changeset
    27
      cf = cf.caller;
hgs
parents:
diff changeset
    28
    }
hgs
parents:
diff changeset
    29
    //arr.reverse();
hgs
parents:
diff changeset
    30
    for(i=0;i<=arr.length -1;i++){
hgs
parents:
diff changeset
    31
        logme(arr[i]);
hgs
parents:
diff changeset
    32
    }
hgs
parents:
diff changeset
    33
    logme('-------------- End traceme --------------');
hgs
parents:
diff changeset
    34
}
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
hgs
parents:
diff changeset
    37
window["music"] = window["music"] ||
hgs
parents:
diff changeset
    38
{};
hgs
parents:
diff changeset
    39
hgs
parents:
diff changeset
    40
(function(){
hgs
parents:
diff changeset
    41
    if (typeof window.context === 'undefined') {
hgs
parents:
diff changeset
    42
        window['context'] = {
hgs
parents:
diff changeset
    43
            token: "hipsu:hipsupass",
hgs
parents:
diff changeset
    44
            song: "Queen - Bohemian Rhapsody",
hgs
parents:
diff changeset
    45
            objectReservedLength: function(){return 70;},
hgs
parents:
diff changeset
    46
            objectContent: function() { return "http://music.ovi.com/ru/ru/pc/Product/Queen/Bohemian-Rhapsody/8019069"; },
hgs
parents:
diff changeset
    47
            objectType: function(){ return "URI"; },
hgs
parents:
diff changeset
    48
            artist: function() { return "&#9835; Queen"; },
hgs
parents:
diff changeset
    49
            title: function() { return "Bohemian Rhapsody"; },
hgs
parents:
diff changeset
    50
            username: function() { return "hipsu"; },
hgs
parents:
diff changeset
    51
            password: function() { return "hipsupass"; },
hgs
parents:
diff changeset
    52
            albumArtBase64: function() { return "https://secure-profile.facebook.com/v227/1739/21/n100000756794479_1863.jpg"; },
hgs
parents:
diff changeset
    53
            owner: function() {
hgs
parents:
diff changeset
    54
                return {
hgs
parents:
diff changeset
    55
                    errorHandler: function(a,b) {},
hgs
parents:
diff changeset
    56
                    clearCache: function() {},
hgs
parents:
diff changeset
    57
                    debugJs: function(s) {}
hgs
parents:
diff changeset
    58
                }
hgs
parents:
diff changeset
    59
            }
hgs
parents:
diff changeset
    60
        }
hgs
parents:
diff changeset
    61
    }else{
hgs
parents:
diff changeset
    62
       try {
hgs
parents:
diff changeset
    63
           logme(context.objectType() + ' | ' + window.context.objectContent() + ' | ' + window.context.objectReservedLength());
hgs
parents:
diff changeset
    64
       }catch (e) {
hgs
parents:
diff changeset
    65
           logme(e);
hgs
parents:
diff changeset
    66
       }
hgs
parents:
diff changeset
    67
    }
hgs
parents:
diff changeset
    68
hgs
parents:
diff changeset
    69
	var musicContext = null;
hgs
parents:
diff changeset
    70
	var publishingPlayer = null;
hgs
parents:
diff changeset
    71
    
hgs
parents:
diff changeset
    72
    music.getPostContent = function(){
hgs
parents:
diff changeset
    73
        traceme();
hgs
parents:
diff changeset
    74
        return {
hgs
parents:
diff changeset
    75
            reservedLength : window.context.objectReservedLength(),
hgs
parents:
diff changeset
    76
			type : window.context.objectType(), 
hgs
parents:
diff changeset
    77
		    content : window.context.objectContent()
hgs
parents:
diff changeset
    78
        };
hgs
parents:
diff changeset
    79
    }
hgs
parents:
diff changeset
    80
    	
hgs
parents:
diff changeset
    81
    // Hard code something for the browser..
hgs
parents:
diff changeset
    82
hgs
parents:
diff changeset
    83
	/**
hgs
parents:
diff changeset
    84
	 * Check if player is loaded and call error function if not.
hgs
parents:
diff changeset
    85
	 */
hgs
parents:
diff changeset
    86
	music.playerLoaded = function() {
hgs
parents:
diff changeset
    87
        traceme();
hgs
parents:
diff changeset
    88
		if (!_playerReady()) {
hgs
parents:
diff changeset
    89
            alert("Error loading player scripts");
hgs
parents:
diff changeset
    90
		}
hgs
parents:
diff changeset
    91
	}
hgs
parents:
diff changeset
    92
hgs
parents:
diff changeset
    93
	/**
hgs
parents:
diff changeset
    94
	 * Call this for player to show UI and initialize connection to SNC
hgs
parents:
diff changeset
    95
	 */
hgs
parents:
diff changeset
    96
	music.initPlayer = function() 
hgs
parents:
diff changeset
    97
	{	
hgs
parents:
diff changeset
    98
        traceme();
hgs
parents:
diff changeset
    99
	    // Initialize player    
hgs
parents:
diff changeset
   100
	    publishingPlayer = new ovi.player.publish.Player({
hgs
parents:
diff changeset
   101
	        locale : "en-US",
hgs
parents:
diff changeset
   102
	        credentials : {
hgs
parents:
diff changeset
   103
	            type : "",
hgs
parents:
diff changeset
   104
	            sso_base_url : "",
hgs
parents:
diff changeset
   105
	            token : _getNoa() 
hgs
parents:
diff changeset
   106
	        }
hgs
parents:
diff changeset
   107
	    });
hgs
parents:
diff changeset
   108
	    
hgs
parents:
diff changeset
   109
	    // Show UI 
hgs
parents:
diff changeset
   110
	    publishingPlayer.create(null, function(status, data){
hgs
parents:
diff changeset
   111
            traceme();
hgs
parents:
diff changeset
   112
			if (status != publishingPlayer.status.updateservices_ok && status != publishingPlayer.status.show_ok) {
hgs
parents:
diff changeset
   113
				// Delegate errors to native side
hgs
parents:
diff changeset
   114
                window.context.errorHandler(status, data.message);
hgs
parents:
diff changeset
   115
			} 		
hgs
parents:
diff changeset
   116
		});	
hgs
parents:
diff changeset
   117
		
hgs
parents:
diff changeset
   118
	}
hgs
parents:
diff changeset
   119
	
hgs
parents:
diff changeset
   120
	/** 
hgs
parents:
diff changeset
   121
	 * Call this for player to update context area (the song UI).
hgs
parents:
diff changeset
   122
	 */
hgs
parents:
diff changeset
   123
	music.updateContextArea = function() {
hgs
parents:
diff changeset
   124
		// Update artist and title metadata.
hgs
parents:
diff changeset
   125
        traceme();
hgs
parents:
diff changeset
   126
	    publishingPlayer.setContextObject(_getMusicContext());
hgs
parents:
diff changeset
   127
	}
hgs
parents:
diff changeset
   128
	
hgs
parents:
diff changeset
   129
	/**
hgs
parents:
diff changeset
   130
	 * Call this function to update metadata (called when music player has retrieved the link) 
hgs
parents:
diff changeset
   131
	 */
hgs
parents:
diff changeset
   132
	music.updateMetadata = function() {
hgs
parents:
diff changeset
   133
	    // Update url at bottom of comment field.
hgs
parents:
diff changeset
   134
        traceme();
hgs
parents:
diff changeset
   135
		musicContext.updateObject(music.getPostContent());
hgs
parents:
diff changeset
   136
	}
hgs
parents:
diff changeset
   137
	
hgs
parents:
diff changeset
   138
	/**
hgs
parents:
diff changeset
   139
	 * Call this function to release all resources from player.
hgs
parents:
diff changeset
   140
	 */
hgs
parents:
diff changeset
   141
	music.teardown = function() {
hgs
parents:
diff changeset
   142
        traceme();
hgs
parents:
diff changeset
   143
		publishingPlayer.cancel();
hgs
parents:
diff changeset
   144
	}
hgs
parents:
diff changeset
   145
	
hgs
parents:
diff changeset
   146
	// Private functions, read data from native side..
hgs
parents:
diff changeset
   147
	function _playerReady() {
hgs
parents:
diff changeset
   148
        traceme();
hgs
parents:
diff changeset
   149
        return typeof ovi != "undefined" &&
hgs
parents:
diff changeset
   150
            typeof ovi.player != "undefined" &&
hgs
parents:
diff changeset
   151
			typeof ovi.player.publish != "undefinded";
hgs
parents:
diff changeset
   152
	}
hgs
parents:
diff changeset
   153
	
hgs
parents:
diff changeset
   154
	
hgs
parents:
diff changeset
   155
	function _getMusicContext() {
hgs
parents:
diff changeset
   156
	    traceme();            
hgs
parents:
diff changeset
   157
	    musicContext = new ovi.player.contextobject.Player(); 
hgs
parents:
diff changeset
   158
        
hgs
parents:
diff changeset
   159
        var attachment = music.getPostContent();
hgs
parents:
diff changeset
   160
	
hgs
parents:
diff changeset
   161
        logme('music._getMusicContext() | attachment'); 	 
hgs
parents:
diff changeset
   162
hgs
parents:
diff changeset
   163
        logme('music._getMusicContext() | musicContext.create');
hgs
parents:
diff changeset
   164
hgs
parents:
diff changeset
   165
        var sharePlayerArtImage = "";
hgs
parents:
diff changeset
   166
        var sharePlayerArtBase64 = window.context.albumArtBase64();
hgs
parents:
diff changeset
   167
        if ( sharePlayerArtBase64.length > 0 ) {
hgs
parents:
diff changeset
   168
            // TODO: this is temporary solution until base64 defect in QT is fixed.
hgs
parents:
diff changeset
   169
            sharePlayerArtImage = "<img class='cover' src='" + sharePlayerArtBase64 + "' width='74px' height='74px' />";
hgs
parents:
diff changeset
   170
//            sharePlayerArtImage = "<img class='cover' src='data:image/png;base64," + sharePlayerArtBase64 + "' width='74px' height='74px' />";
hgs
parents:
diff changeset
   171
        }
hgs
parents:
diff changeset
   172
        // Create context object
hgs
parents:
diff changeset
   173
	    musicContext.create({
hgs
parents:
diff changeset
   174
	        view: "none",
hgs
parents:
diff changeset
   175
	        data: { 
hgs
parents:
diff changeset
   176
	            miniview: "<ul class='list info-list'>"
hgs
parents:
diff changeset
   177
				/*
hgs
parents:
diff changeset
   178
						// TODO REMOVE, for testing only
hgs
parents:
diff changeset
   179
						+ "<p>username: " + window.context.username() + "/" + window.context.password() + "</p><BR>" 
hgs
parents:
diff changeset
   180
						+ "<input type=\"button\" value=\"Clear JS Cache\" onClick=\"window.context.owner().clearCache();\">"
hgs
parents:
diff changeset
   181
                */
hgs
parents:
diff changeset
   182
                        + sharePlayerArtImage
hgs
parents:
diff changeset
   183
						+ "<span class='description'><div class='title'>" + window.context.title() + "</div>"
hgs
parents:
diff changeset
   184
						+ "<div class='artist'>" + window.context.artist() + "</div></span>"
hgs
parents:
diff changeset
   185
					    + "</ul>",
hgs
parents:
diff changeset
   186
	            object: attachment 
hgs
parents:
diff changeset
   187
	        }
hgs
parents:
diff changeset
   188
	    });
hgs
parents:
diff changeset
   189
        return musicContext;
hgs
parents:
diff changeset
   190
	}
hgs
parents:
diff changeset
   191
	                        
hgs
parents:
diff changeset
   192
	function _getNoa() {
hgs
parents:
diff changeset
   193
        traceme();
hgs
parents:
diff changeset
   194
	    // 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
   195
	    var token = (window.context.username)? [window.context.username(),window.context.password()] : window.context.token.split(":");
hgs
parents:
diff changeset
   196
        logme(token[0] + "/" + token[1]);
hgs
parents:
diff changeset
   197
	    return {
hgs
parents:
diff changeset
   198
            username: token[0],
hgs
parents:
diff changeset
   199
	        password: token[1]
hgs
parents:
diff changeset
   200
	    }           
hgs
parents:
diff changeset
   201
	}	
hgs
parents:
diff changeset
   202
})();