Switch to side-by-side view

--- a/src/mediaserver/cdplugins/tidal/tidal-app.py
+++ b/src/mediaserver/cdplugins/tidal/tidal-app.py
@@ -89,15 +89,19 @@
     session = tidalapi.Session(config=tidalconf)
     session.login(username, password)
     is_logged_in = True
+    if quality == Quality.lossless:
+        setMimeAndSamplerate('audio/flac', "44100")
+    else:
+        setMimeAndSamplerate('audio/mpeg', "44100")
 
 
 def get_mimeandkbs():
     if quality == Quality.lossless:
         return ('audio/flac', str(1411))
     elif quality == Quality.high:
-        return ('video/x-flv', str(320))
+        return ('audio/mpeg', str(320))
     else:
-        return ('video/x-flv', str(96))
+        return ('audio/mpeg', str(96))
 
 @dispatcher.record('trackuri')
 def trackuri(a):
@@ -134,12 +138,16 @@
         except:
             image = None
         try:
+            upnpclass = item.upnpclass if item.upnpclass else None
+        except:
+            upnpclass = None
+        try:
             artnm = item.artist.name if item.artist.name else None
         except:
             artnm = None
         xbmcplugin.entries.append(
             direntry('0$tidal$' + url, xbmcplugin.objid, title, arturi=image,
-                     artist=artnm))
+                     artist=artnm, upnpclass=upnpclass))
 
 def track_list(tracks):
     xbmcplugin.entries += trackentries(httphp, pathprefix,
@@ -371,22 +379,30 @@
     xbmcplugin = XbmcPlugin('0$tidal$')
     msgproc.log("search: [%s]" % a)
     objid = a['objid']
-    field = a['field']
+    field = a['field'] if 'field' in a else None
     value = a['value']
     if re.match('0\$tidal\$', objid) is None:
         raise Exception("bad objid [%s]" % objid)
     xbmcplugin.objid = objid
     maybelogin()
     
-    searchresults = session.search(field, value)
-    msgproc.log("search: Got %d artists" % len(searchresults.artists))
-    view(searchresults.artists, urls_from_id(artist_view, searchresults.artists),
-        end=False)
-    view(searchresults.albums, urls_from_id(album_view, searchresults.albums),
-         end=False)
-    view(searchresults.playlists, urls_from_id(playlist_view,
-                                               searchresults.playlists),
-         end=False)
+    # field is mandatory and maybe 'artist', 'album', 'playlist', 'track'
+    # But quite frequently, our caller does not set it. So need to run multiple
+    # searches
+    if field is None or field = 'artist':
+        searchresults = session.search('artist', value)
+    view(searchresults.artists,
+         urls_from_id(artist_view, searchresults.artists), end=False)
+    if field is None or field = 'album':
+        searchresults = session.search('album', value)
+    view(searchresults.albums,
+         urls_from_id(album_view, searchresults.albums), end=False)
+    if field is None or field = 'playlist':
+        searchresults = session.search('playlist', value)
+    view(searchresults.playlists,
+         urls_from_id(playlist_view, searchresults.playlists), end=False)
+    if field is None or field = 'track':
+        searchresults = session.search('track', value)
     track_list(searchresults.tracks)
     #msgproc.log("%s" % xbmcplugin.entries)
     encoded = json.dumps(xbmcplugin.entries)