1
0
Fork 0

Vkontakte session battle

This commit is contained in:
magnolia-fan 2011-06-29 17:54:55 +04:00
parent eed7ea685c
commit 4a2f793635
7 changed files with 137 additions and 110 deletions

View File

@ -19,12 +19,12 @@ class Session
@user @user
query: (url, params, callback) -> query: (url, params, callback) ->
q_params = @vk_params q_params = $.extend {}, @vk_params, params
$.each params, (key, val) ->
q_params[key] = val
$.post url, q_params, callback $.post url, q_params, callback
false false
reloadSession: -> reloadSession: ->
_session.query '/user/auth', {}, (ar) -> _session.query '/user/auth', {}, (ar) ->
_session.setUser ar.user _session.setUser ar.user
false
false

View File

@ -13,7 +13,8 @@ class Vkontakte
window.vkAsyncInit = -> window.vkAsyncInit = ->
VK.init apiId: _vkontakte.getApiId() VK.init apiId: _vkontakte.getApiId()
VK.Auth.getLoginStatus _vkontakte.authInfo VK.Auth.getLoginStatus (response) ->
_vkontakte.authInfo(response)
setTimeout -> setTimeout ->
@ -42,6 +43,12 @@ class Vkontakte
$('.header-container .hello').show() $('.header-container .hello').show()
$('.header-container .hello .greating') $('.header-container .hello .greating')
.html 'Tēnā koe, <span class="settings">' +(if _session.getUser().name then _session.getUser().name else '%username%')+ '</span>!' .html 'Tēnā koe, <span class="settings">' +(if _session.getUser().name then _session.getUser().name else '%username%')+ '</span>!'
if response.session.expire?
setTimeout ->
_vkontakte.auth()
false
, response.session.expire * 1000 - new Date().getTime() + 1000
else else
_session = new Session({}) _session = new Session({})
_session.setUser {} _session.setUser {}
@ -49,6 +56,13 @@ class Vkontakte
$('.header-container .hello').hide() $('.header-container .hello').hide()
window._session = _session window._session = _session
auth: ->
VK.Auth.login (response) ->
_vkontakte.authInfo(response)
false
, 8
false
loadTracksData: (artist, track, duration, callback) -> loadTracksData: (artist, track, duration, callback) ->
track_prepared = track.replace(/\(.*\)/i, '').split('/')[0]; track_prepared = track.replace(/\(.*\)/i, '').split('/')[0];
query = artist+' '+track_prepared; query = artist+' '+track_prepared;
@ -56,46 +70,45 @@ class Vkontakte
callback url callback url
else else
VK.Api.call 'audio.search', q: query, (r) -> VK.Api.call 'audio.search', q: query, (r) ->
r.response.splice 0, 1
url = _vkontakte.matchPerfectResult r.response, artist, track, duration url = _vkontakte.matchPerfectResult r.response, artist, track, duration
_vkontakte.addQR query, url _vkontakte.addQR query, url
callback url callback url
matchPerfectResult: (data, artist, track, duration) -> matchPerfectResult: (data, artist, track, duration) ->
duration = duration.split ':' duration = duration.split ':'
duration = parseInt(duration[0], 10) * 60 + parseInt(duration[1], 10) duration = parseInt(duration[0], 10) * 60 + parseInt(duration[1], 10)
best_score = 0; best_score = 0;
best_result = null; best_result = null;
for item in data for item in data
score = 0; if typeof item is 'object'
item.artist = item.artist.trim(); score = 0;
item.title = item.title.trim(); item.artist = item.artist.trim();
item.title = item.title.trim();
if item.artist == artist if item.artist == artist
score += 10 score += 10
else if item.artist.split(artist).length is 2 else if item.artist.split(artist).length is 2
score += 5 score += 5
else if item.title.split(artist).length is 2 else if item.title.split(artist).length is 2
score += 4 score += 4
if item.title == track if item.title == track
score += 10 score += 10
else if item.title.split(track).length is 2 else if item.title.split(track).length is 2
score += 5 score += 5
if parseInt(item.duration, 10) == duration if parseInt(item.duration, 10) == duration
score += 15 score += 15
else else
delta = Math.abs parseInt(item.duration, 10) - duration delta = Math.abs parseInt(item.duration, 10) - duration
score += (10 - delta) if delta < 10 score += (10 - delta) if delta < 10
if score > best_score if score > best_score
best_score = score best_score = score
best_result = item best_result = item
if score is 35 if score is 35
return best_result.url return best_result.url
return best_result.url return best_result.url
@ -108,12 +121,11 @@ class Vkontakte
false false
$('#vk_login').live 'click', -> $('#vk_login').live 'click', ->
VK.Auth.login (response) -> _vkontakte.auth()
_vkontakte.authInfo(response)
false
, 8
false false
$('#vk_logout').live 'click', -> $('#vk_logout').live 'click', ->
_ajax.go '/search/'; _ajax.go '/search/';
VK.Auth.logout _vkontakte.authInfo VK.Auth.logout (response) ->
_vkontakte.authInfo(response)
false
false false

View File

@ -5,12 +5,12 @@
<meta charset="utf-8"/> <meta charset="utf-8"/>
<link rel="shortcut icon" href="/favicon.ico" /> <link rel="shortcut icon" href="/favicon.ico" />
<link rel="stylesheet" type="text/css" media="screen" href="/stylesheets/beathaven.css" /> <link rel="stylesheet" type="text/css" media="screen" href="/stylesheets/beathaven.css" />
<%= javascript_include_tag "jquery/jquery.min.js" %> <%= javascript_include_tag "jquery/jquery.min.js", :type => "text/javascript", :charset => "utf-8" %>
<%= javascript_include_tag "jquery/jquery-ui/js/jquery-ui-1.8.13.custom.min.js" %> <%= javascript_include_tag "jquery/jquery-ui/js/jquery-ui-1.8.13.custom.min.js", :type => "text/javascript", :charset => "utf-8" %>
<%= javascript_include_tag "jquery/jquery.autocomplete.js" %> <%= javascript_include_tag "jquery/jquery.autocomplete.js", :type => "text/javascript", :charset => "utf-8" %>
<%= javascript_include_tag "jquery/jquery.contentchange.js" %> <%= javascript_include_tag "jquery/jquery.contentchange.js", :type => "text/javascript", :charset => "utf-8" %>
<%= javascript_include_tag "jquery/jquery.jplayer.js" %> <%= javascript_include_tag "jquery/jquery.jplayer.js", :type => "text/javascript", :charset => "utf-8" %>
<%= javascript_include_tag "jquery/jquery.scroll.js" %> <%= javascript_include_tag "jquery/jquery.scroll.js", :type => "text/javascript", :charset => "utf-8" %>
<%= javascript_include_tag "coffee/beathaven.js", :type => "text/javascript", :charset => "utf-8" %> <%= javascript_include_tag "coffee/beathaven.js", :type => "text/javascript", :charset => "utf-8" %>
<%= javascript_include_tag "coffee/vkontakte.js", :type => "text/javascript", :charset => "utf-8" %> <%= javascript_include_tag "coffee/vkontakte.js", :type => "text/javascript", :charset => "utf-8" %>
<%= javascript_include_tag "coffee/session.js", :type => "text/javascript", :charset => "utf-8" %> <%= javascript_include_tag "coffee/session.js", :type => "text/javascript", :charset => "utf-8" %>
@ -61,7 +61,7 @@
<div class="settings settings-button"></div> <div class="settings settings-button"></div>
</div> </div>
<ul class="navigation"> <ul class="navigation">
<li class="logo search">BeatHaven<div class="version">0.4</div></li> <li class="logo search">BeatHaven<div class="version">0.4b</div></li>
<li class="search">Search</li> <li class="search">Search</li>
<li><a href="https://twitter.com/#!/beat_haven" target="_blank">News</a></li> <li><a href="https://twitter.com/#!/beat_haven" target="_blank">News</a></li>
<li class="about">About</li> <li class="about">About</li>

View File

@ -23,17 +23,16 @@ Session = (function() {
}; };
Session.prototype.query = function(url, params, callback) { Session.prototype.query = function(url, params, callback) {
var q_params; var q_params;
q_params = this.vk_params; q_params = $.extend({}, this.vk_params, params);
$.each(params, function(key, val) {
return q_params[key] = val;
});
$.post(url, q_params, callback); $.post(url, q_params, callback);
return false; return false;
}; };
Session.prototype.reloadSession = function() { Session.prototype.reloadSession = function() {
return _session.query('/user/auth', {}, function(ar) { _session.query('/user/auth', {}, function(ar) {
return _session.setUser(ar.user); _session.setUser(ar.user);
return false;
}); });
return false;
}; };
return Session; return Session;
})(); })();

View File

@ -14,7 +14,9 @@ Vkontakte = (function() {
VK.init({ VK.init({
apiId: _vkontakte.getApiId() apiId: _vkontakte.getApiId()
}); });
return VK.Auth.getLoginStatus(_vkontakte.authInfo); return VK.Auth.getLoginStatus(function(response) {
return _vkontakte.authInfo(response);
});
}; };
return setTimeout(function() { return setTimeout(function() {
return $('#vk_api_transport').append('<script async="async" src="http://vkontakte.ru/js/api/openapi.js"></script>'); return $('#vk_api_transport').append('<script async="async" src="http://vkontakte.ru/js/api/openapi.js"></script>');
@ -49,6 +51,12 @@ Vkontakte = (function() {
$('.header-container .hello').show(); $('.header-container .hello').show();
return $('.header-container .hello .greating').html('Tēnā koe, <span class="settings">' + (_session.getUser().name ? _session.getUser().name : '%username%') + '</span>!'); return $('.header-container .hello .greating').html('Tēnā koe, <span class="settings">' + (_session.getUser().name ? _session.getUser().name : '%username%') + '</span>!');
}); });
if (response.session.expire != null) {
setTimeout(function() {
_vkontakte.auth();
return false;
}, response.session.expire * 1000 - new Date().getTime() + 1000);
}
} else { } else {
_session = new Session({}); _session = new Session({});
_session.setUser({}); _session.setUser({});
@ -59,6 +67,13 @@ Vkontakte = (function() {
} }
return window._session = _session; return window._session = _session;
}; };
Vkontakte.prototype.auth = function() {
VK.Auth.login(function(response) {
_vkontakte.authInfo(response);
return false;
}, 8);
return false;
};
Vkontakte.prototype.loadTracksData = function(artist, track, duration, callback) { Vkontakte.prototype.loadTracksData = function(artist, track, duration, callback) {
var query, track_prepared, url; var query, track_prepared, url;
track_prepared = track.replace(/\(.*\)/i, '').split('/')[0]; track_prepared = track.replace(/\(.*\)/i, '').split('/')[0];
@ -69,7 +84,6 @@ Vkontakte = (function() {
return VK.Api.call('audio.search', { return VK.Api.call('audio.search', {
q: query q: query
}, function(r) { }, function(r) {
r.response.splice(0, 1);
url = _vkontakte.matchPerfectResult(r.response, artist, track, duration); url = _vkontakte.matchPerfectResult(r.response, artist, track, duration);
_vkontakte.addQR(query, url); _vkontakte.addQR(query, url);
return callback(url); return callback(url);
@ -84,35 +98,37 @@ Vkontakte = (function() {
best_result = null; best_result = null;
for (_i = 0, _len = data.length; _i < _len; _i++) { for (_i = 0, _len = data.length; _i < _len; _i++) {
item = data[_i]; item = data[_i];
score = 0; if (typeof item === 'object') {
item.artist = item.artist.trim(); score = 0;
item.title = item.title.trim(); item.artist = item.artist.trim();
if (item.artist === artist) { item.title = item.title.trim();
score += 10; if (item.artist === artist) {
} else if (item.artist.split(artist).length === 2) { score += 10;
score += 5; } else if (item.artist.split(artist).length === 2) {
} else if (item.title.split(artist).length === 2) { score += 5;
score += 4; } else if (item.title.split(artist).length === 2) {
} score += 4;
if (item.title === track) { }
score += 10; if (item.title === track) {
} else if (item.title.split(track).length === 2) { score += 10;
score += 5; } else if (item.title.split(track).length === 2) {
} score += 5;
if (parseInt(item.duration, 10) === duration) { }
score += 15; if (parseInt(item.duration, 10) === duration) {
} else { score += 15;
delta = Math.abs(parseInt(item.duration, 10) - duration); } else {
if (delta < 10) { delta = Math.abs(parseInt(item.duration, 10) - duration);
score += 10 - delta; if (delta < 10) {
score += 10 - delta;
}
}
if (score > best_score) {
best_score = score;
best_result = item;
}
if (score === 35) {
return best_result.url;
} }
}
if (score > best_score) {
best_score = score;
best_result = item;
}
if (score === 35) {
return best_result.url;
} }
} }
return best_result.url; return best_result.url;
@ -129,14 +145,14 @@ Vkontakte = (function() {
return Vkontakte; return Vkontakte;
})(); })();
$('#vk_login').live('click', function() { $('#vk_login').live('click', function() {
VK.Auth.login(function(response) { _vkontakte.auth();
_vkontakte.authInfo(response);
return false;
}, 8);
return false; return false;
}); });
$('#vk_logout').live('click', function() { $('#vk_logout').live('click', function() {
_ajax.go('/search/'); _ajax.go('/search/');
VK.Auth.logout(_vkontakte.authInfo); VK.Auth.logout(function(response) {
_vkontakte.authInfo(response);
return false;
});
return false; return false;
}); });

View File

@ -204,24 +204,24 @@ $icons_dir: "/images/icns/";
&.active { &.active {
@include opacity(0.8); @include opacity(0.8);
} }
}
img {
float: left;
margin-top: 1px;
}
.annotation {
float: left;
margin-left: 2px;
}
&#empty-playlist {
float: right;
margin-right: 10px;
img { img {
margin-top: 3px; float: left;
margin-top: 1px;
}
.annotation {
float: left;
margin-left: 2px;
}
&#empty-playlist {
float: right;
margin-right: 10px;
img {
margin-top: 3px;
}
} }
} }
} }

View File

@ -171,14 +171,14 @@
-ms-filter: alpha(opacity=80) ; -ms-filter: alpha(opacity=80) ;
filter: alpha(opacity=80); filter: alpha(opacity=80);
opacity: 0.8; } opacity: 0.8; }
.player-container .additional-controls img { .player-container .additional-controls .item img {
float: left; float: left;
margin-top: 1px; } margin-top: 1px; }
.player-container .additional-controls .annotation { .player-container .additional-controls .item .annotation {
float: left; float: left;
margin-left: 2px; } margin-left: 2px; }
.player-container .additional-controls#empty-playlist { .player-container .additional-controls .item#empty-playlist {
float: right; float: right;
margin-right: 10px; } margin-right: 10px; }
.player-container .additional-controls#empty-playlist img { .player-container .additional-controls .item#empty-playlist img {
margin-top: 3px; } margin-top: 3px; }