Merge pull request #9 from b333z/sort1
Suffix common prefixes from title sort
This commit is contained in:
commit
c2a8b803b4
|
@ -455,4 +455,47 @@ public class MediaDatabase extends SQLiteOpenHelper {
|
|||
db.execSQL("DROP TABLE IF EXISTS " + Tables.MUSIC_VIDEOS);
|
||||
onCreate(db);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tokens to move from prefix to suffix when sorting titles
|
||||
*
|
||||
* TODO: Extract from host's advancedsettings.xml - sortTokens if available via JSONAPI
|
||||
*/
|
||||
private static String[] commonTokens = {"The", /* "An", "A" */};
|
||||
|
||||
/**
|
||||
* Given column create SQLite column expression to convert any sortTokens prefixes to suffixes
|
||||
*
|
||||
* eg.column = "title", commonTokens = {"The", "An", "A"};
|
||||
*
|
||||
* (
|
||||
* CASE
|
||||
* WHEN title LIKE 'The %' THEN SUBSTR(title,5) || ', The'
|
||||
* WHEN title LIKE 'An %' THEN SUBSTR(title,4) || ', An'
|
||||
* WHEN title LIKE 'A %' THEN SUBSTR(title,3) || ', A'
|
||||
* ELSE title
|
||||
* END
|
||||
* )
|
||||
*
|
||||
* This allows it to be used in SQL where a column expression is expected ( SELECT, ORDER BY )
|
||||
*/
|
||||
public static String sortCommonTokens(String column) {
|
||||
StringBuilder order = new StringBuilder();
|
||||
|
||||
order.append(" (CASE ");
|
||||
|
||||
// Create WHEN for each token, eg 'The Dog' would become 'Dog, The'
|
||||
for (String token: commonTokens) {
|
||||
order.append(
|
||||
" WHEN " + column + " LIKE '" + token + " %'" +
|
||||
" THEN SUBSTR(" + column + "," + String.valueOf(token.length() + 2) + ")" +
|
||||
" || ', " + token + "' "
|
||||
);
|
||||
}
|
||||
|
||||
order.append(" ELSE " + column + " END) ");
|
||||
|
||||
return order.toString();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -50,6 +50,7 @@ import com.syncedsynapse.kore2.host.HostManager;
|
|||
import com.syncedsynapse.kore2.jsonrpc.ApiException;
|
||||
import com.syncedsynapse.kore2.jsonrpc.event.MediaSyncEvent;
|
||||
import com.syncedsynapse.kore2.provider.MediaContract;
|
||||
import com.syncedsynapse.kore2.provider.MediaDatabase;
|
||||
import com.syncedsynapse.kore2.service.LibrarySyncService;
|
||||
import com.syncedsynapse.kore2.utils.LogUtils;
|
||||
import com.syncedsynapse.kore2.utils.UIUtils;
|
||||
|
@ -329,7 +330,7 @@ public class AlbumListFragment extends Fragment
|
|||
MediaContract.Albums.YEAR,
|
||||
};
|
||||
|
||||
String SORT = MediaContract.Albums.TITLE + " ASC";
|
||||
String SORT = MediaDatabase.sortCommonTokens(MediaContract.Albums.TITLE) + " ASC";
|
||||
|
||||
final int ID = 0;
|
||||
final int ALBUMID = 1;
|
||||
|
|
|
@ -50,6 +50,7 @@ import com.syncedsynapse.kore2.host.HostManager;
|
|||
import com.syncedsynapse.kore2.jsonrpc.ApiException;
|
||||
import com.syncedsynapse.kore2.jsonrpc.event.MediaSyncEvent;
|
||||
import com.syncedsynapse.kore2.provider.MediaContract;
|
||||
import com.syncedsynapse.kore2.provider.MediaDatabase;
|
||||
import com.syncedsynapse.kore2.service.LibrarySyncService;
|
||||
import com.syncedsynapse.kore2.utils.LogUtils;
|
||||
import com.syncedsynapse.kore2.utils.UIUtils;
|
||||
|
@ -295,7 +296,7 @@ public class ArtistListFragment extends Fragment
|
|||
MediaContract.Movies.THUMBNAIL,
|
||||
};
|
||||
|
||||
String SORT = MediaContract.Artists.ARTIST + " ASC";
|
||||
String SORT = MediaDatabase.sortCommonTokens(MediaContract.Artists.ARTIST) + " ASC";
|
||||
|
||||
final int ID = 0;
|
||||
final int ARTISTID = 1;
|
||||
|
|
|
@ -51,6 +51,7 @@ import com.syncedsynapse.kore2.host.HostManager;
|
|||
import com.syncedsynapse.kore2.jsonrpc.ApiException;
|
||||
import com.syncedsynapse.kore2.jsonrpc.event.MediaSyncEvent;
|
||||
import com.syncedsynapse.kore2.provider.MediaContract;
|
||||
import com.syncedsynapse.kore2.provider.MediaDatabase;
|
||||
import com.syncedsynapse.kore2.service.LibrarySyncService;
|
||||
import com.syncedsynapse.kore2.utils.LogUtils;
|
||||
import com.syncedsynapse.kore2.utils.UIUtils;
|
||||
|
@ -335,7 +336,7 @@ public class MovieListFragment extends Fragment
|
|||
MediaContract.Movies.TAGLINE,
|
||||
};
|
||||
|
||||
String SORT = MediaContract.Movies.TITLE + " ASC";
|
||||
String SORT = MediaDatabase.sortCommonTokens(MediaContract.Movies.TITLE) + " ASC";
|
||||
|
||||
final int ID = 0;
|
||||
final int MOVIEID = 1;
|
||||
|
|
|
@ -50,6 +50,7 @@ import com.syncedsynapse.kore2.host.HostManager;
|
|||
import com.syncedsynapse.kore2.jsonrpc.ApiException;
|
||||
import com.syncedsynapse.kore2.jsonrpc.event.MediaSyncEvent;
|
||||
import com.syncedsynapse.kore2.provider.MediaContract;
|
||||
import com.syncedsynapse.kore2.provider.MediaDatabase;
|
||||
import com.syncedsynapse.kore2.service.LibrarySyncService;
|
||||
import com.syncedsynapse.kore2.utils.LogUtils;
|
||||
import com.syncedsynapse.kore2.utils.UIUtils;
|
||||
|
@ -286,7 +287,7 @@ public class MusicVideoListFragment extends Fragment
|
|||
MediaContract.MusicVideos.GENRES,
|
||||
};
|
||||
|
||||
String SORT = MediaContract.MusicVideos.TITLE + " ASC";
|
||||
String SORT = MediaDatabase.sortCommonTokens(MediaContract.MusicVideos.TITLE) + " ASC";
|
||||
|
||||
final int ID = 0;
|
||||
final int MUSICVIDEOID = 1;
|
||||
|
|
|
@ -51,6 +51,7 @@ import com.syncedsynapse.kore2.host.HostManager;
|
|||
import com.syncedsynapse.kore2.jsonrpc.ApiException;
|
||||
import com.syncedsynapse.kore2.jsonrpc.event.MediaSyncEvent;
|
||||
import com.syncedsynapse.kore2.provider.MediaContract;
|
||||
import com.syncedsynapse.kore2.provider.MediaDatabase;
|
||||
import com.syncedsynapse.kore2.service.LibrarySyncService;
|
||||
import com.syncedsynapse.kore2.utils.LogUtils;
|
||||
import com.syncedsynapse.kore2.utils.UIUtils;
|
||||
|
@ -329,7 +330,7 @@ public class TVShowListFragment extends Fragment
|
|||
MediaContract.TVShows.WATCHEDEPISODES,
|
||||
};
|
||||
|
||||
String SORT = MediaContract.TVShows.TITLE + " ASC";
|
||||
String SORT = MediaDatabase.sortCommonTokens(MediaContract.TVShows.TITLE) + " ASC";
|
||||
|
||||
final int ID = 0;
|
||||
final int TVSHOWID = 1;
|
||||
|
|
Loading…
Reference in New Issue