Compare commits
2 Commits
b3d07f8794
...
3cbd9bad2c
| Author | SHA1 | Date |
|---|---|---|
|
|
3cbd9bad2c | |
|
|
182e498188 |
|
|
@ -568,8 +568,48 @@ class _CameraScreenState extends ConsumerState<CameraScreen> with SingleTickerPr
|
||||||
if (mounted) {
|
if (mounted) {
|
||||||
Navigator.of(context).pop(); // Close AnalyzingDialog
|
Navigator.of(context).pop(); // Close AnalyzingDialog
|
||||||
|
|
||||||
// Check for Quota Error to set Lockout
|
final errStr = e.toString();
|
||||||
if (e.toString().contains('Quota') || e.toString().contains('429')) {
|
|
||||||
|
// AIサーバー混雑(503)→ ドラフト保存してオフライン時と同じ扱いに
|
||||||
|
if (errStr.contains('[CONGESTION]')) {
|
||||||
|
try {
|
||||||
|
await DraftService.saveDraft(_capturedImages);
|
||||||
|
if (!mounted) return;
|
||||||
|
Navigator.of(context).pop(); // Close camera screen
|
||||||
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
|
const SnackBar(
|
||||||
|
content: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Icon(LucideIcons.cloudOff, color: Colors.white, size: 16),
|
||||||
|
SizedBox(width: 8),
|
||||||
|
Text('AIサーバー混雑', style: TextStyle(fontWeight: FontWeight.bold)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(height: 4),
|
||||||
|
Text('写真を「解析待ち」として保存しました。'),
|
||||||
|
Text('時間をおいてホーム画面から解析できます。'),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
duration: Duration(seconds: 5),
|
||||||
|
backgroundColor: Colors.orange,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} catch (_) {
|
||||||
|
// ドラフト保存も失敗した場合のみエラー表示
|
||||||
|
if (!mounted) return;
|
||||||
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
|
const SnackBar(content: Text('解析もドラフト保存も失敗しました。再試行してください。')),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Quota エラー(429)→ ロックアウト
|
||||||
|
if (errStr.contains('Quota') || errStr.contains('429')) {
|
||||||
setState(() {
|
setState(() {
|
||||||
_quotaLockoutTime = DateTime.now().add(const Duration(minutes: 1));
|
_quotaLockoutTime = DateTime.now().add(const Duration(minutes: 1));
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -349,7 +349,8 @@ $extractedText
|
||||||
if (isLastAttempt || !is503) {
|
if (isLastAttempt || !is503) {
|
||||||
// 最終試行 or 503以外のエラーはそのまま投げる
|
// 最終試行 or 503以外のエラーはそのまま投げる
|
||||||
if (is503) {
|
if (is503) {
|
||||||
throw Exception('AIサーバーが混雑しています。しばらく待ってから再試行してください。');
|
// [CONGESTION] マーカー付きで投げる → camera_screen でドラフト保存へ
|
||||||
|
throw Exception('[CONGESTION] AIサーバーが混雑しています。解析待ちとして保存します。');
|
||||||
}
|
}
|
||||||
throw Exception('AI解析エラー(Direct): $e');
|
throw Exception('AI解析エラー(Direct): $e');
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
{
|
{
|
||||||
"date": "2026-04-06",
|
"date": "2026-04-06",
|
||||||
"name": "Ponshu Room 1.0.22 (2026-04-09)",
|
"name": "Ponshu Room 1.0.23 (2026-04-09)",
|
||||||
"version": "v1.0.22",
|
"version": "v1.0.23",
|
||||||
"apks": {
|
"apks": {
|
||||||
"eiji": {
|
"eiji": {
|
||||||
"lite": {
|
"lite": {
|
||||||
"url": "https://posimai-lab.tail72e846.ts.net/mai/ponshu-room-lite/releases/download/v1.0.22/ponshu_room_consumer_eiji.apk",
|
"url": "https://posimai-lab.tail72e846.ts.net/mai/ponshu-room-lite/releases/download/v1.0.23/ponshu_room_consumer_eiji.apk",
|
||||||
"size_mb": 89,
|
"size_mb": 89,
|
||||||
"filename": "ponshu_room_consumer_eiji.apk"
|
"filename": "ponshu_room_consumer_eiji.apk"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"maita": {
|
"maita": {
|
||||||
"lite": {
|
"lite": {
|
||||||
"url": "https://posimai-lab.tail72e846.ts.net/mai/ponshu-room-lite/releases/download/v1.0.22/ponshu_room_consumer_maita.apk",
|
"url": "https://posimai-lab.tail72e846.ts.net/mai/ponshu-room-lite/releases/download/v1.0.23/ponshu_room_consumer_maita.apk",
|
||||||
"size_mb": 89,
|
"size_mb": 89,
|
||||||
"filename": "ponshu_room_consumer_maita.apk"
|
"filename": "ponshu_room_consumer_maita.apk"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue