mirror of
https://github.com/immich-app/immich.git
synced 2025-08-11 09:16:31 -04:00
delete DLog and make LogRepository not a singleton
This commit is contained in:
parent
76dc2ad181
commit
33bbb8d3e2
@ -6,7 +6,6 @@ import 'package:immich_mobile/infrastructure/repositories/local_album.repository
|
|||||||
import 'package:immich_mobile/infrastructure/repositories/local_asset.repository.dart';
|
import 'package:immich_mobile/infrastructure/repositories/local_asset.repository.dart';
|
||||||
import 'package:immich_mobile/infrastructure/repositories/storage.repository.dart';
|
import 'package:immich_mobile/infrastructure/repositories/storage.repository.dart';
|
||||||
import 'package:immich_mobile/platform/native_sync_api.g.dart';
|
import 'package:immich_mobile/platform/native_sync_api.g.dart';
|
||||||
import 'package:immich_mobile/presentation/pages/dev/dev_logger.dart';
|
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
|
|
||||||
class HashService {
|
class HashService {
|
||||||
@ -46,7 +45,6 @@ class HashService {
|
|||||||
|
|
||||||
stopwatch.stop();
|
stopwatch.stop();
|
||||||
_log.info("Hashing took - ${stopwatch.elapsedMilliseconds}ms");
|
_log.info("Hashing took - ${stopwatch.elapsedMilliseconds}ms");
|
||||||
DLog.log("Hashing took - ${stopwatch.elapsedMilliseconds}ms");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Processes a list of [LocalAsset]s, storing their hash and updating the assets in the DB
|
/// Processes a list of [LocalAsset]s, storing their hash and updating the assets in the DB
|
||||||
@ -101,7 +99,6 @@ class HashService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_log.fine("Hashed ${hashed.length}/${toHash.length} assets");
|
_log.fine("Hashed ${hashed.length}/${toHash.length} assets");
|
||||||
DLog.log("Hashed ${hashed.length}/${toHash.length} assets");
|
|
||||||
|
|
||||||
await _localAssetRepository.updateHashes(hashed);
|
await _localAssetRepository.updateHashes(hashed);
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@ import 'package:immich_mobile/domain/models/album/local_album.model.dart';
|
|||||||
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
|
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
|
||||||
import 'package:immich_mobile/infrastructure/repositories/local_album.repository.dart';
|
import 'package:immich_mobile/infrastructure/repositories/local_album.repository.dart';
|
||||||
import 'package:immich_mobile/platform/native_sync_api.g.dart';
|
import 'package:immich_mobile/platform/native_sync_api.g.dart';
|
||||||
import 'package:immich_mobile/presentation/pages/dev/dev_logger.dart';
|
|
||||||
import 'package:immich_mobile/utils/diff.dart';
|
import 'package:immich_mobile/utils/diff.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:platform/platform.dart';
|
import 'package:platform/platform.dart';
|
||||||
@ -30,19 +29,17 @@ class LocalSyncService {
|
|||||||
try {
|
try {
|
||||||
if (full || await _nativeSyncApi.shouldFullSync()) {
|
if (full || await _nativeSyncApi.shouldFullSync()) {
|
||||||
_log.fine("Full sync request from ${full ? "user" : "native"}");
|
_log.fine("Full sync request from ${full ? "user" : "native"}");
|
||||||
DLog.log("Full sync request from ${full ? "user" : "native"}");
|
|
||||||
return await fullSync();
|
return await fullSync();
|
||||||
}
|
}
|
||||||
|
|
||||||
final delta = await _nativeSyncApi.getMediaChanges();
|
final delta = await _nativeSyncApi.getMediaChanges();
|
||||||
if (!delta.hasChanges) {
|
if (!delta.hasChanges) {
|
||||||
_log.fine("No media changes detected. Skipping sync");
|
_log.fine("No media changes detected. Skipping sync");
|
||||||
DLog.log("No media changes detected. Skipping sync");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
DLog.log("Delta updated: ${delta.updates.length}");
|
_log.fine("Delta updated: ${delta.updates.length}");
|
||||||
DLog.log("Delta deleted: ${delta.deletes.length}");
|
_log.fine("Delta deleted: ${delta.deletes.length}");
|
||||||
|
|
||||||
final deviceAlbums = await _nativeSyncApi.getAlbums();
|
final deviceAlbums = await _nativeSyncApi.getAlbums();
|
||||||
await _localAlbumRepository.updateAll(deviceAlbums.toLocalAlbums());
|
await _localAlbumRepository.updateAll(deviceAlbums.toLocalAlbums());
|
||||||
@ -83,7 +80,6 @@ class LocalSyncService {
|
|||||||
} finally {
|
} finally {
|
||||||
stopwatch.stop();
|
stopwatch.stop();
|
||||||
_log.info("Device sync took - ${stopwatch.elapsedMilliseconds}ms");
|
_log.info("Device sync took - ${stopwatch.elapsedMilliseconds}ms");
|
||||||
DLog.log("Device sync took - ${stopwatch.elapsedMilliseconds}ms");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,7 +102,6 @@ class LocalSyncService {
|
|||||||
await _nativeSyncApi.checkpointSync();
|
await _nativeSyncApi.checkpointSync();
|
||||||
stopwatch.stop();
|
stopwatch.stop();
|
||||||
_log.info("Full device sync took - ${stopwatch.elapsedMilliseconds}ms");
|
_log.info("Full device sync took - ${stopwatch.elapsedMilliseconds}ms");
|
||||||
DLog.log("Full device sync took - ${stopwatch.elapsedMilliseconds}ms");
|
|
||||||
} catch (e, s) {
|
} catch (e, s) {
|
||||||
_log.severe("Error performing full device sync", e, s);
|
_log.severe("Error performing full device sync", e, s);
|
||||||
}
|
}
|
||||||
@ -150,7 +145,6 @@ class LocalSyncService {
|
|||||||
// Faster path - only new assets added
|
// Faster path - only new assets added
|
||||||
if (await checkAddition(dbAlbum, deviceAlbum)) {
|
if (await checkAddition(dbAlbum, deviceAlbum)) {
|
||||||
_log.fine("Fast synced device album ${dbAlbum.name}");
|
_log.fine("Fast synced device album ${dbAlbum.name}");
|
||||||
DLog.log("Fast synced device album ${dbAlbum.name}");
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,7 +3,6 @@ import 'dart:async';
|
|||||||
import 'package:immich_mobile/domain/models/sync_event.model.dart';
|
import 'package:immich_mobile/domain/models/sync_event.model.dart';
|
||||||
import 'package:immich_mobile/infrastructure/repositories/sync_api.repository.dart';
|
import 'package:immich_mobile/infrastructure/repositories/sync_api.repository.dart';
|
||||||
import 'package:immich_mobile/infrastructure/repositories/sync_stream.repository.dart';
|
import 'package:immich_mobile/infrastructure/repositories/sync_stream.repository.dart';
|
||||||
import 'package:immich_mobile/presentation/pages/dev/dev_logger.dart';
|
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:openapi/api.dart';
|
import 'package:openapi/api.dart';
|
||||||
|
|
||||||
@ -26,7 +25,6 @@ class SyncStreamService {
|
|||||||
|
|
||||||
Future<void> sync() {
|
Future<void> sync() {
|
||||||
_logger.info("Remote sync request for user");
|
_logger.info("Remote sync request for user");
|
||||||
DLog.log("Remote sync request for user");
|
|
||||||
// Start the sync stream and handle events
|
// Start the sync stream and handle events
|
||||||
return _syncApiRepository.streamChanges(_handleEvents);
|
return _syncApiRepository.streamChanges(_handleEvents);
|
||||||
}
|
}
|
||||||
|
@ -9,20 +9,6 @@ class LogRepository {
|
|||||||
final DriftLogger _db;
|
final DriftLogger _db;
|
||||||
const LogRepository(this._db);
|
const LogRepository(this._db);
|
||||||
|
|
||||||
static LogRepository? instance;
|
|
||||||
|
|
||||||
static LogRepository init(DriftLogger db) {
|
|
||||||
if (instance != null) {
|
|
||||||
throw "LogRepository already initialized";
|
|
||||||
}
|
|
||||||
instance = LogRepository(db);
|
|
||||||
return instance!;
|
|
||||||
}
|
|
||||||
|
|
||||||
static LogRepository? getInstance() {
|
|
||||||
return instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<bool> deleteAll() async {
|
Future<bool> deleteAll() async {
|
||||||
await _db.logMessageEntity.deleteAll();
|
await _db.logMessageEntity.deleteAll();
|
||||||
return true;
|
return true;
|
||||||
|
@ -4,7 +4,6 @@ import 'dart:convert';
|
|||||||
import 'package:http/http.dart' as http;
|
import 'package:http/http.dart' as http;
|
||||||
import 'package:immich_mobile/constants/constants.dart';
|
import 'package:immich_mobile/constants/constants.dart';
|
||||||
import 'package:immich_mobile/domain/models/sync_event.model.dart';
|
import 'package:immich_mobile/domain/models/sync_event.model.dart';
|
||||||
import 'package:immich_mobile/presentation/pages/dev/dev_logger.dart';
|
|
||||||
import 'package:immich_mobile/services/api.service.dart';
|
import 'package:immich_mobile/services/api.service.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:openapi/api.dart';
|
import 'package:openapi/api.dart';
|
||||||
@ -107,7 +106,6 @@ class SyncApiRepository {
|
|||||||
}
|
}
|
||||||
stopwatch.stop();
|
stopwatch.stop();
|
||||||
_logger.info("Remote Sync completed in ${stopwatch.elapsed.inMilliseconds}ms");
|
_logger.info("Remote Sync completed in ${stopwatch.elapsed.inMilliseconds}ms");
|
||||||
DLog.log("Remote Sync completed in ${stopwatch.elapsed.inMilliseconds}ms");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
List<SyncEvent> _parseLines(List<String> lines) {
|
List<SyncEvent> _parseLines(List<String> lines) {
|
||||||
|
@ -1,59 +0,0 @@
|
|||||||
import 'dart:async';
|
|
||||||
import 'dart:io';
|
|
||||||
|
|
||||||
import 'package:flutter/foundation.dart';
|
|
||||||
import 'package:immich_mobile/domain/models/log.model.dart';
|
|
||||||
import 'package:immich_mobile/infrastructure/repositories/log.repository.dart';
|
|
||||||
|
|
||||||
const kDevLoggerTag = 'DEV';
|
|
||||||
|
|
||||||
abstract final class DLog {
|
|
||||||
const DLog();
|
|
||||||
|
|
||||||
static Stream<List<LogMessage>> watchLog() {
|
|
||||||
final logger = LogRepository.getInstance();
|
|
||||||
if (logger == null) {
|
|
||||||
return const Stream.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
return logger.watchMessages(kDevLoggerTag);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void clearLog() {
|
|
||||||
final db = LogRepository.getInstance();
|
|
||||||
|
|
||||||
if (db == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
unawaited(db.deleteByLogger(kDevLoggerTag));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void log(String message, [Object? error, StackTrace? stackTrace]) {
|
|
||||||
if (!Platform.environment.containsKey('FLUTTER_TEST')) {
|
|
||||||
debugPrint('[$kDevLoggerTag] [${DateTime.now()}] $message');
|
|
||||||
}
|
|
||||||
if (error != null) {
|
|
||||||
debugPrint('Error: $error');
|
|
||||||
}
|
|
||||||
if (stackTrace != null) {
|
|
||||||
debugPrint('StackTrace: $stackTrace');
|
|
||||||
}
|
|
||||||
|
|
||||||
final logger = LogRepository.getInstance();
|
|
||||||
if (logger == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
final record = LogMessage(
|
|
||||||
message: message,
|
|
||||||
level: LogLevel.info,
|
|
||||||
createdAt: DateTime.now(),
|
|
||||||
logger: kDevLoggerTag,
|
|
||||||
error: error?.toString(),
|
|
||||||
stack: stackTrace?.toString(),
|
|
||||||
);
|
|
||||||
|
|
||||||
unawaited(logger.insert(record));
|
|
||||||
}
|
|
||||||
}
|
|
@ -2,19 +2,16 @@ import 'dart:async';
|
|||||||
|
|
||||||
import 'package:auto_route/auto_route.dart';
|
import 'package:auto_route/auto_route.dart';
|
||||||
import 'package:drift/drift.dart' hide Column;
|
import 'package:drift/drift.dart' hide Column;
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
|
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
|
||||||
import 'package:immich_mobile/extensions/build_context_extensions.dart';
|
|
||||||
import 'package:immich_mobile/extensions/theme_extensions.dart';
|
|
||||||
import 'package:immich_mobile/presentation/pages/dev/dev_logger.dart';
|
|
||||||
import 'package:immich_mobile/providers/background_sync.provider.dart';
|
import 'package:immich_mobile/providers/background_sync.provider.dart';
|
||||||
import 'package:immich_mobile/providers/infrastructure/asset.provider.dart';
|
import 'package:immich_mobile/providers/infrastructure/asset.provider.dart';
|
||||||
import 'package:immich_mobile/providers/infrastructure/db.provider.dart';
|
import 'package:immich_mobile/providers/infrastructure/db.provider.dart';
|
||||||
import 'package:immich_mobile/providers/infrastructure/platform.provider.dart';
|
import 'package:immich_mobile/providers/infrastructure/platform.provider.dart';
|
||||||
import 'package:immich_mobile/providers/user.provider.dart';
|
import 'package:immich_mobile/providers/user.provider.dart';
|
||||||
import 'package:immich_mobile/routing/router.dart';
|
import 'package:immich_mobile/routing/router.dart';
|
||||||
|
import 'package:logging/logging.dart';
|
||||||
|
|
||||||
final _features = [
|
final _features = [
|
||||||
_Feature(
|
_Feature(
|
||||||
@ -37,7 +34,7 @@ final _features = [
|
|||||||
DriftAssetSelectionTimelineRoute(lockedSelectionAssets: assets.toSet()),
|
DriftAssetSelectionTimelineRoute(lockedSelectionAssets: assets.toSet()),
|
||||||
);
|
);
|
||||||
|
|
||||||
DLog.log("Selected ${selectedAssets?.length ?? 0} assets");
|
Logger("FeaturesInDevelopment").fine("Selected ${selectedAssets?.length ?? 0} assets");
|
||||||
|
|
||||||
return Future.value();
|
return Future.value();
|
||||||
},
|
},
|
||||||
@ -159,7 +156,6 @@ class FeatInDevPage extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
const Divider(height: 0),
|
const Divider(height: 0),
|
||||||
const Flexible(child: _DevLogs()),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
@ -174,57 +170,3 @@ class _Feature {
|
|||||||
final TextStyle? style;
|
final TextStyle? style;
|
||||||
final Future<void> Function(BuildContext, WidgetRef _) onTap;
|
final Future<void> Function(BuildContext, WidgetRef _) onTap;
|
||||||
}
|
}
|
||||||
|
|
||||||
class _DevLogs extends StatelessWidget {
|
|
||||||
const _DevLogs();
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return Scaffold(
|
|
||||||
appBar: AppBar(
|
|
||||||
automaticallyImplyLeading: false,
|
|
||||||
actions: [
|
|
||||||
IconButton(
|
|
||||||
onPressed: DLog.clearLog,
|
|
||||||
icon: Icon(
|
|
||||||
Icons.delete_outline_rounded,
|
|
||||||
size: 20.0,
|
|
||||||
color: context.primaryColor,
|
|
||||||
semanticLabel: "Clear logs",
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
centerTitle: true,
|
|
||||||
),
|
|
||||||
body: StreamBuilder(
|
|
||||||
initialData: [],
|
|
||||||
stream: DLog.watchLog(),
|
|
||||||
builder: (_, logMessages) {
|
|
||||||
return ListView.separated(
|
|
||||||
itemBuilder: (ctx, index) {
|
|
||||||
final logMessage = logMessages.data![index];
|
|
||||||
return ListTile(
|
|
||||||
title: Text(
|
|
||||||
logMessage.message,
|
|
||||||
style: TextStyle(color: ctx.colorScheme.onSurface, fontSize: 14.0, overflow: TextOverflow.ellipsis),
|
|
||||||
),
|
|
||||||
subtitle: Text(
|
|
||||||
"at ${DateFormat("HH:mm:ss.SSS").format(logMessage.createdAt)}",
|
|
||||||
style: TextStyle(color: ctx.colorScheme.onSurfaceSecondary, fontSize: 12.0),
|
|
||||||
),
|
|
||||||
dense: true,
|
|
||||||
visualDensity: VisualDensity.compact,
|
|
||||||
tileColor: Colors.transparent,
|
|
||||||
minLeadingWidth: 10,
|
|
||||||
);
|
|
||||||
},
|
|
||||||
separatorBuilder: (_, index) {
|
|
||||||
return const Divider(height: 0);
|
|
||||||
},
|
|
||||||
itemCount: logMessages.data?.length ?? 0,
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -54,7 +54,7 @@ abstract final class Bootstrap {
|
|||||||
await StoreService.init(storeRepository: IsarStoreRepository(db));
|
await StoreService.init(storeRepository: IsarStoreRepository(db));
|
||||||
|
|
||||||
await LogService.init(
|
await LogService.init(
|
||||||
logRepository: LogRepository.init(loggerDb),
|
logRepository: LogRepository(loggerDb),
|
||||||
storeRepository: IsarStoreRepository(db),
|
storeRepository: IsarStoreRepository(db),
|
||||||
shouldBuffer: shouldBufferLogs,
|
shouldBuffer: shouldBufferLogs,
|
||||||
);
|
);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user