Added filtering to offline cache.

This commit is contained in:
casey langen 2017-06-13 10:35:47 -07:00
parent 1d8cfd8c7c
commit ccd59ae92b
2 changed files with 41 additions and 3 deletions

View File

@ -11,6 +11,7 @@ import java.util.List;
import io.casey.musikcube.remote.Application;
import io.casey.musikcube.remote.playback.StreamProxy;
import io.casey.musikcube.remote.util.Strings;
import io.casey.musikcube.remote.websocket.Messages;
import io.casey.musikcube.remote.websocket.SocketMessage;
import io.casey.musikcube.remote.websocket.WebSocketService;
@ -65,19 +66,29 @@ public abstract class OfflineDb extends RoomDatabase {
final OfflineTrackDao dao = trackDao();
final boolean countOnly = message.getBooleanOption(Messages.Key.COUNT_ONLY, false);
final String filter = message.getStringOption(Messages.Key.FILTER, "");
final JSONArray tracks = new JSONArray();
final JSONObject options = new JSONObject();
if (countOnly) {
options.put(Messages.Key.COUNT, dao.countTracks());
final int count = Strings.empty(filter) ? dao.countTracks() : dao.countTracks(filter);
options.put(Messages.Key.COUNT, count);
}
else {
final int offset = message.getIntOption(Messages.Key.OFFSET, -1);
final int limit = message.getIntOption(Messages.Key.LIMIT, -1);
final List<OfflineTrack> offlineTracks = (offset == -1 || limit == -1)
? dao.queryTracks() : dao.queryTracks(limit, offset);
List<OfflineTrack> offlineTracks;
if (Strings.empty(filter)) {
offlineTracks = (offset == -1 || limit == -1)
? dao.queryTracks() : dao.queryTracks(limit, offset);
}
else {
offlineTracks = (offset == -1 || limit == -1)
? dao.queryTracks(filter) : dao.queryTracks(filter, limit, offset);
}
for (final OfflineTrack track : offlineTracks) {
tracks.put(track.toJSONObject());

View File

@ -17,13 +17,40 @@ public interface OfflineTrackDao {
"LIMIT :limit OFFSET :offset")
List<OfflineTrack> queryTracks(int limit, int offset);
@Query("SELECT * FROM OfflineTrack " +
"WHERE " +
" title LIKE '%'||LOWER(:filter)||'%' OR " +
" album LIKE '%'||LOWER(:filter)||'%' OR " +
" albumArtist LIKE '%'||LOWER(:filter)||'%' OR " +
" artist LIKE '%'||LOWER(:filter)||'%' " +
"ORDER BY albumArtist ASC, album ASC, trackNum ASC, TITLE ASC " +
"LIMIT :limit OFFSET :offset")
List<OfflineTrack> queryTracks(String filter, int limit, int offset);
@Query("SELECT * FROM OfflineTrack " +
"ORDER BY albumArtist ASC, album ASC, trackNum ASC, TITLE ASC")
List<OfflineTrack> queryTracks();
@Query("SELECT * FROM OfflineTrack " +
"WHERE " +
" title LIKE '%'||LOWER(:filter)||'%' OR " +
" album LIKE '%'||LOWER(:filter)||'%' OR " +
" albumArtist LIKE '%'||LOWER(:filter)||'%' OR " +
" artist LIKE '%'||LOWER(:filter)||'%' " +
"ORDER BY albumArtist ASC, album ASC, trackNum ASC, TITLE ASC ")
List<OfflineTrack> queryTracks(String filter);
@Query("SELECT COUNT(*) FROM OfflineTrack")
int countTracks();
@Query("SELECT COUNT(*) FROM OfflineTrack " +
"WHERE " +
" title LIKE '%'||LOWER(:filter)||'%' OR " +
" album LIKE '%'||LOWER(:filter)||'%' OR " +
" albumArtist LIKE '%'||LOWER(:filter)||'%' OR " +
" artist LIKE '%'||LOWER(:filter)||'%' ")
int countTracks(String filter);
@Query("SELECT DISTINCT uri FROM OfflineTrack")
List<String> queryUris();