Skip to content

Commit

Permalink
add play_all button for recommend song list
Browse files Browse the repository at this point in the history
  • Loading branch information
cosven committed Feb 24, 2016
1 parent 82d2ee2 commit 166205e
Show file tree
Hide file tree
Showing 8 changed files with 80 additions and 8 deletions.
11 changes: 7 additions & 4 deletions feeluown/glue.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ def _init_signal_binding(self):

ViewOp.ui.WEBVIEW.signal_play.connect(self.on_play_song_clicked)
ViewOp.ui.WEBVIEW.signal_play_songs.connect(self.on_play_songs)
ViewOp.ui.WEBVIEW.signal_play_song_ids.connect(self.on_play_song_ids)
ViewOp.ui.WEBVIEW.signal_play_mv.connect(ControllerApi.play_mv_by_mvid)
ViewOp.ui.WEBVIEW.signal_search_album.connect(self.search_album)
ViewOp.ui.WEBVIEW.signal_search_artist.connect(self.search_artist)
Expand Down Expand Up @@ -239,15 +240,17 @@ def switch_desktop_mini(self):
self.hide()
ControllerApi.toggle_desktop_mini()

@pyqtSlot(int)
@pyqtSlot(list)
def on_play_songs(self, songs):
self.mode_manager.change_to_normal()
if len(songs) == 0:
ViewOp.ui.STATUS_BAR.showMessage(u'该列表没有歌曲', 2000)
return
ControllerApi.current_playlist_widget.set_songs(songs)
ControllerApi.player.set_music_list(songs)

@pyqtSlot(list)
def on_play_song_ids(self, song_ids):
songs = ControllerApi.api.get_songs_detail(song_ids)
self.on_play_songs(songs)

@pyqtSlot(int)
def remove_music_from_list(self, mid):
ControllerApi.player.remove_music(mid)
Expand Down
7 changes: 7 additions & 0 deletions feeluown/plugin/NetEaseMusic/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,13 @@ def song_detail(self, music_id):
data = self.http_request('GET', action)
return data

def songs_detail(self, music_ids):
music_ids = [str(music_id) for music_id in music_ids]
action = 'http://music.163.com/api/song/detail?ids=[' +\
','.join(music_ids) + ']'
data = self.http_request('GET', action)
return data

# DJchannel ( id, channel_name ) ids --> song urls ( details )
# 将 channels 整理为 songs 类型
def channel_detail(self, channelids, offset=0):
Expand Down
10 changes: 10 additions & 0 deletions feeluown/plugin/NetEaseMusic/normalize.py
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,16 @@ def get_song_detail(self, mid):

return model

def get_songs_detail(self, mids):
data = self.ne.songs_detail(mids)
if not self.is_response_avaible(data):
return data
songs = []
for each in data['songs']:
song = self.access_music(each)
songs.append(song)
return songs

def update_playlist_detail(self, pid, data=None):
data = self.ne.playlist_detail(pid) if data is None else data
if not self.is_response_avaible(data):
Expand Down
19 changes: 18 additions & 1 deletion feeluown/web_assets/js/common.js
Original file line number Diff line number Diff line change
Expand Up @@ -88,11 +88,17 @@ SongTable.bind_music_play = function(){

$('.song').keydown(function(e){
var index = $('.song').index(this);
var total_songs = $('.song').length;
var sid = $(this).attr('id');

switch(e.which){
case 74: // key: j
$('.song').eq(index + 1).focus();
if (index == (total_songs-1)){
$('.song').eq(0).focus();
}
else{
$('.song').eq(index + 1).focus();
}
break;
case 75: // key: k
$('.song').eq(index - 1).focus()
Expand Down Expand Up @@ -121,6 +127,17 @@ SongTable.bind_music_play = function(){
var songsStr = JSON.stringify(songs);
js_python.play_songs(songsStr);
});

$('#play_all_ids').on('click', function(){
var songs = {};
var track_ids = [];
for (var i=0; i<window.songs.length; i++){
track_ids.push(window.songs[i].id);
}
songs.track_ids = track_ids;
var songsStr = JSON.stringify(songs);
js_python.play_song_ids(songsStr);
});
}

SongTable.tmpSaveSongsInfo = function(songs){
Expand Down
4 changes: 2 additions & 2 deletions feeluown/web_assets/playlist.html
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<!DOCTYPE>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
Expand Down Expand Up @@ -61,4 +61,4 @@
</div>
</div>
</body>
</html>
</html>
22 changes: 22 additions & 0 deletions feeluown/web_assets/public/recommend.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
.vcenter-wrapper {
text-align: center;
display: block;
}

#play_all_ids {
width: 80px;
height: 80px;
border-radius: 50px;
display: inline-block;
margin: 10px 0;
transition: 0.5s;
color: #993333;
line-height: 80px;
font-size: 15px;
color: #CCC;
background: #993333;
}

#play_all_ids:hover {
cursor: pointer;
}
7 changes: 6 additions & 1 deletion feeluown/web_assets/recommend.html
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<!DOCTYPE>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
Expand All @@ -7,12 +7,17 @@
<link rel="stylesheet" href="public/base_playlist.css">
<link rel="stylesheet" href="public/base.css">
<link rel="stylesheet" href="public/theme/base_default.css">
<link rel="stylesheet" href="public/recommend.css">
<script src="js/jquery.min.js"></script>
<script src="js/angular.min.js"></script>
<script src="js/bootstrap.min.js" ></script>
<script src="js/common.js"></script>
</head>
<body>

<div class="vcenter-wrapper">
<div id="play_all_ids">播放全部</div>
</div>
<div class="col-sm-12" ng-app="app_table" ng-controller="SongTable.initData" id="songs_table">
<table class="table table-condensed">
<thead>
Expand Down
8 changes: 8 additions & 0 deletions feeluown/widgets/webview.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
class WebView(QWebView):
signal_play = pyqtSignal([int])
signal_play_songs = pyqtSignal([list])
signal_play_song_ids = pyqtSignal([list])
signal_search_artist = pyqtSignal([int])
signal_search_album = pyqtSignal([int])
signal_play_mv = pyqtSignal([int])
Expand Down Expand Up @@ -73,6 +74,13 @@ def play_songs(self, songs_str):
tracks = songs['tracks']
self.signal_play_songs.emit(tracks)

@pyqtSlot(str)
def play_song_ids(self, songs_str):
LOG.debug('play songs by ids')
songs = json.loads(songs_str)
song_ids = songs['track_ids']
self.signal_play_song_ids.emit(song_ids)

@pyqtSlot(int)
def search_artist(self, aid):
LOG.debug("search artist info, the artist id is: " + str(aid))
Expand Down

0 comments on commit 166205e

Please sign in to comment.