remove logging

pull/24563/head
timonrieger 2025-12-14 01:49:06 +01:00
parent 47f6ee2fe8
commit ec28044fa9
No known key found for this signature in database
10 changed files with 0 additions and 330 deletions

View File

@ -226,11 +226,6 @@ class TimelineService {
}
Future<void> dispose() async {
// #region agent log (H6 device)
print(
'[AGENT_LOG] TimelineService.dispose origin=$origin totalAssets=$_totalAssets bufferLen=${_buffer.length} bufferOffset=$_bufferOffset',
);
// #endregion
await _bucketSubscription?.cancel();
_bucketSubscription = null;
_buffer = [];

View File

@ -47,11 +47,6 @@ import 'package:logging/logging.dart';
import 'package:timezone/data/latest.dart';
void main() async {
// #region agent log (VERIFY device)
// This MUST show in `flutter run -d Phone` output immediately after hot restart.
// If you don't see it, you're not running the updated build.
print('[AGENT_LOG] main.dart:main ENTER ts=${DateTime.now().toIso8601String()}');
// #endregion
ImmichWidgetsBinding();
unawaited(BackgroundWorkerLockService(BackgroundWorkerLockApi()).lock());
final (isar, drift, logDb) = await Bootstrap.initDB();
@ -72,10 +67,6 @@ void main() async {
child: const MainWidget(),
),
);
// #region agent log (VERIFY device)
print('[AGENT_LOG] main.dart:main AFTER runApp ts=${DateTime.now().toIso8601String()}');
// #endregion
}
Future<void> initApp() async {

View File

@ -1,5 +1,4 @@
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'dart:math';
import 'dart:ui' as ui;
@ -58,72 +57,6 @@ class GalleryViewerPage extends HookConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
// #region agent log helper
void _agentLog({
required String hypothesisId,
required String location,
required String message,
Map<String, Object?> data = const {},
}) {
// Print to console as immediate verification
print('[AGENT_LOG] $location: $message');
// Best-effort logging only; never throw from UI code.
() async {
try {
final logEntry = jsonEncode({
'sessionId': 'debug-session',
'runId': 'run1',
'hypothesisId': hypothesisId,
'location': location,
'message': message,
'data': data,
'timestamp': DateTime.now().millisecondsSinceEpoch,
});
// Write directly to file (Dart/Flutter approach)
try {
final file = File('/Users/timonthegoat/code/oss/immich/.cursor/debug.log');
await file.writeAsString('$logEntry\n', mode: FileMode.append, flush: true);
print('[AGENT_LOG] File write SUCCESS: $location');
} catch (e) {
print('[AGENT_LOG] File write FAILED: $location - $e');
}
// Also try HTTP as backup
try {
final client = HttpClient();
final req = await client.postUrl(
Uri.parse('http://127.0.0.1:7242/ingest/9f2496b1-d42f-425c-9b63-abfeb2cdbe71'),
);
req.headers.contentType = ContentType.json;
req.write(logEntry);
await req.close();
client.close(force: true);
print('[AGENT_LOG] HTTP write SUCCESS: $location');
} catch (e) {
print('[AGENT_LOG] HTTP write FAILED: $location - $e');
}
} catch (e) {
print('[AGENT_LOG] Logging error: $e');
}
}();
}
// #endregion
// #region agent log (VERIFY) - immediate entry point
_agentLog(
hypothesisId: 'VERIFY',
location: 'gallery_viewer.page.dart:build:ENTRY',
message: 'GalleryViewer build ENTRY - logging system test',
data: {'test': true, 'timestamp': DateTime.now().toIso8601String()},
);
// #endregion
// #region agent log (VERIFY device) - plain print (no async/file/http)
// This MUST appear in `flutter run` output as soon as the viewer route builds.
print(
'[AGENT_LOG] gallery_viewer.page.dart:ENTRY_PRINT isIOS=${Platform.isIOS} orientation=${MediaQuery.orientationOf(context).name} size=${MediaQuery.sizeOf(context).width}x${MediaQuery.sizeOf(context).height}',
);
// #endregion
final totalAssets = useState(renderList.totalAssets);
final isZoomed = useState(false);
final stackIndex = useState(0);
@ -132,25 +65,6 @@ class GalleryViewerPage extends HookConsumerWidget {
final loadAsset = renderList.loadAsset;
final isPlayingMotionVideo = ref.watch(isPlayingMotionVideoProvider);
final isCasting = ref.watch(castProvider.select((c) => c.isCasting));
final showControls = ref.watch(showControlsProvider);
// #region agent log (H1) build snapshot
_agentLog(
hypothesisId: 'H1',
location: 'gallery_viewer.page.dart:build',
message: 'GalleryViewer build',
data: {
'isIOS': Platform.isIOS,
'orientation': MediaQuery.orientationOf(context).name,
'size': {'w': MediaQuery.sizeOf(context).width, 'h': MediaQuery.sizeOf(context).height},
'devicePixelRatio': MediaQuery.devicePixelRatioOf(context),
'showControls': showControls,
'isZoomed': isZoomed.value,
'currentIndex': currentIndex.value,
'totalAssets': totalAssets.value,
},
);
// #endregion
final videoPlayerKeys = useRef<Map<int, GlobalKey>>({});
@ -193,21 +107,6 @@ class GalleryViewerPage extends HookConsumerWidget {
SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersive);
}
// #region agent log (H1) init ui mode
_agentLog(
hypothesisId: 'H1',
location: 'gallery_viewer.page.dart:useEffect(init)',
message: 'Initial SystemChrome.setEnabledSystemUIMode',
data: {
'initialShowControls': initialShowControls,
'mode': (initialShowControls ? SystemUiMode.edgeToEdge : SystemUiMode.immersive).name,
'isIOS': Platform.isIOS,
'orientation': MediaQuery.orientationOf(context).name,
'size': {'w': MediaQuery.sizeOf(context).width, 'h': MediaQuery.sizeOf(context).height},
},
);
// #endregion
// Delay this a bit so we can finish loading the page
Timer(const Duration(milliseconds: 400), () {
precacheNextImage(currentIndex.value + 1);
@ -304,22 +203,6 @@ class GalleryViewerPage extends HookConsumerWidget {
}
ref.listen(showControlsProvider, (_, show) {
// #region agent log (H1) controls -> system ui mode
_agentLog(
hypothesisId: 'H1',
location: 'gallery_viewer.page.dart:ref.listen(showControlsProvider)',
message: 'showControls changed; applying SystemChrome mode',
data: {
'show': show,
'isIOS': Platform.isIOS,
'willSetMode': (show || Platform.isIOS ? SystemUiMode.edgeToEdge : SystemUiMode.immersive).name,
'orientation': MediaQuery.orientationOf(context).name,
'size': {'w': MediaQuery.sizeOf(context).width, 'h': MediaQuery.sizeOf(context).height},
'currentIndex': currentIndex.value,
},
);
// #endregion
if (show || Platform.isIOS) {
SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
return;
@ -340,32 +223,7 @@ class GalleryViewerPage extends HookConsumerWidget {
handleSwipeUpDown(details);
},
onTapDown: (_, __, ___) {
final prev = ref.read(showControlsProvider);
ref.read(showControlsProvider.notifier).toggle();
final next = ref.read(showControlsProvider);
// #region agent log (H1) user tapped to toggle controls
_agentLog(
hypothesisId: 'H1',
location: 'gallery_viewer.page.dart:buildImage.onTapDown',
message: 'Tap to toggle viewer controls',
data: {
'prev': prev,
'next': next,
'isIOS': Platform.isIOS,
'orientation': MediaQuery.orientationOf(context).name,
'size': {'w': MediaQuery.sizeOf(context).width, 'h': MediaQuery.sizeOf(context).height},
'asset': {
'id': asset.id,
'type': asset.type.toString(),
'isRemote': asset.isRemote,
'isLocal': asset.isLocal,
'remoteIdPresent': asset.remoteId != null,
'localIdPresent': asset.localId != null,
},
'currentIndex': currentIndex.value,
},
);
// #endregion
},
onLongPressStart: asset.isMotionPhoto
? (_, __, ___) {
@ -423,56 +281,8 @@ class GalleryViewerPage extends HookConsumerWidget {
}
if (newAsset.isImage && !isPlayingMotionVideo) {
// #region agent log (H5) asset builder for current page
if (index == currentIndex.value) {
_agentLog(
hypothesisId: 'H5',
location: 'gallery_viewer.page.dart:buildAsset',
message: 'Built page options for current index (image path)',
data: {
'index': index,
'isIOS': Platform.isIOS,
'orientation': MediaQuery.orientationOf(context).name,
'size': {'w': MediaQuery.sizeOf(context).width, 'h': MediaQuery.sizeOf(context).height},
'showControls': ref.read(showControlsProvider),
'isZoomed': isZoomed.value,
'asset': {
'id': newAsset.id,
'type': newAsset.type.toString(),
'isRemote': newAsset.isRemote,
'isLocal': newAsset.isLocal,
'stackIdPresent': newAsset.stackId != null,
},
},
);
}
// #endregion
return buildImage(newAsset);
}
// #region agent log (H5) asset builder for current page (video path)
if (index == currentIndex.value) {
_agentLog(
hypothesisId: 'H5',
location: 'gallery_viewer.page.dart:buildAsset',
message: 'Built page options for current index (video path)',
data: {
'index': index,
'isIOS': Platform.isIOS,
'orientation': MediaQuery.orientationOf(context).name,
'size': {'w': MediaQuery.sizeOf(context).width, 'h': MediaQuery.sizeOf(context).height},
'showControls': ref.read(showControlsProvider),
'isZoomed': isZoomed.value,
'asset': {
'id': newAsset.id,
'type': newAsset.type.toString(),
'isRemote': newAsset.isRemote,
'isLocal': newAsset.isLocal,
'stackIdPresent': newAsset.stackId != null,
},
},
);
}
// #endregion
return buildVideo(context, newAsset);
}
@ -499,29 +309,6 @@ class GalleryViewerPage extends HookConsumerWidget {
gaplessPlayback: true,
loadingBuilder: (context, event, index) {
final asset = loadAsset(index);
// #region agent log (H2) stuck on loading builder
if (index == currentIndex.value) {
_agentLog(
hypothesisId: 'H2',
location: 'gallery_viewer.page.dart:PhotoViewGallery.loadingBuilder',
message: 'PhotoViewGallery loadingBuilder for current index',
data: {
'index': index,
'isIOS': Platform.isIOS,
'orientation': MediaQuery.orientationOf(context).name,
'size': {'w': MediaQuery.sizeOf(context).width, 'h': MediaQuery.sizeOf(context).height},
'showControls': ref.read(showControlsProvider),
'isZoomed': isZoomed.value,
'asset': {
'id': asset.id,
'type': asset.type.toString(),
'isRemote': asset.isRemote,
'isLocal': asset.isLocal,
},
},
);
}
// #endregion
return ClipRect(
child: Stack(
fit: StackFit.expand,
@ -542,19 +329,6 @@ class GalleryViewerPage extends HookConsumerWidget {
itemCount: totalAssets.value,
scrollDirection: Axis.horizontal,
onPageChanged: (value, _) {
// #region agent log (VERIFY) page changed
_agentLog(
hypothesisId: 'VERIFY',
location: 'gallery_viewer.page.dart:onPageChanged',
message: 'PhotoViewGallery page changed',
data: {
'from': currentIndex.value,
'to': value,
'isIOS': Platform.isIOS,
'orientation': MediaQuery.orientationOf(context).name,
},
);
// #endregion
final next = currentIndex.value < value ? value + 1 : value - 1;
ref.read(hapticFeedbackProvider.notifier).selectionClick();

View File

@ -151,24 +151,11 @@ class MapPage extends HookConsumerWidget {
Future<void> onMarkerTapped() async {
final assetId = selectedMarker.value?.marker.assetRemoteId;
if (assetId == null) {
// #region agent log (VERIFY device)
// Device-friendly runtime evidence: prints show up in `flutter run` output.
print('[AGENT_LOG] map.page.dart:onMarkerTapped assetId=null');
// #endregion
return;
}
// #region agent log (VERIFY device)
print(
'[AGENT_LOG] map.page.dart:onMarkerTapped start assetId=$assetId orientation=${MediaQuery.orientationOf(context).name} size=${MediaQuery.sizeOf(context).width}x${MediaQuery.sizeOf(context).height}',
);
// #endregion
final asset = await ref.read(dbProvider).assets.getByRemoteId(assetId);
if (asset == null) {
// #region agent log (VERIFY device)
print('[AGENT_LOG] map.page.dart:onMarkerTapped asset not found in db remoteId=$assetId');
// #endregion
return;
}
@ -179,11 +166,6 @@ class MapPage extends HookConsumerWidget {
if (asset.isVideo) {
ref.read(showControlsProvider.notifier).show = false;
}
// #region agent log (VERIFY device)
print(
'[AGENT_LOG] map.page.dart:onMarkerTapped push GalleryViewerRoute assetType=${asset.type} isVideo=${asset.isVideo} isRemote=${asset.isRemote} isLocal=${asset.isLocal}',
);
// #endregion
unawaited(context.pushRoute(GalleryViewerRoute(initialIndex: 0, heroOffset: 0, renderList: renderList)));
}

View File

@ -376,17 +376,7 @@ class _AssetViewerState extends ConsumerState<AssetViewer> {
void _onTapDown(_, __, ___) {
if (!showingBottomSheet) {
// #region agent log (H1 device)
final before = ref.read(assetViewerProvider.select((s) => s.showingControls));
print(
'[AGENT_LOG] asset_viewer.page.dart:_onTapDown toggleControls before=$before orientation=${MediaQuery.orientationOf(context).name} size=${MediaQuery.sizeOf(context).width}x${MediaQuery.sizeOf(context).height}',
);
// #endregion
ref.read(assetViewerProvider.notifier).toggleControls();
// #region agent log (H1 device)
final after = ref.read(assetViewerProvider.select((s) => s.showingControls));
print('[AGENT_LOG] asset_viewer.page.dart:_onTapDown toggleControls after=$after');
// #endregion
}
}
@ -526,12 +516,6 @@ class _AssetViewerState extends ConsumerState<AssetViewer> {
}
Widget _placeholderBuilder(BuildContext ctx, ImageChunkEvent? progress, int index) {
// #region agent log (H2 device)
final show = ref.read(assetViewerProvider.select((s) => s.showingControls));
print(
'[AGENT_LOG] asset_viewer.page.dart:PhotoViewGallery.loadingBuilder index=$index showControls=$show orientation=${MediaQuery.orientationOf(ctx).name} size=${MediaQuery.sizeOf(ctx).width}x${MediaQuery.sizeOf(ctx).height} progress=${progress == null ? "null" : "${progress.cumulativeBytesLoaded}/${progress.expectedTotalBytes}"}',
);
// #endregion
return const Center(child: ImmichLoadingIndicator());
}
@ -552,12 +536,6 @@ class _AssetViewerState extends ConsumerState<AssetViewer> {
// If asset is not available in buffer, return a placeholder
if (asset == null) {
// #region agent log (H6 device)
final show = ref.read(assetViewerProvider.select((s) => s.showingControls));
print(
'[AGENT_LOG] asset_viewer.page.dart:_assetBuilder asset=null index=$index totalAssets=${timelineService.totalAssets} showControls=$show orientation=${MediaQuery.orientationOf(ctx).name} size=${MediaQuery.sizeOf(ctx).width}x${MediaQuery.sizeOf(ctx).height}',
);
// #endregion
return PhotoViewGalleryPageOptions.customChild(
heroAttributes: PhotoViewHeroAttributes(tag: 'loading_$index'),
child: Container(
@ -569,14 +547,6 @@ class _AssetViewerState extends ConsumerState<AssetViewer> {
);
}
// #region agent log (H6 device)
if (index == (pageController.hasClients ? pageController.page?.round() : null)) {
print(
'[AGENT_LOG] asset_viewer.page.dart:_assetBuilder asset!=null index=$index heroTag=${asset.heroTag} type=${asset.type} hasLocal=${asset.hasLocal} hasRemote=${asset.hasRemote}',
);
}
// #endregion
BaseAsset displayAsset = asset;
final stackChildren = ref.read(stackChildrenNotifier(asset)).valueOrNull;
if (stackChildren != null && stackChildren.isNotEmpty) {
@ -676,11 +646,6 @@ class _AssetViewerState extends ConsumerState<AssetViewer> {
// Listen for control visibility changes and change system UI mode accordingly
ref.listen(assetViewerProvider.select((value) => value.showingControls), (_, showingControls) async {
// #region agent log (H1 device)
print(
'[AGENT_LOG] asset_viewer.page.dart:showingControlsChanged=$showingControls -> SystemUiMode=${(showingControls ? SystemUiMode.edgeToEdge : SystemUiMode.immersiveSticky).name} orientation=${MediaQuery.orientationOf(context).name} size=${MediaQuery.sizeOf(context).width}x${MediaQuery.sizeOf(context).height}',
);
// #endregion
if (showingControls) {
unawaited(SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge));
} else {

View File

@ -64,11 +64,6 @@ class LocalFullImageProvider extends CancellableImageProvider<LocalFullImageProv
@override
void cancel() {
// #region agent log (H7 device)
print(
'[AGENT_LOG] LocalFullImageProvider.cancel id=$id size=${size.width}x${size.height} isCancelledWas=$isCancelled',
);
// #endregion
super.cancel();
}
@ -79,11 +74,6 @@ class LocalFullImageProvider extends CancellableImageProvider<LocalFullImageProv
@override
ImageStreamCompleter loadImage(LocalFullImageProvider key, ImageDecoderCallback decode) {
// #region agent log (H7 device)
print(
'[AGENT_LOG] LocalFullImageProvider.loadImage id=${key.id} size=${key.size.width}x${key.size.height} isCancelled=$isCancelled keyHash=${key.hashCode} instHash=${hashCode}',
);
// #endregion
return OneFramePlaceholderImageStreamCompleter(
_codec(key, decode),
initialImage: getInitialImage(LocalThumbProvider(id: key.id, assetType: key.assetType)),

View File

@ -67,9 +67,6 @@ class RemoteFullImageProvider extends CancellableImageProvider<RemoteFullImagePr
@override
void cancel() {
// #region agent log (H7 device)
print('[AGENT_LOG] RemoteFullImageProvider.cancel assetId=$assetId isCancelledWas=$isCancelled');
// #endregion
super.cancel();
}
@ -80,11 +77,6 @@ class RemoteFullImageProvider extends CancellableImageProvider<RemoteFullImagePr
@override
ImageStreamCompleter loadImage(RemoteFullImageProvider key, ImageDecoderCallback decode) {
// #region agent log (H7 device)
print(
'[AGENT_LOG] RemoteFullImageProvider.loadImage assetId=${key.assetId} isCancelled=$isCancelled keyHash=${key.hashCode} instHash=${hashCode}',
);
// #endregion
return OneFramePlaceholderImageStreamCompleter(
_codec(key, decode),
initialImage: getInitialImage(RemoteThumbProvider(assetId: key.assetId)),

View File

@ -116,16 +116,13 @@ class _DriftMapState extends ConsumerState<DriftMap> {
return;
}
// #region agent log (H6 device)
// When the AssetViewer is open, the DriftMap route stays alive in the background.
// If we continue to update bounds, the map-scoped timeline service gets recreated and the previous one disposed,
// which can invalidate the TimelineService instance that was passed into AssetViewerRoute (causing "loading forever").
final currentRoute = ref.read(currentRouteNameProvider);
if (currentRoute == AssetViewerRoute.name || currentRoute == GalleryViewerRoute.name) {
print('[AGENT_LOG] DriftMap.setBounds SKIP currentRoute=$currentRoute');
return;
}
// #endregion
final bounds = await controller.getVisibleRegion();
unawaited(

View File

@ -155,11 +155,6 @@ class _AssetTileWidget extends ConsumerWidget {
if (multiSelectState.forceEnable || multiSelectState.isEnabled) {
ref.read(multiSelectProvider.notifier).toggleAssetSelection(asset);
} else {
// #region agent log (VERIFY device)
print(
'[AGENT_LOG] timeline.assetTile:onTap open AssetViewerRoute index=$assetIndex assetType=${asset.type} isRemote=${asset is RemoteAsset} heroOffset=$heroOffset',
);
// #endregion
await ref.read(timelineServiceProvider).loadAssets(assetIndex, 1);
ref.read(isPlayingMotionVideoProvider.notifier).playing = false;
AssetViewer.setAsset(ref, asset);

View File

@ -19,17 +19,6 @@ class AppNavigationObserver extends AutoRouterObserver {
@override
void didPush(Route route, Route? previousRoute) {
// #region agent log (VERIFY device)
// Keep this targeted to reduce noise; we care about the Places -> (Drift)Map -> AssetViewer flow.
final name = route.settings.name;
final prev = previousRoute?.settings.name;
if (name == MapRoute.name ||
name == DriftMapRoute.name ||
name == GalleryViewerRoute.name ||
name == AssetViewerRoute.name) {
print('[AGENT_LOG] nav.didPush route=$name prev=$prev');
}
// #endregion
_handleLockedViewState(route, previousRoute);
_handleDriftLockedFolderState(route, previousRoute);
Future(() {