Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UriConverterで前後の余分な空白やタブを除去してからUriを得る #56

Merged

Conversation

darlington95
Copy link
Contributor

MetaResponseをサーバからのレスポンスで構成する際に、adsのimageUrlの先頭にタブ文字が入っているサーバがあり、接続時に例外が発生しましたので、trimでタブ文字を除去する対応を加えたものです。
ええ、このケースは、サーバ側の問題だと思います。
クライアント側で処置することが不適当と感じたなら、拒否していただいて良いと思います。

問題発見時の記録

@poppingmoon
Copy link
Contributor

ファイル名が .g.dart で終わるファイルは dart run build_runner build というコマンドによって生成 (generate) されるものなので編集するべきではありません
次にコマンドが実行されたときには元の状態に戻ってしまいます

この問題に対応する方法は次のようなものが考えられます

MetaResponseads の型は List<MetaAd> となっていますが、 MetaAd は以下の部分で定義されています

@freezed
class MetaAd with _$MetaAd {
const factory MetaAd({
required String id,
required String place,
@UriConverter() required Uri url,
@UriConverter() required Uri imageUrl,
required int ratio,
}) = _MetaAd;
factory MetaAd.fromJson(Map<String, Object?> json) => _$MetaAdFromJson(json);
}

この部分は、JSONのレスポンスがどのように扱われるのかを記述しており、例えば id はレスポンスに必ず含まれて型は文字列であることが示されています
imageUrl の含まれる行を見ると、先頭に @UriConverter() と書かれていることがわかります
これは JsonConverter のサブクラスを用いてJSONを指定された型に変換することを示しています
Stringint といった基本的な型には勝手に変換してくれるのですが、そうでない型についてはこちら側でよろしくしてあげる必要があるためこのようなものがついています

UriConvertermisskey_dart の中で定義されています

class UriConverter extends JsonConverter<Uri, String> {
const UriConverter();
@override
Uri fromJson(String json) {
return Uri.parse(json);
}
@override
String toJson(Uri object) {
return object.toString();
}
}

fromJson() はJSONから Uri への変換を行う際に用いられる関数です
この部分を

@override 
Uri fromJson(String json) { 
  return Uri.parse(json.trim()); 
} 

に変更することでパース前に空白を取り除くことができます

この変更をした後は、プッシュする前に dart run build_runner -d を実行して生成ファイルを更新することを忘れないようにしてください

@darlington95 darlington95 marked this pull request as draft April 4, 2024 12:31
@darlington95
Copy link
Contributor Author

@poppingmoon コメントありがとうございます。大変勉強になります。
ちょっと今、別の問題があってデバッグできませんので、とりあえずドラフトに変えておきました。

@darlington95 darlington95 changed the title MetaResponseのadsのimageUrlをtrimして先頭がタブ文字なサーバに対応 UriConverterで前後の余分な空白やタブを除去してからUriを得る Apr 7, 2024
@darlington95
Copy link
Contributor Author

影響範囲がimageUrlのみではなく、UriConverter使用箇所全般になりましたので、タイトルも変更しました。

@darlington95 darlington95 marked this pull request as ready for review April 7, 2024 15:12
@shiosyakeyakini-info shiosyakeyakini-info merged commit 6fcaf43 into shiosyakeyakini-info:master Oct 18, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants