Merge pull request #1343 from Bnyro/master

code cleanup
This commit is contained in:
Bnyro 2022-09-22 18:01:36 +02:00 committed by GitHub
commit dc9470ac50
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
38 changed files with 112 additions and 143 deletions

View File

@ -1,6 +1,5 @@
package com.github.libretube.api 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.GITHUB_API_URL
import com.github.libretube.constants.PIPED_INSTANCES_URL import com.github.libretube.constants.PIPED_INSTANCES_URL
import com.github.libretube.obj.update.UpdateInfo import com.github.libretube.obj.update.UpdateInfo

View File

@ -1,21 +1,5 @@
package com.github.libretube.api 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.Body
import retrofit2.http.GET import retrofit2.http.GET
import retrofit2.http.Header import retrofit2.http.Header

View File

@ -1,11 +1,11 @@
package com.github.libretube.api package com.github.libretube.api
import android.util.Log import android.util.Log
import com.github.libretube.api.obj.Subscribe
import com.github.libretube.db.DatabaseHolder.Companion.Database import com.github.libretube.db.DatabaseHolder.Companion.Database
import com.github.libretube.db.obj.LocalSubscription import com.github.libretube.db.obj.LocalSubscription
import com.github.libretube.extensions.TAG 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 com.github.libretube.util.PreferenceHelper
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@ -26,11 +26,11 @@ object SubscriptionHelper {
} }
} }
} else { } else {
Thread { query {
Database.localSubscriptionDao().insertAll( Database.localSubscriptionDao().insertAll(
LocalSubscription(channelId) LocalSubscription(channelId)
) )
}.start() }
} }
} }
@ -47,11 +47,11 @@ object SubscriptionHelper {
} }
} }
} else { } else {
Thread { query {
Database.localSubscriptionDao().delete( Database.localSubscriptionDao().delete(
LocalSubscription(channelId) LocalSubscription(channelId)
) )
}.start() }
} }
} }
@ -68,11 +68,9 @@ object SubscriptionHelper {
} }
return isSubscribed.subscribed return isSubscribed.subscribed
} else { } else {
var isSubscribed = false return awaitQuery {
Thread { Database.localSubscriptionDao().includes(channelId)
isSubscribed = Database.localSubscriptionDao().includes(channelId) }
}.await()
return isSubscribed
} }
} }
@ -93,20 +91,18 @@ object SubscriptionHelper {
newChannels.forEach { newChannels.forEach {
newLocalSubscriptions += LocalSubscription(channelId = it) newLocalSubscriptions += LocalSubscription(channelId = it)
} }
Thread { query {
Database.localSubscriptionDao().insertAll( Database.localSubscriptionDao().insertAll(
*newChannels.map { LocalSubscription(it) }.toTypedArray() *newChannels.map { LocalSubscription(it) }.toTypedArray()
) )
}.start() }
} }
} }
fun getLocalSubscriptions(): List<LocalSubscription> { fun getLocalSubscriptions(): List<LocalSubscription> {
var localSubscriptions = listOf<LocalSubscription>() return awaitQuery {
Thread { Database.localSubscriptionDao().getAll()
localSubscriptions = Database.localSubscriptionDao().getAll() }
}.await()
return localSubscriptions
} }
fun getFormattedLocalSubscriptions(): String { fun getFormattedLocalSubscriptions(): String {

View File

@ -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.SearchHistoryItem
import com.github.libretube.db.obj.WatchHistoryItem import com.github.libretube.db.obj.WatchHistoryItem
import com.github.libretube.db.obj.WatchPosition import com.github.libretube.db.obj.WatchPosition
import com.github.libretube.extensions.query
import com.github.libretube.extensions.toID import com.github.libretube.extensions.toID
import com.github.libretube.util.PreferenceHelper import com.github.libretube.util.PreferenceHelper
object DatabaseHelper { object DatabaseHelper {
fun addToWatchHistory(videoId: String, streams: com.github.libretube.api.obj.Streams) { fun addToWatchHistory(videoId: String, streams: Streams) {
val watchHistoryItem = WatchHistoryItem( val watchHistoryItem = WatchHistoryItem(
videoId, videoId,
streams.title, streams.title,
@ -21,11 +22,11 @@ object DatabaseHelper {
streams.thumbnailUrl, streams.thumbnailUrl,
streams.duration streams.duration
) )
Thread { query {
Database.watchHistoryDao().insertAll(watchHistoryItem) Database.watchHistoryDao().insertAll(watchHistoryItem)
val maxHistorySize = val maxHistorySize =
PreferenceHelper.getString(PreferenceKeys.WATCH_HISTORY_SIZE, "unlimited") 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 // delete the first watch history entry if the limit is reached
val watchHistory = Database.watchHistoryDao().getAll() val watchHistory = Database.watchHistoryDao().getAll()
@ -33,15 +34,15 @@ object DatabaseHelper {
Database.watchHistoryDao() Database.watchHistoryDao()
.delete(watchHistory.first()) .delete(watchHistory.first())
} }
}.start() }
} }
fun removeFromWatchHistory(index: Int) { fun removeFromWatchHistory(index: Int) {
Thread { query {
Database.watchHistoryDao().delete( Database.watchHistoryDao().delete(
Database.watchHistoryDao().getAll()[index] Database.watchHistoryDao().getAll()[index]
) )
}.start() }
} }
fun saveWatchPosition(videoId: String, position: Long) { fun saveWatchPosition(videoId: String, position: Long) {
@ -49,21 +50,21 @@ object DatabaseHelper {
videoId, videoId,
position position
) )
Thread { query {
Database.watchPositionDao().insertAll(watchPosition) Database.watchPositionDao().insertAll(watchPosition)
}.start() }
} }
fun removeWatchPosition(videoId: String) { fun removeWatchPosition(videoId: String) {
Thread { query {
Database.watchPositionDao().findById(videoId)?.let { Database.watchPositionDao().findById(videoId)?.let {
Database.watchPositionDao().delete(it) Database.watchPositionDao().delete(it)
} }
}.start() }
} }
fun addToSearchHistory(searchHistoryItem: SearchHistoryItem) { fun addToSearchHistory(searchHistoryItem: SearchHistoryItem) {
Thread { query {
Database.searchHistoryDao().insertAll(searchHistoryItem) Database.searchHistoryDao().insertAll(searchHistoryItem)
val maxHistorySize = 20 val maxHistorySize = 20
@ -73,6 +74,6 @@ object DatabaseHelper {
Database.searchHistoryDao() Database.searchHistoryDao()
.delete(searchHistory.first()) .delete(searchHistory.first())
} }
}.start() }
} }
} }

View File

@ -1,8 +0,0 @@
package com.github.libretube.extensions
fun Thread.await() {
this.apply {
start()
join()
}
}

View File

@ -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!!
}

View File

@ -1,5 +1,11 @@
package com.github.libretube.extensions package com.github.libretube.extensions
fun query(block: () -> Unit) { fun query(block: () -> Unit) {
Thread(block).start() Thread {
try {
block.invoke()
} catch (e: Exception) {
e.printStackTrace()
}
}.start()
} }

View File

@ -10,15 +10,14 @@ import com.github.libretube.db.DatabaseHolder.Companion.Database
*/ */
fun View?.setWatchProgressLength(videoId: String, duration: Long) { fun View?.setWatchProgressLength(videoId: String, duration: Long) {
val view = this!! val view = this!!
var progress: Long? = null
Thread { val progress = try {
try { awaitQuery {
progress = Database.watchPositionDao().findById(videoId)?.position Database.watchPositionDao().findById(videoId)?.position
} catch (e: Exception) { }
progress = null } catch (e: Exception) {
return
} }
}.await()
view.getViewTreeObserver() view.getViewTreeObserver()
.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener { .addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
@ -29,7 +28,7 @@ fun View?.setWatchProgressLength(videoId: String, duration: Long) {
return return
} }
val fullWidth = (parent as LinearLayout).width val fullWidth = (parent as LinearLayout).width
val newWidth = (fullWidth * (progress!! / (duration))) / 1000 val newWidth = (fullWidth * (progress / duration)) / 1000
val lp = view.layoutParams val lp = view.layoutParams
lp.width = newWidth.toInt() lp.width = newWidth.toInt()
view.layoutParams = lp view.layoutParams = lp

View File

@ -5,8 +5,6 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import com.github.libretube.api.RetrofitInstance import com.github.libretube.api.RetrofitInstance
import com.github.libretube.api.SubscriptionHelper 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.TAG
import com.github.libretube.extensions.toID import com.github.libretube.extensions.toID
import com.github.libretube.util.PreferenceHelper import com.github.libretube.util.PreferenceHelper

View File

@ -14,9 +14,6 @@ import android.widget.Toast
import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.ObjectMapper
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.api.RetrofitInstance 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.BACKGROUND_CHANNEL_ID
import com.github.libretube.constants.IntentData import com.github.libretube.constants.IntentData
import com.github.libretube.constants.PLAYER_NOTIFICATION_ID import com.github.libretube.constants.PLAYER_NOTIFICATION_ID

View File

@ -6,7 +6,6 @@ import android.util.Log
import android.widget.Toast import android.widget.Toast
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.api.RetrofitInstance import com.github.libretube.api.RetrofitInstance
import com.github.libretube.api.obj.PlaylistId
import com.github.libretube.databinding.DialogTextPreferenceBinding import com.github.libretube.databinding.DialogTextPreferenceBinding
import com.github.libretube.extensions.TAG import com.github.libretube.extensions.TAG
import com.github.libretube.extensions.toID import com.github.libretube.extensions.toID

View File

@ -5,7 +5,6 @@ import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.api.obj.StreamItem
import com.github.libretube.databinding.VideoRowBinding import com.github.libretube.databinding.VideoRowBinding
import com.github.libretube.extensions.formatShort import com.github.libretube.extensions.formatShort
import com.github.libretube.extensions.setWatchProgressLength import com.github.libretube.extensions.setWatchProgressLength

View File

@ -4,7 +4,6 @@ import android.graphics.Color
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.api.obj.ChapterSegment
import com.github.libretube.databinding.ChapterColumnBinding import com.github.libretube.databinding.ChapterColumnBinding
import com.github.libretube.util.ImageHelper import com.github.libretube.util.ImageHelper
import com.github.libretube.util.ThemeHelper import com.github.libretube.util.ThemeHelper

View File

@ -9,7 +9,6 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.api.RetrofitInstance import com.github.libretube.api.RetrofitInstance
import com.github.libretube.api.obj.Comment
import com.github.libretube.api.obj.CommentsPage import com.github.libretube.api.obj.CommentsPage
import com.github.libretube.databinding.CommentsRowBinding import com.github.libretube.databinding.CommentsRowBinding
import com.github.libretube.extensions.TAG import com.github.libretube.extensions.TAG

View File

@ -3,7 +3,6 @@ package com.github.libretube.ui.adapters
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.api.obj.Subscription
import com.github.libretube.databinding.LegacySubscriptionChannelBinding import com.github.libretube.databinding.LegacySubscriptionChannelBinding
import com.github.libretube.extensions.toID import com.github.libretube.extensions.toID
import com.github.libretube.util.ImageHelper import com.github.libretube.util.ImageHelper

View File

@ -8,8 +8,6 @@ import android.view.ViewGroup
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.api.RetrofitInstance 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.databinding.PlaylistRowBinding
import com.github.libretube.extensions.TAG import com.github.libretube.extensions.TAG
import com.github.libretube.extensions.setFormattedDuration import com.github.libretube.extensions.setFormattedDuration

View File

@ -8,8 +8,6 @@ import androidx.fragment.app.FragmentManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.api.RetrofitInstance 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.databinding.PlaylistsRowBinding
import com.github.libretube.extensions.TAG import com.github.libretube.extensions.TAG
import com.github.libretube.sheets.PlaylistOptionsBottomSheet import com.github.libretube.sheets.PlaylistOptionsBottomSheet

View File

@ -4,7 +4,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.api.obj.Comment
import com.github.libretube.databinding.RepliesRowBinding import com.github.libretube.databinding.RepliesRowBinding
import com.github.libretube.extensions.formatShort import com.github.libretube.extensions.formatShort
import com.github.libretube.util.ImageHelper import com.github.libretube.util.ImageHelper

View File

@ -7,7 +7,6 @@ import androidx.fragment.app.FragmentManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.api.SubscriptionHelper import com.github.libretube.api.SubscriptionHelper
import com.github.libretube.api.obj.SearchItem
import com.github.libretube.databinding.ChannelRowBinding import com.github.libretube.databinding.ChannelRowBinding
import com.github.libretube.databinding.PlaylistSearchRowBinding import com.github.libretube.databinding.PlaylistSearchRowBinding
import com.github.libretube.databinding.VideoRowBinding 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 { binding.apply {
ImageHelper.loadImage(item.thumbnail, searchChannelImage) ImageHelper.loadImage(item.thumbnail, searchChannelImage)
searchChannelName.text = item.name 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 { binding.apply {
ImageHelper.loadImage(item.thumbnail, searchThumbnail) ImageHelper.loadImage(item.thumbnail, searchThumbnail)
if (item.videos?.toInt() != -1) searchPlaylistNumber.text = item.videos.toString() if (item.videos?.toInt() != -1) searchPlaylistNumber.text = item.videos.toString()

View File

@ -7,6 +7,7 @@ import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.databinding.SearchhistoryRowBinding import com.github.libretube.databinding.SearchhistoryRowBinding
import com.github.libretube.db.DatabaseHolder.Companion.Database import com.github.libretube.db.DatabaseHolder.Companion.Database
import com.github.libretube.db.obj.SearchHistoryItem import com.github.libretube.db.obj.SearchHistoryItem
import com.github.libretube.extensions.query
class SearchHistoryAdapter( class SearchHistoryAdapter(
private var historyList: List<String>, private var historyList: List<String>,
@ -32,11 +33,11 @@ class SearchHistoryAdapter(
deleteHistory.setOnClickListener { deleteHistory.setOnClickListener {
val itemIndex = historyList.indexOf(historyQuery) val itemIndex = historyList.indexOf(historyQuery)
historyList -= historyQuery historyList -= historyQuery
Thread { query {
Database.searchHistoryDao().delete( Database.searchHistoryDao().delete(
SearchHistoryItem(query = historyQuery) SearchHistoryItem(query = historyQuery)
) )
}.start() }
notifyItemRemoved(itemIndex) notifyItemRemoved(itemIndex)
} }

View File

@ -5,7 +5,6 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.api.SubscriptionHelper import com.github.libretube.api.SubscriptionHelper
import com.github.libretube.api.obj.Subscription
import com.github.libretube.databinding.ChannelSubscriptionRowBinding import com.github.libretube.databinding.ChannelSubscriptionRowBinding
import com.github.libretube.extensions.toID import com.github.libretube.extensions.toID
import com.github.libretube.util.ImageHelper import com.github.libretube.util.ImageHelper

View File

@ -5,7 +5,6 @@ import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.api.obj.StreamItem
import com.github.libretube.databinding.TrendingRowBinding import com.github.libretube.databinding.TrendingRowBinding
import com.github.libretube.extensions.formatShort import com.github.libretube.extensions.formatShort
import com.github.libretube.extensions.setFormattedDuration import com.github.libretube.extensions.setFormattedDuration

View File

@ -11,7 +11,6 @@ import androidx.fragment.app.activityViewModels
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.api.RetrofitInstance import com.github.libretube.api.RetrofitInstance
import com.github.libretube.api.obj.PlaylistId
import com.github.libretube.constants.IntentData import com.github.libretube.constants.IntentData
import com.github.libretube.databinding.DialogAddtoplaylistBinding import com.github.libretube.databinding.DialogAddtoplaylistBinding
import com.github.libretube.extensions.TAG import com.github.libretube.extensions.TAG

View File

@ -7,7 +7,6 @@ import androidx.recyclerview.widget.LinearLayoutManager
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.databinding.DialogBackupBinding import com.github.libretube.databinding.DialogBackupBinding
import com.github.libretube.db.DatabaseHolder.Companion.Database import com.github.libretube.db.DatabaseHolder.Companion.Database
import com.github.libretube.extensions.await
import com.github.libretube.obj.BackupFile import com.github.libretube.obj.BackupFile
import com.github.libretube.ui.adapters.BackupOptionsAdapter import com.github.libretube.ui.adapters.BackupOptionsAdapter
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
@ -17,7 +16,7 @@ class BackupDialog(
) : DialogFragment() { ) : DialogFragment() {
private lateinit var binding: DialogBackupBinding private lateinit var binding: DialogBackupBinding
val backupFile = BackupFile() private val backupFile = BackupFile()
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val backupOptions = listOf( val backupOptions = listOf(
@ -42,7 +41,7 @@ class BackupDialog(
.setView(binding.root) .setView(binding.root)
.setNegativeButton(R.string.cancel, null) .setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.backup) { _, _ -> .setPositiveButton(R.string.backup) { _, _ ->
Thread { val thread = Thread {
if (selected[0]) { if (selected[0]) {
backupFile.watchHistory = backupFile.watchHistory =
Database.watchHistoryDao().getAll() Database.watchHistoryDao().getAll()
@ -63,7 +62,9 @@ class BackupDialog(
backupFile.customInstances = backupFile.customInstances =
Database.customInstanceDao().getAll() Database.customInstanceDao().getAll()
} }
}.await() }
thread.start()
thread.join()
createBackupFile(backupFile) createBackupFile(backupFile)
} }

View File

@ -8,7 +8,6 @@ import androidx.fragment.app.DialogFragment
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.api.RetrofitInstance import com.github.libretube.api.RetrofitInstance
import com.github.libretube.api.obj.Playlists
import com.github.libretube.databinding.DialogCreatePlaylistBinding import com.github.libretube.databinding.DialogCreatePlaylistBinding
import com.github.libretube.extensions.TAG import com.github.libretube.extensions.TAG
import com.github.libretube.ui.fragments.LibraryFragment import com.github.libretube.ui.fragments.LibraryFragment

View File

@ -8,6 +8,7 @@ import com.github.libretube.R
import com.github.libretube.databinding.DialogCustomInstanceBinding import com.github.libretube.databinding.DialogCustomInstanceBinding
import com.github.libretube.db.DatabaseHolder.Companion.Database import com.github.libretube.db.DatabaseHolder.Companion.Database
import com.github.libretube.db.obj.CustomInstance import com.github.libretube.db.obj.CustomInstance
import com.github.libretube.extensions.query
import com.github.libretube.util.ThemeHelper import com.github.libretube.util.ThemeHelper
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import java.net.URL import java.net.URL
@ -39,9 +40,9 @@ class CustomInstanceDialog : DialogFragment() {
URL(customInstance.apiUrl).toURI() URL(customInstance.apiUrl).toURI()
URL(customInstance.frontendUrl).toURI() URL(customInstance.frontendUrl).toURI()
Thread { query {
Database.customInstanceDao().insertAll(customInstance) Database.customInstanceDao().insertAll(customInstance)
}.start() }
activity?.recreate() activity?.recreate()
dismiss() dismiss()

View File

@ -8,7 +8,6 @@ import androidx.fragment.app.DialogFragment
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.api.RetrofitInstance import com.github.libretube.api.RetrofitInstance
import com.github.libretube.api.obj.DeleteUserRequest
import com.github.libretube.databinding.DialogDeleteAccountBinding import com.github.libretube.databinding.DialogDeleteAccountBinding
import com.github.libretube.extensions.TAG import com.github.libretube.extensions.TAG
import com.github.libretube.util.PreferenceHelper import com.github.libretube.util.PreferenceHelper

View File

@ -12,7 +12,6 @@ import androidx.fragment.app.DialogFragment
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.api.RetrofitInstance import com.github.libretube.api.RetrofitInstance
import com.github.libretube.api.obj.Streams
import com.github.libretube.databinding.DialogDownloadBinding import com.github.libretube.databinding.DialogDownloadBinding
import com.github.libretube.extensions.TAG import com.github.libretube.extensions.TAG
import com.github.libretube.services.DownloadService import com.github.libretube.services.DownloadService

View File

@ -8,7 +8,6 @@ import androidx.fragment.app.DialogFragment
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.api.RetrofitInstance import com.github.libretube.api.RetrofitInstance
import com.github.libretube.api.obj.Login
import com.github.libretube.databinding.DialogLoginBinding import com.github.libretube.databinding.DialogLoginBinding
import com.github.libretube.extensions.TAG import com.github.libretube.extensions.TAG
import com.github.libretube.util.PreferenceHelper import com.github.libretube.util.PreferenceHelper

View File

@ -10,8 +10,7 @@ import com.github.libretube.constants.PreferenceKeys
import com.github.libretube.constants.YOUTUBE_FRONTEND_URL import com.github.libretube.constants.YOUTUBE_FRONTEND_URL
import com.github.libretube.databinding.DialogShareBinding import com.github.libretube.databinding.DialogShareBinding
import com.github.libretube.db.DatabaseHolder.Companion.Database import com.github.libretube.db.DatabaseHolder.Companion.Database
import com.github.libretube.db.obj.CustomInstance import com.github.libretube.extensions.awaitQuery
import com.github.libretube.extensions.await
import com.github.libretube.util.PreferenceHelper import com.github.libretube.util.PreferenceHelper
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
@ -80,10 +79,9 @@ class ShareDialog(
) )
// get the api urls of the other custom instances // get the api urls of the other custom instances
var customInstances = listOf<CustomInstance>() val customInstances = awaitQuery {
Thread { Database.customInstanceDao().getAll()
customInstances = Database.customInstanceDao().getAll() }
}.await()
// return the custom instance frontend url if available // return the custom instance frontend url if available
customInstances.forEach { instance -> customInstances.forEach { instance ->

View File

@ -48,7 +48,7 @@ import com.github.libretube.db.DatabaseHelper
import com.github.libretube.db.DatabaseHolder.Companion.Database import com.github.libretube.db.DatabaseHolder.Companion.Database
import com.github.libretube.extensions.BaseFragment import com.github.libretube.extensions.BaseFragment
import com.github.libretube.extensions.TAG 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.formatShort
import com.github.libretube.extensions.hideKeyboard import com.github.libretube.extensions.hideKeyboard
import com.github.libretube.extensions.query import com.github.libretube.extensions.query
@ -861,17 +861,19 @@ class PlayerFragment : BaseFragment() {
return return
} }
// browse the watch positions // browse the watch positions
var position: Long? = null val position = try {
Thread { awaitQuery {
try { Database.watchPositionDao().findById(videoId!!)?.position
position = Database.watchPositionDao().findById(videoId!!)?.position }
// position is almost the end of the video => don't seek, start from beginning } catch (e: Exception) {
if (position!! > streams.duration!! * 1000 * 0.9) position = null return
} catch (e: Exception) { }
e.printStackTrace() // 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
)
} }
}.await()
if (position != null) exoPlayer.seekTo(position!!)
} }
// used for autoplay and skipping to next video // used for autoplay and skipping to next video

View File

@ -15,7 +15,7 @@ import com.github.libretube.databinding.FragmentSearchBinding
import com.github.libretube.db.DatabaseHolder.Companion.Database import com.github.libretube.db.DatabaseHolder.Companion.Database
import com.github.libretube.extensions.BaseFragment import com.github.libretube.extensions.BaseFragment
import com.github.libretube.extensions.TAG 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.models.SearchViewModel
import com.github.libretube.ui.activities.MainActivity import com.github.libretube.ui.activities.MainActivity
import com.github.libretube.ui.adapters.SearchHistoryAdapter import com.github.libretube.ui.adapters.SearchHistoryAdapter
@ -95,11 +95,9 @@ class SearchFragment : BaseFragment() {
} }
private fun showHistory() { private fun showHistory() {
var historyList = listOf<String>() val historyList = awaitQuery {
Thread { Database.searchHistoryDao().getAll().map { it.query }
val history = Database.searchHistoryDao().getAll() }
historyList = history.map { it.query }
}.await()
if (historyList.isNotEmpty()) { if (historyList.isNotEmpty()) {
binding.suggestionsRecycler.adapter = binding.suggestionsRecycler.adapter =
SearchHistoryAdapter( SearchHistoryAdapter(

View File

@ -9,9 +9,8 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.github.libretube.databinding.FragmentWatchHistoryBinding import com.github.libretube.databinding.FragmentWatchHistoryBinding
import com.github.libretube.db.DatabaseHolder.Companion.Database 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.BaseFragment
import com.github.libretube.extensions.await import com.github.libretube.extensions.awaitQuery
import com.github.libretube.ui.adapters.WatchHistoryAdapter import com.github.libretube.ui.adapters.WatchHistoryAdapter
class WatchHistoryFragment : BaseFragment() { class WatchHistoryFragment : BaseFragment() {
@ -29,11 +28,9 @@ class WatchHistoryFragment : BaseFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
var watchHistory = listOf<WatchHistoryItem>() val watchHistory = awaitQuery {
Database.watchHistoryDao().getAll()
Thread { }
watchHistory = Database.watchHistoryDao().getAll()
}.await()
if (watchHistory.isEmpty()) return if (watchHistory.isEmpty()) return

View File

@ -5,6 +5,7 @@ import androidx.preference.Preference
import com.github.libretube.R import com.github.libretube.R
import com.github.libretube.constants.PreferenceKeys import com.github.libretube.constants.PreferenceKeys
import com.github.libretube.db.DatabaseHolder.Companion.Database 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.activities.SettingsActivity
import com.github.libretube.ui.views.MaterialPreferenceFragment import com.github.libretube.ui.views.MaterialPreferenceFragment
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
@ -52,9 +53,7 @@ class HistorySettings : MaterialPreferenceFragment() {
.setNegativeButton(R.string.cancel, null) .setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.okay) { _, _ -> .setPositiveButton(R.string.okay) { _, _ ->
// clear the selected preference preferences // clear the selected preference preferences
Thread { query(action)
action()
}.start()
} }
.show() .show()
} }

View File

@ -15,8 +15,7 @@ import com.github.libretube.R
import com.github.libretube.api.RetrofitInstance import com.github.libretube.api.RetrofitInstance
import com.github.libretube.constants.PreferenceKeys import com.github.libretube.constants.PreferenceKeys
import com.github.libretube.db.DatabaseHolder.Companion.Database import com.github.libretube.db.DatabaseHolder.Companion.Database
import com.github.libretube.db.obj.CustomInstance import com.github.libretube.extensions.awaitQuery
import com.github.libretube.extensions.await
import com.github.libretube.ui.activities.SettingsActivity import com.github.libretube.ui.activities.SettingsActivity
import com.github.libretube.ui.dialogs.CustomInstanceDialog import com.github.libretube.ui.dialogs.CustomInstanceDialog
import com.github.libretube.ui.dialogs.DeleteAccountDialog import com.github.libretube.ui.dialogs.DeleteAccountDialog
@ -110,9 +109,9 @@ class InstanceSettings : MaterialPreferenceFragment() {
val clearCustomInstances = findPreference<Preference>(PreferenceKeys.CLEAR_CUSTOM_INSTANCES) val clearCustomInstances = findPreference<Preference>(PreferenceKeys.CLEAR_CUSTOM_INSTANCES)
clearCustomInstances?.setOnPreferenceClickListener { clearCustomInstances?.setOnPreferenceClickListener {
Thread { awaitQuery {
Database.customInstanceDao().deleteAll() Database.customInstanceDao().deleteAll()
}.await() }
activity?.recreate() activity?.recreate()
true true
} }
@ -156,10 +155,9 @@ class InstanceSettings : MaterialPreferenceFragment() {
private fun initCustomInstances(instancePref: ListPreference) { private fun initCustomInstances(instancePref: ListPreference) {
lifecycleScope.launchWhenCreated { lifecycleScope.launchWhenCreated {
var customInstances = listOf<CustomInstance>() val customInstances = awaitQuery {
Thread { Database.customInstanceDao().getAll()
customInstances = Database.customInstanceDao().getAll() }
}.await()
val instanceNames = arrayListOf<String>() val instanceNames = arrayListOf<String>()
val instanceValues = arrayListOf<String>() val instanceValues = arrayListOf<String>()

View File

@ -1,7 +1,6 @@
package com.github.libretube.util package com.github.libretube.util
import com.github.libretube.api.RetrofitInstance import com.github.libretube.api.RetrofitInstance
import com.github.libretube.api.obj.StreamItem
import com.github.libretube.extensions.toID import com.github.libretube.extensions.toID
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext

View File

@ -2,13 +2,15 @@ package com.github.libretube.util
import android.content.Context import android.content.Context
import android.view.accessibility.CaptioningManager import android.view.accessibility.CaptioningManager
import com.github.libretube.api.obj.PipedStream
import com.github.libretube.constants.PreferenceKeys import com.github.libretube.constants.PreferenceKeys
import com.google.android.exoplayer2.ui.CaptionStyleCompat import com.google.android.exoplayer2.ui.CaptionStyleCompat
object PlayerHelper { object PlayerHelper {
// get the audio source following the users preferences // 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 audioFormat = PreferenceHelper.getString(PreferenceKeys.PLAYER_AUDIO_FORMAT, "all")
val audioQuality = if ( val audioQuality = if (
NetworkHelper.isNetworkMobile(context) NetworkHelper.isNetworkMobile(context)

View File

@ -2,9 +2,9 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:width="24dp" android:width="24dp"
android:height="24dp" android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="24" android:viewportWidth="24"
android:viewportHeight="24" android:viewportHeight="24">
android:tint="?attr/colorControlNormal">
<path <path
android:fillColor="@android:color/white" 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" 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"