mirror of
https://gitlab.futo.org/videostreaming/grayjay.git
synced 2025-09-21 16:59:04 +00:00
Downloads size ordering, Subsgroup removal on unsubscribe, multi-key like querying
This commit is contained in:
parent
e3e7b0c345
commit
ccc686ed50
5 changed files with 49 additions and 5 deletions
|
@ -150,7 +150,7 @@ class DownloadsFragment : MainFragment() {
|
||||||
spinnerSortBy.adapter = ArrayAdapter(context, R.layout.spinner_item_simple, resources.getStringArray(R.array.downloads_sortby_array)).also {
|
spinnerSortBy.adapter = ArrayAdapter(context, R.layout.spinner_item_simple, resources.getStringArray(R.array.downloads_sortby_array)).also {
|
||||||
it.setDropDownViewResource(R.layout.spinner_dropdownitem_simple);
|
it.setDropDownViewResource(R.layout.spinner_dropdownitem_simple);
|
||||||
};
|
};
|
||||||
val options = listOf("nameAsc", "nameDesc", "downloadDateAsc", "downloadDateDesc", "releasedAsc", "releasedDesc");
|
val options = listOf("nameAsc", "nameDesc", "downloadDateAsc", "downloadDateDesc", "releasedAsc", "releasedDesc", "sizeAsc", "sizeDesc");
|
||||||
spinnerSortBy.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
spinnerSortBy.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
||||||
override fun onItemSelected(parent: AdapterView<*>, view: View?, pos: Int, id: Long) {
|
override fun onItemSelected(parent: AdapterView<*>, view: View?, pos: Int, id: Long) {
|
||||||
when(pos) {
|
when(pos) {
|
||||||
|
@ -160,6 +160,8 @@ class DownloadsFragment : MainFragment() {
|
||||||
3 -> ordering.setAndSave("downloadDateDesc")
|
3 -> ordering.setAndSave("downloadDateDesc")
|
||||||
4 -> ordering.setAndSave("releasedAsc")
|
4 -> ordering.setAndSave("releasedAsc")
|
||||||
5 -> ordering.setAndSave("releasedDesc")
|
5 -> ordering.setAndSave("releasedDesc")
|
||||||
|
6 -> ordering.setAndSave("sizeAsc")
|
||||||
|
7 -> ordering.setAndSave("sizeDesc")
|
||||||
else -> ordering.setAndSave("")
|
else -> ordering.setAndSave("")
|
||||||
}
|
}
|
||||||
updateContentFilters()
|
updateContentFilters()
|
||||||
|
@ -257,6 +259,8 @@ class DownloadsFragment : MainFragment() {
|
||||||
"nameDesc" -> vidsToReturn.sortedByDescending { it.name.lowercase() }
|
"nameDesc" -> vidsToReturn.sortedByDescending { it.name.lowercase() }
|
||||||
"releasedAsc" -> vidsToReturn.sortedBy { it.datetime ?: OffsetDateTime.MAX }
|
"releasedAsc" -> vidsToReturn.sortedBy { it.datetime ?: OffsetDateTime.MAX }
|
||||||
"releasedDesc" -> vidsToReturn.sortedByDescending { it.datetime ?: OffsetDateTime.MIN }
|
"releasedDesc" -> vidsToReturn.sortedByDescending { it.datetime ?: OffsetDateTime.MIN }
|
||||||
|
"sizeAsc" -> vidsToReturn.sortedBy { it.videoSource.sumOf { it.fileSize } + it.audioSource.sumOf { it.fileSize } }
|
||||||
|
"sizeDesc" -> vidsToReturn.sortedByDescending { it.videoSource.sumOf { it.fileSize } + it.audioSource.sumOf { it.fileSize } }
|
||||||
else -> vidsToReturn
|
else -> vidsToReturn
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -131,8 +131,13 @@ class StateHistory {
|
||||||
fun getHistoryPager(): IPager<HistoryVideo> {
|
fun getHistoryPager(): IPager<HistoryVideo> {
|
||||||
return _historyDBStore.getObjectPager();
|
return _historyDBStore.getObjectPager();
|
||||||
}
|
}
|
||||||
fun getHistorySearchPager(query: String): IPager<HistoryVideo> {
|
fun getHistorySearchPager(query: String, withAuthor: Boolean = false): IPager<HistoryVideo> {
|
||||||
return _historyDBStore.queryLikeObjectPager(DBHistory.Index::name, "%${query}%", 10);
|
return if(!withAuthor)
|
||||||
|
_historyDBStore.queryLikeObjectPager(DBHistory.Index::name, "%${query}%", 10)
|
||||||
|
else
|
||||||
|
_historyDBStore.queryLikeObjectPager(DBHistory.Index::name, "%${query}%", 10)
|
||||||
|
//_historyDBStore.queryLike2ObjectPager(DBHistory.Index::name, DBHistory.Index::auth,"%${query}%", 10)
|
||||||
|
//TODO: See if we can include author name?
|
||||||
}
|
}
|
||||||
fun getHistoryIndexByUrl(url: String): DBHistory.Index? {
|
fun getHistoryIndexByUrl(url: String): DBHistory.Index? {
|
||||||
return historyIndex[url];
|
return historyIndex[url];
|
||||||
|
|
|
@ -329,8 +329,19 @@ class StateSubscriptions {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(StateSubscriptionGroups.instance.hasSubscriptionGroup(sub.channel.url))
|
if(StateSubscriptionGroups.instance.hasSubscriptionGroup(sub.channel.url)) {
|
||||||
getSubscriptionOtherOrCreate(sub.channel.url, sub.channel.name, sub.channel.thumbnail);
|
val subGroups = StateSubscriptionGroups.instance.getSubscriptionGroups().filter { it.urls.contains(sub.channel.url) };
|
||||||
|
for(group in subGroups) {
|
||||||
|
group.urls.remove(sub.channel.url);
|
||||||
|
StateSubscriptionGroups.instance.updateSubscriptionGroup(group);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
getSubscriptionOtherOrCreate(
|
||||||
|
sub.channel.url,
|
||||||
|
sub.channel.name,
|
||||||
|
sub.channel.thumbnail
|
||||||
|
); */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return sub;
|
return sub;
|
||||||
}
|
}
|
||||||
|
|
|
@ -274,10 +274,17 @@ class ManagedDBStore<I: ManagedDBIndex<T>, T, D: ManagedDBDatabase<T, I, DA>, DA
|
||||||
val queryStr = "SELECT * FROM ${descriptor.table_name} WHERE ${field} LIKE ? ${_orderSQL} LIMIT ? OFFSET ?";
|
val queryStr = "SELECT * FROM ${descriptor.table_name} WHERE ${field} LIKE ? ${_orderSQL} LIMIT ? OFFSET ?";
|
||||||
val query = SimpleSQLiteQuery(queryStr, arrayOf(obj, pageSize, page * pageSize));
|
val query = SimpleSQLiteQuery(queryStr, arrayOf(obj, pageSize, page * pageSize));
|
||||||
return deserializeIndexes(dbDaoBase.getMultiple(query));
|
return deserializeIndexes(dbDaoBase.getMultiple(query));
|
||||||
|
}fun queryLike2Page(field: String, field2: String, obj: String, page: Int, pageSize: Int): List<I> {
|
||||||
|
val queryStr = "SELECT * FROM ${descriptor.table_name} WHERE ${field} LIKE ? OR ${field2} LIKE ? ${_orderSQL} LIMIT ? OFFSET ?";
|
||||||
|
val query = SimpleSQLiteQuery(queryStr, arrayOf(obj, obj, pageSize, page * pageSize));
|
||||||
|
return deserializeIndexes(dbDaoBase.getMultiple(query));
|
||||||
}
|
}
|
||||||
fun queryLikeObjectPage(field: String, obj: String, page: Int, pageSize: Int): List<T> {
|
fun queryLikeObjectPage(field: String, obj: String, page: Int, pageSize: Int): List<T> {
|
||||||
return convertObjects(queryLikePage(field, obj, page, pageSize));
|
return convertObjects(queryLikePage(field, obj, page, pageSize));
|
||||||
}
|
}
|
||||||
|
fun queryLike2ObjectPage(field: String, field2: String, obj: String, page: Int, pageSize: Int): List<T> {
|
||||||
|
return convertObjects(queryLike2Page(field, field2, obj, page, pageSize));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//Query Page Objects
|
//Query Page Objects
|
||||||
|
@ -336,6 +343,13 @@ class ManagedDBStore<I: ManagedDBIndex<T>, T, D: ManagedDBDatabase<T, I, DA>, DA
|
||||||
queryLikePage(field, obj, it - 1, pageSize);
|
queryLikePage(field, obj, it - 1, pageSize);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
fun queryLike2Pager(field: KProperty<*>, field2: KProperty<*>, obj: String, pageSize: Int): IPager<I> = queryLike2Pager(validateFieldName(field), validateFieldName(field2), obj, pageSize);
|
||||||
|
fun queryLike2Pager(field: String, field2: String, obj: String, pageSize: Int): IPager<I> {
|
||||||
|
return AdhocPager({
|
||||||
|
Logger.i("ManagedDBStore", "Next Page [query: ${obj}](${it}) ${pageSize}");
|
||||||
|
queryLike2Page(field, field2, obj, it - 1, pageSize);
|
||||||
|
});
|
||||||
|
}
|
||||||
fun queryLikeObjectPager(field: KProperty<*>, obj: String, pageSize: Int): IPager<T> = queryLikeObjectPager(validateFieldName(field), obj, pageSize);
|
fun queryLikeObjectPager(field: KProperty<*>, obj: String, pageSize: Int): IPager<T> = queryLikeObjectPager(validateFieldName(field), obj, pageSize);
|
||||||
fun queryLikeObjectPager(field: String, obj: String, pageSize: Int): IPager<T> {
|
fun queryLikeObjectPager(field: String, obj: String, pageSize: Int): IPager<T> {
|
||||||
return AdhocPager({
|
return AdhocPager({
|
||||||
|
@ -344,6 +358,14 @@ class ManagedDBStore<I: ManagedDBIndex<T>, T, D: ManagedDBDatabase<T, I, DA>, DA
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun queryLike2ObjectPager(field: KProperty<*>, field2: KProperty<*>, obj: String, pageSize: Int): IPager<T> = queryLike2ObjectPager(validateFieldName(field), validateFieldName(field2), obj, pageSize);
|
||||||
|
fun queryLike2ObjectPager(field: String, field2: String, obj: String, pageSize: Int): IPager<T> {
|
||||||
|
return AdhocPager({
|
||||||
|
Logger.i("ManagedDBStore", "Next Page [query: ${obj}](${it}) ${pageSize}");
|
||||||
|
queryLike2ObjectPage(field, field2, obj, it - 1, pageSize);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
//Query Pager with convert
|
//Query Pager with convert
|
||||||
fun <X> queryPager(field: KProperty<*>, obj: Any, pageSize: Int, convert: (I)->X): IPager<X> = queryPager(validateFieldName(field), obj, pageSize, convert);
|
fun <X> queryPager(field: KProperty<*>, obj: Any, pageSize: Int, convert: (I)->X): IPager<X> = queryPager(validateFieldName(field), obj, pageSize, convert);
|
||||||
fun <X> queryPager(field: String, obj: Any, pageSize: Int, convert: (I)->X): IPager<X> {
|
fun <X> queryPager(field: String, obj: Any, pageSize: Int, convert: (I)->X): IPager<X> {
|
||||||
|
|
|
@ -996,6 +996,8 @@
|
||||||
<item>Download Date (Newest)</item>
|
<item>Download Date (Newest)</item>
|
||||||
<item>Release Date (Oldest)</item>
|
<item>Release Date (Oldest)</item>
|
||||||
<item>Release Date (Newest)</item>
|
<item>Release Date (Newest)</item>
|
||||||
|
<item>Size (Smallest)</item>
|
||||||
|
<item>Size (Largest)</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="playlists_sortby_array">
|
<string-array name="playlists_sortby_array">
|
||||||
<item>Name (Ascending)</item>
|
<item>Name (Ascending)</item>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue