diff --git a/app/coffeescripts/session.coffee b/app/coffeescripts/session.coffee
index 3b59cd6..9f155f6 100644
--- a/app/coffeescripts/session.coffee
+++ b/app/coffeescripts/session.coffee
@@ -19,12 +19,12 @@ class Session
@user
query: (url, params, callback) ->
- q_params = @vk_params
- $.each params, (key, val) ->
- q_params[key] = val
+ q_params = $.extend {}, @vk_params, params
$.post url, q_params, callback
false
reloadSession: ->
_session.query '/user/auth', {}, (ar) ->
- _session.setUser ar.user
\ No newline at end of file
+ _session.setUser ar.user
+ false
+ false
diff --git a/app/coffeescripts/vkontakte.coffee b/app/coffeescripts/vkontakte.coffee
index 7dffcf7..8555130 100644
--- a/app/coffeescripts/vkontakte.coffee
+++ b/app/coffeescripts/vkontakte.coffee
@@ -13,7 +13,8 @@ class Vkontakte
window.vkAsyncInit = ->
VK.init apiId: _vkontakte.getApiId()
- VK.Auth.getLoginStatus _vkontakte.authInfo
+ VK.Auth.getLoginStatus (response) ->
+ _vkontakte.authInfo(response)
setTimeout ->
@@ -42,6 +43,12 @@ class Vkontakte
$('.header-container .hello').show()
$('.header-container .hello .greating')
.html 'Tēnā koe, ' +(if _session.getUser().name then _session.getUser().name else '%username%')+ '!'
+
+ if response.session.expire?
+ setTimeout ->
+ _vkontakte.auth()
+ false
+ , response.session.expire * 1000 - new Date().getTime() + 1000
else
_session = new Session({})
_session.setUser {}
@@ -49,6 +56,13 @@ class Vkontakte
$('.header-container .hello').hide()
window._session = _session
+ auth: ->
+ VK.Auth.login (response) ->
+ _vkontakte.authInfo(response)
+ false
+ , 8
+ false
+
loadTracksData: (artist, track, duration, callback) ->
track_prepared = track.replace(/\(.*\)/i, '').split('/')[0];
query = artist+' '+track_prepared;
@@ -56,46 +70,45 @@ class Vkontakte
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 typeof item is 'object'
+ 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.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 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 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 > best_score
+ best_score = score
+ best_result = item
- if score is 35
- return best_result.url
+ if score is 35
+ return best_result.url
return best_result.url
@@ -108,12 +121,11 @@ class Vkontakte
false
$('#vk_login').live 'click', ->
- VK.Auth.login (response) ->
- _vkontakte.authInfo(response)
- false
- , 8
+ _vkontakte.auth()
false
$('#vk_logout').live 'click', ->
_ajax.go '/search/';
- VK.Auth.logout _vkontakte.authInfo
+ VK.Auth.logout (response) ->
+ _vkontakte.authInfo(response)
+ false
false
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb
index 1589aec..b7f5255 100644
--- a/app/views/layouts/application.html.erb
+++ b/app/views/layouts/application.html.erb
@@ -5,12 +5,12 @@
- <%= javascript_include_tag "jquery/jquery.min.js" %>
- <%= javascript_include_tag "jquery/jquery-ui/js/jquery-ui-1.8.13.custom.min.js" %>
- <%= javascript_include_tag "jquery/jquery.autocomplete.js" %>
- <%= javascript_include_tag "jquery/jquery.contentchange.js" %>
- <%= javascript_include_tag "jquery/jquery.jplayer.js" %>
- <%= javascript_include_tag "jquery/jquery.scroll.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", :type => "text/javascript", :charset => "utf-8" %>
+ <%= javascript_include_tag "jquery/jquery.autocomplete.js", :type => "text/javascript", :charset => "utf-8" %>
+ <%= javascript_include_tag "jquery/jquery.contentchange.js", :type => "text/javascript", :charset => "utf-8" %>
+ <%= javascript_include_tag "jquery/jquery.jplayer.js", :type => "text/javascript", :charset => "utf-8" %>
+ <%= 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/vkontakte.js", :type => "text/javascript", :charset => "utf-8" %>
<%= javascript_include_tag "coffee/session.js", :type => "text/javascript", :charset => "utf-8" %>
@@ -61,7 +61,7 @@
- - BeatHaven
0.4
+ - BeatHaven
0.4b
- Search
- News
- About
diff --git a/public/javascripts/coffee/session.js b/public/javascripts/coffee/session.js
index a951b6d..8c423ad 100644
--- a/public/javascripts/coffee/session.js
+++ b/public/javascripts/coffee/session.js
@@ -23,17 +23,16 @@ Session = (function() {
};
Session.prototype.query = function(url, params, callback) {
var q_params;
- q_params = this.vk_params;
- $.each(params, function(key, val) {
- return q_params[key] = val;
- });
+ q_params = $.extend({}, this.vk_params, params);
$.post(url, q_params, callback);
return false;
};
Session.prototype.reloadSession = function() {
- return _session.query('/user/auth', {}, function(ar) {
- return _session.setUser(ar.user);
+ _session.query('/user/auth', {}, function(ar) {
+ _session.setUser(ar.user);
+ return false;
});
+ return false;
};
return Session;
})();
\ No newline at end of file
diff --git a/public/javascripts/coffee/vkontakte.js b/public/javascripts/coffee/vkontakte.js
index 88a1f23..d0286e7 100644
--- a/public/javascripts/coffee/vkontakte.js
+++ b/public/javascripts/coffee/vkontakte.js
@@ -14,7 +14,9 @@ Vkontakte = (function() {
VK.init({
apiId: _vkontakte.getApiId()
});
- return VK.Auth.getLoginStatus(_vkontakte.authInfo);
+ return VK.Auth.getLoginStatus(function(response) {
+ return _vkontakte.authInfo(response);
+ });
};
return setTimeout(function() {
return $('#vk_api_transport').append('');
@@ -49,6 +51,12 @@ Vkontakte = (function() {
$('.header-container .hello').show();
return $('.header-container .hello .greating').html('Tēnā koe, ' + (_session.getUser().name ? _session.getUser().name : '%username%') + '!');
});
+ if (response.session.expire != null) {
+ setTimeout(function() {
+ _vkontakte.auth();
+ return false;
+ }, response.session.expire * 1000 - new Date().getTime() + 1000);
+ }
} else {
_session = new Session({});
_session.setUser({});
@@ -59,6 +67,13 @@ Vkontakte = (function() {
}
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) {
var query, track_prepared, url;
track_prepared = track.replace(/\(.*\)/i, '').split('/')[0];
@@ -69,7 +84,6 @@ Vkontakte = (function() {
return VK.Api.call('audio.search', {
q: query
}, function(r) {
- r.response.splice(0, 1);
url = _vkontakte.matchPerfectResult(r.response, artist, track, duration);
_vkontakte.addQR(query, url);
return callback(url);
@@ -84,35 +98,37 @@ Vkontakte = (function() {
best_result = null;
for (_i = 0, _len = data.length; _i < _len; _i++) {
item = data[_i];
- 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 === 2) {
- score += 5;
- } else if (item.title.split(artist).length === 2) {
- score += 4;
- }
- if (item.title === track) {
- score += 10;
- } else if (item.title.split(track).length === 2) {
- score += 5;
- }
- if (parseInt(item.duration, 10) === duration) {
- score += 15;
- } else {
- delta = Math.abs(parseInt(item.duration, 10) - duration);
- if (delta < 10) {
- score += 10 - delta;
+ if (typeof item === 'object') {
+ 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 === 2) {
+ score += 5;
+ } else if (item.title.split(artist).length === 2) {
+ score += 4;
+ }
+ if (item.title === track) {
+ score += 10;
+ } else if (item.title.split(track).length === 2) {
+ score += 5;
+ }
+ if (parseInt(item.duration, 10) === duration) {
+ score += 15;
+ } else {
+ delta = Math.abs(parseInt(item.duration, 10) - duration);
+ 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;
@@ -129,14 +145,14 @@ Vkontakte = (function() {
return Vkontakte;
})();
$('#vk_login').live('click', function() {
- VK.Auth.login(function(response) {
- _vkontakte.authInfo(response);
- return false;
- }, 8);
+ _vkontakte.auth();
return false;
});
$('#vk_logout').live('click', function() {
_ajax.go('/search/');
- VK.Auth.logout(_vkontakte.authInfo);
+ VK.Auth.logout(function(response) {
+ _vkontakte.authInfo(response);
+ return false;
+ });
return false;
});
\ No newline at end of file
diff --git a/public/stylesheets/_sass/player.scss b/public/stylesheets/_sass/player.scss
index c0d04c1..5752ca2 100644
--- a/public/stylesheets/_sass/player.scss
+++ b/public/stylesheets/_sass/player.scss
@@ -204,24 +204,24 @@ $icons_dir: "/images/icns/";
&.active {
@include opacity(0.8);
}
- }
-
- img {
- float: left;
- margin-top: 1px;
- }
-
- .annotation {
- float: left;
- margin-left: 2px;
- }
-
- empty-playlist {
- float: right;
- margin-right: 10px;
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;
+ }
}
}
}
diff --git a/public/stylesheets/player.css b/public/stylesheets/player.css
index 5392d09..cf831e6 100644
--- a/public/stylesheets/player.css
+++ b/public/stylesheets/player.css
@@ -171,14 +171,14 @@
-ms-filter: ”alpha(opacity=80) ”;
filter: alpha(opacity=80);
opacity: 0.8; }
- .player-container .additional-controls img {
- float: left;
- margin-top: 1px; }
- .player-container .additional-controls .annotation {
- float: left;
- margin-left: 2px; }
- .player-container .additional-controls#empty-playlist {
- float: right;
- margin-right: 10px; }
- .player-container .additional-controls#empty-playlist img {
- margin-top: 3px; }
+ .player-container .additional-controls .item img {
+ float: left;
+ margin-top: 1px; }
+ .player-container .additional-controls .item .annotation {
+ float: left;
+ margin-left: 2px; }
+ .player-container .additional-controls .item#empty-playlist {
+ float: right;
+ margin-right: 10px; }
+ .player-container .additional-controls .item#empty-playlist img {
+ margin-top: 3px; }