Add lists to streaming target

This commit is contained in:
kyori19 2020-05-23 13:46:09 +09:00
parent dcb51934ac
commit f81eb41c86
5 changed files with 15 additions and 9 deletions

View File

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

View File

@ -50,7 +50,7 @@ fun createTabDataFromId(id: String, arguments: List<String> = 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")
}
}

View File

@ -22,5 +22,5 @@ data class MainTabsChangedEvent(val newTabs: List<TabData>) : 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

View File

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

View File

@ -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 {