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) { if (popup.menu is MenuBuilder) {
val menuBuilder = popup.menu as 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 { menuBuilder.findItem(R.id.tabToggleStreaming).apply {
isVisible = true isVisible = true
isChecked = tabs[i].enableStreaming 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) 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() }) 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) 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") 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 PollVoteEvent(val statusId: String, val poll: Poll) : Dispatchable
data class DomainMuteEvent(val instance: String): Dispatchable data class DomainMuteEvent(val instance: String): Dispatchable
data class QuickReplyEvent(val status: Status) : 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 data class DrawerFooterClickedEvent(val placeholder: Boolean) : Dispatchable

View File

@ -349,6 +349,10 @@ public class TimelineFragment extends SFragment implements
endpoint += "public:local"; endpoint += "public:local";
break; break;
} }
case LIST: {
endpoint += ("list" + "&" + "list" + "=" + id);
break;
}
default: { default: {
return; return;
} }
@ -362,7 +366,7 @@ public class TimelineFragment extends SFragment implements
OkHttpClient client = new OkHttpClient.Builder().build(); 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) { private void handleStreamUpdateEvent(StreamUpdateEvent event) {
if (event.getTargetKind() != kind) { if (event.getTargetKind() != kind || (event.getTargetIdentifier() != null && !event.getTargetIdentifier().equals(id))) {
return; return;
} }

View File

@ -18,13 +18,15 @@ import okhttp3.WebSocket
import okhttp3.WebSocketListener import okhttp3.WebSocketListener
class TimelineStreamingListener(private val eventHub: EventHub, 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 gson = buildGson()
private val target = if (identifier == null) { kind.name } else { kind.name + ":" + identifier }
private var isFirstStatus = true private var isFirstStatus = true
override fun onOpen(webSocket: WebSocket, response: Response) { 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) { override fun onMessage(webSocket: WebSocket, text: String) {
@ -33,7 +35,7 @@ class TimelineStreamingListener(private val eventHub: EventHub,
when (event.event) { when (event.event) {
StreamEvent.EventType.UPDATE -> { StreamEvent.EventType.UPDATE -> {
val status = gson.fromJson(payload, Status::class.java) val status = gson.fromJson(payload, Status::class.java)
eventHub.dispatch(StreamUpdateEvent(status, kind, isFirstStatus)) eventHub.dispatch(StreamUpdateEvent(status, kind, identifier, isFirstStatus))
if (isFirstStatus) { if (isFirstStatus) {
isFirstStatus = false isFirstStatus = false
} }
@ -45,7 +47,7 @@ class TimelineStreamingListener(private val eventHub: EventHub,
} }
override fun onClosed(webSocket: WebSocket, code: Int, reason: String) { 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 { companion object {