Added option to sort by last played (#340)

This commit is contained in:
tomerf 2017-01-30 21:03:16 +02:00 committed by Synced Synapse
parent c9147231ab
commit d5f8ee4d49
9 changed files with 55 additions and 3 deletions

View File

@ -48,7 +48,8 @@ public class Settings {
SORT_BY_LENGTH = 4, SORT_BY_LENGTH = 4,
SORT_BY_ALBUM = 5, SORT_BY_ALBUM = 5,
SORT_BY_ARTIST = 6, SORT_BY_ARTIST = 6,
SORT_BY_ARTIST_YEAR = 7 ; SORT_BY_ARTIST_YEAR = 7,
SORT_BY_LAST_PLAYED = 8;
/** /**
* Preferences keys. * Preferences keys.

View File

@ -145,6 +145,7 @@ public class MediaContract {
String WRITERS = "writers"; String WRITERS = "writers";
String YEAR = "year"; String YEAR = "year";
String DATEADDED = "dateadded"; String DATEADDED = "dateadded";
String LASTPLAYED = "lastplayed";
} }
public static class Movies implements BaseColumns, SyncColumns, MoviesColumns { public static class Movies implements BaseColumns, SyncColumns, MoviesColumns {
@ -229,6 +230,7 @@ public class MediaContract {
String PLAYCOUNT = "playcount"; String PLAYCOUNT = "playcount";
String TITLE = "title"; String TITLE = "title";
String DATEADDED = "dateadded"; String DATEADDED = "dateadded";
String LASTPLAYED = "lastplayed";
String FILE = "file"; String FILE = "file";
String PLOT = "plot"; String PLOT = "plot";
String EPISODE = "episode"; String EPISODE = "episode";

View File

@ -37,7 +37,8 @@ public class MediaDatabase extends SQLiteOpenHelper {
DB_VERSION_PRE_SONG_DISC = 7, DB_VERSION_PRE_SONG_DISC = 7,
DB_VERSION_PRE_HOST_VERSION = 8, DB_VERSION_PRE_HOST_VERSION = 8,
DB_VERSION_PRE_HOST_HTTPS = 9, DB_VERSION_PRE_HOST_HTTPS = 9,
DB_VERSION = 10; DB_VERSION_PRE_LAST_PLAYED = 10,
DB_VERSION = 11;
/** /**
* Tables exposed * Tables exposed
@ -198,6 +199,7 @@ public class MediaDatabase extends SQLiteOpenHelper {
MediaContract.MoviesColumns.WRITERS + " TEXT, " + MediaContract.MoviesColumns.WRITERS + " TEXT, " +
MediaContract.MoviesColumns.YEAR + " INTEGER, " + MediaContract.MoviesColumns.YEAR + " INTEGER, " +
MediaContract.MoviesColumns.DATEADDED + " TEXT, " + MediaContract.MoviesColumns.DATEADDED + " TEXT, " +
MediaContract.MoviesColumns.LASTPLAYED + " TEXT, " +
"UNIQUE (" + MediaContract.MoviesColumns.HOST_ID + ", " + MediaContract.MoviesColumns.MOVIEID + ") ON CONFLICT REPLACE)" "UNIQUE (" + MediaContract.MoviesColumns.HOST_ID + ", " + MediaContract.MoviesColumns.MOVIEID + ") ON CONFLICT REPLACE)"
); );
@ -229,6 +231,7 @@ public class MediaDatabase extends SQLiteOpenHelper {
MediaContract.TVShowsColumns.PLAYCOUNT + " INTEGER, " + MediaContract.TVShowsColumns.PLAYCOUNT + " INTEGER, " +
MediaContract.TVShowsColumns.TITLE + " TEXT, " + MediaContract.TVShowsColumns.TITLE + " TEXT, " +
MediaContract.TVShowsColumns.DATEADDED + " TEXT, " + MediaContract.TVShowsColumns.DATEADDED + " TEXT, " +
MediaContract.TVShowsColumns.LASTPLAYED + " TEXT, " +
MediaContract.TVShowsColumns.FILE + " TEXT, " + MediaContract.TVShowsColumns.FILE + " TEXT, " +
MediaContract.TVShowsColumns.PLOT + " TEXT, " + MediaContract.TVShowsColumns.PLOT + " TEXT, " +
MediaContract.TVShowsColumns.EPISODE + " INTEGER, " + MediaContract.TVShowsColumns.EPISODE + " INTEGER, " +
@ -520,6 +523,13 @@ public class MediaDatabase extends SQLiteOpenHelper {
db.execSQL("ALTER TABLE " + Tables.HOSTS + db.execSQL("ALTER TABLE " + Tables.HOSTS +
" ADD COLUMN " + MediaContract.HostsColumns.IS_HTTPS + " ADD COLUMN " + MediaContract.HostsColumns.IS_HTTPS +
" INTEGER DEFAULT 0;"); " INTEGER DEFAULT 0;");
case DB_VERSION_PRE_LAST_PLAYED:
db.execSQL("ALTER TABLE " + Tables.MOVIES +
" ADD COLUMN " + MediaContract.MoviesColumns.LASTPLAYED +
" TEXT;");
db.execSQL("ALTER TABLE " + Tables.TVSHOWS +
" ADD COLUMN " + MediaContract.TVShowsColumns.LASTPLAYED +
" TEXT;");
} }
} }

View File

@ -58,6 +58,7 @@ public class SyncUtils {
movieValues.put(MediaContract.MoviesColumns.THUMBNAIL, movie.thumbnail); movieValues.put(MediaContract.MoviesColumns.THUMBNAIL, movie.thumbnail);
movieValues.put(MediaContract.MoviesColumns.PLAYCOUNT, movie.playcount); movieValues.put(MediaContract.MoviesColumns.PLAYCOUNT, movie.playcount);
movieValues.put(MediaContract.MoviesColumns.DATEADDED, movie.dateadded); movieValues.put(MediaContract.MoviesColumns.DATEADDED, movie.dateadded);
movieValues.put(MediaContract.MoviesColumns.LASTPLAYED, movie.lastplayed);
movieValues.put(MediaContract.MoviesColumns.TITLE, movie.title); movieValues.put(MediaContract.MoviesColumns.TITLE, movie.title);
movieValues.put(MediaContract.MoviesColumns.FILE, movie.file); movieValues.put(MediaContract.MoviesColumns.FILE, movie.file);
movieValues.put(MediaContract.MoviesColumns.PLOT, movie.plot); movieValues.put(MediaContract.MoviesColumns.PLOT, movie.plot);
@ -156,6 +157,7 @@ public class SyncUtils {
tvshowValues.put(MediaContract.TVShowsColumns.PLAYCOUNT, tvshow.playcount); tvshowValues.put(MediaContract.TVShowsColumns.PLAYCOUNT, tvshow.playcount);
tvshowValues.put(MediaContract.TVShowsColumns.TITLE, tvshow.title); tvshowValues.put(MediaContract.TVShowsColumns.TITLE, tvshow.title);
tvshowValues.put(MediaContract.TVShowsColumns.DATEADDED, tvshow.dateadded); tvshowValues.put(MediaContract.TVShowsColumns.DATEADDED, tvshow.dateadded);
tvshowValues.put(MediaContract.TVShowsColumns.LASTPLAYED, tvshow.lastplayed);
tvshowValues.put(MediaContract.TVShowsColumns.FILE, tvshow.file); tvshowValues.put(MediaContract.TVShowsColumns.FILE, tvshow.file);
tvshowValues.put(MediaContract.TVShowsColumns.PLOT, tvshow.plot); tvshowValues.put(MediaContract.TVShowsColumns.PLOT, tvshow.plot);
tvshowValues.put(MediaContract.TVShowsColumns.EPISODE, tvshow.episode); tvshowValues.put(MediaContract.TVShowsColumns.EPISODE, tvshow.episode);

View File

@ -102,6 +102,8 @@ public class MovieListFragment extends AbstractCursorListFragment {
int sortOrder = preferences.getInt(Settings.KEY_PREF_MOVIES_SORT_ORDER, Settings.DEFAULT_PREF_MOVIES_SORT_ORDER); int sortOrder = preferences.getInt(Settings.KEY_PREF_MOVIES_SORT_ORDER, Settings.DEFAULT_PREF_MOVIES_SORT_ORDER);
if (sortOrder == Settings.SORT_BY_DATE_ADDED) { if (sortOrder == Settings.SORT_BY_DATE_ADDED) {
sortOrderStr = MovieListQuery.SORT_BY_DATE_ADDED; sortOrderStr = MovieListQuery.SORT_BY_DATE_ADDED;
} else if (sortOrder == Settings.SORT_BY_LAST_PLAYED) {
sortOrderStr = MovieListQuery.SORT_BY_LAST_PLAYED;
} else if (sortOrder == Settings.SORT_BY_RATING) { } else if (sortOrder == Settings.SORT_BY_RATING) {
sortOrderStr = MovieListQuery.SORT_BY_RATING; sortOrderStr = MovieListQuery.SORT_BY_RATING;
} else if (sortOrder == Settings.SORT_BY_YEAR) { } else if (sortOrder == Settings.SORT_BY_YEAR) {
@ -155,6 +157,7 @@ public class MovieListFragment extends AbstractCursorListFragment {
sortByYear = menu.findItem(R.id.action_sort_by_year), sortByYear = menu.findItem(R.id.action_sort_by_year),
sortByRating = menu.findItem(R.id.action_sort_by_rating), sortByRating = menu.findItem(R.id.action_sort_by_rating),
sortByDateAdded = menu.findItem(R.id.action_sort_by_date_added), sortByDateAdded = menu.findItem(R.id.action_sort_by_date_added),
sortByLastPlayed = menu.findItem(R.id.action_sort_by_last_played),
sortByLength = menu.findItem(R.id.action_sort_by_length); sortByLength = menu.findItem(R.id.action_sort_by_length);
@ -173,6 +176,9 @@ public class MovieListFragment extends AbstractCursorListFragment {
case Settings.SORT_BY_DATE_ADDED: case Settings.SORT_BY_DATE_ADDED:
sortByDateAdded.setChecked(true); sortByDateAdded.setChecked(true);
break; break;
case Settings.SORT_BY_LAST_PLAYED:
sortByLastPlayed.setChecked(true);
break;
case Settings.SORT_BY_LENGTH: case Settings.SORT_BY_LENGTH:
sortByLength.setChecked(true); sortByLength.setChecked(true);
break; break;
@ -230,6 +236,13 @@ public class MovieListFragment extends AbstractCursorListFragment {
.apply(); .apply();
refreshList(); refreshList();
break; break;
case R.id.action_sort_by_last_played:
item.setChecked(true);
preferences.edit()
.putInt(Settings.KEY_PREF_MOVIES_SORT_ORDER, Settings.SORT_BY_LAST_PLAYED)
.apply();
refreshList();
break;
case R.id.action_sort_by_length: case R.id.action_sort_by_length:
item.setChecked(true); item.setChecked(true);
preferences.edit() preferences.edit()
@ -265,6 +278,7 @@ public class MovieListFragment extends AbstractCursorListFragment {
String SORT_BY_YEAR = MediaContract.Movies.YEAR + " ASC"; String SORT_BY_YEAR = MediaContract.Movies.YEAR + " ASC";
String SORT_BY_RATING = MediaContract.Movies.RATING + " DESC"; String SORT_BY_RATING = MediaContract.Movies.RATING + " DESC";
String SORT_BY_DATE_ADDED = MediaContract.Movies.DATEADDED + " DESC"; String SORT_BY_DATE_ADDED = MediaContract.Movies.DATEADDED + " DESC";
String SORT_BY_LAST_PLAYED = MediaContract.Movies.LASTPLAYED + " DESC";
String SORT_BY_LENGTH = MediaContract.Movies.RUNTIME + " DESC"; String SORT_BY_LENGTH = MediaContract.Movies.RUNTIME + " DESC";
String SORT_BY_NAME_IGNORE_ARTICLES = MediaDatabase.sortCommonTokens(MediaContract.Movies.TITLE) + " ASC"; String SORT_BY_NAME_IGNORE_ARTICLES = MediaDatabase.sortCommonTokens(MediaContract.Movies.TITLE) + " ASC";

View File

@ -108,6 +108,8 @@ public class TVShowListFragment extends AbstractCursorListFragment {
sortOrderStr = TVShowListQuery.SORT_BY_YEAR; sortOrderStr = TVShowListQuery.SORT_BY_YEAR;
} else if (sortOrder == Settings.SORT_BY_RATING) { } else if (sortOrder == Settings.SORT_BY_RATING) {
sortOrderStr = TVShowListQuery.SORT_BY_RATING; sortOrderStr = TVShowListQuery.SORT_BY_RATING;
} else if (sortOrder == Settings.SORT_BY_LAST_PLAYED) {
sortOrderStr = TVShowListQuery.SORT_BY_LAST_PLAYED;
} else { } else {
// Sort by name // Sort by name
if (preferences.getBoolean(Settings.KEY_PREF_TVSHOWS_IGNORE_PREFIXES, Settings.DEFAULT_PREF_TVSHOWS_IGNORE_PREFIXES)) { if (preferences.getBoolean(Settings.KEY_PREF_TVSHOWS_IGNORE_PREFIXES, Settings.DEFAULT_PREF_TVSHOWS_IGNORE_PREFIXES)) {
@ -156,7 +158,8 @@ public class TVShowListFragment extends AbstractCursorListFragment {
sortByName = menu.findItem(R.id.action_sort_by_name), sortByName = menu.findItem(R.id.action_sort_by_name),
sortByYear = menu.findItem(R.id.action_sort_by_year), sortByYear = menu.findItem(R.id.action_sort_by_year),
sortByRating = menu.findItem(R.id.action_sort_by_rating), sortByRating = menu.findItem(R.id.action_sort_by_rating),
sortByDateAdded = menu.findItem(R.id.action_sort_by_date_added); sortByDateAdded = menu.findItem(R.id.action_sort_by_date_added),
sortByLastPlayed = menu.findItem(R.id.action_sort_by_last_played);
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
hideWatched.setChecked(preferences.getBoolean(Settings.KEY_PREF_TVSHOWS_FILTER_HIDE_WATCHED, Settings.DEFAULT_PREF_TVSHOWS_FILTER_HIDE_WATCHED)); hideWatched.setChecked(preferences.getBoolean(Settings.KEY_PREF_TVSHOWS_FILTER_HIDE_WATCHED, Settings.DEFAULT_PREF_TVSHOWS_FILTER_HIDE_WATCHED));
@ -173,6 +176,9 @@ public class TVShowListFragment extends AbstractCursorListFragment {
case Settings.SORT_BY_DATE_ADDED: case Settings.SORT_BY_DATE_ADDED:
sortByDateAdded.setChecked(true); sortByDateAdded.setChecked(true);
break; break;
case Settings.SORT_BY_LAST_PLAYED:
sortByLastPlayed.setChecked(true);
break;
default: default:
sortByName.setChecked(true); sortByName.setChecked(true);
break; break;
@ -227,6 +233,13 @@ public class TVShowListFragment extends AbstractCursorListFragment {
.apply(); .apply();
refreshList(); refreshList();
break; break;
case R.id.action_sort_by_last_played:
item.setChecked(true);
preferences.edit()
.putInt(Settings.KEY_PREF_TVSHOWS_SORT_ORDER, Settings.SORT_BY_LAST_PLAYED)
.apply();
refreshList();
break;
default: default:
break; break;
} }
@ -259,6 +272,7 @@ public class TVShowListFragment extends AbstractCursorListFragment {
String SORT_BY_YEAR = MediaContract.TVShows.PREMIERED + " ASC"; String SORT_BY_YEAR = MediaContract.TVShows.PREMIERED + " ASC";
String SORT_BY_RATING = MediaContract.TVShows.RATING + " DESC"; String SORT_BY_RATING = MediaContract.TVShows.RATING + " DESC";
String SORT_BY_DATE_ADDED = MediaContract.TVShows.DATEADDED + " DESC"; String SORT_BY_DATE_ADDED = MediaContract.TVShows.DATEADDED + " DESC";
String SORT_BY_LAST_PLAYED = MediaContract.TVShows.LASTPLAYED + " DESC";
String SORT_BY_NAME_IGNORE_ARTICLES = MediaDatabase.sortCommonTokens(MediaContract.TVShows.TITLE) + " ASC"; String SORT_BY_NAME_IGNORE_ARTICLES = MediaDatabase.sortCommonTokens(MediaContract.TVShows.TITLE) + " ASC";
final int ID = 0; final int ID = 0;

View File

@ -39,6 +39,10 @@
android:id="@+id/action_sort_by_date_added" android:id="@+id/action_sort_by_date_added"
android:title="@string/sort_by_date_added" android:title="@string/sort_by_date_added"
app:showAsAction="never"/> app:showAsAction="never"/>
<item
android:id="@+id/action_sort_by_last_played"
android:title="@string/sort_by_last_played"
app:showAsAction="never"/>
<item <item
android:id="@+id/action_sort_by_length" android:id="@+id/action_sort_by_length"
android:title="@string/sort_by_length" android:title="@string/sort_by_length"

View File

@ -38,6 +38,10 @@
android:id="@+id/action_sort_by_date_added" android:id="@+id/action_sort_by_date_added"
android:title="@string/sort_by_date_added" android:title="@string/sort_by_date_added"
app:showAsAction="never"/> app:showAsAction="never"/>
<item
android:id="@+id/action_sort_by_last_played"
android:title="@string/sort_by_last_played"
app:showAsAction="never"/>
</group> </group>
<group <group
android:checkableBehavior="all"> android:checkableBehavior="all">

View File

@ -318,6 +318,7 @@
<string name="sort_by_rating">By rating</string> <string name="sort_by_rating">By rating</string>
<string name="sort_by_length">By length</string> <string name="sort_by_length">By length</string>
<string name="sort_by_date_added">By date added</string> <string name="sort_by_date_added">By date added</string>
<string name="sort_by_last_played">By last played</string>
<string name="ignore_prefixes">Ignore prefixes</string> <string name="ignore_prefixes">Ignore prefixes</string>
<!-- Preferences strings --> <!-- Preferences strings -->