Merge pull request #9 from b333z/sort1

Suffix common prefixes from title sort
This commit is contained in:
Synced Synapse 2015-01-30 19:43:01 +00:00
commit c2a8b803b4
6 changed files with 53 additions and 5 deletions

View File

@ -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();
}
}

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;