Files
immich/mobile-v2/lib/domain/repositories/log.repository.dart
T
shenlong-tanwen 419d3669a2 feat: home grid
2025-02-26 08:58:19 +05:30

95 lines
2.4 KiB
Dart

import 'dart:async';
import 'package:drift/drift.dart';
import 'package:flutter/foundation.dart';
import 'package:immich_mobile/domain/entities/log.entity.drift.dart';
import 'package:immich_mobile/domain/interfaces/log.interface.dart';
import 'package:immich_mobile/domain/models/log.model.dart';
import 'package:immich_mobile/domain/repositories/database.repository.dart';
class LogDriftRepository implements ILogRepository {
final DriftDatabaseRepository _db;
const LogDriftRepository(this._db);
@override
Future<List<LogMessage>> fetchAll() async {
return await _db.managers.logs.map(_toModel).get();
}
@override
Future<void> truncateLogs({int limit = 250}) async {
final totalCount = await _db.managers.logs.count();
if (totalCount > limit) {
final rowsToDelete = totalCount - limit;
await _db.managers.logs
.orderBy((o) => o.createdAt.desc())
.limit(rowsToDelete)
.delete();
}
}
@override
FutureOr<bool> add(LogMessage log) async {
try {
await _db.into(_db.logs).insert(LogsCompanion.insert(
content: log.content,
level: log.level,
createdAt: Value(log.createdAt),
error: Value(log.error),
logger: Value(log.logger),
stack: Value(log.stack),
));
return true;
} catch (e) {
debugPrint("Error while adding a log to the DB - $e");
return false;
}
}
@override
FutureOr<bool> addAll(List<LogMessage> logs) async {
try {
await _db.batch((b) {
b.insertAll(
_db.logs,
logs.map((log) => LogsCompanion.insert(
content: log.content,
level: log.level,
createdAt: Value(log.createdAt),
error: Value(log.error),
logger: Value(log.logger),
stack: Value(log.stack),
)),
);
});
return true;
} catch (e) {
debugPrint("Error while adding a log to the DB - $e");
return false;
}
}
@override
FutureOr<bool> clear() async {
try {
await _db.managers.logs.delete();
return true;
} catch (e) {
debugPrint("Error while clearning the logs in DB - $e");
return false;
}
}
}
LogMessage _toModel(Log log) {
return LogMessage(
content: log.content,
createdAt: log.createdAt,
level: log.level,
error: log.error,
logger: log.logger,
stack: log.stack,
);
}