This repository has been archived on 2026-06-02. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
FabledApp/lib/data/api/quick_capture_api.dart
T
bvandeusen 2a35fe5532 Add search, offline queue, app icon, and UI polish
- Collapsible search in notes and tasks: magnifying glass in AppBar
  expands to a text field inline; close button resets the filter
- Offline capture queue: failed quick-captures (NetworkException) are
  persisted to SharedPreferences and retried automatically on next
  successful submit or app start; badge shows pending count
- App icon: book-with-sparkle logo from FabledAssistant SVG rendered
  at all Android densities with adaptive icon (indigo #6366f1 bg)
- Dark mode subtitle fix: use colorScheme.onSurfaceVariant for note
  preview and conversation timestamp text
- Remove swipe-to-delete (accidental deletions); long-press remains
- Chat: SSE streaming reliability, polling fallback, title patching
- Settings: theme toggle (system/light/dark) persisted to prefs
- Notes: delete button in edit screen; body preview in list
- Tasks: fix delete dialog context; description search support

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 23:15:06 -05:00

50 lines
1.3 KiB
Dart

import 'package:dio/dio.dart';
import 'api_client.dart';
/// Result returned by POST /api/quick-capture.
/// type is one of: "note", "task", "event", "todo"
class CaptureResult {
final String type;
final String message; // human-readable summary from the server
final bool fallback; // true when the server used a note as a fallback
final int? id;
final String title;
const CaptureResult({
required this.type,
required this.message,
this.fallback = false,
this.id,
required this.title,
});
factory CaptureResult.fromJson(Map<String, dynamic> json) {
final data = json['data'] as Map<String, dynamic>? ?? {};
return CaptureResult(
type: json['type'] as String? ?? 'note',
message: json['message'] as String? ?? '',
fallback: json['fallback'] as bool? ?? false,
id: data['id'] as int?,
title: data['title'] as String? ?? '',
);
}
}
class QuickCaptureApi {
final Dio _dio;
const QuickCaptureApi(this._dio);
Future<CaptureResult> capture(String text) async {
try {
final response = await _dio.post(
'/api/quick-capture',
data: {'text': text},
);
return CaptureResult.fromJson(response.data as Map<String, dynamic>);
} on DioException catch (e) {
throw dioToApp(e);
}
}
}