From f81eb41c861b6020ea3f757f4da7545b43ec22e1 Mon Sep 17 00:00:00 2001 From: kyori19 Date: Sat, 23 May 2020 13:46:09 +0900 Subject: [PATCH] Add lists to streaming target --- .../main/java/com/keylesspalace/tusky/MainActivity.kt | 2 +- app/src/main/java/com/keylesspalace/tusky/TabData.kt | 2 +- .../java/com/keylesspalace/tusky/appstore/Events.kt | 2 +- .../keylesspalace/tusky/fragment/TimelineFragment.java | 8 ++++++-- .../java/net/accelf/yuito/TimelineStreamingListener.kt | 10 ++++++---- 5 files changed, 15 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/MainActivity.kt b/app/src/main/java/com/keylesspalace/tusky/MainActivity.kt index b6743c482..356e44665 100644 --- a/app/src/main/java/com/keylesspalace/tusky/MainActivity.kt +++ b/app/src/main/java/com/keylesspalace/tusky/MainActivity.kt @@ -553,7 +553,7 @@ class MainActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidInje if (popup.menu is MenuBuilder) { val menuBuilder = popup.menu as MenuBuilder - if (tabs[i].id in arrayOf(HOME, LOCAL, FEDERATED)) { + if (tabs[i].id in arrayOf(HOME, LOCAL, FEDERATED, LIST)) { menuBuilder.findItem(R.id.tabToggleStreaming).apply { isVisible = true isChecked = tabs[i].enableStreaming diff --git a/app/src/main/java/com/keylesspalace/tusky/TabData.kt b/app/src/main/java/com/keylesspalace/tusky/TabData.kt index 37f9f8fc9..e6a2a2088 100644 --- a/app/src/main/java/com/keylesspalace/tusky/TabData.kt +++ b/app/src/main/java/com/keylesspalace/tusky/TabData.kt @@ -50,7 +50,7 @@ fun createTabDataFromId(id: String, arguments: List = emptyList()): TabD FEDERATED -> TabData(FEDERATED, R.string.title_public_federated, R.drawable.ic_public_24dp, { TimelineFragment.newInstance(TimelineFragment.Kind.PUBLIC_FEDERATED, enableStreaming) }, enableStreaming = enableStreaming) DIRECT -> TabData(DIRECT, R.string.title_direct_messages, R.drawable.ic_reblog_direct_24dp, { ConversationsFragment.newInstance() }) HASHTAG -> TabData(HASHTAG, R.string.hashtags, R.drawable.ic_hashtag, { args -> TimelineFragment.newHashtagInstance(args) }, arguments) - LIST -> TabData(LIST, R.string.list, R.drawable.ic_list, { args -> TimelineFragment.newInstance(TimelineFragment.Kind.LIST, args.getOrNull(0).orEmpty()) }, arguments) + LIST -> TabData(LIST, R.string.list, R.drawable.ic_list, { args -> TimelineFragment.newInstance(TimelineFragment.Kind.LIST, args.getOrNull(0).orEmpty(), true, enableStreaming) }, arguments, enableStreaming) else -> throw IllegalArgumentException("unknown tab type") } } diff --git a/app/src/main/java/com/keylesspalace/tusky/appstore/Events.kt b/app/src/main/java/com/keylesspalace/tusky/appstore/Events.kt index ab64adb81..7be6c7deb 100644 --- a/app/src/main/java/com/keylesspalace/tusky/appstore/Events.kt +++ b/app/src/main/java/com/keylesspalace/tusky/appstore/Events.kt @@ -22,5 +22,5 @@ data class MainTabsChangedEvent(val newTabs: List) : Dispatchable data class PollVoteEvent(val statusId: String, val poll: Poll) : Dispatchable data class DomainMuteEvent(val instance: String): Dispatchable data class QuickReplyEvent(val status: Status) : Dispatchable -data class StreamUpdateEvent(val status: Status, val targetKind: TimelineFragment.Kind, val first: Boolean) : Dispatchable +data class StreamUpdateEvent(val status: Status, val targetKind: TimelineFragment.Kind, val targetIdentifier: String?, val first: Boolean) : Dispatchable data class DrawerFooterClickedEvent(val placeholder: Boolean) : Dispatchable \ No newline at end of file diff --git a/app/src/main/java/com/keylesspalace/tusky/fragment/TimelineFragment.java b/app/src/main/java/com/keylesspalace/tusky/fragment/TimelineFragment.java index 3cc25ed44..aa5eccbe0 100644 --- a/app/src/main/java/com/keylesspalace/tusky/fragment/TimelineFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/fragment/TimelineFragment.java @@ -349,6 +349,10 @@ public class TimelineFragment extends SFragment implements endpoint += "public:local"; break; } + case LIST: { + endpoint += ("list" + "&" + "list" + "=" + id); + break; + } default: { return; } @@ -362,7 +366,7 @@ public class TimelineFragment extends SFragment implements OkHttpClient client = new OkHttpClient.Builder().build(); - webSocket = client.newWebSocket(request, new TimelineStreamingListener(eventHub, kind)); + webSocket = client.newWebSocket(request, new TimelineStreamingListener(eventHub, kind, id)); } } @@ -1542,7 +1546,7 @@ public class TimelineFragment extends SFragment implements } private void handleStreamUpdateEvent(StreamUpdateEvent event) { - if (event.getTargetKind() != kind) { + if (event.getTargetKind() != kind || (event.getTargetIdentifier() != null && !event.getTargetIdentifier().equals(id))) { return; } diff --git a/app/src/main/java/net/accelf/yuito/TimelineStreamingListener.kt b/app/src/main/java/net/accelf/yuito/TimelineStreamingListener.kt index 41f88441c..3482185cc 100644 --- a/app/src/main/java/net/accelf/yuito/TimelineStreamingListener.kt +++ b/app/src/main/java/net/accelf/yuito/TimelineStreamingListener.kt @@ -18,13 +18,15 @@ import okhttp3.WebSocket import okhttp3.WebSocketListener class TimelineStreamingListener(private val eventHub: EventHub, - private val kind: TimelineFragment.Kind) : WebSocketListener() { + private val kind: TimelineFragment.Kind, + private val identifier: String? = null) : WebSocketListener() { private val gson = buildGson() + private val target = if (identifier == null) { kind.name } else { kind.name + ":" + identifier } private var isFirstStatus = true override fun onOpen(webSocket: WebSocket, response: Response) { - Log.d(TAG, "Stream connected to: " + kind.name) + Log.d(TAG, "Stream connected to: $target") } override fun onMessage(webSocket: WebSocket, text: String) { @@ -33,7 +35,7 @@ class TimelineStreamingListener(private val eventHub: EventHub, when (event.event) { StreamEvent.EventType.UPDATE -> { val status = gson.fromJson(payload, Status::class.java) - eventHub.dispatch(StreamUpdateEvent(status, kind, isFirstStatus)) + eventHub.dispatch(StreamUpdateEvent(status, kind, identifier, isFirstStatus)) if (isFirstStatus) { isFirstStatus = false } @@ -45,7 +47,7 @@ class TimelineStreamingListener(private val eventHub: EventHub, } override fun onClosed(webSocket: WebSocket, code: Int, reason: String) { - Log.d(TAG, "Stream closed for: " + kind.name) + Log.d(TAG, "Stream closed for: $target") } companion object {