From 9cf81ad20a44eef066971e4ce0bd16204de531fe Mon Sep 17 00:00:00 2001 From: Koen Date: Thu, 19 Oct 2023 16:00:36 +0200 Subject: [PATCH 1/4] Fixed build error. --- .../main/java/com/futo/platformplayer/states/StateTelemetry.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/com/futo/platformplayer/states/StateTelemetry.kt b/app/src/main/java/com/futo/platformplayer/states/StateTelemetry.kt index 61e07910..67579374 100644 --- a/app/src/main/java/com/futo/platformplayer/states/StateTelemetry.kt +++ b/app/src/main/java/com/futo/platformplayer/states/StateTelemetry.kt @@ -37,7 +37,6 @@ class StateTelemetry { BuildConfig.BUILD_TYPE, BuildConfig.DEBUG, BuildConfig.IS_UNSTABLE_BUILD, - Instant.now().epochSecond, Build.BRAND, Build.MANUFACTURER, Build.MODEL From f433cb12807169a6ba216528d2a738e09bff870e Mon Sep 17 00:00:00 2001 From: Koen Date: Thu, 19 Oct 2023 18:55:59 +0200 Subject: [PATCH 2/4] Fade mostly disliked comments. --- .../mainactivity/main/PostDetailFragment.kt | 16 +++++------ .../mainactivity/main/VideoDetailView.kt | 16 +++++------ .../platformplayer/states/StateTelemetry.kt | 2 +- .../views/adapters/CommentViewHolder.kt | 28 +++++++++++++------ .../views/pills/PillRatingLikesDislikes.kt | 15 ++++++++-- 5 files changed, 49 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/PostDetailFragment.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/PostDetailFragment.kt index eede58fe..d7e6e89f 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/PostDetailFragment.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/PostDetailFragment.kt @@ -346,24 +346,24 @@ class PostDetailFragment : MainFragment { _rating.visibility = VISIBLE; _rating.setRating(RatingLikeDislikes(likes, dislikes), hasLiked, hasDisliked); - _rating.onLikeDislikeUpdated.subscribe(this) { processHandle, newHasLiked, newHasDisliked -> - if (newHasLiked) { - processHandle.opinion(ref, Opinion.like); - } else if (newHasDisliked) { - processHandle.opinion(ref, Opinion.dislike); + _rating.onLikeDislikeUpdated.subscribe(this) { args -> + if (args.hasLiked) { + args.processHandle.opinion(ref, Opinion.like); + } else if (args.hasDisliked) { + args.processHandle.opinion(ref, Opinion.dislike); } else { - processHandle.opinion(ref, Opinion.neutral); + args.processHandle.opinion(ref, Opinion.neutral); } StateApp.instance.scopeOrNull?.launch(Dispatchers.IO) { try { - processHandle.fullyBackfillServers(); + args.processHandle.fullyBackfillServers(); } catch (e: Throwable) { Logger.e(TAG, "Failed to backfill servers", e) } } - StatePolycentric.instance.updateLikeMap(ref, newHasLiked, newHasDisliked) + StatePolycentric.instance.updateLikeMap(ref, args.hasLiked, args.hasDisliked) }; } } catch (e: Throwable) { diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt index 20d3da69..fccc88ec 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt @@ -1042,24 +1042,24 @@ class VideoDetailView : ConstraintLayout { withContext(Dispatchers.Main) { _rating.visibility = View.VISIBLE; _rating.setRating(RatingLikeDislikes(likes, dislikes), hasLiked, hasDisliked); - _rating.onLikeDislikeUpdated.subscribe(this) { processHandle, newHasLiked, newHasDisliked -> - if (newHasLiked) { - processHandle.opinion(ref, Opinion.like); - } else if (newHasDisliked) { - processHandle.opinion(ref, Opinion.dislike); + _rating.onLikeDislikeUpdated.subscribe(this) { args -> + if (args.hasLiked) { + args.processHandle.opinion(ref, Opinion.like); + } else if (args.hasDisliked) { + args.processHandle.opinion(ref, Opinion.dislike); } else { - processHandle.opinion(ref, Opinion.neutral); + args.processHandle.opinion(ref, Opinion.neutral); } fragment.lifecycleScope.launch(Dispatchers.IO) { try { - processHandle.fullyBackfillServers(); + args.processHandle.fullyBackfillServers(); } catch (e: Throwable) { Logger.e(TAG, "Failed to backfill servers", e) } } - StatePolycentric.instance.updateLikeMap(ref, newHasLiked, newHasDisliked) + StatePolycentric.instance.updateLikeMap(ref, args.hasLiked, args.hasDisliked) }; } } catch (e: Throwable) { diff --git a/app/src/main/java/com/futo/platformplayer/states/StateTelemetry.kt b/app/src/main/java/com/futo/platformplayer/states/StateTelemetry.kt index 67579374..3326c4f4 100644 --- a/app/src/main/java/com/futo/platformplayer/states/StateTelemetry.kt +++ b/app/src/main/java/com/futo/platformplayer/states/StateTelemetry.kt @@ -43,7 +43,7 @@ class StateTelemetry { ); val headers = hashMapOf( - "Content-Type" to "text/plain" + "Content-Type" to "application/json" ); val json = Json.encodeToString(telemetry); diff --git a/app/src/main/java/com/futo/platformplayer/views/adapters/CommentViewHolder.kt b/app/src/main/java/com/futo/platformplayer/views/adapters/CommentViewHolder.kt index d6ddb531..3cb82ca9 100644 --- a/app/src/main/java/com/futo/platformplayer/views/adapters/CommentViewHolder.kt +++ b/app/src/main/java/com/futo/platformplayer/views/adapters/CommentViewHolder.kt @@ -6,6 +6,7 @@ import android.view.ViewGroup import android.widget.ImageView import android.widget.LinearLayout import android.widget.TextView +import androidx.constraintlayout.widget.ConstraintLayout import androidx.recyclerview.widget.RecyclerView.ViewHolder import com.futo.platformplayer.* import com.futo.platformplayer.api.media.models.comments.IPlatformComment @@ -35,12 +36,14 @@ class CommentViewHolder : ViewHolder { private val _buttonReplies: PillButton; private val _layoutRating: LinearLayout; private val _pillRatingLikesDislikes: PillRatingLikesDislikes; + private val _layoutComment: ConstraintLayout; var onClick = Event1(); var comment: IPlatformComment? = null private set; constructor(viewGroup: ViewGroup) : super(LayoutInflater.from(viewGroup.context).inflate(R.layout.list_comment, viewGroup, false)) { + _layoutComment = itemView.findViewById(R.id.layout_comment); _creatorThumbnail = itemView.findViewById(R.id.image_thumbnail); _textAuthor = itemView.findViewById(R.id.text_author); _textMetadata = itemView.findViewById(R.id.text_metadata); @@ -53,29 +56,31 @@ class CommentViewHolder : ViewHolder { _layoutRating = itemView.findViewById(R.id.layout_rating); _pillRatingLikesDislikes = itemView.findViewById(R.id.rating); - _pillRatingLikesDislikes.onLikeDislikeUpdated.subscribe { processHandle, hasLiked, hasDisliked -> + _pillRatingLikesDislikes.onLikeDislikeUpdated.subscribe { args -> val c = comment if (c !is PolycentricPlatformComment) { throw Exception("Not implemented for non polycentric comments") } - if (hasLiked) { - processHandle.opinion(c.reference, Opinion.like); - } else if (hasDisliked) { - processHandle.opinion(c.reference, Opinion.dislike); + if (args.hasLiked) { + args.processHandle.opinion(c.reference, Opinion.like); + } else if (args.hasDisliked) { + args.processHandle.opinion(c.reference, Opinion.dislike); } else { - processHandle.opinion(c.reference, Opinion.neutral); + args.processHandle.opinion(c.reference, Opinion.neutral); } + _layoutComment.alpha = if (args.dislikes > 2 && args.dislikes / (args.likes + args.dislikes) >= 0.7) 0.5f else 1.0f; + StateApp.instance.scopeOrNull?.launch(Dispatchers.IO) { try { - processHandle.fullyBackfillServers(); + args.processHandle.fullyBackfillServers(); } catch (e: Throwable) { Logger.e(TAG, "Failed to backfill servers.", e) } } - StatePolycentric.instance.updateLikeMap(c.reference, hasLiked, hasDisliked) + StatePolycentric.instance.updateLikeMap(c.reference, args.hasLiked, args.hasDisliked) }; _buttonReplies.onClick.subscribe { @@ -98,6 +103,13 @@ class CommentViewHolder : ViewHolder { _textMetadata.visibility = View.GONE; } + val rating = comment.rating; + if (rating is RatingLikeDislikes) { + _layoutComment.alpha = if (rating.dislikes > 0 && rating.dislikes / (rating.likes + rating.dislikes) >= 0.7) 0.5f else 1.0f; + } else { + _layoutComment.alpha = 1.0f; + } + _textBody.text = comment.message.fixHtmlLinks(); if (readonly) { diff --git a/app/src/main/java/com/futo/platformplayer/views/pills/PillRatingLikesDislikes.kt b/app/src/main/java/com/futo/platformplayer/views/pills/PillRatingLikesDislikes.kt index e0ea140a..e4fa2d40 100644 --- a/app/src/main/java/com/futo/platformplayer/views/pills/PillRatingLikesDislikes.kt +++ b/app/src/main/java/com/futo/platformplayer/views/pills/PillRatingLikesDislikes.kt @@ -12,11 +12,20 @@ import com.futo.platformplayer.R import com.futo.platformplayer.api.media.models.ratings.IRating import com.futo.platformplayer.api.media.models.ratings.RatingLikeDislikes import com.futo.platformplayer.api.media.models.ratings.RatingLikes +import com.futo.platformplayer.constructs.Event1 import com.futo.platformplayer.constructs.Event3 import com.futo.platformplayer.states.StatePolycentric import com.futo.platformplayer.toHumanNumber import com.futo.polycentric.core.ProcessHandle +data class OnLikeDislikeUpdatedArgs( + val processHandle: ProcessHandle, + val likes: Long, + val hasLiked: Boolean, + val dislikes: Long, + val hasDisliked: Boolean, +); + class PillRatingLikesDislikes : LinearLayout { private val _textLikes: TextView; private val _textDislikes: TextView; @@ -29,7 +38,7 @@ class PillRatingLikesDislikes : LinearLayout { private var _dislikes = 0L; private var _hasDisliked = false; - val onLikeDislikeUpdated = Event3(); + val onLikeDislikeUpdated = Event1(); constructor(context : Context, attrs : AttributeSet?) : super(context, attrs) { LayoutInflater.from(context).inflate(R.layout.rating_likesdislikes, this, true); @@ -76,7 +85,7 @@ class PillRatingLikesDislikes : LinearLayout { _textLikes.text = _likes.toHumanNumber(); updateColors(); - onLikeDislikeUpdated.emit(processHandle, _hasLiked, _hasDisliked); + onLikeDislikeUpdated.emit(OnLikeDislikeUpdatedArgs(processHandle, _likes, _hasLiked, _dislikes, _hasDisliked)); } fun dislike(processHandle: ProcessHandle) { @@ -96,7 +105,7 @@ class PillRatingLikesDislikes : LinearLayout { _textDislikes.text = _dislikes.toHumanNumber(); updateColors(); - onLikeDislikeUpdated.emit(processHandle, _hasLiked, _hasDisliked); + onLikeDislikeUpdated.emit(OnLikeDislikeUpdatedArgs(processHandle, _likes, _hasLiked, _dislikes, _hasDisliked)); } private fun updateColors() { From bbcc424393aec2ccb86daeb8809d0c49c1c52d30 Mon Sep 17 00:00:00 2001 From: Koen Date: Thu, 19 Oct 2023 19:09:33 +0200 Subject: [PATCH 3/4] Added missing throwIfCaptcha. --- app/src/stable/assets/sources/youtube | 2 +- app/src/unstable/assets/sources/youtube | 2 +- dep/polycentricandroid | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/stable/assets/sources/youtube b/app/src/stable/assets/sources/youtube index 1c34bb01..eff873ed 160000 --- a/app/src/stable/assets/sources/youtube +++ b/app/src/stable/assets/sources/youtube @@ -1 +1 @@ -Subproject commit 1c34bb016378805ca24883ed55573dcd862309cf +Subproject commit eff873edf344663f7dd2741ea9f1b8eca17afa24 diff --git a/app/src/unstable/assets/sources/youtube b/app/src/unstable/assets/sources/youtube index eba1bb5d..eff873ed 160000 --- a/app/src/unstable/assets/sources/youtube +++ b/app/src/unstable/assets/sources/youtube @@ -1 +1 @@ -Subproject commit eba1bb5d2ccf438a2f025a204d2d443e4b76b144 +Subproject commit eff873edf344663f7dd2741ea9f1b8eca17afa24 diff --git a/dep/polycentricandroid b/dep/polycentricandroid index 636d17f0..1079dd39 160000 --- a/dep/polycentricandroid +++ b/dep/polycentricandroid @@ -1 +1 @@ -Subproject commit 636d17f0adb112c4ad139b71aac2eef652e04036 +Subproject commit 1079dd394f71921a968509bc16292ac1e80e3f9c From f9b772b7290100ea5b7c568afc23575dc16aadb6 Mon Sep 17 00:00:00 2001 From: Koen Date: Thu, 19 Oct 2023 19:25:08 +0200 Subject: [PATCH 4/4] Handle captcha exception on PlatformClientPool --- .../com/futo/platformplayer/api/media/PlatformClientPool.kt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/src/main/java/com/futo/platformplayer/api/media/PlatformClientPool.kt b/app/src/main/java/com/futo/platformplayer/api/media/PlatformClientPool.kt index 5961082b..de2b9399 100644 --- a/app/src/main/java/com/futo/platformplayer/api/media/PlatformClientPool.kt +++ b/app/src/main/java/com/futo/platformplayer/api/media/PlatformClientPool.kt @@ -6,6 +6,7 @@ import com.futo.platformplayer.api.media.platforms.js.JSClient import com.futo.platformplayer.constructs.Event1 import com.futo.platformplayer.constructs.Event2 import com.futo.platformplayer.logging.Logger +import com.futo.platformplayer.states.StateApp class PlatformClientPool { private val _parent: JSClient; @@ -51,6 +52,11 @@ class PlatformClientPool { if(reserved == null && _pool.size < capacity) { Logger.i(TAG, "Started additional [${_parent.name}] client in pool [${_poolName}] (${_pool.size + 1}/${capacity})"); reserved = _parent.getCopy(); + + reserved?.onCaptchaException?.subscribe { client, ex -> + StateApp.instance.handleCaptchaException(client, ex); + }; + reserved?.initialize(); _pool[reserved!!] = _poolCounter; }