Skip to content

Commit

Permalink
Adding browse by Album/Artist (1st level)
Browse files Browse the repository at this point in the history
  • Loading branch information
ACXgit committed Nov 10, 2014
1 parent d1654c2 commit caa80c6
Show file tree
Hide file tree
Showing 6 changed files with 141 additions and 103 deletions.
63 changes: 40 additions & 23 deletions app/libs/runeaudio.php
Expand Up @@ -588,30 +588,34 @@ function deleteBookmark($redis, $id)
return $return;
}

function searchDB($sock, $querytype, $query)
{
switch ($querytype) {
case "filepath":
if (isset($query) && !empty($query)) {
sendMpdCommand($sock,"lsinfo \"".html_entity_decode($query)."\"");
function browseDB($sock,$browsemode,$query) {
switch ($browsemode) {
case 'file':
if (isset($query) && !empty($query)){
sendMpdCommand($sock,'lsinfo "'.html_entity_decode($query).'"');
} else {
sendMpdCommand($sock,'lsinfo');
}
break;
} else {
sendMpdCommand($sock, 'lsinfo');
case 'album':
sendMpdCommand($sock,'list "album"');
break;
}
case 'album':
// no break
case 'artist':
// no break
case 'title':
// no break
case 'file':
sendMpdCommand($sock, "search ".$querytype." \"".html_entity_decode($query)."\"");
break;
case 'globalrandom':
sendMpdCommand($sock, 'listall');
break;
}
case 'artist':
sendMpdCommand($sock,'list "artist"');
break;
case 'genre':
sendMpdCommand($sock,'list "genre"');
break;
case 'globalrandom':
sendMpdCommand($sock,'listall');
break;
}
$response = readMpdResponse($sock);
return _parseFileListResponse($response);
}

function searchDB($sock,$querytype,$query) {
sendMpdCommand($sock,"search ".$querytype." \"".html_entity_decode($query)."\"");
$response = readMpdResponse($sock);
return _parseFileListResponse($response);
}
Expand Down Expand Up @@ -682,7 +686,7 @@ public function run()

function randomSelect($sock)
{
$songs = searchDB($sock, 'globalrandom');
$songs = browseDB($sock, 'globalrandom');
srand((float) microtime() * 10000000);
$randkey = array_rand($songs);
return $songs[$randkey]['file'];
Expand Down Expand Up @@ -745,11 +749,13 @@ function _parseFileListResponse($resp)
$plistLine = strtok($resp, "\n");
// $plistFile = "";
$plCounter = -1;
$browseMode = TRUE;
while ($plistLine) {
// list ( $element, $value ) = explode(": ",$plistLine);
if (!strpos($plistLine,'@eaDir')) list ($element, $value) = explode(': ', $plistLine);
if ($element === 'file' OR $element === 'playlist') {
$plCounter++;
$browseMode = FALSE;
// $plistFile = $value;
$plistArray[$plCounter][$element] = $value;
$plistArray[$plCounter]['fileext'] = parseFileStr($value, '.');
Expand All @@ -759,6 +765,17 @@ function _parseFileListResponse($resp)
$dirCounter++;
// $plistFile = $value;
$plistArray[$plCounter]['directory'] = $value;
} else if ($browseMode) {
if ( $element === 'Album' ) {
$plCounter++;
$plistArray[$plCounter]['album'] = $value;
} else if ( $element === 'Artist' ) {
$plCounter++;
$plistArray[$plCounter]['artist'] = $value;
} else if ( $element === 'Genre' ) {
$plCounter++;
$plistArray[$plCounter]['genre'] = $value;
}
} else {
$plistArray[$plCounter][$element] = $value;
$plistArray[$plCounter]['Time2'] = songTime($plistArray[$plCounter]['Time']);
Expand Down
2 changes: 1 addition & 1 deletion assets/css/runeui.css

Large diffs are not rendered by default.

165 changes: 93 additions & 72 deletions assets/js/runeui.js
Expand Up @@ -493,6 +493,10 @@ function renderLibraryHome() {
}
// Jamendo (static)
content += divOpen + '<div id="home-jamendo" class="home-block' + toggleMPD + '" data-plugin="Jamendo" data-path="Jamendo"><i class="fa fa-play-circle-o"></i><h3>Jamendo<span id="home-count-jamendo"></span></h3>world\'s largest platform for free music</div>' + divClose;
// Album list (static)
content += divOpen + '<div id="home-albums" class="home-block' + toggleMPD + '" data-path="Albums" data-browsemode="album"><i class="fa fa-dot-circle-o"></i><h3>Albums</h3>browse MPD database by album</div>' + divClose;
// Artist list (static)
content += divOpen + '<div id="home-artists" class="home-block' + toggleMPD + '" data-path="Artists" data-browsemode="artist"><i class="fa fa-users"></i><h3>Artists</h3>browse MPD database by artist</div>' + divClose;
content += '</div>';
document.getElementById('home-blocks').innerHTML = content;
loadingSpinner('db', 'hide');
Expand Down Expand Up @@ -824,72 +828,94 @@ function parseResponse(options) {

// DEBUG
// console.log('parseResponse OPTIONS: inputArr = ' + inputArr + ', respType = ' + respType + ', i = ' + i + ', inpath = ' + inpath +', querytype = ' + querytype);

// console.log(inputArr);

switch (respType) {
case 'playlist':
// code placeholder
break;

case 'db':
// normal MPD browsing by file
if (inpath === '' && inputArr.file !== undefined) {
inpath = parsePath(inputArr.file);
}
if (inputArr.file !== undefined || inpath === 'Webradio') {
// DEBUG
// console.log('inputArr.file: ', inputArr.file);
// console.log('inputArr.Title: ', inputArr.Title);
// console.log('inputArr.Artist: ', inputArr.Artist);
// console.log('inputArr.Album: ', inputArr.Album);
content = '<li id="db-' + (i + 1) + '" data-path="';
if (inputArr.Title !== undefined) {
// files
content += inputArr.file;
content += '"><i class="fa fa-bars db-action" title="Actions" data-toggle="context" data-target="#context-menu-file"></i><i class="fa fa-music db-icon"></i><span class="sn">';
content += inputArr.Title + ' <span>' + timeConvert(inputArr.Time) + '</span></span>';
content += ' <span class="bl">';
content += inputArr.Artist;
content += ' - ';
content += inputArr.Album;
} else {
if (inpath !== 'Webradio') {
// files with no tags
content += inputArr.file;
content += '"><i class="fa fa-bars db-action" title="Actions" data-toggle="context" data-target="#context-menu-file"></i><i class="fa fa-music db-icon"></i><span class="sn">';
content += inputArr.file.replace(inpath + '/', '') + ' <span>' + timeConvert(inputArr.Time) + '</span></span>';
content += '<span class="bl">';
content += ' path: ';
content += inpath;
} else {
// webradio playlists
content += inputArr.playlist;
content += '"><i class="fa fa-bars db-action" title="Actions" data-toggle="context" data-target="#context-menu-webradio"></i><i class="fa fa-microphone db-icon db-radio"></i>';
content += '<span class="sn">' + inputArr.playlist.replace(inpath + '/', '').replace('.' + inputArr.fileext , '');
content += '</span><span class="bl">webradio';
}
}
content += '</span></li>';
} else if (inputArr.playlist !== undefined && inputArr.fileext === 'cue') {
// CUE files
content = '<li id="db-' + (i + 1) + '" data-path="';
content += inputArr.playlist;
content += '"><i class="fa fa-bars db-action" title="Actions" data-toggle="context" data-target="#context-menu-file"></i><i class="fa fa-file-text db-icon"></i><span class="sn">';
content += inputArr.playlist.replace(inpath + '/', '') + ' <span>' + timeConvert(inputArr.Time) + '</span></span>';
content += '<span class="bl">';
content += ' path: ';
content += inpath;
} else {
// folders
content = '<li id="db-' + (i + 1) + '" class="db-folder" data-path="';
content += inputArr.directory;
if (inpath !== '') {
content += '"><i class="fa fa-bars db-action" title="Actions" data-toggle="context" data-target="#context-menu"></i><span><i class="fa fa-folder-open"></i>';
} else {
content += '"><i class="fa fa-bars db-action" title="Actions" data-toggle="context" data-target="#context-menu-root"></i><i class="fa fa-hdd-o icon-root"></i><span>';
}
content += inputArr.directory.replace(inpath + '/', '');
content += '</span></li>';
}
if (GUI.browsemode === 'file') {
// browse by file
if (inpath === '' && inputArr.file !== undefined) {
inpath = parsePath(inputArr.file);
}
if (inputArr.file !== undefined || inpath === 'Webradio') {
// DEBUG
// console.log('inputArr.file: ', inputArr.file);
// console.log('inputArr.Title: ', inputArr.Title);
// console.log('inputArr.Artist: ', inputArr.Artist);
// console.log('inputArr.Album: ', inputArr.Album);
content = '<li id="db-' + (i + 1) + '" data-path="';
if (inputArr.Title !== undefined) {
// files
content += inputArr.file;
content += '"><i class="fa fa-bars db-action" title="Actions" data-toggle="context" data-target="#context-menu-file"></i><i class="fa fa-music db-icon"></i><span class="sn">';
content += inputArr.Title + ' <span>' + timeConvert(inputArr.Time) + '</span></span>';
content += ' <span class="bl">';
content += inputArr.Artist;
content += ' - ';
content += inputArr.Album;
} else {
if (inpath !== 'Webradio') {
// files with no tags
content += inputArr.file;
content += '"><i class="fa fa-bars db-action" title="Actions" data-toggle="context" data-target="#context-menu-file"></i><i class="fa fa-music db-icon"></i><span class="sn">';
content += inputArr.file.replace(inpath + '/', '') + ' <span>' + timeConvert(inputArr.Time) + '</span></span>';
content += '<span class="bl">';
content += ' path: ';
content += inpath;
} else {
// webradio playlists
content += inputArr.playlist;
content += '"><i class="fa fa-bars db-action" title="Actions" data-toggle="context" data-target="#context-menu-webradio"></i><i class="fa fa-microphone db-icon db-radio"></i>';
content += '<span class="sn">' + inputArr.playlist.replace(inpath + '/', '').replace('.' + inputArr.fileext , '');
content += '</span><span class="bl">webradio';
}
}
content += '</span></li>';
} else if (inputArr.playlist !== undefined && inputArr.fileext === 'cue') {
// CUE files
content = '<li id="db-' + (i + 1) + '" data-path="';
content += inputArr.playlist;
content += '"><i class="fa fa-bars db-action" title="Actions" data-toggle="context" data-target="#context-menu-file"></i><i class="fa fa-file-text db-icon"></i><span class="sn">';
content += inputArr.playlist.replace(inpath + '/', '') + ' <span>' + timeConvert(inputArr.Time) + '</span></span>';
content += '<span class="bl">';
content += ' path: ';
content += inpath;
} else {
// folders
content = '<li id="db-' + (i + 1) + '" class="db-folder" data-path="';
content += inputArr.directory;
if (inpath !== '') {
content += '"><i class="fa fa-bars db-action" title="Actions" data-toggle="context" data-target="#context-menu"></i><span><i class="fa fa-folder-open"></i>';
} else {
content += '"><i class="fa fa-bars db-action" title="Actions" data-toggle="context" data-target="#context-menu-root"></i><i class="fa fa-hdd-o icon-root"></i><span>';
}
content += inputArr.directory.replace(inpath + '/', '');
content += '</span></li>';
}
} else if (GUI.browsemode === 'album') {
// browse by album
if (inputArr.album !== '') {
content = '<li id="db-' + (i + 1) + '" class="db-folder" data-path="';
content += inputArr.album;
content += '"><i class="fa fa-bars db-action" title="Actions" data-toggle="context" data-target="#context-menu"></i><span><i class="fa fa-dot-circle-o"></i>';
content += inputArr.album;
content += '</span></li>';
}
} else if (GUI.browsemode === 'artist') {
// browse by artist
if (inputArr.artist !== '') {
content = '<li id="db-' + (i + 1) + '" class="db-folder" data-path="';
content += inputArr.artist;
content += '"><i class="fa fa-bars db-action" title="Actions" data-toggle="context" data-target="#context-menu"></i><span><i class="fa fa-user"></i>';
content += inputArr.artist;
content += '</span></li>';
}
}
break;

case 'Spotify':
Expand Down Expand Up @@ -1088,9 +1114,9 @@ function populateDB(options){
// launch the right AJAX call for Library rendering
function getDB(options){
// DEFAULTS
var cmd = options.cmd || 'filepath',
var cmd = options.cmd || 'browse',
path = options.path || '',
browsemode = options.browsemode || '',
browsemode = options.browsemode || 'file',
uplevel = options.uplevel || '',
plugin = options.plugin || '',
querytype = options.querytype || '',
Expand All @@ -1100,6 +1126,7 @@ function getDB(options){
// console.log('OPTIONS: cmd = ' + cmd + ', path = ' + path + ', browsemode = ' + browsemode + ', uplevel = ' + uplevel + ', plugin = ' + plugin);

loadingSpinner('db');
GUI.browsemode = browsemode;

if (plugin !== '') {
// plugins
Expand Down Expand Up @@ -1143,16 +1170,16 @@ function getDB(options){
// normal browsing
if (cmd === 'search') {
var keyword = $('#db-search-keyword').val();
$.post('/db/?querytype=' + browsemode + '&cmd=search', { 'query': keyword }, function(data) {
$.post('/db/?querytype=' + GUI.browsemode + '&cmd=search', { 'query': keyword }, function(data) {
populateDB({
data: data,
path: path,
uplevel: uplevel,
keyword: keyword
});
}, 'json');
} else if (cmd === 'filepath') {
$.post('/db/?cmd=filepath', { 'path': path }, function(data) {
} else if (cmd === 'browse') {
$.post('/db/?cmd=browse', { 'path': path, 'browsemode': GUI.browsemode }, function(data) {
populateDB({
data: data,
path: path,
Expand Down Expand Up @@ -1831,8 +1858,8 @@ if ($('#section-index').length) {
} else {
++GUI.currentDBpos[10];
getDB({
browsemode: $(this).data('browsemode'),
path: $(this).data('path'),
browsemode: GUI.browsemode,
uplevel: 0,
plugin: $(this).data('plugin')
});
Expand Down Expand Up @@ -1880,7 +1907,6 @@ if ($('#section-index').length) {
path = GUI.currentpath + '/' + el.find('span').text();
getDB({
path: path,
browsemode: GUI.browsemode,
plugin: 'Spotify',
args: el.data('path').toString(),
querytype: 'tracks'
Expand All @@ -1891,7 +1917,6 @@ if ($('#section-index').length) {
path = GUI.currentpath + '/' + el.find('span').text();
getDB({
path: path,
browsemode: GUI.browsemode,
plugin: 'Dirble',
querytype: 'stations',
args: el.data('path')
Expand All @@ -1904,7 +1929,6 @@ if ($('#section-index').length) {
// var args = el.data('path');
// getDB({
// path: path,
// browsemode: GUI.browsemode,
// plugin: 'Jamendo',
// querytype: querytype,
// args : args
Expand All @@ -1915,7 +1939,6 @@ if ($('#section-index').length) {
//GUI.currentDBpos[GUI.currentDBpos[10]] = $('.database .db-entry').index(this);
getDB({
path: path,
browsemode: GUI.browsemode,
uplevel: 0
});
}
Expand Down Expand Up @@ -1966,7 +1989,6 @@ if ($('#section-index').length) {
}
getDB({
path: path,
browsemode: GUI.browsemode,
plugin: GUI.plugin,
uplevel: 1
});
Expand Down Expand Up @@ -2114,8 +2136,7 @@ if ($('#section-index').length) {
GUI.browsemode = browsemode.slice(0,-1);
$('#browse-mode-current').html(GUI.browsemode);
getDB({
path: '',
browsemode: GUI.browsemode
path: ''
});
// console.log('Browse mode set to: ', GUI.browsemode);
});
Expand Down
4 changes: 2 additions & 2 deletions assets/js/runeui.min.js

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions assets/less/runeui-custom.less
Expand Up @@ -610,7 +610,7 @@ html, body {
.list-li;
.clearfix();
}
.db-icon, .fa-folder-open, .fa-hdd-o {
.db-icon, .fa-folder-open, .fa-hdd-o, .fa-dot-circle-o, .fa-user {
display: none;
}
.db-entry {
Expand Down Expand Up @@ -1632,7 +1632,7 @@ ul.parsley-error-list {
color: @brand-alt;
text-align: center;
}
.fa-folder-open, .fa-hdd-o {
.fa-folder-open, .fa-hdd-o, .fa-dot-circle-o, .fa-user {
display: inline-block;
width: 24px;
margin-left: 12px;
Expand Down
6 changes: 3 additions & 3 deletions db/index.php
Expand Up @@ -39,13 +39,13 @@
$activePlayer = $redis->get('activePlayer');
if (isset($_GET['cmd']) && !empty($_GET['cmd'])) {
switch ($_GET['cmd']) {
case 'filepath':
case 'browse':
if (isset($_POST['path']) && $_POST['path'] !== '') {
echo json_encode(searchDB($mpd, 'filepath', $_POST['path']));
echo json_encode(browseDB($mpd, $_POST['browsemode'], $_POST['path']));
} else {
if ($activePlayer === 'MPD') {
// MPD
echo json_encode(searchDB($mpd, 'filepath'));
echo json_encode(browseDB($mpd, $_POST['browsemode']));
} elseif ($activePlayer === 'Spotify') {
// SPOP
echo json_encode('home');
Expand Down

0 comments on commit caa80c6

Please sign in to comment.