mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-04-28 16:00:31 +05:30
commit
dc9470ac50
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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 {
|
||||||
|
@ -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()
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
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()
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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()
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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()
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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 ->
|
||||||
|
@ -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
|
||||||
|
@ -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(
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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()
|
||||||
}
|
}
|
||||||
|
@ -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>()
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -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"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user