diff --git a/app/src/main/java/com/deniscerri/ytdlnis/adapter/HistoryAdapter.kt b/app/src/main/java/com/deniscerri/ytdlnis/adapter/HistoryAdapter.kt index d71dde66..fb6045ec 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/adapter/HistoryAdapter.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/adapter/HistoryAdapter.kt @@ -165,7 +165,6 @@ class HistoryAdapter(onItemClickListener: OnItemClickListener, activity: Activit interface OnItemClickListener { fun onCardClick(itemID: Long, isPresent: Boolean) fun onCardSelect(itemID: Long, isChecked: Boolean) - fun onButtonClick(position: Int) } @SuppressLint("NotifyDataSetChanged") diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/models/DownloadItem.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/models/DownloadItem.kt index 36b6af22..60554571 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/database/models/DownloadItem.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/database/models/DownloadItem.kt @@ -21,9 +21,9 @@ data class DownloadItem( val website: String, val downloadSize: String, val playlistTitle: String, - val embedSubs: Boolean, - val addChapters: Boolean, - val SaveThumb: Boolean, + var embedSubs: Boolean, + var addChapters: Boolean, + var SaveThumb: Boolean, @ColumnInfo(defaultValue = "Queued") var status: String ) \ No newline at end of file diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/repository/HistoryRepository.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/repository/HistoryRepository.kt index c9656345..a5a43fc4 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/database/repository/HistoryRepository.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/database/repository/HistoryRepository.kt @@ -29,12 +29,8 @@ class HistoryRepository(private val historyDao: HistoryDao) { historyDao.insert(item) } - suspend fun delete(item: HistoryItem, deleteFile: Boolean){ - historyDao.delete(item.id!!) - if (deleteFile){ - val fileUtil = FileUtil() - fileUtil.deleteFile(item.downloadPath) - } + suspend fun delete(item: HistoryItem){ + historyDao.delete(item.id) } suspend fun deleteAll(){ diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/DownloadViewModel.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/DownloadViewModel.kt index 90f8f74d..63909a91 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/DownloadViewModel.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/DownloadViewModel.kt @@ -33,6 +33,10 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application val processingDownloads : LiveData> private var bestVideoFormat: Format + private var bestAudioFormat: Format + enum class Type { + AUDIO, VIDEO, COMMAND + } init { val dao = DBManager.getInstance(application).downloadDao @@ -45,30 +49,22 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application activeDownloads = repository.activeDownloads processingDownloads = repository.processingDownloads - val format = getApplication().resources.getStringArray(R.array.video_formats) - val container = sharedPreferences.getString("video_format", "Default") + val videoFormat = getApplication().resources.getStringArray(R.array.video_formats) + val videoContainer = sharedPreferences.getString("video_format", "Default") bestVideoFormat = Format( - format[format.lastIndex], - container!!, + videoFormat[videoFormat.lastIndex], + videoContainer!!, 0, - format[format.lastIndex] + videoFormat[videoFormat.lastIndex] ) - } - fun startWork(items: List){ - items.forEach { - insertDownload(it) - } - - } - - fun insertDownload(item: DownloadItem) : LiveData { - val result = MutableLiveData() - viewModelScope.launch(Dispatchers.IO){ - val id = repository.insert(item) - result.postValue(id) - } - return result + val audioContainer = sharedPreferences.getString("audio_format", "mp3") + bestAudioFormat = Format( + "", + audioContainer!!, + 0, + "" + ) } fun deleteDownload(item: DownloadItem) = viewModelScope.launch(Dispatchers.IO) { @@ -107,12 +103,12 @@ class DownloadViewModel(application: Application) : AndroidViewModel(application return try { resultItem.formats.last { it.format_note.contains("audio", ignoreCase = true) } }catch (e: Exception){ - Format() + bestAudioFormat } } "video" -> { return try { - resultItem.formats[resultItem.formats.lastIndex] + resultItem.formats.last { !it.format_note.contains("audio", ignoreCase = true) } }catch (e: Exception){ bestVideoFormat } diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/HistoryViewModel.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/HistoryViewModel.kt index 08a3c8c2..5a0ae1cf 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/HistoryViewModel.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/HistoryViewModel.kt @@ -13,6 +13,7 @@ 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.util.FileUtil import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -77,7 +78,11 @@ class HistoryViewModel(application: Application) : AndroidViewModel(application) } fun delete(item: HistoryItem, deleteFile: Boolean) = viewModelScope.launch(Dispatchers.IO){ - repository.delete(item, deleteFile) + repository.delete(item) + if (deleteFile){ + val fileUtil = FileUtil() + fileUtil.deleteFile(item.downloadPath) + } } fun deleteAll() = viewModelScope.launch(Dispatchers.IO) { diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/HistoryFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/HistoryFragment.kt index 0928a06a..93b2ab1e 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/HistoryFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/HistoryFragment.kt @@ -38,8 +38,7 @@ import java.io.File /** * A fragment representing a list of Items. */ -class HistoryFragment : Fragment(), HistoryAdapter.OnItemClickListener, - OnClickListener, OnLongClickListener { +class HistoryFragment : Fragment(), HistoryAdapter.OnItemClickListener{ private lateinit var historyViewModel : HistoryViewModel private var fragmentView: View? = null @@ -90,7 +89,9 @@ class HistoryFragment : Fragment(), HistoryAdapter.OnItemClickListener, deleteFab = view.findViewById(R.id.delete_selected_fab) fileUtil = FileUtil() deleteFab?.tag = "deleteSelected" - deleteFab?.setOnClickListener(this) + deleteFab?.setOnClickListener{ + removeSelectedItems() + } uiHandler = Handler(Looper.getMainLooper()) selectedObjects = ArrayList() @@ -129,6 +130,7 @@ class HistoryFragment : Fragment(), HistoryAdapter.OnItemClickListener, historyViewModel.getFilteredList().observe(viewLifecycleOwner) { historyAdapter!!.submitList(it) historyList = it + scrollToTop() } initMenu() @@ -301,31 +303,6 @@ class HistoryFragment : Fragment(), HistoryAdapter.OnItemClickListener, } } - override fun onClick(v: View) { - when (v.id) { - R.id.bottomsheet_remove_button -> { - removeItem(v.tag as Long) - } - R.id.bottom_sheet_link -> { - openLinkIntent(v.tag as Long) - } - R.id.bottomsheet_open_file_button -> { - openFileIntent(v.tag as Long) - } - R.id.delete_selected_fab -> { - removeSelectedItems() - } - } - } - - override fun onLongClick(v: View): Boolean { - val id = v.id - if (id == R.id.bottom_sheet_link) { - copyLinkToClipBoard(v.tag as Long) - return true - } - return false - } private fun removeSelectedItems() { if (bottomSheet != null) bottomSheet!!.hide() @@ -348,25 +325,23 @@ class HistoryFragment : Fragment(), HistoryAdapter.OnItemClickListener, deleteDialog.show() } - private fun removeItem(id: Long) { + private fun removeItem(item: HistoryItem) { if (bottomSheet != null) bottomSheet!!.hide() val deleteFile = booleanArrayOf(false) - val v = findItem(id) val deleteDialog = MaterialAlertDialogBuilder(fragmentContext!!) - deleteDialog.setTitle(getString(R.string.you_are_going_to_delete) + " \"" + v!!.title + "\"!") + deleteDialog.setTitle(getString(R.string.you_are_going_to_delete) + " \"" + item.title + "\"!") deleteDialog.setMultiChoiceItems( arrayOf(getString(R.string.delete_file_too)), booleanArrayOf(false) ) { _: DialogInterface?, _: Int, b: Boolean -> deleteFile[0] = b } deleteDialog.setNegativeButton(getString(R.string.cancel)) { dialogInterface: DialogInterface, _: Int -> dialogInterface.cancel() } deleteDialog.setPositiveButton(getString(R.string.ok)) { _: DialogInterface?, _: Int -> - historyViewModel.delete(v, deleteFile[0]) + historyViewModel.delete(item, deleteFile[0]) } deleteDialog.show() } - private fun copyLinkToClipBoard(id: Long) { - val url = findItem(id)?.url + private fun copyLinkToClipBoard(url: String) { val clipboard = context?.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager val clip = ClipData.newPlainText(getString(R.string.url), url) clipboard.setPrimaryClip(clip) @@ -375,16 +350,14 @@ class HistoryFragment : Fragment(), HistoryAdapter.OnItemClickListener, .show() } - private fun openLinkIntent(id: Long) { - val url = findItem(id)?.url + private fun openLinkIntent(url: String) { val i = Intent(Intent.ACTION_VIEW) i.data = Uri.parse(url) if (bottomSheet != null) bottomSheet!!.hide() startActivity(i) } - private fun openFileIntent(id: Long) { - val downloadPath = findItem(id)!!.downloadPath + private fun openFileIntent(downloadPath: String) { val file = File(downloadPath) val uri = FileProvider.getUriForFile( fragmentContext!!, @@ -411,14 +384,23 @@ class HistoryFragment : Fragment(), HistoryAdapter.OnItemClickListener, val url = video.url link!!.text = url link.tag = videoID - link.setOnClickListener(this) - link.setOnLongClickListener(this) + link.setOnClickListener{ + openLinkIntent(video.url) + } + link.setOnLongClickListener{ + copyLinkToClipBoard(video.url) + true + } val remove = bottomSheet!!.findViewById