1
0
Fork 0
oldhaven/app/coffeescripts/vkontakte.coffee

104 lines
2.6 KiB
CoffeeScript

class Vkontakte
qr: null
constructor: (@api_id) ->
init: ->
@qr = []
VK.init
apiId: @api_id
VK.Auth.getLoginStatus this.authInfo
authInfo: (response) ->
if typeof response isnt 'undefined' and response.session
_session = new Session(response.session)
$('#vk_login, .auth_notice').hide()
$('#vk_logout').css display: 'block'
$('#search_field').focus() if $('#search_field').length > 0
_session.query '/user/auth', {}, (ar) ->
if ar.newbie
VK.Api.call 'getVariable', key: 1281, (r) ->
_session.query '/user/update', name: r.response, (ar2) ->
_session.setUser ar2.user
$('.header-container .hello .greating')
.text 'Hi there, ' +(if _session.getUser().name then _session.getUser().name else '%username%')+ '!'
else
_session.setUser ar.user
$('.header-container .hello .greating')
.text 'Hi there, ' +(if _session.getUser().name then _session.getUser().name else '%username%')+ '!'
else
_session = new Session({})
$('#vk_login, .auth_notice').css display: 'block'
$('#vk_logout').hide()
window._session = _session
loadTracksData: (artist, track, duration, callback) ->
track_prepared = track.replace(/\(.*\)/i, '').split('/')[0];
query = artist+' '+track_prepared;
if url = _vkontakte.getQR query
callback url
else
VK.Api.call 'audio.search', q: query, (r) ->
r.response.splice 0, 1
url = _vkontakte.matchPerfectResult r.response, artist, track, duration
_vkontakte.addQR query, url
callback url
matchPerfectResult: (data, artist, track, duration) ->
duration = duration.split ':'
duration = parseInt(duration[0], 10) * 60 + parseInt(duration[1], 10)
best_score = 0;
best_result = null;
for item in data
score = 0;
item.artist = item.artist.trim();
item.title = item.title.trim();
if item.artist == artist
score += 10
else if item.artist.split(artist).length is 2
score += 5
else if item.title.split(artist).length is 2
score += 4
if item.title == track
score += 10
else if item.title.split(track).length is 2
score += 5
if parseInt(item.duration, 10) == duration
score += 15
else
delta = Math.abs parseInt(item.duration, 10) - duration
score += (10 - delta) if delta < 10
if score > best_score
best_score = score
best_result = item
if score is 35
return best_result.url
return best_result.url
addQR: (query, url) ->
@qr[query] = url;
getQR: (query) ->
if @qr[query]?
@qr[query]
false
$ ->
$('#vk_login').click ->
VK.Auth.login _vkontakte.authInfo(), 8
$('#vk_logout').click ->
VK.Auth.logout _vkontakte.authInfo()