Mopidy 0.18.1, develop branch (no artist - no album from search request )

Hi Wounter, i have realize my music box using mopidy and http control, and thank's a lot for your work, I like it so much.
I'm using mopidy 0.18.1 with a rapsberry pi, and http client develop version.
I don't know the reason, but according to my library, search result does not have any album and artists result, only tracks.
That's the reason why i decided to do something.
More over i added new functionnality search filter artistand album as you can see into the following source code


// Library.js
[...]
//init search
function initSearchFromAlbum(albumName) {
    $('#searchinput').val(albumName);
	var value = albumName;
    if ((value.length < 100) && (value.length > 0)) {
        showLoading(true);
        //hide ios/android keyboard 
        document.activeElement.blur();
        $("input").blur();

        delete customTracklists['allresultscache'];
        delete customTracklists['artistresultscache'];
        delete customTracklists['albumresultscache'];
        delete customTracklists['trackresultscache'];
        $("#searchresults").hide();

        mopidy.library.findExact({
            album : [value]
        }).then(processSearchResults, console.error);
    }
}

function initSearchFromArtist(artistsName) {
    $('#searchinput').val(artistsName);
	var value = artistsName;
    if ((value.length < 100) && (value.length > 0)) {
        showLoading(true);
        //hide ios/android keyboard 
        document.activeElement.blur();
        $("input").blur();

        delete customTracklists['allresultscache'];
        delete customTracklists['artistresultscache'];
        delete customTracklists['albumresultscache'];
        delete customTracklists['trackresultscache'];
        $("#searchresults").hide();

        mopidy.library.findExact({
            artist : [value]
        }).then(processSearchResults, console.error);
    }
}

[...]
function processSearchResults(resultArr) {
    $(SEARCH_TRACK_TABLE).empty();
    $(SEARCH_ARTIST_TABLE).empty();
    $(SEARCH_ALBUM_TABLE).empty();

    // Merge results from different backends.
    var results = {'tracks': [], 'artists': [], 'albums': []};
    var emptyResult = true;

//    console.log(resultArr, 'resultArr');

    for (var i = 0; i < resultArr.length; ++i) {
        for (var prop in results) {
            if (resultArr[i][prop] && resultArr[i][prop].length) {
                results[prop] = results[prop].concat(resultArr[i][prop]);
                emptyResult = false;
            }
        }
    }
    customTracklists['trackresultscache'] = results.tracks;

// ----- dboulenger	
  // search distinct albums and artists from tracks result objects
  // by pass artists and album no result from search
  // use distincts artists and albums from tracks 
  var artists=new Array();
  var cacheAlbum=new Object();
  var cacheArtist=new Object();
  results.albums=new Array();
  results.artists=new Array();
  for (var i = 0; i < resultArr.length; ++i) 
  {
	if (!resultArr[i]['tracks']) break;
	var tracks= resultArr[i]['tracks'];
	for (var j = 0; j < tracks.length; ++j)
	{
	  var track= tracks[j];
	  if (track['artists'])
	  {
		for (var k = 0; k < track['artists'].length; ++k)
		{		
			if(!cacheArtist[track['artists'][i]['name']])
			{
				var	artist = new Object();
				artist['id']="";
				artist['name']=track['artists'][i]['name'];
				results.artists.push(artist);
				cacheArtist[track['artists'][i]['name']]=1;
			}
		}
	  }
	  if(!cacheAlbum[track['album']['name']])
	  {
			var	album = new Object();
			album['uri']=track['album']['num_discs'];
				album['name']=track['album']['name'];
				album['date']="";
				album['artists']=new Array();
			results.albums.push(album);
			cacheAlbum[track['album']['name']]=1;
		}
	  }
   }
// -----  

    if (emptyResult) {
        toast('No results');
        showLoading(false);
        return false;
    }

    $("#searchresults").show();

    // Returns a string where {x} in template is replaced by tokens[x].
    function theme(template, tokens) {
        return template.replace(/{[^}]+}/g, function(match) {
            return tokens[match.slice(1,-1)];
        });
    }

    // 'Show more' pattern
    var showMorePattern = '<li onclick="$(this).hide().siblings().show(); return false;"><a>Show {count} more</a></li>';

   // Artist results
    var child = '';
    var pattern = '<li><a href="#" onclick="return initSearchFromArtist(this.id)" id={name}><strong>{name}</strong></a></li>';
    var tokens;

    for (var i = 0; i < results.artists.length; i++) {
        tokens = {
            'id': results.artists[i].uri,
            'name': results.artists[i].name
        };

        // Add 'Show all' item after a certain number of hits.
        if (i == 4 && results.artists.length > 5) {
            child += theme(showMorePattern, {'count': results.artists.length - i});
            pattern = pattern.replace('<li>', '<li class="overflow">');
        }

        child += theme(pattern, tokens);
    }

    // Inject list items, refresh listview and hide superfluous items.
    $(SEARCH_ARTIST_TABLE).html(child).listview('refresh').find('.overflow').hide();

    // Album results
    child = '';
    pattern = '<li><a href="#" onclick="return initSearchFromAlbum(this.id)" id="{albumName}">';
    pattern += '<h5 data-role="heading">{albumName}</h5>';
   // pattern += '<p data-role="desc">{artistName} ({albumYear})</p>';
    pattern += '<p data-role="desc">{artistName} {albumYear}</p>';
    pattern += '</a></li>';

    for (var i = 0; i < results.albums.length; i++) {
        tokens = {
            'albumId': results.albums[i].uri,
            'albumName': results.albums[i].name,
            'artistName': '',
            'albumYear': results.albums[i].date
        };

        for (var j = 0; j < results.albums[i].artists.length; j++) {
            tokens.artistName += results.albums[i].artists[j].name + ' ';
        }

        // Add 'Show all' item after a certain number of hits.
        if (i == 4 && results.albums.length > 5) {
            child += theme(showMorePattern, {'count': results.albums.length - i});
            pattern = pattern.replace('<li>', '<li class="overflow">');
        }

        child += theme(pattern, tokens);
    }

    // Inject list items, refresh listview and hide superfluous items.
    $(SEARCH_ALBUM_TABLE).html(child).listview('refresh').find('.overflow').hide();

    $('#expandsearch').show();

    // Track results
//    playlisttotable(results.tracks, SEARCH_TRACK_TABLE, 'trackresultscache');
    resultsToTables(results.tracks, SEARCH_TRACK_TABLE, 'trackresultscache');

    setSongInfo();
    showLoading(false);
}



Thank's a lot for your work ;)