mirror of
https://gitlab.futo.org/videostreaming/grayjay.git
synced 2025-04-29 22:24:29 +02:00
Fixed artwork not displaying properly. Loop button now hidden if you have a queue. Videos on queue editor now properly updates the amount of videos when a video is deleted.
This commit is contained in:
parent
33780f1046
commit
e50d195b85
@ -0,0 +1,94 @@
|
|||||||
|
{
|
||||||
|
"formatVersion": 1,
|
||||||
|
"database": {
|
||||||
|
"version": 3,
|
||||||
|
"identityHash": "ffba56c2f572c25080ce8596e8bb8945",
|
||||||
|
"entities": [
|
||||||
|
{
|
||||||
|
"tableName": "history",
|
||||||
|
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `url` TEXT NOT NULL, `position` INTEGER NOT NULL, `datetime` INTEGER NOT NULL, `name` TEXT NOT NULL, `serialized` BLOB)",
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"fieldPath": "id",
|
||||||
|
"columnName": "id",
|
||||||
|
"affinity": "INTEGER",
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "url",
|
||||||
|
"columnName": "url",
|
||||||
|
"affinity": "TEXT",
|
||||||
|
"notNull": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "position",
|
||||||
|
"columnName": "position",
|
||||||
|
"affinity": "INTEGER",
|
||||||
|
"notNull": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "datetime",
|
||||||
|
"columnName": "datetime",
|
||||||
|
"affinity": "INTEGER",
|
||||||
|
"notNull": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "name",
|
||||||
|
"columnName": "name",
|
||||||
|
"affinity": "TEXT",
|
||||||
|
"notNull": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "serialized",
|
||||||
|
"columnName": "serialized",
|
||||||
|
"affinity": "BLOB",
|
||||||
|
"notNull": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"primaryKey": {
|
||||||
|
"autoGenerate": true,
|
||||||
|
"columnNames": [
|
||||||
|
"id"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"indices": [
|
||||||
|
{
|
||||||
|
"name": "index_history_url",
|
||||||
|
"unique": false,
|
||||||
|
"columnNames": [
|
||||||
|
"url"
|
||||||
|
],
|
||||||
|
"orders": [],
|
||||||
|
"createSql": "CREATE INDEX IF NOT EXISTS `index_history_url` ON `${TABLE_NAME}` (`url`)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "index_history_name",
|
||||||
|
"unique": false,
|
||||||
|
"columnNames": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"orders": [],
|
||||||
|
"createSql": "CREATE INDEX IF NOT EXISTS `index_history_name` ON `${TABLE_NAME}` (`name`)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "index_history_datetime",
|
||||||
|
"unique": false,
|
||||||
|
"columnNames": [
|
||||||
|
"datetime"
|
||||||
|
],
|
||||||
|
"orders": [
|
||||||
|
"DESC"
|
||||||
|
],
|
||||||
|
"createSql": "CREATE INDEX IF NOT EXISTS `index_history_datetime` ON `${TABLE_NAME}` (`datetime` DESC)"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"foreignKeys": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"views": [],
|
||||||
|
"setupQueries": [
|
||||||
|
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
||||||
|
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'ffba56c2f572c25080ce8596e8bb8945')"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,88 @@
|
|||||||
|
{
|
||||||
|
"formatVersion": 1,
|
||||||
|
"database": {
|
||||||
|
"version": 5,
|
||||||
|
"identityHash": "eb813d54b9c44d29f1d7bb198a16d4d1",
|
||||||
|
"entities": [
|
||||||
|
{
|
||||||
|
"tableName": "subscription_cache",
|
||||||
|
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `url` TEXT, `channelUrl` TEXT, `datetime` INTEGER, `serialized` BLOB)",
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"fieldPath": "id",
|
||||||
|
"columnName": "id",
|
||||||
|
"affinity": "INTEGER",
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "url",
|
||||||
|
"columnName": "url",
|
||||||
|
"affinity": "TEXT",
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "channelUrl",
|
||||||
|
"columnName": "channelUrl",
|
||||||
|
"affinity": "TEXT",
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "datetime",
|
||||||
|
"columnName": "datetime",
|
||||||
|
"affinity": "INTEGER",
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "serialized",
|
||||||
|
"columnName": "serialized",
|
||||||
|
"affinity": "BLOB",
|
||||||
|
"notNull": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"primaryKey": {
|
||||||
|
"autoGenerate": true,
|
||||||
|
"columnNames": [
|
||||||
|
"id"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"indices": [
|
||||||
|
{
|
||||||
|
"name": "index_subscription_cache_url",
|
||||||
|
"unique": false,
|
||||||
|
"columnNames": [
|
||||||
|
"url"
|
||||||
|
],
|
||||||
|
"orders": [],
|
||||||
|
"createSql": "CREATE INDEX IF NOT EXISTS `index_subscription_cache_url` ON `${TABLE_NAME}` (`url`)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "index_subscription_cache_channelUrl",
|
||||||
|
"unique": false,
|
||||||
|
"columnNames": [
|
||||||
|
"channelUrl"
|
||||||
|
],
|
||||||
|
"orders": [],
|
||||||
|
"createSql": "CREATE INDEX IF NOT EXISTS `index_subscription_cache_channelUrl` ON `${TABLE_NAME}` (`channelUrl`)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "index_subscription_cache_datetime",
|
||||||
|
"unique": false,
|
||||||
|
"columnNames": [
|
||||||
|
"datetime"
|
||||||
|
],
|
||||||
|
"orders": [
|
||||||
|
"DESC"
|
||||||
|
],
|
||||||
|
"createSql": "CREATE INDEX IF NOT EXISTS `index_subscription_cache_datetime` ON `${TABLE_NAME}` (`datetime` DESC)"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"foreignKeys": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"views": [],
|
||||||
|
"setupQueries": [
|
||||||
|
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
||||||
|
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'eb813d54b9c44d29f1d7bb198a16d4d1')"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
52
app/schemas/com.futo.platformplayer.testing.DBTOs.DB/3.json
Normal file
52
app/schemas/com.futo.platformplayer.testing.DBTOs.DB/3.json
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
{
|
||||||
|
"formatVersion": 1,
|
||||||
|
"database": {
|
||||||
|
"version": 3,
|
||||||
|
"identityHash": "6e3b2d286325c4ea8a7a4c94c290daec",
|
||||||
|
"entities": [
|
||||||
|
{
|
||||||
|
"tableName": "testing",
|
||||||
|
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`someString` TEXT NOT NULL, `someNum` INTEGER NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT, `serialized` BLOB)",
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"fieldPath": "someString",
|
||||||
|
"columnName": "someString",
|
||||||
|
"affinity": "TEXT",
|
||||||
|
"notNull": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "someNum",
|
||||||
|
"columnName": "someNum",
|
||||||
|
"affinity": "INTEGER",
|
||||||
|
"notNull": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "id",
|
||||||
|
"columnName": "id",
|
||||||
|
"affinity": "INTEGER",
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "serialized",
|
||||||
|
"columnName": "serialized",
|
||||||
|
"affinity": "BLOB",
|
||||||
|
"notNull": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"primaryKey": {
|
||||||
|
"autoGenerate": true,
|
||||||
|
"columnNames": [
|
||||||
|
"id"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"indices": [],
|
||||||
|
"foreignKeys": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"views": [],
|
||||||
|
"setupQueries": [
|
||||||
|
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
||||||
|
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '6e3b2d286325c4ea8a7a4c94c290daec')"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
@ -538,6 +538,7 @@ class VideoDetailView : ConstraintLayout {
|
|||||||
if(!_destroyed) {
|
if(!_destroyed) {
|
||||||
updateQueueState();
|
updateQueueState();
|
||||||
StatePlayer.instance.updateMediaSession(null);
|
StatePlayer.instance.updateMediaSession(null);
|
||||||
|
_cast.setLoopVisible(!StatePlayer.instance.hasQueue);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
StatePlayer.instance.onVideoChanging.subscribe(this) {
|
StatePlayer.instance.onVideoChanging.subscribe(this) {
|
||||||
|
@ -57,12 +57,16 @@ class StatePlayer {
|
|||||||
var queueShuffle: Boolean = false
|
var queueShuffle: Boolean = false
|
||||||
private set;
|
private set;
|
||||||
|
|
||||||
val hasQueue: Boolean get() {
|
val queueSize: Int get() {
|
||||||
synchronized(_queue) {
|
synchronized(_queue) {
|
||||||
return _queue.isNotEmpty()
|
return _queue.size
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val hasQueue: Boolean get() {
|
||||||
|
return queueSize > 1
|
||||||
|
}
|
||||||
|
|
||||||
val queueName: String get() = _queueName ?: _queueType;
|
val queueName: String get() = _queueName ?: _queueType;
|
||||||
|
|
||||||
//Events
|
//Events
|
||||||
|
@ -106,6 +106,10 @@ class CastView : ConstraintLayout {
|
|||||||
_gestureControlView.stopAllGestures();
|
_gestureControlView.stopAllGestures();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun setLoopVisible(visible: Boolean) {
|
||||||
|
_buttonLoop.visibility = if (visible) View.VISIBLE else View.GONE;
|
||||||
|
}
|
||||||
|
|
||||||
fun setIsPlaying(isPlaying: Boolean) {
|
fun setIsPlaying(isPlaying: Boolean) {
|
||||||
_updateTimeJob?.cancel();
|
_updateTimeJob?.cancel();
|
||||||
|
|
||||||
|
@ -22,7 +22,10 @@ class QueueEditorOverlay : LinearLayout {
|
|||||||
|
|
||||||
_topbar.onClose.subscribe(this, onClose::emit);
|
_topbar.onClose.subscribe(this, onClose::emit);
|
||||||
_editor.onVideoOrderChanged.subscribe { StatePlayer.instance.setQueueWithExisting(it) }
|
_editor.onVideoOrderChanged.subscribe { StatePlayer.instance.setQueueWithExisting(it) }
|
||||||
_editor.onVideoRemoved.subscribe { v -> StatePlayer.instance.removeFromQueue(v) }
|
_editor.onVideoRemoved.subscribe { v ->
|
||||||
|
StatePlayer.instance.removeFromQueue(v);
|
||||||
|
_topbar.setInfo(context.getString(R.string.queue), "${StatePlayer.instance.queueSize} " + context.getString(R.string.videos));
|
||||||
|
}
|
||||||
_editor.onVideoClicked.subscribe { v -> StatePlayer.instance.setQueuePosition(v) }
|
_editor.onVideoClicked.subscribe { v -> StatePlayer.instance.setQueuePosition(v) }
|
||||||
|
|
||||||
_topbar.setInfo(context.getString(R.string.queue), "");
|
_topbar.setInfo(context.getString(R.string.queue), "");
|
||||||
|
@ -305,6 +305,7 @@ class FutoVideoPlayer : FutoVideoPlayerBase {
|
|||||||
|
|
||||||
StatePlayer.instance.onQueueChanged.subscribe(this) {
|
StatePlayer.instance.onQueueChanged.subscribe(this) {
|
||||||
CoroutineScope(Dispatchers.Main).launch(Dispatchers.Main) {
|
CoroutineScope(Dispatchers.Main).launch(Dispatchers.Main) {
|
||||||
|
setLoopVisible(!StatePlayer.instance.hasQueue)
|
||||||
updateNextPrevious();
|
updateNextPrevious();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -361,6 +362,11 @@ class FutoVideoPlayer : FutoVideoPlayerBase {
|
|||||||
_currentChapterLoopActive = false;
|
_currentChapterLoopActive = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun setLoopVisible(visible: Boolean) {
|
||||||
|
_control_loop.visibility = if (visible) View.VISIBLE else View.GONE;
|
||||||
|
_control_loop_fullscreen.visibility = if (visible) View.VISIBLE else View.GONE;
|
||||||
|
}
|
||||||
|
|
||||||
fun stopAllGestures() {
|
fun stopAllGestures() {
|
||||||
gestureControl.stopAllGestures();
|
gestureControl.stopAllGestures();
|
||||||
}
|
}
|
||||||
@ -391,11 +397,11 @@ class FutoVideoPlayer : FutoVideoPlayerBase {
|
|||||||
fun setArtwork(drawable: Drawable?) {
|
fun setArtwork(drawable: Drawable?) {
|
||||||
if (drawable != null) {
|
if (drawable != null) {
|
||||||
_videoView.defaultArtwork = drawable;
|
_videoView.defaultArtwork = drawable;
|
||||||
_videoView.useArtwork = true;
|
_videoView.artworkDisplayMode = StyledPlayerView.ARTWORK_DISPLAY_MODE_FILL;
|
||||||
fitOrFill(isFullScreen);
|
fitOrFill(isFullScreen);
|
||||||
} else {
|
} else {
|
||||||
_videoView.defaultArtwork = null;
|
_videoView.defaultArtwork = null;
|
||||||
_videoView.useArtwork = false;
|
_videoView.artworkDisplayMode = StyledPlayerView.ARTWORK_DISPLAY_MODE_OFF;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user