added more sorting options to history

pull/44/head
Denis Çerri 3 years ago
parent 48cc4f3f75
commit 7783b2846d
No known key found for this signature in database
GPG Key ID: 95C43D517D830350

@ -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…
Cancel
Save