pantasystem / Milktea

Misskey, MastodonのAndroidクライアント「Milktea」のソースコード
GNU General Public License v3.0
247 stars 22 forks source link

CWで注釈を空欄にしてノートするとエラーが発生する #1992

Closed sanao1006 closed 7 months ago

sanao1006 commented 7 months ago

不具合の概要

以前までは「内容を隠す」で注釈を空にしたままでも問題なくノートできていたが気づいたらできなくなっていた。 注釈が空のままノートするとエラーが発生する。

再現方法

pantasystem commented 7 months ago

2023.11.1からcwを空欄にすることができなくなったような気がしますね バリデーション処理にバージョンのチェックおよびそれに応じたcwの内容のバリデーションを追加する必要性がありそうです

pantasystem commented 7 months ago

cwが有効かつ空欄の場合は何かしらの特殊文字をデフォルトで入れてしまうという方法もありますが、 cwの空欄が許可されなくなった理由を考えるとそれは微妙な気がします

sanao1006 commented 7 months ago

バージョンもチェックも必要なのですねなるほど、、、

バリデーション処理を書き加える関数はこの関数であってますかね? https://github.com/pantasystem/Milktea/blob/e8a85f29da67c05f2758a11cbd562954dfa997c8/modules/features/note/src/main/java/net/pantasystem/milktea/note/editor/viewmodel/NoteEditorUiState.kt#L61

ただ空かどうか判定するだけなら

if (this.formState.cw.isNullOrEmpty()) { return false }

これを書き加えればいけそうだとおもったのですが、バージョンのチェック方法が分からない状態です。

sanao1006 commented 7 months ago

https://github.com/kanarikanaru/backspacekey/commit/ffa20911ed8cd91e066ae66d617aa71786c474ec

空チェックはminLengthを使う方法でもよいかもしれないですね

pantasystem commented 7 months ago

バージョンのチェック方法はcheckValidateにバージョンやソフトウェアの種別の情報を含むデータを InstanceInfoService経由で取得して引数に渡すのが良いと思いました。 ただioとmisskey-dev/misskeyではバージョニング方式が異なるのが注意点ですね・・・

pantasystem commented 7 months ago

CWが空を許容するかをチェックするためのフィールドを追加しました。 当Issueですがアサインされますか?それとも私の方で修正した方がよろしいでしょうか? https://github.com/pantasystem/Milktea/blob/ff0c613a41655a24fe0752324fcb01b6087d1ebb/modules/model/src/main/java/net/pantasystem/milktea/model/instance/InstanceInfoType.kt#L112-L112

sanao1006 commented 7 months ago

ぜひ私に修正させてください。アサインの方、よろしくお願いします!

sanao1006 commented 7 months ago

その前にひとつ質問があります

misskeyのバージョンチェック処理が必要だと思うのですが、バージョン11.1(でしたっけ?)以上であるかどうかの判定って Version を使えばいいんでしょうか?

pantasystem commented 7 months ago

バージョンの判定にはおっしゃるとおりそのバージョンクラスを使用すればよいです。 ただ今回はあらかじめisCwAllowBlankを作成したので、isCwAllowBlankを使用すれば実装できると思います。