mirror of
https://github.com/immich-app/immich.git
synced 2026-06-04 05:45:24 -04:00
9d4a6614b1
* feat(mobile): handle Android ACTION_VIEW intent - add ViewIntent Pigeon API and generated bindings - implement Android ViewIntentPlugin + iOS no-op host - route ExternalMediaViewer by ViewIntentAttachment - buffer pending view intents and flush on user ready/resume * feat(mobile): fallback to computed checksum for timeline match - hash local asset on-demand when checksum missing - search main timeline by localId or checksum before standalone viewer - persist computed hash into local_asset_entity * fix(mobile): proper handling is user authenticated * feat(mobile): open ACTION_VIEW fallback in AssetViewer drop ExternalMediaViewer route * feat(mobile): add logger * test(mobile): add unit tests for view intent pending/flush flow * fix(mobile): fix format * fix(mobile): remove redundant iOS code update code related to LocalAsset model and asset viewer * refactor(mobile): simplify view intent flow and support file-backed ACTION_VIEW assets remove redundant view intent model/repository layer handle transient ACTION_VIEW files in viewer/upload flow clean up managed temp files for fallback assets * refactor(mobile): extract MediaStore utils and resolve view intents via merged assets * refactor(mobile): move deferred view intents into providers, split view-intent providers, and clean up ACTION_VIEW handling * refactor(mobile): resolve merge conflicts use NativeSyncApi for hash files instead method from removed BackgroundServicePlugin.kt * style(mobile): format files * style(mobile): format files #2 * refactor(mobile): lazily materialize view-intent files and clean up temp-file handling * fix(mobile): flush pending view intents after login navigation * refactor(mobile): split view intent handler by platform and trigger it from app events * refactor(mobile): move view intent handling behind platform-specific factories * refactor(mobile): simplify code * fix(mobile): hand off deep-link viewer to main timeline after upload Add MainTimelineHandoffCoordinator to switch the asset viewer to the main timeline once a view-intent asset is uploaded and becomes available, and guard viewer reload/navigation transitions to avoid race conditions and crashes. * refactor(mobile): use remote asset ids for view intent handoff and simplify resolver * refactor(mobile): resolve merge conflicts * style(mobile): reformat code * style(mobile): reformat code #2 * fix(mobile): stabilize Android view intent asset resolution and fallback viewer * refactor(mobile): share AssetViewer pre-navigation state preparation * fix(mobile): wait for main timeline before deferred view intent handoff * refactor(mobile): decouple view intent asset resolver from providers * fix(mobile): avoid double pop when canceling upload dialog * fix(mobile): resolve view intent MIME type with fallbacks * docs(mobile): clarify view intent fallback asset TODO * fix(mobile): resolve merge conflicts * cleanup * lint --------- Co-authored-by: Peter Ombodi <peter.ombodi@gmail.com> Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com> Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
143 lines
3.8 KiB
TOML
143 lines
3.8 KiB
TOML
[tasks."codegen:dart"]
|
|
alias = "codegen"
|
|
description = "Execute build_runner to auto-generate dart code"
|
|
sources = [
|
|
"pubspec.yaml",
|
|
"build.yaml",
|
|
"lib/**/*.dart",
|
|
"infrastructure/**/*.drift",
|
|
]
|
|
outputs = { auto = true }
|
|
run = [
|
|
"dart run build_runner build --delete-conflicting-outputs",
|
|
"dart format lib/routing/router.gr.dart",
|
|
]
|
|
|
|
[tasks."codegen:watch"]
|
|
alias = "watch"
|
|
description = "Watch and auto-generate dart code"
|
|
run = "dart run build_runner watch --delete-conflicting-outputs"
|
|
|
|
[tasks."codegen:pigeon"]
|
|
alias = "pigeon"
|
|
description = "Generate pigeon platform code"
|
|
run = [
|
|
"dart run pigeon --input pigeon/native_sync_api.dart",
|
|
"dart run pigeon --input pigeon/local_image_api.dart",
|
|
"dart run pigeon --input pigeon/remote_image_api.dart",
|
|
"dart run pigeon --input pigeon/background_worker_api.dart",
|
|
"dart run pigeon --input pigeon/background_worker_lock_api.dart",
|
|
"dart run pigeon --input pigeon/connectivity_api.dart",
|
|
"dart run pigeon --input pigeon/network_api.dart",
|
|
"dart run pigeon --input pigeon/view_intent_api.dart",
|
|
"dart format lib/platform/native_sync_api.g.dart lib/platform/local_image_api.g.dart lib/platform/remote_image_api.g.dart lib/platform/background_worker_api.g.dart lib/platform/background_worker_lock_api.g.dart lib/platform/connectivity_api.g.dart lib/platform/network_api.g.dart lib/platform/view_intent_api.g.dart",
|
|
]
|
|
|
|
[tasks."codegen:translation"]
|
|
alias = "translation"
|
|
description = "Generate translations from i18n JSONs"
|
|
run = [
|
|
{ task = "//:i18n:format-fix" },
|
|
{ tasks = [
|
|
"i18n:loader",
|
|
"i18n:keys",
|
|
] },
|
|
]
|
|
|
|
[tasks."codegen:app-icon"]
|
|
description = "Generate app icons"
|
|
run = "flutter pub run flutter_launcher_icons:main"
|
|
|
|
[tasks."codegen:splash"]
|
|
description = "Generate splash screen"
|
|
run = "flutter pub run flutter_native_splash:create"
|
|
|
|
[tasks.test]
|
|
description = "Run mobile tests"
|
|
run = "flutter test"
|
|
|
|
[tasks.analyze]
|
|
alias = "lint"
|
|
description = "Analyze Dart code"
|
|
depends = ["analyze:dart", "analyze:dcm"]
|
|
|
|
[tasks."analyze-fix"]
|
|
alias = "lint-fix"
|
|
description = "Auto-fix Dart code"
|
|
depends = ["analyze-fix:dart", "analyze-fix:dcm"]
|
|
|
|
[tasks.format]
|
|
description = "Format Dart code"
|
|
run = "dart format --set-exit-if-changed $(find lib -name '*.dart' -not \\( -name '*.g.dart' -o -name '*.drift.dart' -o -name '*.gr.dart' \\))"
|
|
|
|
[tasks."build:android"]
|
|
description = "Build Android release"
|
|
run = "flutter build appbundle"
|
|
|
|
[tasks."drift:migration"]
|
|
alias = "migration"
|
|
description = "Generate database migrations"
|
|
run = "dart run drift_dev make-migrations"
|
|
|
|
[tasks.install]
|
|
alias = "install"
|
|
description = "Install flutter dependencies"
|
|
run = "flutter pub get"
|
|
|
|
[tasks.start]
|
|
alias = "start"
|
|
description = "Start flutter app"
|
|
run = "flutter run"
|
|
|
|
# Internal tasks
|
|
[tasks."i18n:loader"]
|
|
description = "Generate i18n loader"
|
|
hide = true
|
|
sources = ["i18n/"]
|
|
outputs = "lib/generated/codegen_loader.g.dart"
|
|
run = [
|
|
"dart run easy_localization:generate -S ../i18n",
|
|
"dart format lib/generated/codegen_loader.g.dart",
|
|
]
|
|
|
|
[tasks."i18n:keys"]
|
|
description = "Generate i18n keys"
|
|
hide = true
|
|
sources = ["i18n/en.json"]
|
|
outputs = "lib/generated/translations.g.dart"
|
|
run = [
|
|
"dart run bin/generate_keys.dart",
|
|
"dart format lib/generated/translations.g.dart",
|
|
]
|
|
|
|
[tasks."analyze:dart"]
|
|
description = "Run Dart analysis"
|
|
hide = true
|
|
run = "dart analyze --fatal-infos"
|
|
|
|
[tasks."analyze:dcm"]
|
|
description = "Run Dart Code Metrics"
|
|
hide = true
|
|
run = "dcm analyze lib --fatal-style --fatal-warnings"
|
|
|
|
[tasks."analyze-fix:dart"]
|
|
description = "Auto-fix Dart analysis"
|
|
hide = true
|
|
run = "dart fix --apply"
|
|
|
|
[tasks."analyze-fix:dcm"]
|
|
description = "Auto-fix Dart Code Metrics"
|
|
hide = true
|
|
run = "dcm fix lib"
|
|
|
|
|
|
[tasks.checklist]
|
|
run = [
|
|
{task = "codegen:pigeon" },
|
|
{task = "codegen:dart" },
|
|
{task = "codegen:translation" },
|
|
{task = "analyze" },
|
|
{task = "format" },
|
|
{task = "test" },
|
|
]
|