diff --git a/app/src/main/java/jp/juggler/subwaytooter/Column.kt b/app/src/main/java/jp/juggler/subwaytooter/Column.kt index 13efcb82..b68bb4ca 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/Column.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/Column.kt @@ -590,6 +590,7 @@ class Column( } override fun onTimelineItem(item: TimelineItem, channelId: String?, stream: JsonArray?) { + if(StreamManager.traceDelivery) log.v("${access_info.acct} onTimelineItem") if (!canHandleStreamingMessage()) return when (item) { @@ -2780,13 +2781,13 @@ class Column( fun canStartStreaming() = when { // 未初期化なら何もしない !bFirstInitialized -> { - log.v("canStartStreaming: column is not initialized.") + if(StreamManager.traceDelivery) log.v("canStartStreaming: column is not initialized.") false } // 初期ロード中なら何もしない bInitialLoading -> { - log.v("canStartStreaming: is in initial loading.") + if(StreamManager.traceDelivery) log.v("canStartStreaming: is in initial loading.") false } diff --git a/app/src/main/java/jp/juggler/subwaytooter/streaming/StreamConnection.kt b/app/src/main/java/jp/juggler/subwaytooter/streaming/StreamConnection.kt index 4e9f3104..2068ba37 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/streaming/StreamConnection.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/streaming/StreamConnection.kt @@ -81,6 +81,7 @@ class StreamConnection( item:TimelineItem?=null, block: (callback: StreamCallback) -> Unit ) { + if(StreamManager.traceDelivery) log.v("$name eachCallback spec=${spec?.name}") if (spec != null) { eachCallbackForSpec(spec,channelId,stream,item,block) }else { @@ -103,6 +104,7 @@ class StreamConnection( private fun fireTimelineItem(item: TimelineItem?, channelId: String? = null,stream:JsonArray?=null) { item?:return + if(StreamManager.traceDelivery) log.v("$name fireTimelineItem") eachCallback(channelId,stream,item=item) { it.onTimelineItem(item, channelId,stream) } } @@ -184,7 +186,7 @@ class StreamConnection( fireTimelineItem(acctGroup.parser.notification(body), channelId) } - else -> log.v("$name ignore streaming event $type") + else -> log.w("$name ignore streaming event $type") } } @@ -195,7 +197,7 @@ class StreamConnection( when (val event = obj.string("event")) { null, "" -> - log.d("$name onMessage: missing event parameter") + log.d("$name handleMastodonMessage: missing event parameter") "filters_changed" -> Column.onFiltersChanged(manager.context, acctGroup.account) @@ -254,7 +256,7 @@ class StreamConnection( override fun onMessage(webSocket: WebSocket, text: String) { manager.enqueue { - log.v("$name WebSocket onMessage.") + if(StreamManager.traceDelivery) log.v("$name WebSocket onMessage.") try { val obj = text.decodeJsonObject() when { @@ -263,7 +265,7 @@ class StreamConnection( } } catch (ex: Throwable) { log.trace(ex) - log.e("data=$text") + log.e("$name onMessage error. data=$text") } } } diff --git a/app/src/main/java/jp/juggler/subwaytooter/streaming/StreamGroup.kt b/app/src/main/java/jp/juggler/subwaytooter/streaming/StreamGroup.kt index e3ebdc76..cd2f6c6e 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/streaming/StreamGroup.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/streaming/StreamGroup.kt @@ -23,15 +23,21 @@ class StreamGroup(val spec: StreamSpec) { fun eachCallback(channelId: String?, stream: JsonArray?, item: TimelineItem?, block: (callback: StreamCallback) -> Unit) { // skip if channel id is provided and not match - if (channelId?.isNotEmpty() == true && channelId != spec.channelId) return + if (channelId?.isNotEmpty() == true && channelId != spec.channelId){ + if(StreamManager.traceDelivery) log.v("${spec.name} channelId not match.") + return + } - val strStream = stream?.joinToString { "," } + val strStream = stream?.joinToString( "," ) destinations.values.forEach { dst -> try { if (strStream != null && item != null) { val column = dst.refColumn.get() ?: return@forEach - if (!dst.spec.streamFilter(column, strStream, item)) return@forEach + if (!dst.spec.streamFilter(column, strStream, item)){ + if(StreamManager.traceDelivery) log.v("${spec.name} streamFilter not match. strStream=$strStream") + return@forEach + } } dst.refCallback.get()?.let { block(it) } } catch (ex: Throwable) { diff --git a/app/src/main/java/jp/juggler/subwaytooter/streaming/StreamManager.kt b/app/src/main/java/jp/juggler/subwaytooter/streaming/StreamManager.kt index d91a0b7b..42631b08 100644 --- a/app/src/main/java/jp/juggler/subwaytooter/streaming/StreamManager.kt +++ b/app/src/main/java/jp/juggler/subwaytooter/streaming/StreamManager.kt @@ -23,6 +23,8 @@ class StreamManager(val appState: AppState) { companion object { private val log = LogCategory("StreamManager") + val traceDelivery = "false".toBoolean() + // 画面ONの間は定期的に状況を更新する const val updateInterval = 5000L