mirror of
https://github.com/kuhyx/diet-guard.git
synced 2026-11-10 20:27:11 +01:00
The inline `_DeviceCodeDialog` in `github_mirror_screen.dart` (88 lines) was byte-for-byte identical to wake-alarm's, and `services/github_device_auth.dart` was a fourth copy of the auth client. Both now come from `github_device_auth` in the kuhyx/utils monorepo. This app's copy was the one that mattered most to get right: it took the device-code and token URLs as parameters because GitHub's device-flow endpoints send no CORS headers, so the desktop **web** build has to route both through the local wrapper (`github_client_factory_web.dart` passes them). Extracting todo's simpler hardcoded version would have broken that build outright. The package carries the configurable endpoints instead, defaulting to GitHub's own URLs so the other three consumers are unaffected -- and `flutter build web` here is verified green, which is the check that would have caught it. The dialog also gains a real fix: `on Object` rather than `on Exception`, so an `ArgumentError` shows an error instead of leaving the dialog spinning on "Waiting for authorization…" forever. The unused `token_vault` import in the deleted client confirmed it had no app-specific behaviour left worth keeping. 548 tests pass, analyze clean, web build green, and the release APK is installed on the phone with meal history intact. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U4Rj3s7K2qzrLNgJqqPhno
35 lines
1.1 KiB
Dart
35 lines
1.1 KiB
Dart
/// Direct GitHub client, used on Android.
|
|
library;
|
|
|
|
import 'package:crdt_sync/crdt_sync.dart';
|
|
import 'package:diet_guard_app/services/sync_settings.dart';
|
|
import 'package:github_device_auth/github_device_auth.dart';
|
|
import 'package:http/http.dart' as http;
|
|
|
|
/// This device's id in the `diet-guard-sync/devices/<id>/food_log.json`
|
|
/// layout.
|
|
///
|
|
/// The PC's Python side pushes under `pc` (`SYNC_DEVICE_ID` in
|
|
/// `diet_guard/_constants.py`) and the desktop web build under `desktop`;
|
|
/// every device must have its own, or two of them overwrite each other's
|
|
/// pushed log on every tick.
|
|
const syncDeviceId = 'phone';
|
|
|
|
/// Builds a client that talks to `api.github.com` directly with [settings]'
|
|
/// token.
|
|
GitHubClient createGitHubClient(
|
|
SyncSettings settings, {
|
|
http.Client? httpClient,
|
|
}) => GitHubClient(
|
|
owner: settings.owner,
|
|
repo: settings.repo,
|
|
token: settings.token,
|
|
httpClient: httpClient,
|
|
);
|
|
|
|
/// Builds the device-flow client, talking to GitHub directly.
|
|
GitHubDeviceAuth createDeviceAuth(
|
|
String clientId, {
|
|
http.Client? httpClient,
|
|
}) => GitHubDeviceAuth(clientId: clientId, httpClient: httpClient);
|