Add lists to streaming target
This commit is contained in:
parent
dcb51934ac
commit
f81eb41c86
|
@ -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
|
||||
|
|
|
@ -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")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue