added more sorting options to history
This commit is contained in:
parent
48cc4f3f75
commit
7783b2846d
8 changed files with 94 additions and 38 deletions
|
|
@ -11,7 +11,20 @@ interface HistoryDao {
|
|||
"CASE WHEN :sort = 'ASC' THEN id END ASC," +
|
||||
"CASE WHEN :sort = 'DESC' THEN id END DESC," +
|
||||
"CASE WHEN :sort = '' THEN id END DESC ")
|
||||
fun getHistory(query : String, format : String, site : String, sort : String) : List<HistoryItem>
|
||||
fun getHistorySortedByID(query : String, format : String, site : String, sort : String) : List<HistoryItem>
|
||||
|
||||
@Query("SELECT * FROM history WHERE title LIKE '%'||:query||'%' AND type LIKE '%'||:format||'%' AND website LIKE '%'||:site||'%' ORDER BY " +
|
||||
"CASE WHEN :sort = 'ASC' THEN title END ASC," +
|
||||
"CASE WHEN :sort = 'DESC' THEN title END DESC," +
|
||||
"CASE WHEN :sort = '' THEN title END DESC ")
|
||||
fun getHistorySortedByTitle(query : String, format : String, site : String, sort : String) : List<HistoryItem>
|
||||
|
||||
@Query("SELECT * FROM history WHERE title LIKE '%'||:query||'%' AND type LIKE '%'||:format||'%' AND website LIKE '%'||:site||'%' ORDER BY " +
|
||||
"CASE WHEN :sort = 'ASC' THEN author END ASC," +
|
||||
"CASE WHEN :sort = 'DESC' THEN author END DESC," +
|
||||
"CASE WHEN :sort = '' THEN author END DESC ")
|
||||
fun getHistorySortedByAuthor(query : String, format : String, site : String, sort : String) : List<HistoryItem>
|
||||
|
||||
|
||||
@Query("SELECT * FROM history")
|
||||
fun getAllHistory() : LiveData<List<HistoryItem>>
|
||||
|
|
|
|||
|
|
@ -17,12 +17,20 @@ class HistoryRepository(private val historyDao: HistoryDao) {
|
|||
DESC, ASC
|
||||
}
|
||||
|
||||
enum class HistorySortType {
|
||||
DATE, TITLE, AUTHOR
|
||||
}
|
||||
|
||||
suspend fun getItem(id: Int) : HistoryItem {
|
||||
return historyDao.getHistoryItem(id)
|
||||
}
|
||||
|
||||
fun getFiltered(query : String, format : String, site : String, sort: HistorySort) : List<HistoryItem> {
|
||||
return historyDao.getHistory(query, format, site, sort.toString())
|
||||
fun getFiltered(query : String, format : String, site : String, sortType: HistorySortType, sort: HistorySort) : List<HistoryItem> {
|
||||
return when(sortType){
|
||||
HistorySortType.DATE -> historyDao.getHistorySortedByID(query, format, site, sort.toString())
|
||||
HistorySortType.TITLE -> historyDao.getHistorySortedByTitle(query, format, site, sort.toString())
|
||||
HistorySortType.AUTHOR -> historyDao.getHistorySortedByAuthor(query, format, site, sort.toString())
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun insert(item: HistoryItem){
|
||||
|
|
|
|||
|
|
@ -89,6 +89,12 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application
|
|||
val embedThumb = sharedPreferences.getBoolean("embed_thumbnail", false)
|
||||
val customFileNameTemplate = sharedPreferences.getString("file_name_template", "%(uploader)s - %(title)s")
|
||||
|
||||
val downloadPath = when(type){
|
||||
Type.audio -> sharedPreferences.getString("music_path", getApplication<App>().resources.getString(R.string.music_path))
|
||||
Type.video -> sharedPreferences.getString("video_path", getApplication<App>().resources.getString(R.string.video_path))
|
||||
Type.command -> sharedPreferences.getString("command_path", getApplication<App>().resources.getString(R.string.command_path))
|
||||
}
|
||||
|
||||
val audioPreferences = AudioPreferences(embedThumb)
|
||||
val videoPreferences = VideoPreferences(embedSubs, addChapters)
|
||||
|
||||
|
|
@ -100,7 +106,7 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application
|
|||
resultItem.duration,
|
||||
type,
|
||||
getFormat(resultItem, type),
|
||||
"", resultItem.website, "", resultItem.playlistTitle, audioPreferences, videoPreferences,customFileNameTemplate!!, saveThumb, DownloadRepository.Status.Processing.toString(), 0
|
||||
downloadPath!!, resultItem.website, "", resultItem.playlistTitle, audioPreferences, videoPreferences,customFileNameTemplate!!, saveThumb, DownloadRepository.Status.Processing.toString(), 0
|
||||
)
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,13 +6,15 @@ import com.deniscerri.ytdlnis.database.DBManager
|
|||
import com.deniscerri.ytdlnis.database.models.HistoryItem
|
||||
import com.deniscerri.ytdlnis.database.repository.HistoryRepository
|
||||
import com.deniscerri.ytdlnis.database.repository.HistoryRepository.HistorySort
|
||||
import com.deniscerri.ytdlnis.database.repository.HistoryRepository.HistorySortType
|
||||
import com.deniscerri.ytdlnis.util.FileUtil
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class HistoryViewModel(application: Application) : AndroidViewModel(application) {
|
||||
private val repository : HistoryRepository
|
||||
private val sortType = MutableLiveData(HistorySort.DESC)
|
||||
val sortOrder = MutableLiveData(HistorySort.DESC)
|
||||
private val sortType = MutableLiveData(HistorySortType.DATE)
|
||||
private val websiteFilter = MutableLiveData("")
|
||||
private val queryFilter = MutableLiveData("")
|
||||
private val formatFilter = MutableLiveData("")
|
||||
|
|
@ -25,19 +27,19 @@ class HistoryViewModel(application: Application) : AndroidViewModel(application)
|
|||
allItems = repository.items
|
||||
|
||||
_items.addSource(allItems){
|
||||
filter(queryFilter.value!!, formatFilter.value!!, websiteFilter.value!!, sortType.value!!)
|
||||
filter(queryFilter.value!!, formatFilter.value!!, websiteFilter.value!!, sortType.value!!, sortOrder.value!!)
|
||||
}
|
||||
_items.addSource(formatFilter){
|
||||
filter(queryFilter.value!!, formatFilter.value!!, websiteFilter.value!!, sortType.value!!)
|
||||
filter(queryFilter.value!!, formatFilter.value!!, websiteFilter.value!!, sortType.value!!, sortOrder.value!!)
|
||||
}
|
||||
_items.addSource(sortType){
|
||||
filter(queryFilter.value!!, formatFilter.value!!, websiteFilter.value!!, sortType.value!!)
|
||||
filter(queryFilter.value!!, formatFilter.value!!, websiteFilter.value!!, sortType.value!!, sortOrder.value!!)
|
||||
}
|
||||
_items.addSource(websiteFilter){
|
||||
filter(queryFilter.value!!, formatFilter.value!!, websiteFilter.value!!, sortType.value!!)
|
||||
filter(queryFilter.value!!, formatFilter.value!!, websiteFilter.value!!, sortType.value!!, sortOrder.value!!)
|
||||
}
|
||||
_items.addSource(queryFilter){
|
||||
filter(queryFilter.value!!, formatFilter.value!!, websiteFilter.value!!, sortType.value!!)
|
||||
filter(queryFilter.value!!, formatFilter.value!!, websiteFilter.value!!, sortType.value!!, sortOrder.value!!)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -46,7 +48,14 @@ class HistoryViewModel(application: Application) : AndroidViewModel(application)
|
|||
return _items
|
||||
}
|
||||
|
||||
fun setSorting(sort: HistorySort){
|
||||
fun setSorting(sort: HistorySortType){
|
||||
if (sortType.value != sort){
|
||||
sortOrder.value = HistorySort.DESC
|
||||
}else{
|
||||
sortOrder.value = if (sortOrder.value == HistorySort.DESC) {
|
||||
HistorySort.ASC
|
||||
} else HistorySort.DESC
|
||||
}
|
||||
sortType.value = sort
|
||||
}
|
||||
|
||||
|
|
@ -62,8 +71,8 @@ class HistoryViewModel(application: Application) : AndroidViewModel(application)
|
|||
formatFilter.value = filter
|
||||
}
|
||||
|
||||
private fun filter(query : String, format : String, site : String, sort: HistorySort) = viewModelScope.launch(Dispatchers.IO){
|
||||
_items.postValue(repository.getFiltered(query, format, site, sort))
|
||||
private fun filter(query : String, format : String, site : String, sortType: HistorySortType, sort: HistorySort) = viewModelScope.launch(Dispatchers.IO){
|
||||
_items.postValue(repository.getFiltered(query, format, site, sortType, sort))
|
||||
}
|
||||
|
||||
fun insert(item: HistoryItem) = viewModelScope.launch(Dispatchers.IO){
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import com.deniscerri.ytdlnis.MainActivity
|
|||
import com.deniscerri.ytdlnis.R
|
||||
import com.deniscerri.ytdlnis.adapter.HistoryAdapter
|
||||
import com.deniscerri.ytdlnis.database.models.HistoryItem
|
||||
import com.deniscerri.ytdlnis.database.repository.HistoryRepository
|
||||
import com.deniscerri.ytdlnis.database.repository.HistoryRepository.HistorySort
|
||||
import com.deniscerri.ytdlnis.database.viewmodel.HistoryViewModel
|
||||
import com.deniscerri.ytdlnis.databinding.FragmentHistoryBinding
|
||||
|
|
@ -228,6 +229,14 @@ class HistoryFragment : Fragment(), HistoryAdapter.OnItemClickListener{
|
|||
}
|
||||
}
|
||||
|
||||
private fun changeSortIcon(item: LinearLayout, order: HistorySort){
|
||||
when(order){
|
||||
HistorySort.DESC -> (item.getChildAt(0) as ImageView).setImageResource(R.drawable.ic_up)
|
||||
HistorySort.ASC -> (item.getChildAt(0) as ImageView).setImageResource(R.drawable.ic_down)
|
||||
}
|
||||
item.getChildAt(0).visibility = VISIBLE
|
||||
}
|
||||
|
||||
|
||||
private fun initChips() {
|
||||
val sortChip = fragmentView!!.findViewById<Chip>(R.id.sortChip)
|
||||
|
|
@ -235,23 +244,29 @@ class HistoryFragment : Fragment(), HistoryAdapter.OnItemClickListener{
|
|||
sortSheet = BottomSheetDialog(requireContext())
|
||||
sortSheet!!.requestWindowFeature(Window.FEATURE_NO_TITLE)
|
||||
sortSheet!!.setContentView(R.layout.history_sort_sheet)
|
||||
val newest = sortSheet!!.findViewById<TextView>(R.id.date)
|
||||
val oldest = sortSheet!!.findViewById<TextView>(R.id.title)
|
||||
newest!!.setOnClickListener {
|
||||
historyViewModel.setSorting(HistorySort.DESC)
|
||||
sortSheet!!.cancel()
|
||||
|
||||
val date = sortSheet!!.findViewById<LinearLayout>(R.id.date)
|
||||
val title = sortSheet!!.findViewById<LinearLayout>(R.id.title)
|
||||
val author = sortSheet!!.findViewById<LinearLayout>(R.id.author)
|
||||
|
||||
val sortOptions = listOf(date!!, title!!, author!!)
|
||||
|
||||
date.getChildAt(1).setOnClickListener {
|
||||
sortOptions.forEach { it.getChildAt(0).visibility = INVISIBLE }
|
||||
historyViewModel.setSorting(HistoryRepository.HistorySortType.DATE)
|
||||
changeSortIcon(date, historyViewModel.sortOrder.value!!)
|
||||
}
|
||||
oldest!!.setOnClickListener {
|
||||
historyViewModel.setSorting(HistorySort.ASC)
|
||||
sortSheet!!.cancel()
|
||||
title.getChildAt(1).setOnClickListener {
|
||||
sortOptions.forEach { it.getChildAt(0).visibility = INVISIBLE }
|
||||
historyViewModel.setSorting(HistoryRepository.HistorySortType.TITLE)
|
||||
changeSortIcon(title, historyViewModel.sortOrder.value!!)
|
||||
}
|
||||
author.getChildAt(1).setOnClickListener {
|
||||
sortOptions.forEach { it.getChildAt(0).visibility = INVISIBLE }
|
||||
historyViewModel.setSorting(HistoryRepository.HistorySortType.AUTHOR)
|
||||
changeSortIcon(author, historyViewModel.sortOrder.value!!)
|
||||
}
|
||||
val cancel = sortSheet!!.findViewById<TextView>(R.id.author)
|
||||
cancel!!.setOnClickListener { sortSheet!!.cancel() }
|
||||
sortSheet!!.show()
|
||||
sortSheet!!.window!!.setLayout(
|
||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||
ViewGroup.LayoutParams.MATCH_PARENT
|
||||
)
|
||||
}
|
||||
|
||||
//format
|
||||
|
|
|
|||
|
|
@ -345,6 +345,8 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, View.OnClickLi
|
|||
//showConfigureSingleDownloadCard(createDownloadItem(item!!, type), item)
|
||||
showSingleDownloadSheet(item!!, type!!)
|
||||
} else {
|
||||
val downloadItem = downloadViewModel.createDownloadItemFromResult(item!!, type!!)
|
||||
downloadViewModel.queueDownloads(listOf(downloadItem))
|
||||
// downloadQueue!!.add(vid)
|
||||
// updateDownloadingStatusOnResult(vid, type, true)
|
||||
// if (isStoragePermissionGranted) {
|
||||
|
|
|
|||
|
|
@ -45,8 +45,8 @@ class FileUtil() {
|
|||
} catch (ignored: Exception) {
|
||||
}
|
||||
val pieces = dataValue.split("/").toTypedArray()
|
||||
var formattedPath = StringBuilder("/storage/")
|
||||
if (pieces[0].equals("primary")){
|
||||
val formattedPath = StringBuilder("/storage/")
|
||||
if (pieces[0] == "primary"){
|
||||
formattedPath.append("emulated/0/")
|
||||
}else{
|
||||
formattedPath.append(pieces[0]).append("/")
|
||||
|
|
|
|||
|
|
@ -16,64 +16,67 @@
|
|||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/date"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingBottom="20dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_height="20dp"
|
||||
android:paddingEnd="20dp"
|
||||
android:src="@drawable/ic_up"/>
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/date"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="15sp"
|
||||
android:padding="10dp"
|
||||
android:text="@string/date_added" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingBottom="20dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:visibility="invisible"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_height="20dp"
|
||||
android:paddingEnd="20dp"
|
||||
android:src="@drawable/ic_up"/>
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="15sp"
|
||||
android:padding="10dp"
|
||||
android:text="@string/title" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/author"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingBottom="20dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:visibility="invisible"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_height="20dp"
|
||||
android:paddingEnd="20dp"
|
||||
android:src="@drawable/ic_up"/>
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/author"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="15sp"
|
||||
android:padding="10dp"
|
||||
android:text="@string/author" />
|
||||
</LinearLayout>
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue