mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-04-27 15:30:31 +05:30
commit
dc9470ac50
@ -1,6 +1,5 @@
|
||||
package com.github.libretube.api
|
||||
|
||||
import com.github.libretube.api.obj.Instances
|
||||
import com.github.libretube.constants.GITHUB_API_URL
|
||||
import com.github.libretube.constants.PIPED_INSTANCES_URL
|
||||
import com.github.libretube.obj.update.UpdateInfo
|
||||
|
@ -1,21 +1,5 @@
|
||||
package com.github.libretube.api
|
||||
|
||||
import com.github.libretube.api.obj.Channel
|
||||
import com.github.libretube.api.obj.CommentsPage
|
||||
import com.github.libretube.api.obj.DeleteUserRequest
|
||||
import com.github.libretube.api.obj.Login
|
||||
import com.github.libretube.api.obj.Message
|
||||
import com.github.libretube.api.obj.Playlist
|
||||
import com.github.libretube.api.obj.PlaylistId
|
||||
import com.github.libretube.api.obj.Playlists
|
||||
import com.github.libretube.api.obj.SearchResult
|
||||
import com.github.libretube.api.obj.Segments
|
||||
import com.github.libretube.api.obj.StreamItem
|
||||
import com.github.libretube.api.obj.Streams
|
||||
import com.github.libretube.api.obj.Subscribe
|
||||
import com.github.libretube.api.obj.Subscribed
|
||||
import com.github.libretube.api.obj.Subscription
|
||||
import com.github.libretube.api.obj.Token
|
||||
import retrofit2.http.Body
|
||||
import retrofit2.http.GET
|
||||
import retrofit2.http.Header
|
||||
|
@ -1,11 +1,11 @@
|
||||
package com.github.libretube.api
|
||||
|
||||
import android.util.Log
|
||||
import com.github.libretube.api.obj.Subscribe
|
||||
import com.github.libretube.db.DatabaseHolder.Companion.Database
|
||||
import com.github.libretube.db.obj.LocalSubscription
|
||||
import com.github.libretube.extensions.TAG
|
||||
import com.github.libretube.extensions.await
|
||||
import com.github.libretube.extensions.awaitQuery
|
||||
import com.github.libretube.extensions.query
|
||||
import com.github.libretube.util.PreferenceHelper
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
@ -26,11 +26,11 @@ object SubscriptionHelper {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Thread {
|
||||
query {
|
||||
Database.localSubscriptionDao().insertAll(
|
||||
LocalSubscription(channelId)
|
||||
)
|
||||
}.start()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -47,11 +47,11 @@ object SubscriptionHelper {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Thread {
|
||||
query {
|
||||
Database.localSubscriptionDao().delete(
|
||||
LocalSubscription(channelId)
|
||||
)
|
||||
}.start()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -68,11 +68,9 @@ object SubscriptionHelper {
|
||||
}
|
||||
return isSubscribed.subscribed
|
||||
} else {
|
||||
var isSubscribed = false
|
||||
Thread {
|
||||
isSubscribed = Database.localSubscriptionDao().includes(channelId)
|
||||
}.await()
|
||||
return isSubscribed
|
||||
return awaitQuery {
|
||||
Database.localSubscriptionDao().includes(channelId)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -93,20 +91,18 @@ object SubscriptionHelper {
|
||||
newChannels.forEach {
|
||||
newLocalSubscriptions += LocalSubscription(channelId = it)
|
||||
}
|
||||
Thread {
|
||||
query {
|
||||
Database.localSubscriptionDao().insertAll(
|
||||
*newChannels.map { LocalSubscription(it) }.toTypedArray()
|
||||
)
|
||||
}.start()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun getLocalSubscriptions(): List<LocalSubscription> {
|
||||
var localSubscriptions = listOf<LocalSubscription>()
|
||||
Thread {
|
||||
localSubscriptions = Database.localSubscriptionDao().getAll()
|
||||
}.await()
|
||||
return localSubscriptions
|
||||
return awaitQuery {
|
||||
Database.localSubscriptionDao().getAll()
|
||||
}
|
||||
}
|
||||
|
||||
fun getFormattedLocalSubscriptions(): String {
|
||||
|
@ -6,11 +6,12 @@ import com.github.libretube.db.DatabaseHolder.Companion.Database
|
||||
import com.github.libretube.db.obj.SearchHistoryItem
|
||||
import com.github.libretube.db.obj.WatchHistoryItem
|
||||
import com.github.libretube.db.obj.WatchPosition
|
||||
import com.github.libretube.extensions.query
|
||||
import com.github.libretube.extensions.toID
|
||||
import com.github.libretube.util.PreferenceHelper
|
||||
|
||||
object DatabaseHelper {
|
||||
fun addToWatchHistory(videoId: String, streams: com.github.libretube.api.obj.Streams) {
|
||||
fun addToWatchHistory(videoId: String, streams: Streams) {
|
||||
val watchHistoryItem = WatchHistoryItem(
|
||||
videoId,
|
||||
streams.title,
|
||||
@ -21,11 +22,11 @@ object DatabaseHelper {
|
||||
streams.thumbnailUrl,
|
||||
streams.duration
|
||||
)
|
||||
Thread {
|
||||
query {
|
||||
Database.watchHistoryDao().insertAll(watchHistoryItem)
|
||||
val maxHistorySize =
|
||||
PreferenceHelper.getString(PreferenceKeys.WATCH_HISTORY_SIZE, "unlimited")
|
||||
if (maxHistorySize == "unlimited") return@Thread
|
||||
if (maxHistorySize == "unlimited") return@query
|
||||
|
||||
// delete the first watch history entry if the limit is reached
|
||||
val watchHistory = Database.watchHistoryDao().getAll()
|
||||
@ -33,15 +34,15 @@ object DatabaseHelper {
|
||||
Database.watchHistoryDao()
|
||||
.delete(watchHistory.first())
|
||||
}
|
||||
}.start()
|
||||
}
|
||||
}
|
||||
|
||||
fun removeFromWatchHistory(index: Int) {
|
||||
Thread {
|
||||
query {
|
||||
Database.watchHistoryDao().delete(
|
||||
Database.watchHistoryDao().getAll()[index]
|
||||
)
|
||||
}.start()
|
||||
}
|
||||
}
|
||||
|
||||
fun saveWatchPosition(videoId: String, position: Long) {
|
||||
@ -49,21 +50,21 @@ object DatabaseHelper {
|
||||
videoId,
|
||||
position
|
||||
)
|
||||
Thread {
|
||||
query {
|
||||
Database.watchPositionDao().insertAll(watchPosition)
|
||||
}.start()
|
||||
}
|
||||
}
|
||||
|
||||
fun removeWatchPosition(videoId: String) {
|
||||
Thread {
|
||||
query {
|
||||
Database.watchPositionDao().findById(videoId)?.let {
|
||||
Database.watchPositionDao().delete(it)
|
||||
}
|
||||
}.start()
|
||||
}
|
||||
}
|
||||
|
||||
fun addToSearchHistory(searchHistoryItem: SearchHistoryItem) {
|
||||
Thread {
|
||||
query {
|
||||
Database.searchHistoryDao().insertAll(searchHistoryItem)
|
||||
val maxHistorySize = 20
|
||||
|
||||
@ -73,6 +74,6 @@ object DatabaseHelper {
|
||||
Database.searchHistoryDao()
|
||||
.delete(searchHistory.first())
|
||||
}
|
||||
}.start()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +0,0 @@
|
||||
package com.github.libretube.extensions
|
||||
|
||||
fun Thread.await() {
|
||||
this.apply {
|
||||
start()
|
||||
join()
|
||||
}
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
package com.github.libretube.extensions
|
||||
|
||||
fun <T> awaitQuery(
|
||||
query: () -> T
|
||||
): T {
|
||||
var x: T? = null
|
||||
val thread = Thread {
|
||||
x = query.invoke()
|
||||
}
|
||||
thread.start()
|
||||
thread.join()
|
||||
return x!!
|
||||
}
|
@ -1,5 +1,11 @@
|
||||
package com.github.libretube.extensions
|
||||
|
||||
fun query(block: () -> Unit) {
|
||||
Thread(block).start()
|
||||
Thread {
|
||||
try {
|
||||
block.invoke()
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}.start()
|
||||
}
|
||||
|
@ -10,15 +10,14 @@ import com.github.libretube.db.DatabaseHolder.Companion.Database
|
||||
*/
|
||||
fun View?.setWatchProgressLength(videoId: String, duration: Long) {
|
||||
val view = this!!
|
||||
var progress: Long? = null
|
||||
|
||||
Thread {
|
||||
try {
|
||||
progress = Database.watchPositionDao().findById(videoId)?.position
|
||||
} catch (e: Exception) {
|
||||
progress = null
|
||||
val progress = try {
|
||||
awaitQuery {
|
||||
Database.watchPositionDao().findById(videoId)?.position
|
||||
}
|
||||
}.await()
|
||||
} catch (e: Exception) {
|
||||
return
|
||||
}
|
||||
|
||||
view.getViewTreeObserver()
|
||||
.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
|
||||
@ -29,7 +28,7 @@ fun View?.setWatchProgressLength(videoId: String, duration: Long) {
|
||||
return
|
||||
}
|
||||
val fullWidth = (parent as LinearLayout).width
|
||||
val newWidth = (fullWidth * (progress!! / (duration))) / 1000
|
||||
val newWidth = (fullWidth * (progress / duration)) / 1000
|
||||
val lp = view.layoutParams
|
||||
lp.width = newWidth.toInt()
|
||||
view.layoutParams = lp
|
||||
|
@ -5,8 +5,6 @@ import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
import com.github.libretube.api.RetrofitInstance
|
||||
import com.github.libretube.api.SubscriptionHelper
|
||||
import com.github.libretube.api.obj.StreamItem
|
||||
import com.github.libretube.api.obj.Subscription
|
||||
import com.github.libretube.extensions.TAG
|
||||
import com.github.libretube.extensions.toID
|
||||
import com.github.libretube.util.PreferenceHelper
|
||||
|
@ -14,9 +14,6 @@ import android.widget.Toast
|
||||
import com.fasterxml.jackson.databind.ObjectMapper
|
||||
import com.github.libretube.R
|
||||
import com.github.libretube.api.RetrofitInstance
|
||||
import com.github.libretube.api.obj.Segment
|
||||
import com.github.libretube.api.obj.Segments
|
||||
import com.github.libretube.api.obj.Streams
|
||||
import com.github.libretube.constants.BACKGROUND_CHANNEL_ID
|
||||
import com.github.libretube.constants.IntentData
|
||||
import com.github.libretube.constants.PLAYER_NOTIFICATION_ID
|
||||
|
@ -6,7 +6,6 @@ import android.util.Log
|
||||
import android.widget.Toast
|
||||
import com.github.libretube.R
|
||||
import com.github.libretube.api.RetrofitInstance
|
||||
import com.github.libretube.api.obj.PlaylistId
|
||||
import com.github.libretube.databinding.DialogTextPreferenceBinding
|
||||
import com.github.libretube.extensions.TAG
|
||||
import com.github.libretube.extensions.toID
|
||||
|
@ -5,7 +5,6 @@ import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.FragmentManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.github.libretube.api.obj.StreamItem
|
||||
import com.github.libretube.databinding.VideoRowBinding
|
||||
import com.github.libretube.extensions.formatShort
|
||||
import com.github.libretube.extensions.setWatchProgressLength
|
||||
|
@ -4,7 +4,6 @@ import android.graphics.Color
|
||||
import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.github.libretube.api.obj.ChapterSegment
|
||||
import com.github.libretube.databinding.ChapterColumnBinding
|
||||
import com.github.libretube.util.ImageHelper
|
||||
import com.github.libretube.util.ThemeHelper
|
||||
|
@ -9,7 +9,6 @@ import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.github.libretube.R
|
||||
import com.github.libretube.api.RetrofitInstance
|
||||
import com.github.libretube.api.obj.Comment
|
||||
import com.github.libretube.api.obj.CommentsPage
|
||||
import com.github.libretube.databinding.CommentsRowBinding
|
||||
import com.github.libretube.extensions.TAG
|
||||
|
@ -3,7 +3,6 @@ package com.github.libretube.ui.adapters
|
||||
import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.github.libretube.api.obj.Subscription
|
||||
import com.github.libretube.databinding.LegacySubscriptionChannelBinding
|
||||
import com.github.libretube.extensions.toID
|
||||
import com.github.libretube.util.ImageHelper
|
||||
|
@ -8,8 +8,6 @@ import android.view.ViewGroup
|
||||
import androidx.fragment.app.FragmentManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.github.libretube.api.RetrofitInstance
|
||||
import com.github.libretube.api.obj.PlaylistId
|
||||
import com.github.libretube.api.obj.StreamItem
|
||||
import com.github.libretube.databinding.PlaylistRowBinding
|
||||
import com.github.libretube.extensions.TAG
|
||||
import com.github.libretube.extensions.setFormattedDuration
|
||||
|
@ -8,8 +8,6 @@ import androidx.fragment.app.FragmentManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.github.libretube.R
|
||||
import com.github.libretube.api.RetrofitInstance
|
||||
import com.github.libretube.api.obj.PlaylistId
|
||||
import com.github.libretube.api.obj.Playlists
|
||||
import com.github.libretube.databinding.PlaylistsRowBinding
|
||||
import com.github.libretube.extensions.TAG
|
||||
import com.github.libretube.sheets.PlaylistOptionsBottomSheet
|
||||
|
@ -4,7 +4,6 @@ import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.github.libretube.api.obj.Comment
|
||||
import com.github.libretube.databinding.RepliesRowBinding
|
||||
import com.github.libretube.extensions.formatShort
|
||||
import com.github.libretube.util.ImageHelper
|
||||
|
@ -7,7 +7,6 @@ import androidx.fragment.app.FragmentManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.github.libretube.R
|
||||
import com.github.libretube.api.SubscriptionHelper
|
||||
import com.github.libretube.api.obj.SearchItem
|
||||
import com.github.libretube.databinding.ChannelRowBinding
|
||||
import com.github.libretube.databinding.PlaylistSearchRowBinding
|
||||
import com.github.libretube.databinding.VideoRowBinding
|
||||
@ -110,7 +109,10 @@ class SearchAdapter(
|
||||
}
|
||||
}
|
||||
|
||||
private fun bindChannel(item: com.github.libretube.api.obj.SearchItem, binding: ChannelRowBinding) {
|
||||
private fun bindChannel(
|
||||
item: com.github.libretube.api.obj.SearchItem,
|
||||
binding: ChannelRowBinding
|
||||
) {
|
||||
binding.apply {
|
||||
ImageHelper.loadImage(item.thumbnail, searchChannelImage)
|
||||
searchChannelName.text = item.name
|
||||
@ -157,7 +159,10 @@ class SearchAdapter(
|
||||
}
|
||||
}
|
||||
|
||||
private fun bindPlaylist(item: com.github.libretube.api.obj.SearchItem, binding: PlaylistSearchRowBinding) {
|
||||
private fun bindPlaylist(
|
||||
item: com.github.libretube.api.obj.SearchItem,
|
||||
binding: PlaylistSearchRowBinding
|
||||
) {
|
||||
binding.apply {
|
||||
ImageHelper.loadImage(item.thumbnail, searchThumbnail)
|
||||
if (item.videos?.toInt() != -1) searchPlaylistNumber.text = item.videos.toString()
|
||||
|
@ -7,6 +7,7 @@ import androidx.recyclerview.widget.RecyclerView
|
||||
import com.github.libretube.databinding.SearchhistoryRowBinding
|
||||
import com.github.libretube.db.DatabaseHolder.Companion.Database
|
||||
import com.github.libretube.db.obj.SearchHistoryItem
|
||||
import com.github.libretube.extensions.query
|
||||
|
||||
class SearchHistoryAdapter(
|
||||
private var historyList: List<String>,
|
||||
@ -32,11 +33,11 @@ class SearchHistoryAdapter(
|
||||
deleteHistory.setOnClickListener {
|
||||
val itemIndex = historyList.indexOf(historyQuery)
|
||||
historyList -= historyQuery
|
||||
Thread {
|
||||
query {
|
||||
Database.searchHistoryDao().delete(
|
||||
SearchHistoryItem(query = historyQuery)
|
||||
)
|
||||
}.start()
|
||||
}
|
||||
notifyItemRemoved(itemIndex)
|
||||
}
|
||||
|
||||
|
@ -5,7 +5,6 @@ import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.github.libretube.R
|
||||
import com.github.libretube.api.SubscriptionHelper
|
||||
import com.github.libretube.api.obj.Subscription
|
||||
import com.github.libretube.databinding.ChannelSubscriptionRowBinding
|
||||
import com.github.libretube.extensions.toID
|
||||
import com.github.libretube.util.ImageHelper
|
||||
|
@ -5,7 +5,6 @@ import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.FragmentManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.github.libretube.api.obj.StreamItem
|
||||
import com.github.libretube.databinding.TrendingRowBinding
|
||||
import com.github.libretube.extensions.formatShort
|
||||
import com.github.libretube.extensions.setFormattedDuration
|
||||
|
@ -11,7 +11,6 @@ import androidx.fragment.app.activityViewModels
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.github.libretube.R
|
||||
import com.github.libretube.api.RetrofitInstance
|
||||
import com.github.libretube.api.obj.PlaylistId
|
||||
import com.github.libretube.constants.IntentData
|
||||
import com.github.libretube.databinding.DialogAddtoplaylistBinding
|
||||
import com.github.libretube.extensions.TAG
|
||||
|
@ -7,7 +7,6 @@ import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.github.libretube.R
|
||||
import com.github.libretube.databinding.DialogBackupBinding
|
||||
import com.github.libretube.db.DatabaseHolder.Companion.Database
|
||||
import com.github.libretube.extensions.await
|
||||
import com.github.libretube.obj.BackupFile
|
||||
import com.github.libretube.ui.adapters.BackupOptionsAdapter
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
@ -17,7 +16,7 @@ class BackupDialog(
|
||||
) : DialogFragment() {
|
||||
private lateinit var binding: DialogBackupBinding
|
||||
|
||||
val backupFile = BackupFile()
|
||||
private val backupFile = BackupFile()
|
||||
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||
val backupOptions = listOf(
|
||||
@ -42,7 +41,7 @@ class BackupDialog(
|
||||
.setView(binding.root)
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setPositiveButton(R.string.backup) { _, _ ->
|
||||
Thread {
|
||||
val thread = Thread {
|
||||
if (selected[0]) {
|
||||
backupFile.watchHistory =
|
||||
Database.watchHistoryDao().getAll()
|
||||
@ -63,7 +62,9 @@ class BackupDialog(
|
||||
backupFile.customInstances =
|
||||
Database.customInstanceDao().getAll()
|
||||
}
|
||||
}.await()
|
||||
}
|
||||
thread.start()
|
||||
thread.join()
|
||||
|
||||
createBackupFile(backupFile)
|
||||
}
|
||||
|
@ -8,7 +8,6 @@ import androidx.fragment.app.DialogFragment
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.github.libretube.R
|
||||
import com.github.libretube.api.RetrofitInstance
|
||||
import com.github.libretube.api.obj.Playlists
|
||||
import com.github.libretube.databinding.DialogCreatePlaylistBinding
|
||||
import com.github.libretube.extensions.TAG
|
||||
import com.github.libretube.ui.fragments.LibraryFragment
|
||||
|
@ -8,6 +8,7 @@ import com.github.libretube.R
|
||||
import com.github.libretube.databinding.DialogCustomInstanceBinding
|
||||
import com.github.libretube.db.DatabaseHolder.Companion.Database
|
||||
import com.github.libretube.db.obj.CustomInstance
|
||||
import com.github.libretube.extensions.query
|
||||
import com.github.libretube.util.ThemeHelper
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import java.net.URL
|
||||
@ -39,9 +40,9 @@ class CustomInstanceDialog : DialogFragment() {
|
||||
URL(customInstance.apiUrl).toURI()
|
||||
URL(customInstance.frontendUrl).toURI()
|
||||
|
||||
Thread {
|
||||
query {
|
||||
Database.customInstanceDao().insertAll(customInstance)
|
||||
}.start()
|
||||
}
|
||||
|
||||
activity?.recreate()
|
||||
dismiss()
|
||||
|
@ -8,7 +8,6 @@ import androidx.fragment.app.DialogFragment
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.github.libretube.R
|
||||
import com.github.libretube.api.RetrofitInstance
|
||||
import com.github.libretube.api.obj.DeleteUserRequest
|
||||
import com.github.libretube.databinding.DialogDeleteAccountBinding
|
||||
import com.github.libretube.extensions.TAG
|
||||
import com.github.libretube.util.PreferenceHelper
|
||||
|
@ -12,7 +12,6 @@ import androidx.fragment.app.DialogFragment
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.github.libretube.R
|
||||
import com.github.libretube.api.RetrofitInstance
|
||||
import com.github.libretube.api.obj.Streams
|
||||
import com.github.libretube.databinding.DialogDownloadBinding
|
||||
import com.github.libretube.extensions.TAG
|
||||
import com.github.libretube.services.DownloadService
|
||||
|
@ -8,7 +8,6 @@ import androidx.fragment.app.DialogFragment
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.github.libretube.R
|
||||
import com.github.libretube.api.RetrofitInstance
|
||||
import com.github.libretube.api.obj.Login
|
||||
import com.github.libretube.databinding.DialogLoginBinding
|
||||
import com.github.libretube.extensions.TAG
|
||||
import com.github.libretube.util.PreferenceHelper
|
||||
|
@ -10,8 +10,7 @@ import com.github.libretube.constants.PreferenceKeys
|
||||
import com.github.libretube.constants.YOUTUBE_FRONTEND_URL
|
||||
import com.github.libretube.databinding.DialogShareBinding
|
||||
import com.github.libretube.db.DatabaseHolder.Companion.Database
|
||||
import com.github.libretube.db.obj.CustomInstance
|
||||
import com.github.libretube.extensions.await
|
||||
import com.github.libretube.extensions.awaitQuery
|
||||
import com.github.libretube.util.PreferenceHelper
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
|
||||
@ -80,10 +79,9 @@ class ShareDialog(
|
||||
)
|
||||
|
||||
// get the api urls of the other custom instances
|
||||
var customInstances = listOf<CustomInstance>()
|
||||
Thread {
|
||||
customInstances = Database.customInstanceDao().getAll()
|
||||
}.await()
|
||||
val customInstances = awaitQuery {
|
||||
Database.customInstanceDao().getAll()
|
||||
}
|
||||
|
||||
// return the custom instance frontend url if available
|
||||
customInstances.forEach { instance ->
|
||||
|
@ -48,7 +48,7 @@ import com.github.libretube.db.DatabaseHelper
|
||||
import com.github.libretube.db.DatabaseHolder.Companion.Database
|
||||
import com.github.libretube.extensions.BaseFragment
|
||||
import com.github.libretube.extensions.TAG
|
||||
import com.github.libretube.extensions.await
|
||||
import com.github.libretube.extensions.awaitQuery
|
||||
import com.github.libretube.extensions.formatShort
|
||||
import com.github.libretube.extensions.hideKeyboard
|
||||
import com.github.libretube.extensions.query
|
||||
@ -861,17 +861,19 @@ class PlayerFragment : BaseFragment() {
|
||||
return
|
||||
}
|
||||
// browse the watch positions
|
||||
var position: Long? = null
|
||||
Thread {
|
||||
try {
|
||||
position = Database.watchPositionDao().findById(videoId!!)?.position
|
||||
// position is almost the end of the video => don't seek, start from beginning
|
||||
if (position!! > streams.duration!! * 1000 * 0.9) position = null
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
val position = try {
|
||||
awaitQuery {
|
||||
Database.watchPositionDao().findById(videoId!!)?.position
|
||||
}
|
||||
}.await()
|
||||
if (position != null) exoPlayer.seekTo(position!!)
|
||||
} catch (e: Exception) {
|
||||
return
|
||||
}
|
||||
// position is almost the end of the video => don't seek, start from beginning
|
||||
if (position != null && position < streams.duration!! * 1000 * 0.9) {
|
||||
exoPlayer.seekTo(
|
||||
position
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// used for autoplay and skipping to next video
|
||||
|
@ -15,7 +15,7 @@ import com.github.libretube.databinding.FragmentSearchBinding
|
||||
import com.github.libretube.db.DatabaseHolder.Companion.Database
|
||||
import com.github.libretube.extensions.BaseFragment
|
||||
import com.github.libretube.extensions.TAG
|
||||
import com.github.libretube.extensions.await
|
||||
import com.github.libretube.extensions.awaitQuery
|
||||
import com.github.libretube.models.SearchViewModel
|
||||
import com.github.libretube.ui.activities.MainActivity
|
||||
import com.github.libretube.ui.adapters.SearchHistoryAdapter
|
||||
@ -95,11 +95,9 @@ class SearchFragment : BaseFragment() {
|
||||
}
|
||||
|
||||
private fun showHistory() {
|
||||
var historyList = listOf<String>()
|
||||
Thread {
|
||||
val history = Database.searchHistoryDao().getAll()
|
||||
historyList = history.map { it.query }
|
||||
}.await()
|
||||
val historyList = awaitQuery {
|
||||
Database.searchHistoryDao().getAll().map { it.query }
|
||||
}
|
||||
if (historyList.isNotEmpty()) {
|
||||
binding.suggestionsRecycler.adapter =
|
||||
SearchHistoryAdapter(
|
||||
|
@ -9,9 +9,8 @@ import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.github.libretube.databinding.FragmentWatchHistoryBinding
|
||||
import com.github.libretube.db.DatabaseHolder.Companion.Database
|
||||
import com.github.libretube.db.obj.WatchHistoryItem
|
||||
import com.github.libretube.extensions.BaseFragment
|
||||
import com.github.libretube.extensions.await
|
||||
import com.github.libretube.extensions.awaitQuery
|
||||
import com.github.libretube.ui.adapters.WatchHistoryAdapter
|
||||
|
||||
class WatchHistoryFragment : BaseFragment() {
|
||||
@ -29,11 +28,9 @@ class WatchHistoryFragment : BaseFragment() {
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
var watchHistory = listOf<WatchHistoryItem>()
|
||||
|
||||
Thread {
|
||||
watchHistory = Database.watchHistoryDao().getAll()
|
||||
}.await()
|
||||
val watchHistory = awaitQuery {
|
||||
Database.watchHistoryDao().getAll()
|
||||
}
|
||||
|
||||
if (watchHistory.isEmpty()) return
|
||||
|
||||
|
@ -5,6 +5,7 @@ import androidx.preference.Preference
|
||||
import com.github.libretube.R
|
||||
import com.github.libretube.constants.PreferenceKeys
|
||||
import com.github.libretube.db.DatabaseHolder.Companion.Database
|
||||
import com.github.libretube.extensions.query
|
||||
import com.github.libretube.ui.activities.SettingsActivity
|
||||
import com.github.libretube.ui.views.MaterialPreferenceFragment
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
@ -52,9 +53,7 @@ class HistorySettings : MaterialPreferenceFragment() {
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.setPositiveButton(R.string.okay) { _, _ ->
|
||||
// clear the selected preference preferences
|
||||
Thread {
|
||||
action()
|
||||
}.start()
|
||||
query(action)
|
||||
}
|
||||
.show()
|
||||
}
|
||||
|
@ -15,8 +15,7 @@ import com.github.libretube.R
|
||||
import com.github.libretube.api.RetrofitInstance
|
||||
import com.github.libretube.constants.PreferenceKeys
|
||||
import com.github.libretube.db.DatabaseHolder.Companion.Database
|
||||
import com.github.libretube.db.obj.CustomInstance
|
||||
import com.github.libretube.extensions.await
|
||||
import com.github.libretube.extensions.awaitQuery
|
||||
import com.github.libretube.ui.activities.SettingsActivity
|
||||
import com.github.libretube.ui.dialogs.CustomInstanceDialog
|
||||
import com.github.libretube.ui.dialogs.DeleteAccountDialog
|
||||
@ -110,9 +109,9 @@ class InstanceSettings : MaterialPreferenceFragment() {
|
||||
|
||||
val clearCustomInstances = findPreference<Preference>(PreferenceKeys.CLEAR_CUSTOM_INSTANCES)
|
||||
clearCustomInstances?.setOnPreferenceClickListener {
|
||||
Thread {
|
||||
awaitQuery {
|
||||
Database.customInstanceDao().deleteAll()
|
||||
}.await()
|
||||
}
|
||||
activity?.recreate()
|
||||
true
|
||||
}
|
||||
@ -156,10 +155,9 @@ class InstanceSettings : MaterialPreferenceFragment() {
|
||||
|
||||
private fun initCustomInstances(instancePref: ListPreference) {
|
||||
lifecycleScope.launchWhenCreated {
|
||||
var customInstances = listOf<CustomInstance>()
|
||||
Thread {
|
||||
customInstances = Database.customInstanceDao().getAll()
|
||||
}.await()
|
||||
val customInstances = awaitQuery {
|
||||
Database.customInstanceDao().getAll()
|
||||
}
|
||||
|
||||
val instanceNames = arrayListOf<String>()
|
||||
val instanceValues = arrayListOf<String>()
|
||||
|
@ -1,7 +1,6 @@
|
||||
package com.github.libretube.util
|
||||
|
||||
import com.github.libretube.api.RetrofitInstance
|
||||
import com.github.libretube.api.obj.StreamItem
|
||||
import com.github.libretube.extensions.toID
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
|
@ -2,13 +2,15 @@ package com.github.libretube.util
|
||||
|
||||
import android.content.Context
|
||||
import android.view.accessibility.CaptioningManager
|
||||
import com.github.libretube.api.obj.PipedStream
|
||||
import com.github.libretube.constants.PreferenceKeys
|
||||
import com.google.android.exoplayer2.ui.CaptionStyleCompat
|
||||
|
||||
object PlayerHelper {
|
||||
// get the audio source following the users preferences
|
||||
fun getAudioSource(context: Context, audios: List<com.github.libretube.api.obj.PipedStream>): String {
|
||||
fun getAudioSource(
|
||||
context: Context,
|
||||
audios: List<com.github.libretube.api.obj.PipedStream>
|
||||
): String {
|
||||
val audioFormat = PreferenceHelper.getString(PreferenceKeys.PLAYER_AUDIO_FORMAT, "all")
|
||||
val audioQuality = if (
|
||||
NetworkHelper.isNetworkMobile(context)
|
||||
|
@ -2,9 +2,9 @@
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:tint="?attr/colorControlNormal"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M9,20Q8.175,20 7.588,19.413Q7,18.825 7,18Q7,17.175 7.588,16.587Q8.175,16 9,16Q9.825,16 10.413,16.587Q11,17.175 11,18Q11,18.825 10.413,19.413Q9.825,20 9,20ZM15,20Q14.175,20 13.588,19.413Q13,18.825 13,18Q13,17.175 13.588,16.587Q14.175,16 15,16Q15.825,16 16.413,16.587Q17,17.175 17,18Q17,18.825 16.413,19.413Q15.825,20 15,20ZM9,14Q8.175,14 7.588,13.412Q7,12.825 7,12Q7,11.175 7.588,10.587Q8.175,10 9,10Q9.825,10 10.413,10.587Q11,11.175 11,12Q11,12.825 10.413,13.412Q9.825,14 9,14ZM15,14Q14.175,14 13.588,13.412Q13,12.825 13,12Q13,11.175 13.588,10.587Q14.175,10 15,10Q15.825,10 16.413,10.587Q17,11.175 17,12Q17,12.825 16.413,13.412Q15.825,14 15,14ZM9,8Q8.175,8 7.588,7.412Q7,6.825 7,6Q7,5.175 7.588,4.588Q8.175,4 9,4Q9.825,4 10.413,4.588Q11,5.175 11,6Q11,6.825 10.413,7.412Q9.825,8 9,8ZM15,8Q14.175,8 13.588,7.412Q13,6.825 13,6Q13,5.175 13.588,4.588Q14.175,4 15,4Q15.825,4 16.413,4.588Q17,5.175 17,6Q17,6.825 16.413,7.412Q15.825,8 15,8Z"
|
||||
|
Loading…
x
Reference in New Issue
Block a user