2016-04-17 17:38:58 +02:00
'use strict' ;
var access _token ;
var refresh _token ;
var error ;
2016-04-17 18:11:05 +02:00
var userProfileSource = document . getElementById ( 'user-profile-template' ) . innerHTML ,
userProfileTemplate = Handlebars . compile ( userProfileSource ) ,
userProfilePlaceholder = document . getElementById ( 'user-profile' ) ;
var playlistsSource = document . getElementById ( 'playlists-template' ) . innerHTML ,
playlistsTemplate = Handlebars . compile ( playlistsSource ) ,
playlistsPlaceholder = document . getElementById ( 'playlists' ) ;
var dupsSource = document . getElementById ( 'dups-template' ) . innerHTML ,
dupsTemplate = Handlebars . compile ( dupsSource ) ,
dupsPlaceholder = document . getElementById ( 'dups' ) ;
var errorSource = document . getElementById ( 'error-template' ) . innerHTML ,
errorTemplate = Handlebars . compile ( errorSource ) ,
errorPlaceholder = document . getElementById ( 'error' ) ;
2016-04-17 17:38:58 +02:00
( function ( ) {
/ * *
* Obtains parameters from the hash of the URL
* @ return Object
* /
function getHashParams ( ) {
var hashParams = { } ;
var e , r = /([^&;=]+)=?([^&;]*)/g ,
q = window . location . hash . substring ( 1 ) ;
while ( e = r . exec ( q ) ) {
hashParams [ e [ 1 ] ] = decodeURIComponent ( e [ 2 ] ) ;
}
return hashParams ;
}
Handlebars . registerHelper ( 'list' , function ( items , options ) {
var out = "<div class='list-group'>" ;
for ( var i = 0 , l = items . length ; i < l ; i ++ ) {
out = out + options . fn ( items [ i ] ) ;
}
return out + "</div>" ;
} ) ;
var params = getHashParams ( ) ;
access _token = params . access _token ;
refresh _token = params . refresh _token ;
error = params . error ;
if ( error ) {
2016-04-17 18:11:05 +02:00
errorPlaceholder . innerHTML = errorTemplate ( {
err _title : 'Error!' ,
err _content : 'There was an error during the authentication. Feel free to <a href="https://github.com/Crocmagnon/Spotify-Duplicate-Finder/issues" class="alert-link">open an issue</a>.'
} ) ;
2016-04-17 17:38:58 +02:00
} else {
if ( access _token ) {
2016-04-17 17:52:10 +02:00
getPersonnalInfo ( true , userProfilePlaceholder , userProfileTemplate ) ;
2016-04-17 17:38:58 +02:00
} else {
// render initial screen
$ ( '#login' ) . show ( ) ;
$ ( '#loggedin' ) . hide ( ) ;
}
document . getElementById ( 'get-playlists' ) . addEventListener ( 'click' , function ( ) {
var currentElement = $ ( this ) ;
currentElement . addClass ( 'loading' ) ;
$ . ajax ( {
url : '/get_playlists' ,
data : {
'access_token' : access _token
}
} ) . done ( function ( data ) {
var pl = data . data . map ( function ( item ) {
return {
pl _uid : item . owner . id ,
pl _name : item . name ,
pl _id : item . id
}
} ) ;
currentElement . removeClass ( 'loading' ) ;
playlistsPlaceholder . innerHTML = playlistsTemplate ( {
playlists : pl
} ) ;
} )
} , false ) ;
$ ( document ) . on ( 'click' , '.pl_item' , function ( e ) {
e . preventDefault ( ) ;
var pl _name = $ ( this ) . text ( ) ;
$ ( '.pl_item' ) . removeClass ( 'active' ) ;
var currentElement = $ ( this ) ;
currentElement . addClass ( 'active' ) ;
currentElement . addClass ( 'loading' ) ;
$ ( '#dups' ) . hide ( ) ;
$ . ajax ( {
url : $ ( this ) . attr ( 'href' ) ,
data : {
'access_token' : access _token
}
} ) . done ( function ( data ) {
var dups = data . data . map ( function ( item ) {
return {
dup _trackname : item . track . name ,
dup _artist : item . track . artists [ 0 ] . name
}
} ) ;
currentElement . removeClass ( 'loading' ) ;
if ( data . data . length > 0 ) {
dupsPlaceholder . innerHTML = dupsTemplate ( {
dups : dups ,
pl _name : pl _name
} ) ;
}
else {
dupsPlaceholder . innerHTML = dupsTemplate ( {
dups : [ ] ,
message : "No duplicate found." ,
pl _name : pl _name
} ) ;
}
$ ( '#dups' ) . show ( ) ;
} )
} ) ;
$ ( document ) . on ( 'click' , '#obtain-new-token' , function ( ) {
refreshToken ( ) ;
} ) ;
}
} ) ( ) ;
function refreshToken ( ) {
var button = $ ( '#obtain-new-token' ) ;
button . addClass ( 'loading' ) ;
$ . ajax ( {
url : '/refresh_token' ,
data : {
'refresh_token' : refresh _token
}
} ) . done ( function ( data ) {
access _token = data . access _token ;
button . removeClass ( 'loading' ) ;
} ) ;
}
2016-04-17 17:52:10 +02:00
function getPersonnalInfo ( first , userProfilePlaceholder , userProfileTemplate ) {
$ . ajax ( {
url : 'https://api.spotify.com/v1/me' ,
headers : {
'Authorization' : 'Bearer ' + access _token
} ,
success : function ( response ) {
userProfilePlaceholder . innerHTML = userProfileTemplate ( response ) ;
$ ( '#login' ) . hide ( ) ;
$ ( '#loggedin' ) . show ( ) ;
} ,
error : function ( response ) {
if ( response . status == 401 ) {
if ( first ) {
refreshToken ( ) ;
getPersonnalInfo ( false , userProfilePlaceholder , userProfileTemplate ) ;
}
else {
2016-04-17 18:11:05 +02:00
errorPlaceholder . innerHTML = errorTemplate ( {
err _title : 'Error!' ,
err _content : 'Error while refreshing token. Please <a href="/" class="alert-link">return to login</a>.'
} ) ;
2016-04-17 17:52:10 +02:00
}
}
}
} ) ;
}